\def\fileversion{v0.994}
\def\filedate{2007/11/18}
% ^^A For index and changes, run:
% ^^A makeindex -s gglo -o Menu.gls Menu.glo
% ^^A makeindex -s gind -o Menu.ind Menu.idx
%
% \CheckSum{237}
%%
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%%
% \DoNotIndex{\" , \-, \flqq,\frqq, \ ,\def, \begin, \end}
% \DoNotIndex{\csname,\endcsname, \expandafter, \global, \newcommand}
% \DoNotIndex{\advance, \filedate, \fileversion, \MessageBreak}
% \DoNotIndex{\newcount, \newcounter, \newif, \or}
% \DoNotIndex{\if, \else, \fi, \ifcase, \ifdefined, \ifnum, \ifx, \loop, \repeat}
% \DoNotIndex{\heartsuit}
% \DoNotIndex{\NeedsTeXFormat, \providecommand, \ProvidesPackage, \relax, \RequirePackage}
% \DoNotIndex{\par, \chapter, \section, \subsection, \subsubsection, \paragraph, }
% \DoNotIndex{\selectlanguage, \stepcounter, \ss, \space, \setcounter}
% \DoNotIndex{\value, \typeout, \long, \renewcommand}
%
% \iffalse
%<*driver>
\documentclass{ltxdoc}
\usepackage{menu}
\usepackage{makeidx}
\usepackage[draft]{fixme}
%\IfFileExists{hyperref.sty}{\usepackage{hyperref}}{}
\IfFileExists{keystroke.sty}{
    \usepackage{keystroke}
    }{
    \newcommand{\keystroke}[1]{\fbox{##1}}
    }
\CodelineIndex
\makeindex
%\OnlyDescription
\begin{document}
 \DocInput{menu.dtx}
\end{document}
%</driver>
%
%<*package>
% \fi
% \title{Menu.sty: Typesetting menus}
% \author{Knut Lickert}
% \maketitle
%
%\begin{abstract}
% Menu.sty define a command |\menu{Programm!!Menu1!Command}| and
% expand it to something like \menu{Programm!!Menu1!Command}. You
% can use it for documentations of programs.
%\end{abstract}
%
% \section{Where to use the style}
% If you write a documentation of a program you have to define
% things like "Push button \keystroke{F1} or go to the Menu to
% \menu{Help!Help} and you get help". This style help you to write
% the menu entry.
%
% \subsection{Other packages}
% I have not found a package to typeset menus (that's why this style
% was written). If you find one, please contact me
% (knut@lickert.net).
%
% \begin{description}
%    \item[keystroke]
%         A \LaTeX\ package which provides macros for the graphical
%         representation of the keys on a computer keyboard.\par
%           Example: \Ctrl, \Shift \AltGr
% \end{description}
%
%
% \section{How to use the style}
% \subsection{Inline-Menu}
%
% \DescribeMacro{\menu}
% |\menu| has one parameter. The macro is used to typeset a path in a
% menu. Like |\index| different levels are separated with a "!"
% inside the parameter. Instead a "!" you can use two "!!" and so you
% can define bigger steps in the menu. I use programs, where a menu
% is starting another menu (e.g.\ in a popup). So instead of saying
% "Goto \menu{Menu1!Entry1!Menu2} and then from
% \menu{Menu2!Menu3!Entry3}" I write "Goto
% \menu{Menu1!Entry1!Menu2!!Menu3!Entry3}.
%
% Example:
% \verb|\menu{File!Save!!Filename}|: \menu{File!Save!!Filename}
%
% This is only to show one path in a menu.
% This command may not be used to show a complete menu.
% I recommand to make a snapshot of your programm and include the picture
% via \verb|includegraphics| (Package graphicx)
%
%
% \subsection{Menu-Figure}
% \fixme{Description}
%\DescribeEnv{menufolder}
%Number of parameter: 2
%
%\DescribeMacro{\menuitem}
%Number of parameter: 2
%
%\DescribeMacro{\menuitemactive}
%Number of parameter: 2
%
%\DescribeMacro{\menuseparator}
% Add a separator line. An optional length can be defined.
%
% Example:
%\begin{verbatim}
%\settowidth{\menuitemlength}{Close and d\underline on't save}
%\begin{menufolder}{\underline Menu}%
%    \menuitem{Close and d\underline on't save}
%    \menuitem{Close and sa\underline ve}
%    \menuitemactive{I\underline tem}
%\end{menufolder}
%}
%\end{verbatim}

%\settowidth{\menuitemlength}{Close and d\underline on't save}
%\begin{menufolder}{\underline Menu}%
%    \menuitem{Close and d\underline on't save}
%    \menuitem{Close and sa\underline ve}
%    \menuitemactive{I\underline tem}
%\end{menufolder}
%
%\subsubsection{Options}
%There are different options to modify the look of menus.
%
%\begin{description}
%    \item[hand] The hand point to the active menu item.
%       Requires bbding.
%    \item[framed] The menu entries are framed
%    \item[grey] framed and background values.\fixme{change
%    option name}
%\end{description}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Changing the look}
% \DescribeMacro{\menutext}
% A step of a menu is written with this macro, default is
% |\texttt|. You can change it with |\renewcommand|, e.g.\
% |\renewcommand{\menutext}[1]{\emph{#1}|
%
% \subsection{Inline-Menus}
% \DescribeMacro{\menumathsymbols}
% If you want to replace the symbols, you can use |\menusymbols|.
% Parameter one is the flag for "!", Parameter for "!!"
% (Default is \(\rightarrow\) and \(\Rightarrow\)).
%
% \DescribeMacro{\menusymbols}
% Like |\menumathsymbols| with two differences:
% \begin{itemize}
%   \item There is no math-environment (if you need it, you can
%         guarantee it with |\ensuremath|)
%   \item There are two optional parameters, defining a start and
%         end command of a menu.
% \end{itemize}
% This command gives you a flexible possibility to change the look
% of menus.
%
% \begin{description}
%   \item[$\backslash$menusymbols] Define a style with the parameters:
%   \item[{[Start]}] How should a menu start.\par
%         A |\par| is not allowed, but you can use a |\\|. If a paragraph
%         ends before the |\menu|, you must use |~\\| instead.
%   \item[\{\}] The look/actions for a "!" in a menu.
%   \item[\{\}] The look/actions for a "!!" in a menu.
%   \item[{[End]}] How should a menu end.
% \end{description}
%
% \subsubsection{Examples}
% \newcommand{\example}[1]{\texttt{$\backslash$menu\{#1\}} & \menu{#1}\\}
%
% \paragraph{Predefined look}~\par
%
% \begin{tabular}{ll}
% Coding    & Result\\\hline
% \example{Menu!Menu}
% \example{Menu!!Menu}
% \example{Menu!!Next Menu!Entry}
% \end{tabular}
%
% \paragraph{Changed symbols}
%
% After |\menumathsymbols{>}{\gg}| you get\par
% \menumathsymbols{>}{\gg}
% \begin{tabular}{ll}
% Coding    & Result\\\hline
% \example{Menu!Menu}
% \example{Menu!!Menu}
% \example{Menu!!Next Menu!Entry}
% \end{tabular}
%
% Attention: If you want to change it local, you must define a
% block.
%
% \paragraph{Define your own styles}
%
% You can define your own "styles", |\menu{Menu!!Next Menu!Entry}|
% makes an entry like:
%
% \begin{minipage}[t]{0.5\textwidth}
%\begin{verbatim}
%\newlength{\menusep}
%\menusymbols[
%   \setlength{\menusep}{0em}~\\
% ]{
%   \\
%   \addtolength{\menusep}{1em}
%   \hspace*{\menusep}
% }{
%   $\wr$\\
%   \addtolength{\menusep}{2em}
%   \hspace*{\menusep}
% }[
% \ensuremath{\Leftarrow}
% ]
%\end{verbatim}
% \end{minipage}
% \begin{minipage}[t]{0.4\textwidth}
% Example for a new style
% \menusymbols[\setlength{\menusep}{0em}~\\]{
%    \\
%    \addtolength{\menusep}{1em}
%    \hspace*{\menusep}
%  }{
%    $\wr$\\
%    \addtolength{\menusep}{2em}
%    \hspace*{\menusep}
%  }[
%  \ensuremath{\Leftarrow}
%  ]
% \menu{Menu!!Next Menu!Entry}
% \end{minipage}
%
% \subsection{Layout of Menu-figures}
%
% The macros can be replaced. See the implementation for examples.
%
% \fixme{describe length}
%
%\DescribeMacro{\menufolderentry}
% Defines the look of the entry of a menu.
% Parameters are length (optional) and text.
%
%\DescribeMacro{\menuitem}
% Defines the look of one item in the menu.
% Parameters are length (optional) and text.
%
%\DescribeMacro{\menuitemactive}
% Defines the look of an active item in the menu.
% Parameters are length (optional) and text.
%
%\DescribeMacro{\menuitemactivesymbol}
% This symbol is used to show to the active item.
%
% \subsubsection{Examples}
% \fixme{Examples}
%
% \section{Ideas for the future}
% \begin{itemize}
%   \item Create Index entries for menus (optional)\par
%         If I do it, it would be an additional index (style multind).
%         I think this would be wrong in the normal index.
%   \item An optional parameter: |\menu[Programm]{Menu!...}|\par
%         Does anybody need it? At the moment I think there is no need.
%         When there is the possibility of index entries, then it could be sensefull
%         (Index is sorted by Programm, Menu1, Menu2\ldots).
%   \item A command |\popup| or |\rightmouse| to define a click on the
%         right mouse button. |\click[Feld]{menu!entry}|.
%         This function could be a feature of the package keystroke.
%         %^^A use mousesymbols.tex
% \end{itemize}
%
% Any comments? Up to now I don't need this features, so I will not
% implement them. If you need it, or think you have a better idea,
% send me a mail to knut@lickert.net.
%
% If you built your own "fancy" style, or have another idea to use
% "!!" and "!", please send me your idea.
%
% \StopEventually\relax
% \part*{Implementation}
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{menu}[
    \filedate\space\fileversion\space menu-Package]
\typeout{menu.sty: Support of typeout menus}
\RequirePackage{xspace}
%\RequirePackage{keystroke}[2003/08/15 v1.5]
%    \end{macrocode}
%
% \section{Commands}
% \begin{macro}{\menu}
% Take the parameter and send it with an endflag ("\(<\)") to |\@menu|.
%    \begin{macrocode}
\newcommand{\menu}[1]{\@menusymbolStart\@menu #1!<\@menusymbolEnd}
%    \end{macrocode}
% \end{macro}%^^A{\menu}
%
% \begin{macro}{\menutext}
% How to write one step of the menu?
%    \begin{macrocode}
\newcommand{\menutext}[1]{\texttt{#1}}
%    \end{macrocode}
% \end{macro}%^^A{\menu}
%
% \begin{macro}{\@menu}
% Get two parameters, separated with "!".
% Parameter one can be:
%    \begin{macrocode}
\def\@menu#1!#2<{%
\def\@menuParOne{#1}%
\def\@menuParTwo{#2}%
\def\gt{!}%
%    \end{macrocode}
% Check if the first parameter has content.
%
%    \begin{macrocode}
\ifx\@empty\@menuParOne%
{\ifx\@menuParTwo\gt%
 \else\expandafter\@menuTo\@menuParTwo <\@menu#2<%
 \fi}%
\else%
%    \end{macrocode}
%  \changes{v0.994}{2007-11-18}{No separator for direct menu entries}
%  First parameter has content, so let's print it.
%    \begin{macrocode}
\menutext{#1}%
%    \end{macrocode}
%  Add a \verb|\@menuto| and the second part,
%  but only if there is a second part.
%    \begin{macrocode}
 \ifx\@menuParTwo\@empty%
 \else%
  \expandafter\@menuto\@menuParTwo <\@menu#2!<%
 \fi%
\fi%
}
%    \end{macrocode}
% \end{macro}%^^A{\@menu}
% \begin{macro}{\@menuto}
%    \begin{macrocode}
\def\@menuto#1#2<{\ifx!#1\else\@menusymbolOne\allowbreak\fi}
%    \end{macrocode}
% \end{macro}%^^A{\menuto}
% \begin{macro}{\@menuTo}
%    \begin{macrocode}
\def\@menuTo#1#2<{\ifx!#1\else\@menusymbolTwo\allowbreak\fi}
%    \end{macrocode}
% \end{macro}%^^A{\menuTo}
%
% \section{The different symbols}
% \begin{macro}{\@menusymbolStart}
% The symbol, printed on start of |\menu|.
%    \begin{macrocode}
\newcommand*\@menusymbolStart{}
\newcommand*\@menusymbolEnd{}
%    \end{macrocode}
% \end{macro}%^^A{\@menusymbolOne}
%
% \begin{macro}{\@menusymbolOne}
% The symbol, printed when a "!" occurs in |\menu|.
%    \begin{macrocode}
\newcommand*\@menusymbolOne{\ensuremath{\rightarrow}}
%    \end{macrocode}
% \end{macro}%^^A{\@menusymbolOne}
% \begin{macro}{\@menusymbolTwo}
% The symbol, printed when a "!!" occurs in |\menu|.
%    \begin{macrocode}
\newcommand*\@menusymbolTwo{\ensuremath{\Rightarrow}}
%    \end{macrocode}
% \end{macro}%^^A{\@menusymbolTwo}
%
% \begin{macro}{\menusymbol}
% Possibility to redefine the symbols for "!" and "!!".
%    \begin{macrocode}
\newcommand*\menusymbols[3][]{%
\renewcommand*\@menusymbolStart{#1}%
\renewcommand*\@menusymbolOne{#2}%
\renewcommand*\@menusymbolTwo{#3}%
\@menusymbols%
}
%    \end{macrocode}
% \end{macro}%^^A{\@menusymbols}
%
% \begin{macro}{\@menusymbol}
% Define the End-Makro for a menu.
%    \begin{macrocode}
\newcommand*\@menusymbols[1][]{%
\renewcommand*\@menusymbolEnd{#1}%
}
%    \end{macrocode}
% \end{macro}%^^A{\@menusymbols}
% \begin{macro}{\menumathsymbols}
% Possibility to redefine the symbols for "!" and "!!".
%    \begin{macrocode}
\newcommand*\menumathsymbols[3][]{
\renewcommand*\@menusymbolStart{\ensuremath{#1}}
\renewcommand*\@menusymbolOne{\ensuremath{#2}}
\renewcommand*\@menusymbolTwo{\ensuremath{#3}}
}
%    \end{macrocode}
% \end{macro}%^^A{\@menumathsymbol}
%
% \section{The Predefined Layouts}
%
% \subsection{Standard}
%    \begin{macrocode}
\menumathsymbols{\rightarrow}{\Rightarrow}
%    \end{macrocode}
%
% \section{Menu-Drawings}
%    \begin{macrocode}
\newlength{\menuitemlength}
\newlength{\menusep}
\setlength{\menuitemlength}{6em}
\setlength{\menusep}{3em}
%    \end{macrocode}
% \begin{macro}{\menuitemactivesymbol}
%    \begin{macrocode}
\newcommand\menuitemactivesymbol{\ensuremath{\Leftarrow}}%
%    \end{macrocode}
% \end{macro}%^^A\menuitemactivesymbol
%
% \begin{environment}{menufolder}
% \fixme{parameter 1 must be a length (2cm results in 22cm)}
% A negative parskip results in an overlapping menu.
%    \begin{macrocode}
\newenvironment{menufolder}[2][\menuitemlength]{%
    \begin{minipage}{2#1}%
    \setlength{\parskip}{0pt}%
    \menufolderentry[#1]{#2}\par%
    \addtolength{\leftskip}{\menusep}%
    }{%
    \end{minipage}%
}
%    \end{macrocode}
% \end{environment}%^^Amenufolder
% \begin{macro}{\menufolderentry}
%    \begin{macrocode}
\newcommand\menufolderentry[2][\menuitemlength]{%
    \makebox[#1][l]{\menutext{#2}\hfill}%
}
%    \end{macrocode}
% \end{macro}%^^A\menufolderentry
% \begin{macro}{\menuitem}
%    \begin{macrocode}
\newcommand\menuitem[2][\menuitemlength]{%
    \makebox[#1][l]{\menutext{#2}\hfill}\par%
}
%    \end{macrocode}
% \end{macro}%^^A\menuitem
% \begin{macro}{\menuitemactive}
%    \begin{macrocode}
\newcommand\menuitemactive[2][\menuitemlength]{%
    \makebox[#1][l]{\menutext{\emph{#2}}\hfill\menuitemactivesymbol}\par%
}
%    \end{macrocode}
% \end{macro}%^^A\menuitemactive
%
% \begin{macro}{\menuseparator}
%\fixme{besser positionieren (raisebox?)}
%    \begin{macrocode}
\newcommand\menuseparator[1][\menuitemlength]{%
    \makebox[#1][l]{~\hrulefill~}\par%
}
%    \end{macrocode}
% \end{macro}%^^A\menuseparator
%
%\subsection{Options}
%    \begin{macrocode}
\newif\ifmenuoptionhand
\DeclareOption{hand}{
\menuoptionhandtrue
}
%    \end{macrocode}
%
%    \begin{macrocode}
\newif\ifmenuoptionframed
\DeclareOption{framed}{
\menuoptionframedtrue
}
%    \end{macrocode}
%
%    \begin{macrocode}
\newif\ifmenuoptiongrey
\DeclareOption{grey}{
\menuoptiongreytrue
}
%    \end{macrocode}
%
% Process the options to set the flags.
%    \begin{macrocode}
\ProcessOptions\relax
%    \end{macrocode}
%
%\subsubsection{Option hand}
% Activate the hand-option.
%    \begin{macrocode}
\ifmenuoptionhand
\RequirePackage{bbding}%fuer  \HandLeftUp
%    \end{macrocode}
% \begin{macro}{\menuitemactivesymbol}
%    \begin{macrocode}
\renewcommand\menuitemactivesymbol{\HandLeftUp}%
%    \end{macrocode}
% \end{macro}%^^A{\menuitemactivesymbol}
%    \begin{macrocode}
\fi%ifmenuoptionhand
%    \end{macrocode}
%
%\subsubsection{Option framed}
% Activate the framed-option.
%    \begin{macrocode}
\ifmenuoptionframed
\RequirePackage{fancybox}%fuer shadowbox
%    \end{macrocode}
% \begin{macro}{\menufolderentry}
%    \begin{macrocode}
\renewcommand\menufolderentry[2][\menuitemlength]{%
    \framebox[#1][l]{\menutext{#2}\hfill}%
}
%    \end{macrocode}
% \end{macro}%^^A\menufolderentry
% \begin{macro}{\menuitem}
%    \begin{macrocode}
\renewcommand\menuitem[2][\menuitemlength]{%
    \framebox[#1][l]{\menutext{#2}\hfill}\par%
}
%    \end{macrocode}
% \end{macro}%^^A\menuitem
% \begin{macro}{\menuitemactive}
%    \begin{macrocode}
\renewcommand\menuitemactive[2][\menuitemlength]{%
    \shadowbox to #1{\menutext{\emph{#2}}\hfill\menuitemactivesymbol}\par%
}
%    \end{macrocode}
% \end{macro}%^^A\menuitemactive
%    \begin{macrocode}
\fi%Option framed
%    \end{macrocode}
%
%\subsubsection{Option grey}
% Activate the grey-option.
%    \begin{macrocode}
\ifmenuoptiongrey
\RequirePackage{fancybox}%fuer shadowbox
\RequirePackage{color}%fuer farbige Boxen
\definecolor{menugrey}{rgb}{0.9,0.9,0.9}
%    \end{macrocode}
% \begin{macro}{\menufolderentry}
%    \begin{macrocode}
\renewcommand\menufolderentry[2][\menuitemlength]{%
    \fcolorbox{white}{black}{\makebox[#1]{\menutext{\textcolor{white}{#2}}}}\par%
}
%    \end{macrocode}
% \end{macro}%^^A\menufolderentry
% \begin{macro}{\menuitem}
%    \begin{macrocode}
\renewcommand\menuitem[2][\menuitemlength]{%
    \fcolorbox{black}{menugrey}{\makebox[#1]{\menutext{\textcolor{white}{#2\hfill}}}}\par%
}
%    \end{macrocode}
% \end{macro}%^^A\menuitem
% \begin{macro}{\menuitemactive}
%\fixme{offset 1ex}
%    \begin{macrocode}
\renewcommand\menuitemactive[2][\menuitemlength]{%
    \textsf{\hspace*{1ex}\shadowbox to #1 {\menutext{#2}\hfill\menuitemactivesymbol}}\par%fixme
}
%    \end{macrocode}%
% \end{macro}%^^A\menuitemactive
%
%
% \begin{macro}{\menuseparator}
%\fixme{verbessern}
%    \begin{macrocode}
\renewcommand\menuseparator[1][\menuitemlength]{%
    \makebox[#1][l]{~\hrulefill~}\par%
}
%    \end{macrocode}
% \end{macro}%^^A\menuseparator
%    \begin{macrocode}
\fi%Option grey
%    \end{macrocode}
%
% \Finale
% \PrintIndex
% \end{document}
%</package>
