\NeedsTeXFormat{LaTeX2e}[1994/12/01] %% \newcommand* etc. 
\ProvidesPackage{blogdot}[2013/01/22 v0.41b HTML presentations (UL)]
%% copyright (C) 2011 Uwe Lueck, 
%% http://www.contact-ednotes.sty.de.vu 
%% -- author-maintained in the sense of LPPL below.
%%
%% This file can be redistributed and/or modified under 
%% the terms of the LaTeX Project Public License; either 
%% version 1.3c of the License, or any later version.
%% The latest version of this license is in
%%     http://www.latex-project.org/lppl.txt
%% We did our best to help you, but there is NO WARRANTY. 
%%
%% Please report bugs, problems, and suggestions via 
%% 
%%   http://www.contact-ednotes.sty.de.vu 
%%
%% == 'blog' Required ==
%% 'blogdot' is an extension of 'blog' 
%% (but what about options? TODO):
\RequirePackage{blog}
%% == Size Parameters ==
%% \label{sec:dot-size}
%% I assume that it is clear what the following
%% six page dimension parameters 
%% \begin{quote}
%% |\leftpagemargin|, |\rightpagemargin|, 
%% |\upperpagemargin|,\\|\lowerpagemargin|, 
%% |\typeareawidth|, |\typeareaheight|
%% \end{quote}
%% mean. 
%% The choices are what I thought should work best 
%% on my 1024$\times$600 screen (in fullscreen mode); 
%% but I had to optimize the left and right margins experimentally
%% (with Mozilla Firefox~3.6.22 for Ubuntu canonical~-~1.0).
%% It seems to be best when the horizontal parameters 
%% together with what the brouswer adds 
%% (scroll bar, probably 32px with me) 
%% sum up to the screen width.
\newcommand*{\leftpagemargin}{176}
\newcommand*{\rightpagemargin}{\leftpagemargin}
%% So |\rightpagemargin| ultimately is the same as 
%% |\leftpagemargin| as long as you don't redefine it, 
%% and it suffices to `\renewcommand' `\leftpagemargin'
%% in order to get a horizontically centered type area 
%% with user-defined margin widths.---Something analogous
%% applies to |\upperpagemargin| and |\lowerpagemargin|:
\newcommand*{\upperpagemargin}{80}
\newcommand*{\lowerpagemargin}{\upperpagemargin}
%% A difference to the ``horizontal" parameters is 
%% (I expect) that the position of the type area on the 
%% screen is affected by |\upperpagemargin| only, 
%% and you may choose |\lowerpagemargin| just large enough 
%% that the next slide won't be visible on any computer screen 
%% you can think of.
\newcommand*{\typeareawidth}{640}
\newcommand*{\typeareaheight}{440}
%% Centering with respect to web page body may work better on 
%% different screens (2011/10/03), but it doesn't work here
%% (2011/10/04).
% \renewcommand*{\body}{%
%     </head>\CLBrk
%     <body \@bgcolor{\bodybgcolor} \@align@c>}
%% |\CommentBlogDotWholeWidth| procuces no \HTML\ code ...
\global\let\BlogDotWholeWidth\@empty
%% ... unless calculated with |\SumBlogDotWidth|: 
\newcommand*{\SumBlogDotWidth}{%
    \relax{%                        %% \relax 2011/10/22 magic ...
    \count@\typeareawidth
    \advance\count@ \leftpagemargin
    \advance\count@\rightpagemargin
    \typeout{ * blogdot slide width = \the\count@\space*}%
    \xdef\CommentBlogDotWholeWidth{%
        \comment{ slide width = \the\count@\ }}}}
