\ProvidesPackage{miscdoc}[2010/01/20 v1.2 documentation macros misc latex pkgs]

% miscdoc.sty
% Copyright 2010 Robin Fairbairns
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
% 
% The Current Maintainer of this work is Robin Fairbairns.
%
% This work consists of the file miscdoc.sty (only)

\setcounter{errorcontextlines}{1274}

% The package arose from a small exercise to document packages whose
% previous documentation consisted solely of comments in the package files.
% The macros here defined are lifted from the author's faq.sty
% (written for the UK TeX FAQ, CTAN:help/uk-tex-faq) or are inspired
% by others' work (credited where the author is known) ... except
% where they came as a flash of inspiration while actually writing the
% documentation.

% this option suggested by Heiko Oberdiek, 2010-01-29
\DeclareOption{hyper}{%
  \AtEndOfPackage{%
    \RequirePackage[pdfusetitle]{hyperref}
    \RequirePackage{bookmark}
    \bookmarksetup{numbered,open,openlevel=1}
  }
}
\ProcessOptions\relax

% note: T1 encoding assumed
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{booktabs}

% from faq.sty
\newcommand\cs[1]{\texttt{\char`\\#1}}
\let\csx\cs
\def\bsbs{\cs{\char`\\}}

% \cmdinvoke\cs<argument sequence>
% \cs typeset as above
% <argument sequence> may consist of optional or mandatory arguments;
%
% the `arguments' are simply typesett \texttt, as yet -- if something
% fancier is needed, there's a bunch of code needs rewriting here...
\DeclareRobustCommand\cmdinvoke{\@ifstar
  {\let\@tempa\emph\@scmdinvoke}%
  {\let\@tempa\relax\@scmdinvoke}%
}
\def\@scmdinvoke#1{\texttt{\symbol{92}#1}%
  \futurelet\@let@token\@cmdinvoke
}
\def\@cmdinvoke{\ifx\@let@token\bgroup
    \let\@tempb\@cmdinvoke@lbrace
  \else
    \ifx\@let@token[% ]
      \let\@tempb\@cmdinvoke@lbrack
    \else
      \ifx\@let@token(% )
        \let\@tempb\@cmdinvoke@lparen
      \else
        \let\@tempb\@empty
      \fi
    \fi
  \fi
  \@tempb
}
\def\@cmdinvoke@lbrace#1{\penalty0\hskip0pt\relax
  \texttt{\symbol{123}\@tempa{#1}\symbol{125}}%
  \futurelet\@let@token\@cmdinvoke
}
\def\@cmdinvoke@lbrack[#1]{\penalty-150\hskip0pt\relax
  \texttt{[\@tempa{#1}]}%
  \futurelet\@let@token\@cmdinvoke
}
\def\@cmdinvoke@lparen(#1){\penalty-150\hskip0pt\relax
  \texttt{(\@tempa{#1})}%
  \futurelet\@let@token\@cmdinvoke
}
% and extension -- versions that take a single extra (delimiter)
% argument, such as \delcmdinvoke{lscrunge}( ... awful syntax, but...
\DeclareRobustCommand\delcmdinvoke{\@ifstar
  {\let\@tempa\emph\@sdelcmdinvoke}%
  {\let\@tempa\relax\@sdelcmdinvoke}%
}
\def\@sdelcmdinvoke#1#2{\texttt{\symbol{92}#1#2}%
  \futurelet\@let@token\@cmdinvoke
}

% sui generis
\newcommand\newitem{\par\addvspace{1ex}\noindent}

% inspired by doc.sty in latex distribution
\newcommand\meta[1]{\ensuremath{\langle}\emph{#1}\ensuremath{\rangle}}

% meaningful names, as in faq.sty
\let\environment\texttt
\let\Package\textsf
\def\option{\@ifnextchar[\@optionb\@option}% ]
\def\@optionb[#1]{[{\normalfont\ttfamily#1}]}
\def\@option#1{\texttt{#1}}
