%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, typeset with an
%D lowered~E. From te beginning of \TEX, authors of macro packages adapted this
%D raising and lowering style. In this module we define some of those logos.

%D We define the uppercase logo commands as (unfrozen) instances because they can be
%D redefined in the synonyms modules. We use old school definitions. Watch out: when
%D a math font is used the \AMS\ logos can come out ugly but they are ugly anyway.

\unprotect

% \frozen\instance\protected\def\TeX
%   {\dontleavehmode
%    \begingroup
%    T%
%    \setbox\scratchbox\hbox{M}%
%    \kern-.1667\wd\scratchbox
%    \lower.5\exheight\hbox{E}%
%    \kern-.125\wd\scratchbox
%    X%
%    \endgroup}

\frozen\instance\protected\def\TeX
  {\dontleavehmode
   \begingroup
   \scratchdimen\scaledfontcharwd\font`M%
   T%
   \kern-.1667\scratchdimen
  %\lower.3183\scaledfontcharht\font`T\hbox{E}% .318316 but no exact match possible anyway
   \lower.5\exheight\hbox{E}% but on the average this looks better
   \kern-.125\scratchdimen
   X%
   \endgroup}

\frozen\instance\protected\def\TeXsuffix{\wordboundary\TeX}
\frozen\instance\protected\def\TeXprefix{\TeX\wordboundary}

\def\syst_logos_context
  {Con%
   \wordboundary
   \setbox\scratchboxone\hbox{T\kern\zeropoint e}%
   \setbox\scratchboxtwo\hbox{Te}%
   \discretionary{-}{}{\kern{\wd\scratchboxtwo-\wd\scratchboxone}}%
   \TeX t}

\frozen\instance\protected\def\ConTeXt
  {\dontleavehmode
   \begingroup
   \ifcase\getcharactercasingcategory % todo: also other logos
     \syst_logos_context
   \or % 1 uppercase
     \syst_logos_context
   \or % 2 lowercase
     \resetcharactercasing
     con\-text%
   \else
     Con\-text%
   \fi
   \endgroup}

\frozen\instance\protected\def\PPCHTeX{ppch\TeX}

\frozen\instance\protected\def\LaTeX % requested by erik frambach
  {\dontleavehmode
   \begingroup
   \setbox\scratchbox\hbox{L}%
   \scratchdimen\ht\scratchbox
   \setbox\scratchbox\hbox{\doresetattribute{case}\txx A}%
   L\kern-.55\wd\scratchbox
   \raise\scratchdimen\hbox{\lower\ht\scratchbox\copy\scratchbox}%
   \kern-.2\wd\scratchbox\TeX
   \endgroup}

\frozen\instance\protected\def\TaBlE
  {T%
   \kern-.27\emwidth\lower.5\exheight\hbox{A}%
   \kern-.18\emwidth B%
   \kern-.1\emwidth\lower.5\exheight\hbox{L}%
   \kern-.075\emwidth E}

\frozen\instance\protected\def\PiCTeX
  {P%
   \kern-.12\emwidth\lower.5\exheight\hbox{I}%
   \kern-.075\emwidth C%
   \kern-.11\emwidth\TeX}

\def\syst_logos_ams_script#1%
  {\normalstartimath
   \cal\ifdim\bodyfontsize>1.1\emwidth\scriptstyle\fi#1%
   \normalstopimath}

\frozen\instance\protected\def\AmSTeX
  {\dontleavehmode
   \syst_logos_ams_script A%
   \kern-.5\emwidth\lower.5\exheight\hbox{\syst_logos_ams_script M}% was .1667 for old math
   \kern-.125\emwidth\syst_logos_ams_script S%
   -\TeX}

\frozen\instance\protected\def\LamSTeX
  {L%
   \kern-.4\emwidth\raise.4\exheight\hbox{\syst_logos_ams_script A}% was .4 .3 for old math
   \kern-.5\emwidth\lower.3\exheight\hbox{\syst_logos_ams_script M}% was .25 for old math
   \kern-.125\emwidth{\syst_logos_ams_script S}%
   -\TeX}

%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:

