%%
%% This is file `gmdoc-enhance.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% gmdoc-enhance.dtx  (with options: `package')
%% 
%%  ,--------------------------------------------------.
%%  |  Das ist eine generierte Datei.                  |
%%  |                                                  |
%%  | (c) 2008 Paul Ebermann.                          |
%%  '--------------------------------------------------'
%%  (C) 2008 Paul Ebermann
%%
%%   Package gmdoc-enhance - Verbesserungen f^^c3^^bcr gmdoc.
%%
%%   Die Datei gmdoc-enhance.dtx sowie die dazugeh^^c3^^b6rige
%%   gmdoc-enhance.ins sowie die damit generierte
%%   gmdoc-enhance.sty stehen unter der
%%   "LaTeX Project Public License" (LPPL, zu finden
%%   unter http://www.latex-project.org/lppl/, sowie
%%   auch in den meisten TeX-Distributionen in
%%   texmf/docs/latex/base/lppl*.txt), Version 1.3b oder
%%   sp^^c3^^a4ter (nach Wahl des Verwenders).
%%
%%   Der 'maintenance-status' ist (zur Zeit) 'author-maintained'.
%%
%%   Das hei^^c3^^9ft u.a., die Dateien d^^c3^^bcrfen frei vertrieben werden,
%%   bei ^^c3^^84nderungen (durch andere Personen als Paul Ebermann)
%%   ist aber der Name der Datei zu ^^c3^^a4ndern.
\NeedsTeXFormat{LaTeX2e}[2003/12/01]%
\ProvidesPackage{gmdoc-enhance}[2008/12/04 v0.1 Verbesserungen fuer gmdoc.]%

\RequirePackage{gmdoc}[2008/10/04]%

\newcommand*{\InlineCommentsWithPercent}{%
  \let\gmde@org@ifilrr = \ifilrr% Wir merken uns dir Original-Einstellung
  \ilrrtrue% Wir schalten auf Flatter- statt Blocksatz f^^c3^^bcr die
  \let\gmd@percenthack\gmde@percenthack% Au^^c3^^9ferdem verwenden wir unsere
}%
\newcommand*{\normalInlineComments}{%
  \let\ifilrr = \gmde@org@ifilrr% Wir setzen die Block/Flattersatz-Einstellung
  \let\gmd@percenthack \gmde@org@percenthack% Dies setzen wir auf aufs
}%
\let \gmde@org@percenthack = \gmd@percenthack%
\def\gmde@percenthack{%
  \ifprevhmode%
     \aftergroup\gmde@specialSpaces% Diese Zeile ist neu -- wir schalten
     \aftergroup\gmde@kommentarStart% Das Original war hier
   \else%
     \aftergroup\gmd@narrcheckifds@ne%
   \fi%
}%

\catcode`\ =\active%
\def\gmde@activeSpace{ }%
\catcode`\ =10%

