%
% Nekomentovane makro pro zpracovani ukazky textu. V makru jsou
% uvedena ocislovana temata moznych zapoctovych uloh - prevazne jde
% o upravu/doplneni/rozsireni nektere casti tohoto makra
% Mate-li zajem o volnou zapoctovou ulohu, poslete mi mailem jeji cislo.
% Temata jsou casto pouze "nastineni" zadani. Proto soucasti zapoctove
% ulohy je i presna formulace zadani (v tom mate jistou libovuli -
% v pripade nejasnosti - konzultujte emailem ci osobne) - casto 
% pomuze zpracovat si ukazku a podivat se, jak se makro chova nyni.
%
% Kazda odevzdana uloha (mailem) musi mit v komentari uvedeno
% - jmeno autora
% - popis makra tak, aby makro bylo dobre citelne

% 1. zapocet - jiz nelze vybrat
% Nahlédnout do typografických pravidel a utvorit a prezentovat
% na přednášce názor na kazku - typografické prohřešky

\def\nadpis#1{\centerline{\bf #1}}

\def\index#1{}
\def\kap#1{\bigskip\noindent{\bf#1}\par\medskip}
\def\ods#1{\medskip\noindent{\bf#1}\par\smallskip}

\def\begincolumns#1{}
\def\endcolumns{}

\font\slabikar=slabikar
\def\udelejbox#1{#1}
\def\sikmytext#1{#1}
\def\umistiobrazek#1#2#3{}
\def\slabikarbox#1{#1}
\def\litem#1{#1}
\def\motto{}
\def\prostrkano{}
\def\vlastnivynalez{}
\def\verbatim{}
\def\endverbatim{}
\def\odst#1#2#3{}
\def\zlom{}
\def\vlozobsah{}
\def\vlozindex{}
\def\\{}
\def\epsfxsize=#1 {}
\def\oznactoken{}
\def\vlozramecek{}
\def\odradkujsoubor{}
\def\nitem{}
\def\osm{}

\input epsf

%%%%%%%%%%%%%%%%%%%%%%%

\def\traceon{\tracingmacros=1 \tracingcommands=1 }
\def\traceoff{\tracingmacros=0 \tracingcommands=0 }

%%%%%%%%%%%%%%%%%%%%%%%

% 2. zapocet - 
% makro \trojuhelniky{text}{text} vysází text
% ve tvaru dvou do sebe zapadajících trojúhelníků

\def\slabikarbox#1{%            
  \setbox0=\vtop{\rightskip=0pt plus 30pt
    \baselineskip=2\baselineskip
    \slabikar   
    \vskip-5pt
    \noindent
    \parshape 4  0mm 13mm
                 0mm 26mm
                 0mm 39mm
                 0mm 52mm
  #1}\box0}
\def\sikmytext#1{\setbox0=\vbox{#1}%
  \dimen0=\ht0 \dimen1=\dp0 \ht0=0pt \dp0=0pt \wd0=15mm
  \dimen2=\hsize \advance\dimen2 by -2mm \advance\dimen2 by -13mm
  \dimen3=\hsize \advance\dimen3 by -2mm \advance\dimen3 by -26mm
  \dimen4=\hsize \advance\dimen4 by -2mm \advance\dimen4 by -39mm
  \dimen5=\hsize \advance\dimen5 by -2mm \advance\dimen5 by -51mm
  \parshape 9 15mm \dimen2
              15mm \dimen2
              28mm \dimen3
              28mm \dimen3
              41mm \dimen4
              41mm \dimen4
              53mm \dimen5
              53mm \dimen5
               0mm \hsize 
  \noindent\kern-15mm\copy0 
  \ignorespaces}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 3. zapocet -
% makro vysází obrázek (název souboru jako #3) do odstavce 
% s umístěním lu, ld, ru, rd (left, right, up, down)
% Předpokládá se, že odstavec je dostatečně dlouhý

\def\umistiobrazek#1#2#3{%    
  \setbox0=\vbox to 10mm{\hbox to 10mm{\hfil}\vfil}}%\epsfbox{#3}}%
%}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% 4. zapocet  - 
% zobecnit pro výčty označované různými typy a umožńující vnoření

