9.19 CSS

<..import css..>
 \:CheckOption{-css} \if:Option \else
    \Log:Note{to ignore CSS code, use the command line option ‘-css}
    \:CheckOption{css-in} \if:Option
       \Log:Note{the inline CSS code is extracted from the input of the
           previous compilation, so an extra compilation might be needed}
       \Configure{@HEAD}{<.css inline.>}
    \else
       \Log:Note{for inline CSS code, use the command line option ‘css-in’}
       \Configure{@HEAD}{\HCode{<link
          rel="stylesheet" type="text/css"
          href="\aa:CssFile"\xml:empty>\Hnewline}}
    \fi
 \fi
-_-_-

<..0,32,4 preambles..>
 <.hook utility.>
 \:CheckOption{-css} \if:Option
    \def\Css#1{}
    \NewConfigure{CssFile}{2}
 \else
    <.cascade style sheets.>
    \Configure{Preamble}
       {<.default cascade style sheets.>} {}
 \fi
-_-_-

<..default cascade style sheets..>
 {\ifdim \lastskip>\z@ \unskip\fi  \IgnorePar\parindent\z@
 \leavevmode}%
 \immediate\write-1{--- file \aa:CssFile\space ---}%
 \ht:special{t4ht>\aa:CssFile}\ht:special{t4ht=\Hnewline /* css.sty */}%
 \ht:special{t4ht<\aa:CssFile}%
-_-_-

\special are like \hbox, and they so they may introduve empty lines in vertical mode. That might be a problem if we don’t want empty lines at the start of the files. Hence, in latex we give them special treatment.

<..cascade style sheets..>
 \ScriptCommand{\CssFile}{%
     \immediate\write-1{--- file \aa:CssFile\space ---}%
     \def\FontSize##1##2{\:Context{##1}\ht:special{t4ht;\%##2}\%}%
     \def\FontName##1{\:Context{##1}\ht:special{t4ht;=}}%
     \def\:Context##1{\ht:special{t4ht>\jobname.tmp}##1\ht:special
        {t4ht>\aa:CssFile}}%
     \ht:special{t4ht>\jobname.tmp}\ht:special{t4ht>\aa:CssFile}%
     \bgroup \everypar{}\NoFonts  \bb:CssFile \hfil\break}
   {\egroup \EndNoFonts
     \ht:special{t4ht<\aa:CssFile}\ht:special{t4ht<\jobname.tmp}}
 \let\Css:File=\CssFile
 \def\CssFile{\futurelet\:temp\Css:Fl}
 \def\Css:Fl{\ifx [\:temp  \expandafter\Css:fl
    \else \expand:after{\Css:File \space}\fi}
 \def\Css:fl[#1]{\Css:File\space \css:files #1,,<.par del.>}
 \def\css:files#1,#2<.par del.>{\def\:temp{#1}\ifx \:temp\empty
    \else \def\:temp{\in:css#1.<.par del.>\css:files#2,,<.par del.>}\fi
    \:temp }
 \def\in:css#1.#2<.par del.>{\def\:temp{#2}\ifx \:temp\empty
       \inc:ss#1.css<.par del.>
    \else \inc:ss#1.#2<.par del.>\fi}
 \def\inc:ss#1.<.par del.>{<.input css file.> }
 \NewConfigure{CssFile}[2]{\def\aa:CssFile{#1}\def\bb:CssFile{#2}}
-_-_-

<..input css file..>
      \immediate\openin15=#1
      \ifeof15 \immediate\closein15
         \:warning{Missing file: #1}%
      \else \immediate\closein15     \input #1 \fi
-_-_-

\CssFile[file-name,filename.ext,..]...\EndCssFile.

Default file, just in case the user doesn’t provide one. If the user does, the following file will be overwritten.

Can’t use below \a:CssFile and \b:CssFile, because \ScriptFile{\CssFile} also needs them.

\Css changes its definition upon reachin \CssFile. The first definition is needed within the sty files, and the info is sent to the lg file (where else it can be sent?).

<..cascade style sheets..>+
 \def\Css#1{{\def\:temp{\Configure{Needs}}%
    \expandafter\:temp\expandafter{\aa:Css}\Needs{#1}}}
-_-_-