\def\gmde@specialSpaces{%
  \catcode`\ =\active% Aktives Leerzeichen.
  \@xa\let\gmde@activeSpace=\gmde@discrSpace% Und es soll die
  \exhyphenpenalty=0% Das setzt die Strafen f^^c3^^bcr Umbr^^c3^^bcche an diesen
  \hyphenpenalty=1000% Daf^^c3^^bcr stellen wir die Strafen f^^c3^^bcr normale
  \let\@codetonarrskip\gmde@codetonarrskip%  Wir sorgen daf^^c3^^bcr, dass mit
  \def\@tempa{gmde@hyphenchar-%
    \@xa\string\the\font}% der Name f^^c3^^bcr unsere zu definierende
  % Kontrollsequenz. Er enth^^c3^^a4lt den internen Namen der Schrift.
  \@ifundefined{\@tempa}{%
    \@xa\edef\csname \@tempa\endcsname{%
      \the\hyphenchar\font }%
  }{% Wenn wir es schon vorher definiert haben,
  }%
  \edef\gmde@hyphenreset{%
    \hyphenchar\font=%
    \@xa\noexpand%
    \csname \@tempa\endcsname%
  }%
  \hyphenchar\font=-1 % Das ist
}%

\def\gmde@hyphenreset{}%

\let\gmde@org@codetonarrskip = \@codetonarrskip%
\let\gmde@codetonarrskip     = \@codetonarrskip
\g@addto@macro\gmde@codetonarrskip{\gmde@normalSpaces}%

\def\gmde@kommentarStart{%
  \hbox{{%
    \@ifpackageloaded{color}{\color{gray}}{}% Falls das \pk{color}-Paket
    \ttfamily\code@delim\quad}}%
}%

\def\gmde@discrSpace{%
  \ifx\protect\@typeset@protect%
    \ifinner%
        \space%  Wenn wir in einer inneren Box sind, soll das aktive
    \else%
      \ifhmode%
        \unskip% Hmm, ich bin mir nicht ganz sicher, warum dieser
        \discretionary{% Die "`Expansion"' dieses '\discretionary'-Objektes
        }{\gmde@kommentarStart% Daf^^c3^^bcr taucht am Ende der vorherigen Zeile
        }{% Falls kein Umbruch an dieser Stelle erfolgte, ist es
        }%
        ~% Jetzt setzen wir noch ein nicht-umbrechbares Leerzeichen. Falls
      \else%
        \space% Au^^c3^^9ferhalb des horizontalen Modus (d.h. im Mathe- und im
      \fi%
    \fi%
    \afterfi{%
      \gmde@gobbleActiveSpaces}% Am Ende fressen wir alle weiteren
  \else%
    \space% Falls wir nicht im Typeset-Modus sind, sondern etwa in eine Datei
  \fi%
}%
\def\gmde@gobbleActiveSpaces{%
  \@xa\@ifnextchar\gmde@activeSpace% Wir ^^c3^^bcberpr^^c3^^bcfen, ob das
  % n^^c3^^a4chste Token ein aktives Leerzeichen ist.
  {% Falls ja, \dots
    \@xa\gmde@gobbleActiveSpaces\@gobble% entsorgen wir es
    % mit '\@gobble' und rufen uns dann selbst rekursiv auf.
  }{}% Im anderen Fall machen wir gar nichts, womit die Rekursion
  % beendet ist.
}%
\def\gmde@normalSpaces{%
  \gmde@hyphenreset% Wir rufen das Makro auf, welches den '\hyphenchar' auf
  \exhyphenpenalty=50 \hyphenpenalty=50 % Die Strafen erhalten auch ihren normalen Wert.
  \@xa\let\gmde@activeSpace = \space% Das aktive Leerzeichen wird ein normales,
  \catcode`\           = 10%     und Leerzeichen sind ab jetzt nicht mehr
  \let\@codetonarrskip  = \gmde@org@codetonarrskip% Wir setzen auch dieses
}%

\newcommand*{\activateVisibleComments}{%
  \let \gmd@narrcheckifds = \gmde@narrcheckifds%
  \let \gmd@narrcheckifds@ne = \gmde@narrcheckifds@ne%
  \let \gmd@eatlspace = \gmde@eatlspace%
}
\newcommand*{\setVisibleCommentChar}[1]{%
  \let \gmde@visibleCommentChar = #1%
}%

\setVisibleCommentChar{!}%

\newcommand*{\setVisibleCommentColor}{%
  \@ifnextchar[\gmde@setVCColor@Opt%
  \gmde@setVCColor@%
}%
\def\gmde@setVCColor@#1{%
  \def\gmde@visibleCommentColor{\@ifpackageloaded{color}{\color{#1}}{}}%
}%
\def\gmde@setVCColor@Opt[#1]#2{%
  \def\gmde@visibleCommentColor{\@ifpackageloaded{color}{\color[#1]{#2}}}%
}%

\let\gmde@visibleCommentColor\@empty

\let\gmde@org@narrcheckifds = \gmd@narrcheckifds
\let\gmde@org@narrcheckifds@ne = \gmd@narrcheckifds@ne

\def\gmde@narrcheckifds{%
  \gmde@narrcheckifds@ne{\ignorespaces}%
}%
\def\gmde@narrcheckifds@ne#1{%
  \@ifnextchar\gmde@visibleCommentChar% Falls das n^^c3^^a4chste Zeichen
    \gmde@deactivatedCode% setzen wir den Rest als deaktivierten Code.
    {\gmde@org@narrcheckifds@ne{#1}}% Ansonsten rufen wir den
}%

\def\gmde@deactivatedCode{%
  \gmd@textEOL% Wir tun so, als w^^c3^^a4re das eine neue Zeile.
  \gmde@deactivatedcodePrefix%  Das wird als erstes Token an '\gmd@textEOL'
  % ^^c3^^bcbergeben. Dadurch, dass es nur eines ist, wird es nicht als '%'
  % erkannt, sondern (nachdem wieder in den Verbatim-Modus gewechselt wurde)
  % ausgegeben.
}
\def\gmde@deactivatedcodePrefix{%
  \gmde@visibleCommentColor%
  \code@delim% Zun^^c3^^a4chst geben wir ein '%'-Zeichen aus.
  \@afternarrgfalse\@aftercodegtrue\@codeskipputgtrue% Diese boolean-Werte
  \@firstoftwo% Und jetzt entsorgen wir das zweite
}%

\def\gmde@eatlspace#1{%
  \ifx\gmd@texcodespace#1%
    \advance\gmd@ldspaceswd by \gmd@spacewd%
    \afteriffifi\gmde@eatlspace%
  \else%
    \if\code@delim\@nx#1%
      \afterfifi{%
        \@ifnextchar\gmde@visibleCommentChar{% Se la signo post
          \let\gmd@charbychar=\gmde@charbychar% Do, ni memoras ke
          % necesos montri '%',
          \gmd@typesettexcode% kaj vokas la kutiman funkcion
        }{%
          \gmd@ldspaceswd=\z@%
          \gmd@continuenarration#1%
        }%
      }%
    \else%
      \afterfifi{\gmd@typesettexcode#1}%
    \fi%
  \fi%
}%

\let\gmde@org@charbychar\gmd@charbychar%

\def\gmde@charbychar{%
  \let\gmd@charbychar=\gmde@org@charbychar
  \gmde@deactivatedcodePrefix
  \gmd@charbychar%
}%


\newcommand*{\normalInput}[1]{%
  % Wir packen alles in eine Gruppe, dann ist das Wiederherstellen der
  % Einstellungen nicht so schwer.
  \begin{StraightEOL}%
     \gmde@normalSpaces%
     \catcode`\%=14%
     \InputIfFileExists{#1}{}{}%
  \end{StraightEOL}%
}%

\let\gmd@docstripshook\@empty%

\DeclareOption{visible}{%
  \setVisibleCommentColor{blue}%
  \activateVisibleComments%
}%
\DeclareOption{inline}{%
  \InlineCommentsWithPercent%
}%
\ProcessOptions*\relax%
\endinput
%%
%% End of file `gmdoc-enhance.sty'.
