From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/silence/silence.sty | 674 +++++++++++++++++++++++++++++++ 1 file changed, 674 insertions(+) create mode 100644 macros/latex/contrib/silence/silence.sty (limited to 'macros/latex/contrib/silence/silence.sty') diff --git a/macros/latex/contrib/silence/silence.sty b/macros/latex/contrib/silence/silence.sty new file mode 100644 index 0000000000..af6e71c8a6 --- /dev/null +++ b/macros/latex/contrib/silence/silence.sty @@ -0,0 +1,674 @@ +%% +%% This is file `silence.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% silence-doc.dtx (with options: `package') +%% +%% ****************************************************************************** +%% ****************************************************************************** +%% ** ** +%% ** silence v1.5b by Michael Pock ** +%% ** See the documentation for a comment on the implementation. ** +%% ** ** +%% ** This set of macros is published under the LaTeX Project Public License. ** +%% ** ** +%% ** Comments, suggestions and bugs: ** +%% ** ** +%% ** mhp77 gmx at ** +%% ** ** +%% ** Enjoy! ** +%% ** ** +%% ****************************************************************************** +%% ****************************************************************************** +%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{silence}[2012/07/02 v1.5b 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{\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 + \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 + \sl@ChangeState[\sl@WarningNames]% + \sl@StateNumber2 + \sl@ChangeState[\sl@ErrorNames]}} + +\def\DeactivateFilters{% + \@ifnextchar[% + {\sl@StateNumber1 + \sl@RetrieveArgument}% + {\sl@StateNumber1 + \sl@ChangeState[\sl@WarningNames]% + \sl@StateNumber3 + \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\sl@Terminator}}% + \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\noexpand\sl@Terminator}}% + \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\noexpand\sl@Terminator}}% + \else + \sl@SafeTestfalse + \edef\sl@act{\noexpand\sl@Mess@ge{\the\sl@Message\noexpand\sl@Terminator}}% + \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@RemoveGobble#1\@gobble\sl@Terminator#2\sl@Terminator{% + \def\sl@Tempb{#2}% + \ifx\sl@Tempb\@empty + \else + \def\sl@Tempa{#1}% + \expandafter\@gobble + \fi + } + +\def\sl@RemoveGobbletwo#1\@gobbletwo\sl@Terminator#2\sl@Terminator{% + \def\sl@Tempb{#2}% + \ifx\sl@Tempb\@empty + \else + \def\sl@Tempa{#1}% + \expandafter\@gobble + \fi + } + +\def\sl@StoreMessage#1{% + \ifsl@SafeMode + \sl@UnexpandedMessage{#1}% + \else + \sl@UnexpandedMessage{#1}% + \begingroup + \let\protect\string + \let\noexpand\string + \def\sl@Tempa{#1}% + \sl@RemoveGobble#1\sl@Terminator\@gobble\sl@Terminator\sl@Terminator + \sl@RemoveGobbletwo#1\sl@Terminator\@gobbletwo\sl@Terminator\sl@Terminator + \edef\sl@Tempa{\sl@Tempa}% + \global\expandafter\sl@Message\expandafter{\sl@Tempa}% + \endgroup + \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 +\let\sl@font@warning\@font@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}} + +\def\@font@warning#1{% + \def\sl@PackageName{latexfont}% + \sl@StoreMessage{#1}% + \sl@font@warning{#1}} + +\DeclareRobustCommand{\GenericWarning}[2]{% + \global\advance\sl@WarningCount1 + \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 + \expandafter\expandafter\expandafter + \sl@GetNumber\csname\sl@PackageName @WarningFilter\endcsname,0:sl@sl@end,% + \fi + \fi + \ifsl@KillMessage + \global\advance\sl@WarningCasualties1 + \else + \sl@GenericWarning{#1}{#2}% + \fi + \ifcase\sl@Save + \or + \ifsl@KillMessage + \begingroup + \let\@unused\sl@Write + \sl@GenericWarning{#1}{#2}% + \endgroup + \fi + \or + \begingroup + \let\@unused\sl@Write + \sl@GenericWarning{#1}{#2}% + \endgroup + \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 + \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 + \@ifnextchar[% + {\sl@ChangeState}% + {\sl@ChangeState[\sl@ErrorNames]}} + +\def\DeactivateErrorFilters{% + \sl@StateNumber3 + \@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]{% + \global\advance\sl@ErrorCount1 + \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 + \expandafter\expandafter\expandafter + \sl@GetNumber\csname\sl@PackageName @ErrorFilter\endcsname,0:sl@sl@end,% + \fi + \fi + \ifsl@KillMessage + \global\advance\sl@ErrorCasualties1 + \else + \sl@GenericError{#1}{#2}{#3}{#4}% + \fi + \ifcase\sl@Save + \or + \ifsl@KillMessage + \begingroup + \let\@unused\sl@Write + \sl@GenericError{#1}{#2}{#3}{#4}% + \endgroup + \fi + \or + \begingroup + \let\@unused\sl@Write + \sl@GenericError{#1}{#2}{#3}{#4}% + \endgroup + \fi + \gdef\sl@PackageName{NoPackage}}% + \fi +\AtBeginDocument{% + \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'. -- cgit v1.2.3