\newcount\nitemcount         
\def\resetnitem{\global\nitemcount=1 }  \resetnitem
\def\nitem#1{\par \hangindent=5ex \hangafter=1
  \noindent\hbox to 5ex{\hfil\number\nitemcount. }%
  \global\advance\nitemcount by 1
  \ignorespaces
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\font\eightit=csti8
\def\motto#1{\par\nobreak
  \vbox{\leftskip=0.3\hsize plus 0.65\hsize
    \parfillskip=0pt
    \def\\{\break}
    \eightit
    \baselineskip=3ex
    #1}
  \nobreak\smallskip
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 5. zapocet - 
% zobecnit pro n sloupcovouu sazbu

\newdimen\pageheight  \pageheight=\vsize
\newdimen\pagewidth   \pagewidth=\hsize
\newbox\leftcolumnbox
\newbox\prevpagebox
\def\iw#1{\immediate\write-1{#1}}

\hyphenation{ur-či-té-ho po-slu-chač}

\def\begincolumns#1{             
   \par
   \medskip
   \begingroup
   \output={\ulozdoprevpagebox} \eject
   \hsize=0.46\pagewidth
   \tolerance=1000
   \pretolerance=500
   \emergencystretch=5pt
   \output={\saveleftcolumn}
}
\def\endcolumns{
   \output={\allcolumns}
   \par \eject
   \medskip
   \endgroup
}
\def\ulozdoprevpagebox{
  \global\setbox\prevpagebox=\vbox{\unvbox255}
  \global\vsize=\pageheight
  \global\advance\vsize by -\ht\prevpagebox
  \global\advance\vsize by -\dp\prevpagebox
  \immediate\message{AAA \the\pageheight}
  \immediate\message{AAA \the\ht\prevpagebox}
  \immediate\message{AAA \the\vsize}
}
\def\saveleftcolumn{\global\setbox\leftcolumnbox=\box255
   \immediate\message{AAA \the\vsize}
   \global\output={\saverightcolumn}
}
\def\saverightcolumn{%
   \immediate\message{aaa}
   \shipout\vbox to\pageheight{\makeheadline\box\prevpagebox
       \vskip2pt plus 3pt
       \hbox to\pagewidth{\box\leftcolumnbox\hfil\box255}
       \baselineskip 24pt \lineskiplimit 0pt 
       \hbox to\pagewidth{\the \footline }
   }    
   \global\output={\saveleftcolumn}
   \global\vsize=\pageheight
   \global\advance\pageno by1
}
\def\allcolumns{
   \ifvoid\prevpagebox\else\unvbox\prevpagebox\fi
   \hbox to\pagewidth{\ifvoid\leftcolumnbox\else\box\leftcolumnbox\hfill\fi
       \vbox{\unvbox255}
   }
   \global\output={\plainoutput}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\catcode`\@=13
\newcount\countat  \countat=0
\def@{\global\advance\countat by 1 \par\medskip 
   \noindent
   \futurelet\next\sejmiat
}
\def\sejmiat{\ifx*\next
      \let\next\atoddil
   \else
      \let\next\atzbytek
   \fi\next}
\def\atoddil#1#2.{%
   {\bf\number\countat.\ \ignorespaces#2\unskip. }%
   \ignorespaces
}
\def\atzbytek{%
   \number\countat. \ignorespaces
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 6. zapocet - 
% upravit tak, aby makro \prostrkano akceptovalo v argumentu mezery a řídicí sekvence (bez expanze)
% 7.zapocet - 
% upravit tak, aby makro \prostrkáno ještě vertikálně "náhodně" rozhodilo sazbu

\def\prostrkano#1{{\futurelet\next\ctidokonce#1^^A}}
\def\ctidokonce{\ifx^^A\next
     \let\next\prostrkanokonec
   \else
     \let\next\prostrcznak
   \fi\next
}
\def\prostrkanokonec#1{}
\def\prostrcznak#1{#1\kern2pt\futurelet\next\ctidokonce}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 8.zapocet -
% upravit tak, text sázel zadaným počtem fontů
%    (první argument) fonty cyklicky střídal po písmenu.

\def\vlastnivynalez#1#2{{\futurelet\next\ctivyndokonce#2^^A}}
\def\ctivyndokonce{\ifx^^A\next
     \let\next\vlastnikonec
   \else
     \let\next\vlastniznak
   \fi\next
}
\def\vlastnikonec#1{}
\def\vlastniznak#1{#1#1\kern1pt\futurelet\next\ctivyndokonce}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 9.zapocet -    
% napsat makro na vysázení řetězového zlomku zadané hloubky

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\input epsf

% 10. zapocet  - 
% zobecnit makro \odst pro prvni dva parametry lu,ld,ru,rd

\newcount\auxc
\def\odst#1#2#3{    
   \setbox0=\vtop{\hrule height0pt width0pt
         \kern-0.8\baselineskip\hbox{\epsfbox{#3}}%
   }%
   \dimen2=\dp0 \advance\dimen2 by 0.8\baselineskip
   \dp0=0pt
   \divide\dimen2 by\baselineskip
   \auxc=\dimen2
   \advance\auxc by 1
   \dimen1=\wd0 \advance\dimen1 by 1em
   \hangindent\dimen1 \hangafter-\auxc
   \noindent \kern-\dimen1 \box0
}
\def\zlom{\hfil\break}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\input verbatim

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 11.zapocet - 
% upravit makro boxujtoken tak, aby co nejlépe
% převádělo zadaný text na tokeny (s co nejméně omezeními)

\long\def\boxujtoken#1#2{\setbox0=%
  \hbox{\tt\strut\kern0.2ex#1\kern0.2ex}%
  \dimen0=\ht0\advance\dimen0 by 0.2ex \ht0=\dimen0
  \dimen0=\dp0\advance\dimen0 by 0.2ex \dp0=\dimen0
  \setbox1=\vbox{\hrule\kern-0.4pt
    \hbox{\vrule\kern-0.4pt\box0\kern-0.4pt\vrule}%
    \hrule\kern-0.4pt}%
  \leavevmode\box1$_{#2}$
}
\newcount\auxc
\def\oznactoken#1{\ifx#1^^A\let\nexti\relax
  \else
    \let\nexti\zkusmezeru
    \auxc=-1
    \expandafter\ifcat\noexpand#1\relax\auxc=16%
    \else \ifx  #1_\auxc=\catcode`\_%
    \else \ifx  #1^\auxc=\catcode`\^%
    \else \ifx  #1$\auxc=\catcode`\$%
    \else \ifx  #1 \auxc=\catcode`\ %
    \else \ifx  #1##\auxc=\catcode`\#%
    \else \ifx  #1&\auxc=\catcode`\&%
    \else \ifcat#1i\auxc=\catcode`\i
    \else \ifcat#10\auxc=\catcode`\0
    \fi \fi \fi \fi \fi \fi \fi \fi \fi
    \ifnum\auxc=16 #1 a\boxujtoken{\expandafter\uber\string#1}{16}
    \else          \boxujtoken{\string#1}{\the\auxc}
    \fi
  \fi
  \nexti}
\def\zkusmezeru{\futurelet\next\testujmezeru}
\def\:{\let\mezera= } \:
\def\testujmezeru{\ifx\next\mezera \boxujtoken{\char32}{10}%
      \let\next\oznactoken
    \else\ifx\next\bgroup\boxujtoken{\char`\{}1%
      \let\next\letuber
      \afterassignment\zkusmezeru
    \else\ifx\next\egroup\boxujtoken{\char`\}}2%
      \let\next\letuber
      \afterassignment\zkusmezeru
    \else
      \let\next\oznactoken
    \fi\fi\fi\next}  
