typo-fln.mkiv / last modification: 2020-01-30 14:16
%D \module
%D   [       file=typo-fln,
%D        version=2013.08.22, % comes from the few years older m-newstuff
%D          title=\CONTEXT\ Typesetting Macros,
%D       subtitle=First Lines,
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%C
%C This 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 / First Lines}

%D I had this code laying around for a while \unknown\ probably as a side effect
%D of cleaning up the supp-fun modules. There is probably room for improvement
%D and more features.

% \setupbodyfont[pagella]
%
% \starttext
%
%     \setupindenting[medium,yes]
%
%     \definefirstline
%       [smallcaps]
%       [alternative=line,
%        color=darkred,
%        style=\setfontfeature{smallcaps}]
%
%     \setfirstline[smallcaps] \input tufte  \par
%     \setfirstline[smallcaps] \input ward   \par
%     \setfirstline[smallcaps] \input knuth  \par
%     \setfirstline[smallcaps] \input bryson \par
%
%     \definefirstline
%       [smallcaps]
%       [alternative=word,
%        color=darkblue,
%        style=bold,
%        n=2]
%
%     \setfirstline[smallcaps] \input tufte  \par
%     \setfirstline[smallcaps] \input ward   \par
%     \setfirstline[smallcaps] \input knuth  \par
%     \setfirstline[smallcaps] \input bryson \par
%
% \stoptext

\unprotect

\registerctxluafile{typo-fln}{}

\definesystemattribute[firstline][public]

\appendtoks
    \attribute\firstlineattribute\attributeunsetvalue
\to \everyforgetall

\installcorenamespace {firstline}

\installcommandhandler \??firstline {firstline} \??firstline

\setupfirstline
  [\c!alternative=\v!line,
   %\c!style=,
   %\c!color=,
    \c!n=1]

\unexpanded\def\setfirstline
  {\dosingleempty\typo_firstline_set}

\unexpanded\def\typo_firstline_set[#1]%
  {\edef\typo_firstline_handle{\typo_firstline_handle_indeed{#1}}}

\unexpanded\def\typo_firstline_handle_indeed#1%
  {\dontleavehmode
   \begingroup
   \edef\currentfirstline{#1}%
   \usefirstlinestyleandcolor\c!style\c!color
   \clf_setfirstline
        alternative {\firstlineparameter\c!alternative}%
        ma          \attribute\colormodelattribute
        ca          \attribute\colorattribute
        ta          \attribute\transparencyattribute
        n           \numexpr\firstlineparameter\c!n\relax
        font        \fontid\font
        dynamic     \font_dynamic_value
   \relax
%    \kern\zeropoint % we need a node
%    \hskip\zeropoint\s!plus\emwidth\relax % can be an option
   \endgroup
   \glet\typo_firstline_handle\relax}

\let\typo_firstline_handle\relax

% goodie, question on list
%
% \defineframed[ChapterFramed][location=low,background=color,backgroundcolor=red,frame=off]
%
% \setuphead[chapter][deeptextcommand=\applytofirstcharacter\ChapterFramed]

\unexpanded\def\applytofirstcharacter#1%
  {\begingroup
   \dowithnextbox
     {\clf_applytofirstcharacter\nextbox{\csstring#1}%
      \unhbox\nextbox
      \endgroup}%
   \hbox}

\protect \endinput