%%
%% == (Backbone for) Starting a ``Slide" ==
%% \label{sec:dot-start}
%% |\startscreenpage{<style>}{<anchor-name>}|
\newcommand*{\startscreenpage}[2]{%% 0 2011/09/25!?:
    \\\CLBrk                                %% 2012/11/19
%% <- `\\' suddenly necessary, likewise in `texblog.fdf'
%%    with `\NextView' and `\nextruleview'. 
%%    Due to recent `firefox'?              %% 2012/11/21
    \startTable{%
        \@cellpadding{0} \@cellspacing{0}%
        \maybe@blogdot@borders              %% 2011/10/12
        \maybe@blogdot@frame                %% 2011/10/14
    }%
    \CLBrk                                  %% 2011/10/03
    \starttr
%% First cell determines both
%% height of upper page margin |\upperpagemargin|
%% and
%% width of left page margin |\leftpagemargin|:
      \startTd{\@width {\leftpagemargin }%
               \@height{\upperpagemargin}}%
%         \textcolor{\bodybgcolor}{XYZ}%
      \endTd
%% Using |\typeareawidth|:
%       \startTd{\@width{\typeareawidth}}\endTd
      \simplecell{%
        \CLBrk
        \hanc{#2}{\hvspace{\typeareawidth}% 
                          {\upperpagemargin}}%
        \CLBrk
      }%
%% Final cell of first row determines right margin width:
      \startTd{\@width{\leftpagemargin}}\endTd
    \endtr
    \starttr
    \emptycell\startTd{\@height{\typeareaheight}#1}%
}
%% |\titlescreenpage| \ (`\STARTscreenpage' TODO?) \ %% 2011/10/03 \ 2012/11/19
%% opens the title page (I thought). To get it to your screen, 
%% (make and) click a link like 
%% \[`\ancref{START}{start presentation}':\]
\newcommand*{\titlescreenpage}{%
    \startscreenpage{\@align@c}{START}}
%% 
%% == Finishing a ``Slide" and ``Restart" (Backbone) ==
%% \label{sec:dot-fin}
%% |\screenbottom{<next-anchor>}| finishes the current slide 
%% and links to the <next-anchor>, the anchor of a slide opened by 
%% \[`\startscreenpage{<style>}{<next-anchor>}'.\] 
%% More precisely, the margin below the type area is that link.
%% The corner at its right is a link to the anchor to whose name 
%% |\BlogDotRestart| expands. 
\newcommand*{\screenbottom}[1]{%
    \ifFillBlogDotTypeArea 
      <p>\ancref{#1}{\BlogDotFillText}%    %% not </p> 2011/10/22
    \fi
    \endTd\emptycell
    \endtr
    \CLBrk
    \tablerow{bottom margin}%                       %% 2011/10/13
      \emptycell
      \CLBrk
      \startTd{\@align@c}%
        \ancref{#1}{\HVspace{\BlogDotBottomFill}%
%% <- seems to be useless now (2011/10/15).
                            {\typeareawidth}%
                            {\lowerpagemargin}}%
      \endTd
      \CLBrk
      \simplecell{\ancref{\BlogDotRestart}% 
                         {\hvspace{\rightpagemargin}% 
                                  {\lowerpagemargin}}}%
    \endtablerow
    \CLBrk
    \endTable
}
%% The default for |\BlogDotRestart| is |START|---the title page. 
%% You can `\renew'\-`command' it so you get to a slide 
%% containing an overview of the presentation.
\newcommand*{\BlogDotRestart}{START}
%% 
%% == Moving to Next ``Slide" (User Level) == 
%% \label{sec:dot-next}
%% |\nextscreenpage{<style>}{<anchor-name>}|
%% puts closing the previous slide and opening the next 
%% one---having anchor name `<anchor-name>'---together.
%% <style> is for style settings for the next page, 
%% made here for choosing between centering the page/slide content 
%% and aligning it flush left.
\newcommand*{\nextscreenpage}[2]{%
    \screenbottom{#2}\CLBrk
    \hrule           \CLBrk 
    \startscreenpage{#1}{#2}}
%% |\nextcenterscreenpage{<anchor-name>}| chooses centering 
%% the slide content:
\newcommand*{\nextcenterscreenpage}{\nextscreenpage{\@align@c}}
%% |\nextnormalscreenpage{<anchor-name>}| chooses flush left
%% on the type area determined by |\typeareawidth|:
\newcommand*{\nextnormalscreenpage}{\nextscreenpage{}}
%% 
%% == Constructs for Type Area ==
%% \label{sec:dot-type}
%% If you want to get centered titles with \xmltagcode{h2} etc., 
%% you should declare this in `.css' files. But you may consider 
%% this way too difficult, and you may prefer to declare this 
%% right in the \HTML\ code. That's what I do! I use 
%% |\cheading{<digit>}{<text>}| for this purpose. 
\newcommand*{\cheading}[1]{\CLBrk\TagSurr{h#1}{\@align@c}}
%% |\begin{textblock}{<width>}| opens a |{textblock}| 
%% environment. The latter will contain text that will be flush left
%% in a narrower text area---of width <width>---than the one 
%% determined by |\typeareawidth|. It may be used on 
%% "centered" slides. It is made for lists whose entries are 
%% so short that the page would look unbalanced under a 
%% centered title with the list adjusted to the left 
%% of the entire type area. (Thinking of standard \LaTeX, 
%% it is almost the `{minipage}' environment, however lacking 
%% the footnote feature, in that respect it is rather 
%% similar to `\parbox' which however is not an environment.)
\newenvironment*{textblock}[1]
    {\startTable{\@width{#1}}\starttr\startTd{}}
    {\endTd\endtr\endTable}
%%
%% == Debugging and `.cfg's ==
%% \label{sec:cfgs}
%% |\ShowBlogDotBorders| shows borders of the page margins 
%% and may be undone by |\DontShowBlogDotBorders|:
\newcommand*{\ShowBlogDotBorders}{%
    \def\maybe@blogdot@borders{rules="all"}}
\newcommand*{\DontShowBlogDotBorders}{%
    \let\maybe@blogdot@borders\@empty}
\DontShowBlogDotBorders
%% %% 2011/10/14:
%% |\ShowBlogDotFrame| shows borders of the page margins 
%% and may be undone by |\DontShowBlogDotFrame|:
\newcommand*{\ShowBlogDotFrame}{%
    \def\maybe@blogdot@frame{\@frame@box}}
\newcommand*{\DontShowBlogDotFrame}{%
    \let\maybe@blogdot@frame\@empty}
\DontShowBlogDotFrame
%% However, the rules seem to affect horizontal positions ...
%%
%% |\BlogDotFillText| is a dirty trick ... seems to widen 
%% %% doc. extended 2011/10/13
%% the type area and this way centers the text on wider screens 
%% than the one used originally. Of course, this can corrupt 
%% intended line breaks. 
\newcommand*{\BlogDotFillText}{%            %% 2011/10/11
    \center
        \BlogDotFillTextColor{%             %% 2011/10/12
%                 X\\X                      %% insufficient
                 X X X X X X X X X X X X X X X X X X X X 
                 X X X X X X X X X X X X X X X X X X X X 
                 X X X X X X X X X X 
                 X X X X X X X X X X 
%                  X X X X X X X X X X X X X X X X X X X X 
        }
    \endcenter
}
%% |\FillBlogDotTypeArea| fills `\BlogDotFillText' into the 
%% type area, also as a link to the next slide. This may widen
%% the type area so that the text is centered on wider screens 
%% than the one the \HTML\ page was made for. The link may serve 
%% as an alternative to the bottom margin link 
%% (which sometimes fails). 
%% `\FillBlogDotTypeArea'                   %% 2011/10/22
%% can be undone 
%% by |\DontFillBlogDotTypeArea|:
\newcommand*{\FillBlogDotTypeArea}{%
    \let\ifFillBlogDotTypeArea\iftrue 
    \typeout{ * blogdot filling type area *}}       %% 2011/10/13
\newcommand*{\DontFillBlogDotTypeArea}{%
    \let\ifFillBlogDotTypeArea\iffalse}
\DontFillBlogDotTypeArea
%% |\FillBlogDotBottom| fills `\BlogDotFillText' into the 
%% center bottom cell. I tried it before `\FillBlogDotTypeArea'
%% and I am not sure ... 
%% It can be undone by 
%% |\DontFillBlogDotBottom|:
\newcommand*{\FillBlogDotBottom}{%
    \let\BlogDotBottomFill\BlogDotFillText}
%% ... actually, it doesn't seem to make a difference! 
%% (2011/10/13)
\newcommand*{\DontFillBlogDotBottom}{\let\BlogDotBottomFill\@empty} 
\DontFillBlogDotBottom
%% |\DontShowBlogDotFillText| makes `\BlogDotFillText' invisible,\\ 
%% |\ShowBlogDotFillText| makes it visible. 
%% Until 2011/10/22, `\textcolor' ('blog.sty') used the 
%% \xmltagcode{font} element that is deprecated. 
%% I still use it here because it seems to suppress the 
%% `hover' \acro{CSS} indication for the link. 
%% (I might offer a choice---TODO)
\newcommand*{\DontShowBlogDotFillText}{%
%     \def\BlogDotFillTextColor{\textcolor{\bodybgcolor}}}
    \def\BlogDotFillTextColor{%
        \TagSurr{font}{color="\bodybgcolor"}}}
\newcommand*{\ShowBlogDotFillText}{%
    \def\BlogDotFillTextColor{\textcolor{red}}}
\DontShowBlogDotFillText
%% As of 2013/01/22, 'texlinks.sty' provides    %% adjusted 2013/01/22
%% `\ctanfileref{<path>}{<file-name>}' that uses an online 
%% \TeX\ archive randomly chosen or determined by the user. 
%% This is preferable for an online version of the presentation. 
%% In `dantev45.htm', this is used for example files.
%% When, on the other hand, internet access during the presentation is 
%% bad, such example files may instead be loaded from the 
%% ``current directory." \ |\usecurrdirctan| \ modifies `\ctanfileref' 
%% for this purpose (i.e., it will ignore <path>):
\newcommand*{\usecurrdirctan}{%
    \renewcommand*{\ctanfileref}[2]{%
        \hnewref{}{##2}{\filenamefmt{##2}}}}
%% (Using a local \acro{TDS} tree would be funny, but I don't 
%%  have good idea for this right now. )
%%
%% |\TryBlogDotCFG| looks for `blogdot.cfg', 
%% \[|\TryBlogDotCFG[<file-name-base>]|\]       %% \[...\] 2011/10/21 
%% looks for `<file-name-base>.cfg' 
%% (for recompiling a certain file):
\newcommand*{\TryBlogDotCFG}[1][blogdot]{%
    \InputIfFileExists{#1.cfg}{%
        \typeout{
            * Using local settings from \string`#1.cfg\string' *}%
    }{}%
}
\TryBlogDotCFG
%%
%% %% rm. \pagebreak 2013/01/04
%% == The End and HISTORY ==
\endinput
%% VERSION HISTORY
v0.1    2011/09/21f.  started
        2011/09/25    spacing/padding off
        2011/09/27    \CLBrk
        2011/09/30    \BlogDotRestart
        used for DANTE meeting
v0.2    2011/10/03    four possibly independent page margin 
                      parameters; \hvspace moves to texblog.fdf
        2011/10/04    renewed \body commented out
        2011/10/07    documentation
        2011/10/08    added some labels
        2011/10/10    v etc. in \ProvidesPackage
        part of morehype RELEASE r0.5 
v0.3    2011/10/11    \HVspace, \BlogDotFillText
        2011/10/12    commands for \BlogDotFillText
        2011/10/13    more doc. on "debugging"; 
                      \ifFillBlogDotTypeArea, \tablerow, messages
        2011/10/14    \maybe@blogdot@frame
        2011/10/15    doc. note: \HVspace useless
        part of morehype RELEASE r0.51 
v0.4    2011/10/21    \usecurrdirctan
        2011/10/22    FillText with <p> instead of </p>, its color 
                      uses <font>; some more reworking of doc.
        part of morehype RELEASE r0.6 
v0.41   2012/11/19    \startscreenpage with \\; doc. \ 
        2012/11/21    updating version infos, doc. \pagebreak
v0.41a  2013/01/04    rm. \pagebreak 
        part of morehype RELEASE r0.81
v0.41b  2013/01/22    adjusted doc. on `texlinks'