\frozen\instance\protected\def\Context % wrong usage of \getscaledglyph
  {\dontleavehmode
   \begingroup
   C%
   \kern -.0667\emwidth
   \getscaledglyph{.8}\empty{%
     O\kern-.0667\emwidth
     N%
     \discretionary{-}{}{\kern-.0549\emwidth}%
     T%
     \doifelseitalic{\kern-.1\emwidth}{\kern-.1667\emwidth}%
     \lower.5\exheight\hbox{E}%
     \doifelseitalic\empty{\kern-.11em}%
     X%
     \kern-.055\emwidth
     T%
   }%
   \endgroup}

%D The \METAFONT\ and \METAPOST\ logos adapt themselves to the current fontsize, an
%D ugly but usefull hack.

\mutable\let\logofont\nullfont

% \loadmapfile[original-base.map] % stil needed? not if we assume afm

\permanent\protected\def\setMFPfont% more sensitive for low level changes
  {\font\logofont=logo%
     \ifx\fontalternative\s!bf\s!bf\orelse
     \ifx\fontalternative\s!it\s!sl\orelse
     \ifx\fontalternative\s!sl\s!sl\orelse
     \ifx\fontalternative\s!bi\s!bf\orelse
     \ifx\fontalternative\s!bs\s!bf\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.33\emwidth\s!depth-.27\emwidth\s!width.33\emwidth}{}{}}

\frozen\instance\protected\def\MetaFontLogo
  {\dontleavehmode
   \begingroup
   \setMFPfont META\syst_logos_meta_hyphen FONT%
   \endgroup}

\protected\def\MetaPostLogo
  {\dontleavehmode
   \begingroup
   \setMFPfont META\syst_logos_meta_hyphen POST%
   \endgroup}

% \protected\def\MetaFunLogo
%   {\dontleavehmode
%    \begingroup
%    \setMFPfont META\syst_logos_meta_hyphen FUN%
%    \endgroup}

% As decided on the ConText Meeting 2013 the logo has been simplified:

\instance\protected\def\MetaFont{MetaFont}
\instance\protected\def\MetaPost{MetaPost}
\instance\protected\def\MetaFun {MetaFun}

%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 error prone upper case names
%D (in \CONTEXT\ we tend to write all user defined commands, like abbreviations, in
%D uppercase.)

\instance\protected\def\METAFONT{\MetaFont}
\instance\protected\def\METAPOST{\MetaPost}
\instance\protected\def\PPCHTEX {\PPCHTeX}
\instance\protected\def\CONTEXT {\ConTeXt}
\instance\protected\def\METAFUN {\MetaFun}

\instance\protected\def\TEX     {\TeX}
\instance\protected\def\LATEX   {\LaTeX}
\instance\protected\def\PICTEX  {\PiCTeX}
\instance\protected\def\TABLE   {\TaBlE}
\instance\protected\def\AMSTEX  {\AmSTeX}
\instance\protected\def\LAMSTEX {\LamSTeX}
\instance\protected\def\INRSTEX {inrs\TeX}

\instance\protected\def\PRAGMA  {Pragma ADE}
\instance\protected\def\LUA     {\Lua} % below

%D And this is how they show up: \TeX, \MetaFont, \MetaPost, \PiCTeX, \TaBlE, \ConTeXt,
%D \PPCHTeX, \AmSTeX, \LaTeX, \LamSTeX.

%D Some placeholders:

%frozen\instance\protected\def\eTeX      {\mathematics{\varepsilon}-\TeX}
\frozen\instance\protected\def\eTeX      {{\tf \nocap $\varepsilon$}-\TeX} % compact mode hack for epsilon
\frozen\instance\protected\def\pdfTeX    {pdf\wordboundary\TeX}
\frozen\instance\protected\def\pdfeTeX   {pdfe-\wordboundary\TeX}
\frozen\instance\protected\def\luaTeX    {lua\wordboundary\TeX}
\frozen\instance\protected\def\Lua       {Lua}
\frozen\instance\protected\def\luajitTeX {lua\wordboundary jit\wordboundary\TeX}
\frozen\instance\protected\def\luametaTeX{lua\wordboundary meta\wordboundary\TeX}
\frozen\instance\protected\def\XeTeX     {X\lower.5\exheight\hbox{\kern-.15\emwidth\mirror{E}}\kern-.1667\emwidth\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}}}
%
% \frozen\instance\protected\def\XeTeX
%   {X\lower.5\exheight
%    \hbox
%      {\kern-.15\emwidth
%       \iffontchar\font"018E\relax
%         \char"018E%
%       \else
%         \ifx\fontalternative\s!bf         \mirror{E}\orelse
%         \ifx\fontalternative\s!it\syst_logos_xetex_e\orelse
%         \ifx\fontalternative\s!sl\syst_logos_xetex_e\orelse
%         \ifx\fontalternative\s!bi\syst_logos_xetex_e\orelse
%         \ifx\fontalternative\s!bs\syst_logos_xetex_e\else
%                                           \mirror{E}\fi
%       \fi}%
%    \kern-.1667\emwidth\TeX}

