diff options
author | Karl Berry <karl@freefriends.org> | 2009-02-26 00:49:14 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-02-26 00:49:14 +0000 |
commit | ddbbbe630665e57743e59ca5df71b2d054bd5d81 (patch) | |
tree | 760ddab647b788ce4dd070cea41c3a926720ba98 /Master/texmf-dist/tex/latex/silence | |
parent | d1dd837a14e1be294dc54fc334a94e2c1a1dfffd (diff) |
new latex package silence (24feb09)
git-svn-id: svn://tug.org/texlive/trunk@12234 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/silence')
-rw-r--r-- | Master/texmf-dist/tex/latex/silence/silence.sty | 652 |
1 files changed, 652 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/silence/silence.sty b/Master/texmf-dist/tex/latex/silence/silence.sty new file mode 100644 index 00000000000..521e15907a7 --- /dev/null +++ b/Master/texmf-dist/tex/latex/silence/silence.sty @@ -0,0 +1,652 @@ +%% +%% This is file `silence.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% silence-doc.dtx (with options: `package') +%% +%% ****************************************************************************** +%% ****************************************************************************** +%% ** ** +%% ** silence v.1.1 by Paul Isambert ** +%% ** See the documentation for a comment on the implementation. ** +%% ** ** +%% ** This set of macros is published under the LaTeX Project Public License: ** +%% ** ** +%% ** Do whatever you want to that software, ** +%% ** but if you modify it, change its name to avoid confusion, ** +%% ** and if you copy part of the code please mention where it comes from. ** +%% ** ** +%% ** Comments, suggestions and bugs: ** +%% ** ** +%% ** zappathustra@free.fr ** +%% ** ** +%% ** http://paulisambert.free.fr/ ** +%% ** ** +%% ** Enjoy! ** +%% ** ** +%% ****************************************************************************** +%% ****************************************************************************** +%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{silence}[2009/02/20 v1.1 Selective filtering of warnings and error messages] +\makeatletter + +\newcount\sl@Save +\newif\ifsl@Debrief +\newif\ifsl@ShowWarnings +\newif\ifsl@ShowErrors +\newif\ifsl@Immediate +\newif\ifsl@SafeMode + +\DeclareOption{debrief}{\sl@Debrieftrue} +\DeclareOption{immediate}{\sl@Immediatetrue} +\DeclareOption{safe}{\sl@SafeModetrue} +\DeclareOption{save}{\sl@Save1% +\newwrite\sl@Write% +\immediate\openout\sl@Write=\jobname.sil} +\DeclareOption{saveall}{\sl@Save2% +\newwrite\sl@Write% +\immediate\openout\sl@Write=\jobname.sil} +\DeclareOption{showwarnings}{\sl@ShowWarningstrue} +\DeclareOption{showerrors}{\sl@ShowErrorstrue} +\ProcessOptions\relax + +\newcount\sl@StateNumber +\newcount\sl@MessageCount +\newcount\sl@Casualties + +\newtoks\sl@Filter +\newtoks\sl@Message +\newtoks\sl@UnexpandedMessage +\newtoks\sl@Mess@ge + +\newif\ifsl@Check +\newif\ifsl@Belong +\newif\ifsl@KillMessage +\newif\ifsl@SafeTest + +\def\sl@end{sl@end} +\def\sl@latex{latex} +\def\sl@Terminator{£} +\gdef\sl@active{active} +\gdef\sl@safe{safe} +\gdef\sl@PackageName{NoPackage} +\def\SafeMode{\global\sl@SafeModetrue} +\def\BoldMode{\global\sl@SafeModefalse} +\def\sl@Gobble#1sl@end,{} + +\newcount\sl@WarningCount +\newcount\sl@WarningNumber +\newcount\sl@WarningCasualties + +\newtoks\sl@TempBOW +\newtoks\sl@BankOfWarnings + +\newif\ifsl@WarningsOff +\newif\ifsl@NoLine + +\expandafter\gdef\csname sl@family:WarningState\endcsname{active} +\def\sl@WarningNames{} +\def\sl@UnwantedWarnings{} +\def\sl@ProtectedWarnings{} + +\def\WarningsOn{% + \@ifnextchar[% + {\ifsl@WarningsOff% + \def\sl@next{\sl@Add\sl@ProtectedWarnings}% + \else% + \def\sl@next{\sl@Remove\sl@UnwantedWarnings}% + \fi\sl@next}% + {\global\sl@WarningsOfffalse% + \gdef\sl@ProtectedWarnings{}% + \gdef\sl@UnwantedWarnings{}}} + +\def\WarningsOff{% + \@ifstar% + {\global\sl@WarningsOfftrue + \gdef\sl@UnwantedWarnings{}% + \gdef\sl@ProtectedWarnings{}}% + {\@ifnextchar[{% + \ifsl@WarningsOff% + \def\sl@next{\sl@Remove\sl@ProtectedWarnings}% + \else% + \def\sl@next{\sl@Add\sl@UnwantedWarnings}% + \fi\sl@next}% + {\global\sl@WarningsOfftrue% + \gdef\sl@UnwantedWarnings{}% + \gdef\sl@ProtectedWarnings{latex,}}}} + +\def\sl@Add#1[#2]{% + \xdef#1{#1#2,}} + +\def\sl@Remove#1[#2]{% + \def\sl@Items{#2} + \def\sl@TempNewList{}% + \expandafter\sl@@Remove#1sl@end,% + \let#1\sl@TempNewList} + +\def\sl@@Remove#1,{% + \def\sl@Tempa{#1}% + \ifx\sl@Tempa\sl@end% + \let\sl@next\relax% + \else% + \sl@Checkfalse% + \expandafter\sl@ListCheck\sl@Items,sl@end,% + \ifsl@Check% + \else% + \xdef\sl@TempNewList{\sl@TempNewList#1,}% + \fi% + \let\sl@next\sl@@Remove% + \fi\sl@next}% + +\def\sl@ListCheck#1,{% + \def\sl@Tempb{#1}% + \ifx\sl@Tempb\sl@end% + \let\sl@next\relax% + \else% + \ifx\sl@Tempa\sl@Tempb% + \sl@Checktrue + \let\sl@next\sl@Gobble% + \else% + \let\sl@next\sl@ListCheck% + \fi% + \fi\sl@next} + +\def\WarningFilter{% + \global\advance\sl@WarningNumber1% + \@ifstar% + {\expandafter\gdef\csname\the\sl@WarningNumber:WarningMode\endcsname{safe}% + \sl@WarningFilter}% + {\sl@WarningFilter}} + +\def\sl@WarningFilter{% + \@ifnextchar[% + {\sl@@WarningFilter}% + {\sl@@WarningFilter[sl@family]}} + +\def\sl@@WarningFilter[#1]#2{% + \expandafter\ifx\csname #2@WarningFilter\endcsname\relax% + \expandafter\xdef\csname #2@WarningFilter\endcsname{\the\sl@WarningNumber:sl@#1}% + \else% + \expandafter\xdef\csname #2@WarningFilter\endcsname{% + \csname #2@WarningFilter\endcsname,\the\sl@WarningNumber:sl@#1}% + \fi% + \expandafter\ifx\csname #1:WarningState\endcsname\relax% + \sl@Add\sl@WarningNames[#1]% + \fi% + \expandafter\ifx\csname #1:WarningState\endcsname\sl@active% + \else% + \ifsl@Immediate% + \expandafter\gdef\csname #1:WarningState\endcsname{active}% + \else% + \expandafter\gdef\csname #1:WarningState\endcsname{inactive}% + \fi% + \fi% + \begingroup% + \expandafter\ifx\csname\the\sl@WarningNumber:WarningMode\endcsname\sl@safe% + \makeatletter% + \else% + \catcode`\\12\relax% + \fi% + \sl@AddToBankOfWarnings} + +\long\def\sl@AddToBankOfWarnings#1{% + \sl@TempBOW{#1}% + \edef\sl@act{% + \global\noexpand\sl@BankOfWarnings{% + \the\sl@BankOfWarnings% + (:sl@\the\sl@WarningNumber:)\the\sl@TempBOW(:sl@\the\sl@WarningNumber:)}}% + \sl@act% + \endgroup} + +\def\ActivateWarningFilters{% + \sl@StateNumber0\relax% + \@ifnextchar[% + {\sl@ChangeState}% + {\sl@ChangeState[\sl@WarningNames]}} + +\def\DeactivateWarningFilters{% + \sl@StateNumber1\relax% + \@ifnextchar[% + {\sl@ChangeState}% + {\sl@ChangeState[\sl@WarningNames]}} + +\def\sl@ChangeState[#1]{% + \expandafter\sl@@ChangeState#1,sl@end,} + +\def\sl@@ChangeState#1,{% + \def\sl@Tempa{#1}% + \ifx\sl@Tempa\sl@end% + \let\sl@next\relax% + \else% + \ifcase\sl@StateNumber% + \expandafter\gdef\csname #1:WarningState\endcsname{active}% + \or% + \expandafter\gdef\csname #1:WarningState\endcsname{inactive}% + \or% + \expandafter\gdef\csname #1:ErrorState\endcsname{active}% + \or% + \expandafter\gdef\csname #1:ErrorState\endcsname{inactive}% + \fi% + \let\sl@next\sl@@ChangeState% + \fi\sl@next} + +\def\ActivateFilters{% + \@ifnextchar[% + {\sl@StateNumber0% + \sl@RetrieveArgument}% + {\sl@StateNumber0\relax% + \sl@ChangeState[\sl@WarningNames]% + \sl@StateNumber2\relax% + \sl@ChangeState[\sl@ErrorNames]}} + +\def\DeactivateFilters{% + \@ifnextchar[% + {\sl@StateNumber1% + \sl@RetrieveArgument}% + {\sl@StateNumber1\relax% + \sl@ChangeState[\sl@WarningNames]% + \sl@StateNumber3\relax% + \sl@ChangeState[\sl@ErrorNames]}} + +\def\sl@RetrieveArgument[#1]{% + \def\sl@Argument{#1} + \ifcase\sl@StateNumber% + \sl@ChangeState[\sl@Argument]% + \sl@StateNumber2\relax% + \sl@ChangeState[\sl@Argument]% + \or% + \sl@ChangeState[\sl@Argument]% + \sl@StateNumber3\relax% + \sl@ChangeState[\sl@Argument]% + \fi} + +\def\sl@GetNumber#1:sl@#2,{% + \ifnum#1>0% + \expandafter% + \ifx\csname #2:\ifcase\sl@StateNumber Warning\or Error\fi State\endcsname\sl@active% + \sl@GetMessage{#1}% + \else% + \let\sl@next\sl@GetNumber% + \fi% + \else% + \let\sl@next\relax% + \fi\sl@next} + +\def\sl@GetMessage#1{% + \def\sl@@GetMessage##1(:sl@#1:)##2(:sl@#1:)##3(:sl@end:){\sl@Filter={##2£}}% + \ifcase\sl@StateNumber% + \edef\sl@act{\noexpand\sl@@GetMessage\the\sl@BankOfWarnings(:sl@end:)}% + \or% + \edef\sl@act{\noexpand\sl@@GetMessage\the\sl@BankOfErrors(:sl@end:)}% + \fi% + \sl@act% + \ifsl@SafeMode% + \sl@SafeTesttrue% + \edef\sl@act{\noexpand\sl@Mess@ge{\the\sl@UnexpandedMessage£}}% + \else% + \expandafter% + \ifx\csname #1:\ifcase\sl@StateNumber Warning\or Error\fi Mode\endcsname\sl@safe% + \sl@SafeTesttrue% + \edef\sl@act{\noexpand\sl@Mess@ge{\the\sl@UnexpandedMessage£}}% + \else% + \sl@SafeTestfalse% + \edef\sl@act{\noexpand\sl@Mess@ge{\the\sl@Message£}}% + \fi% + \fi% + \sl@act% + \sl@TestStrings} + +\def\sl@TestStrings{% + \edef\sl@act{% + \noexpand\sl@Slice\the\sl@Filter(:sl@mid:)\noexpand\sl@Filter\noexpand\sl@FilterToken% + \noexpand\sl@Slice\the\sl@Mess@ge(:sl@mid:)\noexpand\sl@Mess@ge\noexpand\sl@MessageToken}% + \sl@act% + \ifx\sl@FilterToken\sl@Terminator% + \sl@KillMessagetrue% + \let\sl@@next\relax% + \let\sl@next\sl@Gobble% + \else + \ifx\sl@MessageToken\sl@Terminator% + \let\sl@@next\relax% + \let\sl@next\sl@GetNumber% + \else% + \ifsl@SafeTest% + \ifx\sl@FilterToken\sl@MessageToken% + \let\sl@@next\sl@TestStrings% + \else% + \let\sl@@next\relax% + \let\sl@next\sl@GetNumber% + \fi% + \else% + \if\sl@FilterToken\sl@MessageToken% + \let\sl@@next\sl@TestStrings% + \else% + \let\sl@@next\relax% + \let\sl@next\sl@GetNumber% + \fi% + \fi% + \fi% + \fi\sl@@next} + +\def\sl@Slice#1#2(:sl@mid:)#3#4{\def#4{#1}#3={#2}} + +\def\sl@Belong#1,{% + \def\sl@Tempa{#1} + \ifx\sl@Tempa\sl@end% + \let\sl@next\relax% + \else% + \ifx\sl@Tempa\sl@PackageName% + \sl@Belongtrue% + \let\sl@next\sl@Gobble% + \else% + \let\sl@next\sl@Belong% + \fi% + \fi\sl@next} + +\def\sl@StoreMessage#1{% + \ifsl@SafeMode% + \sl@UnexpandedMessage{#1}% + \else% + \sl@UnexpandedMessage{#1}% + \bgroup% + \let\protect\string% + \let\noexpand\string% + \edef\sl@Tempa{#1}% + \global\expandafter\sl@Message\expandafter{\sl@Tempa}% + \egroup% + \fi} + +\ifsl@ShowWarnings +\else +\expandafter\let\expandafter\sl@GenericWarning\csname GenericWarning \endcsname +\let\sl@PackageWarning\PackageWarning +\let\sl@ClassWarning\ClassWarning +\let\sl@latex@warning\@latex@warning + +\def\PackageWarning#1#2{% + \def\sl@PackageName{#1}% + \ifsl@NoLine% + \sl@NoLinefalse% + \else% + \sl@StoreMessage{#2}% + \fi% + \sl@PackageWarning{#1}{#2}} + +\def\PackageWarningNoLine#1#2{% + \sl@StoreMessage{#2}% + \sl@NoLinetrue% + \PackageWarning{#1}{#2\@gobble}} + +\def\ClassWarning#1#2{% + \def\sl@PackageName{#1}% + \ifsl@NoLine% + \sl@NoLinefalse% + \else% + \sl@StoreMessage{#2}% + \fi% + \sl@ClassWarning{#1}{#2}} + +\def\ClassWarningNoLine#1#2{% + \sl@StoreMessage{#2}% + \sl@NoLinetrue% + \ClassWarning{#1}{#2\@gobble}} + +\def\@latex@warning#1{% + \def\sl@PackageName{latex}% + \ifsl@NoLine% + \sl@NoLinefalse% + \else% + \sl@StoreMessage{#1}% + \fi% + \sl@latex@warning{#1}} + +\def\@latex@warning@no@line#1{% + \sl@StoreMessage{#1}% + \sl@NoLinetrue% + \@latex@warning{#1\@gobble}} + +\DeclareRobustCommand{\GenericWarning}[2]{% + \advance\sl@WarningCount1\relax% + \sl@KillMessagefalse% + \sl@Belongfalse% + \ifsl@WarningsOff% + \expandafter\sl@Belong\sl@ProtectedWarnings sl@end,% + \ifsl@Belong% + \else% + \sl@KillMessagetrue% + \fi% + \else% + \expandafter\sl@Belong\sl@UnwantedWarnings sl@end,% + \ifsl@Belong% + \sl@KillMessagetrue% + \fi% + \fi% + \ifsl@KillMessage% + \else% + \expandafter\ifx\csname\sl@PackageName @WarningFilter\endcsname\relax% + \else% + \sl@StateNumber0\relax% + \expandafter\expandafter\expandafter% + \sl@GetNumber\csname\sl@PackageName @WarningFilter\endcsname,0:sl@sl@end,% + \fi% + \fi% + \ifsl@KillMessage% + \advance\sl@WarningCasualties1% + \else% + \sl@GenericWarning{#1}{#2}% + \fi% + \ifcase\sl@Save% + \or% + \ifsl@KillMessage% + \bgroup% + \let\@unused\sl@Write% + \sl@GenericWarning{#1}{#2}% + \egroup% + \fi% + \or% + \bgroup% + \let\@unused\sl@Write% + \sl@GenericWarning{#1}{#2}% + \egroup% + \fi% + \gdef\sl@PackageName{NoPackage}}% +\fi + +\newcount\sl@ErrorCount +\newcount\sl@ErrorNumber +\newcount\sl@ErrorCasualties + +\newtoks\sl@TempBOE +\newtoks\sl@BankOfErrors + +\newif\ifsl@ErrorsOff + +\expandafter\gdef\csname sl@family:ErrorState\endcsname{active} +\expandafter\gdef\csname sl@end:ErrorState\endcsname{active} +\def\sl@ErrorNames{} +\def\sl@UnwantedErrors{} +\def\sl@ProtectedErrors{} + +\def\ErrorsOn{% + \@ifnextchar[% + {\ifsl@ErrorsOff% + \def\sl@next{\sl@Add\sl@ProtectedErrors}% + \else% + \def\sl@next{\sl@Remove\sl@UnwantedErrors}% + \fi\sl@next}% + {\global\sl@ErrorsOfffalse% + \gdef\sl@ProtectedErrors{}% + \gdef\sl@UnwantedErrors{}}} + +\def\ErrorsOff{% + \@ifstar% + {\global\sl@ErrorsOfftrue + \gdef\sl@UnwantedErrors{}% + \gdef\sl@ProtectedErrors{}}% + {\@ifnextchar[{% + \ifsl@ErrorsOff% + \def\sl@next{\sl@Remove\sl@ProtectedErrors}% + \else% + \def\sl@next{\sl@Add\sl@UnwantedErrors}% + \fi\sl@next}% + {\global\sl@ErrorsOfftrue% + \gdef\sl@UnwantedErrors{}% + \gdef\sl@ProtectedErrors{latex,}}}} + +\def\ErrorFilter{% + \global\advance\sl@ErrorNumber1% + \@ifstar% + {\expandafter\gdef\csname\the\sl@ErrorNumber:ErrorMode\endcsname{safe}\sl@ErrorFilter}% + {\sl@ErrorFilter}} + +\def\sl@ErrorFilter{% + \@ifnextchar[% + {\sl@@ErrorFilter}% + {\sl@@ErrorFilter[sl@family]}} + +\def\sl@@ErrorFilter[#1]#2{% + \expandafter\ifx\csname #2@ErrorFilter\endcsname\relax% + \expandafter\xdef\csname #2@ErrorFilter\endcsname{\the\sl@ErrorNumber:sl@#1}% + \else% + \expandafter\xdef\csname #2@ErrorFilter\endcsname{% + \csname #2@ErrorFilter\endcsname,\the\sl@ErrorNumber:sl@#1}% + \fi% + \expandafter\ifx\csname #1:ErrorState\endcsname\relax% + \sl@Add\sl@ErrorNames[#1]% + \fi% + \expandafter\ifx\csname #1:ErrorState\endcsname\sl@active% + \else% + \ifsl@Immediate% + \expandafter\gdef\csname #1:ErrorState\endcsname{active}% + \else% + \expandafter\gdef\csname #1:ErrorState\endcsname{inactive}% + \fi% + \fi% + \begingroup% + \expandafter\ifx\csname\the\sl@ErrorNumber:ErrorMode\endcsname\sl@safe% + \makeatletter% + \else% + \catcode`\\12\relax% + \fi% + \sl@AddToBankOfErrors} + +\long\def\sl@AddToBankOfErrors#1{% + \sl@TempBOE{#1}% + \edef\sl@act{% + \global\noexpand\sl@BankOfErrors{% + \the\sl@BankOfErrors% + (:sl@\the\sl@ErrorNumber:)\the\sl@TempBOE(:sl@\the\sl@ErrorNumber:)}}% + \sl@act% + \endgroup} + +\def\ActivateErrorFilters{% + \sl@StateNumber2\relax% + \@ifnextchar[% + {\sl@ChangeState}% + {\sl@ChangeState[\sl@ErrorNames]}} + +\def\DeactivateErrorFilters{% + \sl@StateNumber3\relax% + \@ifnextchar[% + {\sl@ChangeState}% + {\sl@ChangeState[\sl@ErrorNames]}} + +\ifsl@ShowErrors +\else +\expandafter\let\expandafter\sl@GenericError\csname GenericError \endcsname +\let\sl@PackageError\PackageError +\let\sl@ClassError\ClassError +\let\sl@latex@error\@latex@error + +\def\PackageError#1#2#3{% + \def\sl@PackageName{#1}% + \sl@StoreMessage{#2}% + \sl@PackageError{#1}{#2}{#3}} + +\def\ClassError#1#2#3{% + \def\sl@PackageName{#1}% + \sl@StoreMessage{#2}% + \sl@ClassError{#1}{#2}{#3}} + +\def\@latex@error#1#2{% + \def\sl@PackageName{latex}% + \sl@StoreMessage{#1}% + \sl@latex@error{#1}{#2}} + +\DeclareRobustCommand{\GenericError}[4]{% + \advance\sl@ErrorCount1\relax% + \sl@KillMessagefalse% + \sl@Belongfalse% + \ifsl@ErrorsOff% + \expandafter\sl@Belong\sl@ProtectedErrors,sl@end,% + \ifsl@Belong% + \else% + \sl@KillMessagetrue% + \fi% + \else% + \expandafter\sl@Belong\sl@UnwantedErrors,sl@end,% + \ifsl@Belong% + \sl@KillMessagetrue% + \fi% + \fi% + \ifsl@KillMessage% + \else% + \expandafter\ifx\csname\sl@PackageName @ErrorFilter\endcsname\relax% + \else% + \sl@StateNumber1\relax% + \expandafter\expandafter\expandafter% + \sl@GetNumber\csname\sl@PackageName @ErrorFilter\endcsname,0:sl@sl@end,% + \fi% + \fi% + \ifsl@KillMessage% + \advance\sl@ErrorCasualties1% + \else% + \sl@GenericError{#1}{#2}{#3}{#4}% + \fi% + \ifcase\sl@Save% + \or% + \ifsl@KillMessage% + \bgroup% + \let\@unused\sl@Write% + \sl@GenericError{#1}{#2}{#3}{#4}% + \egroup% + \fi% + \or% + \bgroup% + \let\@unused\sl@Write% + \sl@GenericError{#1}{#2}{#3}{#4}% + \egroup% + \fi% + \gdef\sl@PackageName{NoPackage}}% + \fi +\AtEndDocument{% + \ifsl@Debrief% + \clearpage% + \sl@MessageCount\sl@WarningCount% + \advance\sl@MessageCount\sl@ErrorCount% + \sl@Casualties\sl@WarningCasualties% + \advance\sl@Casualties\sl@ErrorCasualties% + \ifnum\sl@MessageCount>0% + \ifnum\sl@Casualties>0% + \advance\sl@WarningCount-1% + \PackageWarningNoLine{silence}{% + There were \the\sl@WarningCount\space warning(s) + and \the\sl@ErrorCount\space error(s).\MessageBreak% + \ifnum\sl@Casualties=\sl@MessageCount% + None survived. This is a violent world% + \else% + I've killed \the\sl@WarningCasualties\space warning(s) + and \the\sl@ErrorCasualties\space error(s)% + \fi}% + \fi% + \fi% + \fi} + +\makeatother +\endinput +%% +%% End of file `silence.sty'. |