\def\letuber{\let\zahod= }    
{\catcode`\|=0 \catcode`\\=12 
|gdef|uber\{}
}
  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\tl{1mm} \def\vn{6mm}
\def\vodorovne{\hbox{\kern\tl
     \vrule height\tl width\vn}}
\def\svisle{\hbox{\vrule height\vn width\tl
    \kern\vn\vrule width\tl}}
\def\osm{\vbox{\offinterlineskip
    \vodorovne
    \svisle\vodorovne\svisle
    \vodorovne}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 12.zapocet - 
% upravit makro tak, aby do rámečku vložilo text #3 s okrajem #2, 
% rámeček nejmenší možný.

\def\vlozramecek#1#2#3{% box, okraj, text  
  \setbox0=\hbox to\hsize{\xleaders#1\hfil}
  \vbox to 50mm{\copy0
    \xleaders\line{#1\hfil#1}\vfil
    \copy0
  }
}  

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

{\catcode`\^^M=13
\gdef^^M{\par\koukni}%
}
\def\minuly{.}%
\def\vratpar#1{\catcode`\^^M=5 }
\def\koukni{\futurelet\dalsi\srovnej}%
\def\srovnej{\ifx\dalsi ^^A\let\dale\vratpar
     \else\ifx\dalsi\par\let\dale\odeber%
     \else\if\dalsi\minuly \let\dale\relax
     \else\let\dale\tucne\fi
          \let\minuly\dalsi\fi\fi%
  \dale}%
\def\odeber#1{\koukni}
\def\tucne#1{\smallskip{\bf#1}}

\def\odradkujsoubor#1{{\catcode`\^^M=13
\expandafter\koukni \input #1 ^^A
}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% vstup/vystup

% 13.zapocet - 
% upravit makra tak, aby bylo možné vložit obsah na začátek dokumentu

\newwrite\wrcont
\openout\wrcont=\jobname.aux
\def\wrc#1#2{%
  \write\wrcont{%
    \string\contline{#1}{#2}{\the\count0}
  }
}
\def\atoddil#1#2.{%
   {\bf\number\countat.\ \ignorespaces#2\unskip. }%
%   \wrc{\number\countat}{#2} %spatne
   \expandafter\wrc\expandafter{\number\countat}{#2} %spatne
   \ignorespaces
}

\def\vlozobsah{\immediate\closeout\wrcont
  {\rightskip=4ex
   \parfillskip=0pt 
   \input \jobname.aux
  }
}

\def\contline#1#2#3{\par
  \hangindent2em\hangafter0
  \noindent\llap{#1. }\ignorespaces#2\dotsfill
  \rlap{\hbox to4ex{\hfil#3}}\par
}
\def\dotsfill{\leaders\hbox to1em{\hss.\hss}\hfill}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newwrite\wrindex
\openout\wrindex=\jobname.idx
\def\wri#1{%
  \write\wrindex{%
    \string\indexentry{#1}{\the\count0}%
  }
}
\def\index#1{$\bullet$\mark{#1}\wri{#1}}
\def\makeheadline{\vbox to 0pt{%
   \vskip-22.5pt
   \hbox to\pagewidth{\vbox to8.5pt{}\the\headline}\vss\nointerlineskip}
}
\headline={\firstmark\hfil\botmark}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 14.zapocet -
% upravit tisk indexu dvousloupcově tak, aby umožňoval sloupcový
% zlom a odstranit pricinu posunuteho tisku sloupcu

\long\def\begin#1#2\end#3{
  #2
}
\def\vlozindex{\bigskip
  \centerline{Index}
  {\setbox4=\vbox{\hsize=0.45\hsize\vsize=2\vsize
       \definiceindexu\input \jobname.ind }
   \setbox3=\vsplit4 to 0.51\ht4
   \setbox3=\vtop{\unvbox3} 
   \setbox4=\vtop{\unvbox4} 
   \setbox0=\vbox{\line{\box3\hfil\box4}\hrule height0pt}
   \box0   
  }
}
\def\definiceindexu{
  \def\indexspace{\medskip}
  \def\item##1,{\par\noindent\expandafter\zkusback\string##1\quad}
} 
{\catcode`\|=0 \catcode`\\=12 
|gdef|zkusback#1{|ifx#1\ |tt|else |rm|fi#1}
}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 15.zapocet - 
% makro na tisk polí 9x9 sudoku analýzou znaků vstupniho souboru, výstup vbox
% 16. zapocet  -
% makro na tisk polí 9x9 sudoku nastavením kategorií, výstup vbox
\def\sudoku{\obeylines\tt\catcode`\x=13 \catcode`\ =9 
}
{\catcode`\x=13 \gdefx{.}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 17.zapocet - 
% upravit makro tak, aby sazelo dělení do odstavce

\def\ukazdeleni#1{\setbox0=\vbox{\hsize=0pt 
  \tolerance=0 \pretolerance=9999 
  \overfullrule=0pt
  \hbadness=10000
  \parindent=0pt
  #1\par
 }{\splittopskip=0pt
   \setbox1=\vsplit0 to 0.34\ht0  \setbox1=\vtop{\unvbox1}
   \setbox2=\vsplit0 to 0.51\ht0  \setbox2=\vtop{\unvbox2}
                                  \setbox0=\vtop{\unvbox0} 
   \par\line{\box1\hfil\box2\hfil\box0\hfil} 
 }
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 18. zapocet -
% upravit předefinování sekvence #1 tak, aby pokud jde o \it nebo \sl 
% se vkladala kurzivni korekce podle následujícího znaku, jinak vkládá za
% ukončením změny fontu argument #2.

\def\predefinujpismo#1#2{%
  \let\origpismo#1%
  \def#1{\origpismo\aftergroup\addbullet}
  \def\addbullet{\unskip#2}
}  

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 19. zapocet -
% upravit tak, aby \znakyakategorie vypsala tabulku vsech znaku s jejich
% kategoriema
% 20. zapocet -
% navrhnout makro \kategorieaznaky, ktere vypise pro kazdou kategorii
% seznam znaku (ascii kodu), ktere maji danou kategorii.

\def\znakyakategorie{
\count40=0
\noindent
\loop 
\ifnum\count40<5
  \hbox to 12mm{\char\count40(\the\count40)$_{\the\catcode\count40}$\hfil}  
  \advance\count40 by 1
\repeat
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 21. zapocet -
% Navrhnout makro, ktere upravi vystupni rutinu v plainu tak, ze bude
% sazet ziva zahlavi ve tvaru:
%  leva stranka:     cislo_stranky       datum      stranka/celkovy pocet stranek
%  prava stranka:    zrcadlove obsah leve

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 22. zapocet -
% Vytvořit mechanismus, zpětného odkazování na názvy sekcí
% tj. aby bylo možné na začátek oddílu napsat např. @*[fonty]O fontech. A kdekoliv 
% dále na číslo odstavce se odkázat \ref{fonty}.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 23. zapocet -
% Vytvořit mechanismus jako v 22, ale aby bylo možné se odkazovat i dopředu.
%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 24. zapocet -
% Upravit vystupni rutinu v plainu tak, aby vypsala do log souboru
% v promilich zaplneni posledni stranky dokumentu.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 25. zapocet - 
% navrhnout makro se dvema argumenty vynecha poslednich n znaku z retezce
% \utnikonec{n}{retezec} 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 26. zapocet zminovany na prednasce -
% navrhnout makro \srdce{font}{radkovani}{text} ktere vytiskne text ve tvaru
% srdce zadanym fontem se zadanym radkovanim - rozmery srdce pevne zadany

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 27. zapocet zminovany na prednasce - 
% navrhnout makro \prevod{mira}{jednotka} ktery vysazi hodnotu miry v
% pozadovanych jednotkach (napr. \prevod{25.6mm}{in}- vysazi  1in

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 28. zapocet -
% upravit latexova makrat \label a \ref (a \end{document}) tak, 
% aby se do log souboru na konci zpracovani vypsala vsechna navesti,
% na ktera nebylo v dokumentu odkazovano.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 32. zapocet
% ??? - vase namety

\endinput