% This is good enough for th efew times that we need it:

\def\syst_logos_xe
  {X\lower.5\exheight
   \hbox\bgroup
     \kern-.15\emwidth
     \iffontchar\font"018E\relax
       \char"018E%
     \else
       \mirror{E}%
     \fi
   \egroup}

\frozen\instance\protected\def\XeTeX  {\syst_logos_xe\kern-.1667\emwidth\TeX}
\frozen\instance\protected\def\XeLaTeX{\syst_logos_xe\LaTeX}

\instance\protected\def\ETEX      {\eTeX}
\instance\protected\def\PDFTEX    {\pdfTeX}
\instance\protected\def\PDFETEX   {\pdfeTeX}
\instance\protected\def\LUATEX    {\luaTeX}
\instance\protected\def\LUAJITTEX {\luajitTeX}
\instance\protected\def\LuaTeX    {\luaTeX}
\instance\protected\def\LuaMetaTeX{\luametaTeX}
\instance\protected\def\LUAMETATEX{\luametaTeX}
\instance\protected\def\XETEX     {\XeTeX}

\frozen\instance\protected\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{\wd0-\wd2}%
       \fi
     \fi
     \TeX
   \endgroup}

\frozen\instance\protected\def\LuajitTeX
  {\dontleavehmode
   \begingroup
     % at this moment there is no real need for kerning tT
     Luajit\kern\zeropoint\TeX
   \endgroup}

\frozen\instance\let\luaTeX   \LuaTeX
\frozen\instance\let\luajitTeX\LuajitTeX

\instance\protected\def\LUATEX   {\LuaTeX}
\instance\protected\def\LUAJITTEX{\LuajitTeX}

\instance\protected\def\MKII{MkII} % MarkTwo
\instance\protected\def\MKIV{MkIV} % MarkFour   : MKIV
\instance\protected\def\MKVI{MkVI} % MarkSix    : MKIV
\instance\protected\def\MKXL{MkXL} % MarkFourty : LMTX
\instance\protected\def\MKLX{MkLX} % MarkSixty  : LMTX
\instance\protected\def\MKIX{MkIX} %            : MKIV / LMTX
\instance\protected\def\MKXI{MkXI} %            : MKIV / LMTX

\instance\protected\def\MPII{MpII} % MarkTwo
\instance\protected\def\MPIV{MpIV} % MarkFour   : MetaFun
\instance\protected\def\MPVI{MpVI} % MarkSix    : MetaFun
\instance\protected\def\MPXL{MpXL} % MarkFourty : LuaMetaFun
\instance\protected\def\MPLX{MpLX} % MarkSixty  : LuaMetaFun

\instance\protected\def\LMTX{LMTX} % for LuaMetaTeX + Mk[X.|.X] i.e. the distribition / ecosystem

\instance\protected\def\MKMI{MkMI} % Mark One O O One   : reserved for unvailable machine intelligence
\instance\protected\def\MKML{MkML} % Mark One O O Fifty : reserved for unvailable machine learning

\appendtoks
    \enforced\instance\def\ConTeXt   {ConTeXt}%
    \enforced\instance\def\MetaPost  {MetaPost}%
    \enforced\instance\def\MetaFont  {MetaFont}%
    \enforced\instance\def\MetaFun   {MetaFun}%
    \enforced\instance\def\TeX       {TeX}%
    \enforced\instance\let\TeXsuffix \TeX
    \enforced\instance\let\TeXprefix \TeX
    \enforced\instance\def\LuaTeX    {LuaTeX}%
    \enforced\instance\def\LuajitTeX {LuajitTeX}%
    \enforced\instance\def\LuaMetaTeX{LuaMetaTeX}%
\to \everysimplifycommands

\protect \endinput