From 29114d9904e209855798bd198b0ffca5b599a2ad Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Sun, 15 Apr 2012 22:15:11 +0000
Subject: regexpatch 0.1 (15apr12)

git-svn-id: svn://tug.org/texlive/trunk@25978 c570f23f-e606-0410-a88d-b1316a301751
---
 .../texmf-dist/tex/latex/regexpatch/regexpatch.sty | 522 +++++++++++++++++++++
 1 file changed, 522 insertions(+)
 create mode 100644 Master/texmf-dist/tex/latex/regexpatch/regexpatch.sty

(limited to 'Master/texmf-dist/tex/latex/regexpatch/regexpatch.sty')

diff --git a/Master/texmf-dist/tex/latex/regexpatch/regexpatch.sty b/Master/texmf-dist/tex/latex/regexpatch/regexpatch.sty
new file mode 100644
index 00000000000..12cd49e36d6
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/regexpatch/regexpatch.sty
@@ -0,0 +1,522 @@
+%%
+%% This is file `regexpatch.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% regexpatch.dtx  (with options: `package')
+%% 
+%% Do not distribute this file without also distributing the
+%% source files specified above.
+%% 
+%% File: regexpatch.dtx (C) Copyright 2012 Enrico Gregorio
+%%
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this
+%% license or (at your option) any later version.  The latest version
+%% of this license is in the file
+%%
+%%    http://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the "regexpatch bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+\RequirePackage{expl3}
+\GetIdInfo$Id: regexpatch.dtx 0.1dev 2012-04-15 12:00:00Z Enrico $
+          {Extending etoolbox patching commands}
+\ProvidesExplPackage
+  {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
+\@ifpackagelater { expl3 } { 2012/01/19 }
+  { }
+  {
+    \PackageError { regexpatch } { Support~package~l3kernel~too~old. }
+      {
+        Please~install~an~up~to~date~version~of~l3kernel~
+        using~your~TeX~package~manager~or~from~CTAN.\\ \\
+        Loading~regexpatch~will~abort!
+      }
+    \tex_endinput:D
+  }
+\RequirePackage{xparse,l3regex,etoolbox}
+\bool_new:N \l_xpatch_protect_bool
+\bool_new:N \l_xpatch_optional_bool
+\bool_new:N \l_xpatch_patchable_bool
+\bool_new:N \l_xpatch_tracing_bool
+\tl_new:N \l_xpatch_name_tl
+\tl_new:N \l_xpatch_repl_tl
+\tl_new:N \l_xpatch_prefix_tl
+\tl_new:N \l_xpatch_arg_tl
+\tl_new:N \l_xpatch_replacement_tl
+\tl_new:N \l_xpatch_type_tl % for debugging messages
+\cs_generate_variant:Nn \regex_match:nnT {nVT}
+\cs_new:Npn \xpatch_main_check:N #1
+  {
+   \bool_set_false:N \l_xpatch_protect_bool
+   \bool_set_false:N \l_xpatch_optional_bool
+   \tl_set:Nx \l_xpatch_name_tl { \cs_to_str:N #1  }
+   \tl_set:Nx \l_xpatch_repl_tl { \token_get_replacement_spec:N #1 }
+   \tl_clear:N \l_xpatch_type_tl
+   \regex_match:nVT % \DeclareRobustCommand<control word>
+     {^\\protect\ \\\u{l_xpatch_name_tl}\ \ }
+     \l_xpatch_repl_tl
+     {
+      \bool_set_true:N \l_xpatch_protect_bool
+      \tl_put_right:Nx \l_xpatch_name_tl { \c_space_tl }
+      \tl_set:Nn \l_xpatch_type_tl { DRCw }
+     }
+   \regex_match:nVT % \DeclareRobustCommand<control symbol>
+     {^\\x@protect\ \\\u{l_xpatch_name_tl}\\}
+     \l_xpatch_repl_tl
+     {
+      \bool_set_true:N \l_xpatch_protect_bool
+      \tl_put_right:Nx \l_xpatch_name_tl { \c_space_tl }
+      \tl_set:Nn \l_xpatch_type_tl { DRCs }
+     }
+   \regex_match:nVT % \newcommand<control word> with opt arg
+     {^\\@protected@testopt\ \\\u{l_xpatch_name_tl}\ \\\\}
+     \l_xpatch_repl_tl
+     {
+      \bool_set_true:N \l_xpatch_optional_bool
+      \tl_put_left:Nx \l_xpatch_name_tl { \c_backslash_str }
+      \tl_set:Nn \l_xpatch_type_tl { ncw+o }
+     }
+   \regex_match:nVT % \newcommand<control symbol> with opt arg
+     {^\\@protected@testopt\ \\\u{l_xpatch_name_tl}\\\\}
+     \l_xpatch_repl_tl
+     {
+      \bool_set_true:N \l_xpatch_optional_bool
+      \tl_put_left:Nx \l_xpatch_name_tl { \c_backslash_str }
+      \tl_set:Nn \l_xpatch_type_tl { ncs+o }
+     }
+   \regex_match:nVT % \newrobustcmd<any cs> with opt arg
+     {^\\@testopt\ \\\\\u{l_xpatch_name_tl}}
+     \l_xpatch_repl_tl
+     {
+      \bool_set_true:N \l_xpatch_optional_bool
+      \tl_put_left:Nx \l_xpatch_name_tl { \c_backslash_str }
+      \tl_set:Nn \l_xpatch_type_tl { nrc+o }
+     }
+   \bool_if:NT \l_xpatch_protect_bool
+     {
+      \tl_set:Nx \l_xpatch_repl_tl
+        { \exp_after:wN \token_get_replacement_spec:N
+            \cs:w \l_xpatch_name_tl \cs_end: }
+      \regex_match:nVT % \DeclareRobustCommand<any cs> with opt arg
+        {^\\@protected@testopt\ \\\u{l_xpatch_name_tl}\ \\\\}
+        \l_xpatch_repl_tl
+        {
+         \bool_set_true:N \l_xpatch_optional_bool
+         \tl_put_left:Nx \l_xpatch_name_tl { \c_backslash_str }
+         \tl_put_right:Nn \l_xpatch_type_tl { +o }
+        }
+     }
+   \bool_if:NT \l_xpatch_optional_bool
+     {
+      \regex_replace_once:nnN { .*? \{ (.*) \} \Z } { \1 }
+        \l_xpatch_repl_tl
+     }
+  }
+\cs_new:Npn \xpatch_main:NNN #1 #2 #3
+  {
+   \cs_if_exist:NTF #3
+     {
+      \xpatch_main_check:N #3
+      \bool_if:NT \l_xpatch_tracing_bool
+        { \xpatch_message_cstype:n #3 }
+      \exp_after:wN #1 \cs:w \l_xpatch_name_tl \cs_end:
+     }
+     {
+      \msg_term:x
+        {
+         xpatch~message \\
+        `\token_to_str:N #3'~is~undefined;~
+        I'll~ignore~the~request.
+        }
+      #2
+     }
+  }
+\cs_new:Npn \xpatch_get_all:N #1
+  {
+   \exp_args:NNf \tl_set:Nn \l_xpatch_prefix_tl
+      {\token_get_prefix_spec:N #1 }
+   \exp_args:NNnx \tl_set_rescan:Nnn
+     \l_xpatch_prefix_tl { } \l_xpatch_prefix_tl
+   \exp_args:NNf \tl_set:Nn \l_xpatch_arg_tl
+      {\token_get_arg_spec:N #1 }
+   \exp_args:NNnx \tl_set_rescan:Nnn
+     \l_xpatch_arg_tl { } \l_xpatch_arg_tl
+   \exp_args:NNf \tl_set:Nn \l_xpatch_replacement_tl
+      {\token_get_replacement_spec:N #1 }
+   \exp_args:NNnx \tl_set_rescan:Nnn
+     \l_xpatch_replacement_tl { } \l_xpatch_replacement_tl
+  }
+\cs_new:Npn \xpatch_rebuild:N #1
+  {
+   \tl_clear:N \l_tmpa_tl
+   \tl_put_right:NV \l_tmpa_tl \l_xpatch_prefix_tl
+   \tl_put_right:Nn \l_tmpa_tl { \tex_def:D #1 }
+   \tl_put_right:NV \l_tmpa_tl \l_xpatch_arg_tl
+   \tl_put_right:No \l_tmpa_tl { \exp_after:wN {\l_xpatch_replacement_tl} }
+   \tl_use:N \l_tmpa_tl
+  }
+\cs_new:Npn \xpatch_check_patchable:N #1
+  {
+   \cs_if_exist:NTF #1
+     {
+      \xpatch_get_all:N #1
+      \xpatch_rebuild:N \xpatch_tmpa:w
+      \cs_if_eq:NNTF #1 \xpatch_tmpa:w
+        {
+         \bool_set_true:N \l_xpatch_patchable_bool
+         \xpatch_message:n
+           {
+            Macro `\token_to_str:N #1'~is~patchable
+           }
+        }
+        {
+         \bool_set_false:N \l_xpatch_patchable_bool
+         \xpatch_message:n
+           {
+            Macro `\token_to_str:N #1'~is~NOT~patchable\\
+            (Check~if~it~contains~`@'~commands)
+           }
+        }
+     }
+     {
+      \bool_set_false:N \l_xpatch_patchable_bool
+      \xpatch_message:n
+        {
+         Macro `\token_to_str:N #1'~doesn't~exist.
+        }
+     }
+  }
+\cs_new:Npn \xpatch_pretocmd:Nnnn #1 #2 #3 #4
+  {
+   \xpatch_check_patchable:N #1
+   \bool_if:NTF \l_xpatch_patchable_bool
+      {
+       \tl_put_left:Nn \l_xpatch_replacement_tl { #2 }
+       \xpatch_rebuild:N #1
+       #3
+      }
+      {
+       #4
+      }
+  }
+\cs_new:Npn \xpatch_apptocmd:Nnnn #1 #2 #3 #4
+  {
+   \xpatch_check_patchable:N #1
+   \bool_if:NTF \l_xpatch_patchable_bool
+      {
+       \tl_put_right:Nn \l_xpatch_replacement_tl { #2 }
+       \xpatch_rebuild:N #1
+       #3
+      }
+      {
+       #4
+      }
+  }
+\cs_new:Npn \xpatch_regexpatchcmd_all:Nnnnn #1 #2 #3 #4 #5
+  {
+   \xpatch_check_patchable:N #1
+   \bool_if:NTF \l_xpatch_patchable_bool
+      {
+       \regex_replace_all:nnN { #2 } { #3 } \l_xpatch_replacement_tl
+       \xpatch_rebuild:N #1
+       #4
+      }
+      {
+       #5
+      }
+  }
+\cs_new:Npn \xpatch_regexpatchcmd_once:Nnnnn #1 #2 #3 #4 #5
+  {
+   \xpatch_check_patchable:N #1
+   \bool_if:NTF \l_xpatch_patchable_bool
+      {
+       \regex_replace_once:nnN { #2 } { #3 } \l_xpatch_replacement_tl
+       \xpatch_rebuild:N #1
+       #4
+      }
+      {
+       #5
+      }
+  }
+\cs_new:Npn \xpatch_patchcmd_once:Nnnnn #1 #2 #3 #4 #5
+  {
+   \xpatch_check_patchable:N #1
+   \bool_if:NTF \l_xpatch_patchable_bool
+      {
+       \tl_set:Nn \l_tmpa_tl { #2 }
+       \tl_set:Nn \l_tmpb_tl { #3 }
+       \regex_replace_once:nnN
+         { \u{l_tmpa_tl} }
+         { \u{l_tmpb_tl} }
+         \l_xpatch_replacement_tl
+       \xpatch_rebuild:N #1
+       #4
+      }
+      {
+       #5
+      }
+  }
+\cs_new:Npn \xpatch_patchcmd_all:Nnnnn #1 #2 #3 #4 #5
+  {
+   \xpatch_check_patchable:N #1
+   \bool_if:NTF \l_xpatch_patchable_bool
+      {
+       \tl_set:Nn \l_tmpa_tl { #2 }
+       \tl_set:Nn \l_tmpb_tl { #3 }
+       \regex_replace_all:nnN
+         { \u{l_tmpa_tl} }
+         { \u{l_tmpb_tl} }
+         \l_xpatch_replacement_tl
+       \xpatch_rebuild:N #1
+       #4
+      }
+      {
+       #5
+      }
+  }
+\cs_new:Npn \xpatch_message:n #1
+  {
+   \bool_if:NT \l_xpatch_tracing_bool
+     {
+      \msg_term:x { xpatch~message \\ #1 }
+     }
+  }
+\cs_new:Npn \xpatch_message_cstype:n #1
+  {
+   \prg_case_str:onn { \l_xpatch_type_tl }
+     {
+      { DRCw }   {
+                  \xpatch_message:n
+                    {
+                     `\token_to_str:N #1'~is~a~control~word~defined~
+                     with~\token_to_str:N \DeclareRobustCommand
+                    }
+                 }
+      { DRCw+o } {
+                  \xpatch_message:n
+                    {
+                     `\token_to_str:N #1'~is~a~control~word~defined~
+                     with~`\token_to_str:N \DeclareRobustCommand'~
+                     and~a~default~optional~argument~`\l_xpatch_repl_tl'
+                    }
+                 }
+      { DRCs }   {
+                  \xpatch_message:n
+                    {
+                     `\token_to_str:N #1'~is~a~control~symbol~defined~
+                     with~`\token_to_str:N \DeclareRobustCommand'
+                    }
+                 }
+      { DRCs+o } {
+                  \xpatch_message:n
+                    {
+                     `\token_to_str:N #1'~is~a~control~symbol~defined~
+                     with~`\token_to_str:N \DeclareRobustCommand'~
+                     and~a~default~optional~argument~`\l_xpatch_repl_tl'
+                    }
+                 }
+      { ncw+o }  {
+                  \xpatch_message:n
+                    {
+                     `\token_to_str:N #1'~is~a~control~word~defined~
+                     with~`\token_to_str:N \newcommand'~
+                     and~a~default~optional~argument~`\l_xpatch_repl_tl'
+                    }
+                 }
+      { ncs+o }  {
+                  \xpatch_message:n
+                    {
+                     `\token_to_str:N #1'~is~a~control~symbol~defined~
+                     with~`\token_to_str:N \newcommand'~
+                     and~a~default~optional~argument~`\l_xpatch_repl_tl'
+                    }
+                 }
+      { nrc+o }  {
+                  \xpatch_message:n
+                    {
+                     `\token_to_str:N #1'~is~a~control~sequence~defined~
+                     with~`\token_to_str:N \newrobustcmd'~
+                     and~a~default~optional~argument~`\l_xpatch_repl_tl'
+                    }
+                 }
+      }
+      {
+       \xpatch_message:n
+         {
+          `\token_to_str:N #1'~is~not~especially~defined
+         }
+      }
+  }
+\NewDocumentCommand{\xshowcmd} { s m }
+  {
+   \IfBooleanT{#1}
+     {
+      \group_begin:
+      \bool_set_true:N \l_xpatch_tracing_bool
+     }
+   \xpatch_main:NNN \cs_show:N \prg_do_nothing: #2
+   \IfBooleanT{#1}
+     {
+      \group_end:
+     }
+  }
+\NewDocumentCommand{\xpretocmd}{ }
+  { \xpatch_main:NNN \xpatch_pretocmd:Nnnn \use_none:nn }
+\NewDocumentCommand{\xapptocmd}{ }
+  { \xpatch_main:NNN \xpatch_apptocmd:Nnnn \use_none:nn }
+\NewDocumentCommand{\regexpatchcmd}{ s }
+  {
+   \IfBooleanTF{#1}
+     { \xpatch_main:NNN \xpatch_regexpatchcmd_all:Nnnnn \use_none:nnn }
+     { \xpatch_main:NNN \xpatch_regexpatchcmd_once:Nnnnn \use_none:nnn }
+  }
+\NewDocumentCommand{\xpatchcmd}{ s }
+  {
+   \IfBooleanTF{#1}
+     { \xpatch_main:NNN \xpatch_patchcmd_all:Nnnnn \use_none:nn }
+     { \xpatch_main:NNN \xpatch_patchcmd_once:Nnnnn \use_none:nn }
+  }
+\cs_generate_variant:Nn \xpatch_main:NNN {NNc}
+\NewDocumentCommand{\xshowbibmacro} { s m }
+  {
+   \IfBooleanT{#1}
+     {
+      \group_begin:
+      \bool_set_true:N \l_xpatch_tracing_bool
+     }
+   \xpatch_main:NNc \cs_show:N \prg_do_nothing: { abx@macro@ \tl_to_str:n {#2} }
+   \IfBooleanT{#1}
+     {
+      \group_end:
+     }
+  }
+\NewDocumentCommand{\xpretobibmacro} { m m m }
+  {
+   \xpatch_main:NNc \xpatch_pretocmd:Nnnn \use_none:nn
+     { abx@macro@ \tl_to_str:n {#1} }
+  }
+\NewDocumentCommand{\xapptobibmacro} { m m m }
+  {
+   \xpatch_main:NNc \xpatch_apptocmd:Nnnn \use_none:nn
+     { abx@macro@ \tl_to_str:n {#1} }
+  }
+\NewDocumentCommand{\xpatchbibmacro} { s m m m }
+  {
+   \IfBooleanTF{#1}
+     {
+      \xpatch_main:NcN \xpatch_patchcmd_all:Nnnnn \use_none:nnn
+        { abx@macro@ \tl_to_str:n {#2} }
+     }
+     {
+      \xpatch_main:NcN \xpatch_patchcmd_once:Nnnnn \use_none:nnn
+       { abx@macro@ \tl_to_str:n {#2} }
+     }
+  }
+\NewDocumentCommand{\regexpatchbibmacro} { s m m m }
+  {
+   \IfBooleanTF{#1}
+     {
+      \xpatch_main:NcN \xpatch_regexpatchcmd_all:Nnnnn \use_none:nnn
+        { abx@macro@ \tl_to_str:n {#2} }
+     }
+     {
+      \xpatch_main:NcN \xpatch_regexpatchcmd_once:Nnnnn \use_none:nnn
+        { abx@macro@ \tl_to_str:n {#2} }
+     }
+  }
+\NewDocumentCommand{\xshowbibdriver} { s m }
+  {
+   \IfBooleanT{#1}
+     {
+      \group_begin:
+      \bool_set_true:N \l_xpatch_tracing_bool
+     }
+   \xpatch_main:NNc \cs_show:N \prg_do_nothing: { blx@bbx@#2 }
+   \IfBooleanT{#1}
+     {
+      \group_end:
+     }
+  }
+\NewDocumentCommand{\xpretobibdriver} { m }
+  { \exp_args:Nc \xpatch_pretocmd:Nnnn {blx@bbx@#1} }
+\NewDocumentCommand{\xapptobibdriver} { m }
+  { \exp_args:Nc \xpatch_apptocmd:Nnnn {blx@bbx@#1} }
+\NewDocumentCommand{\xpatchbibdriver} { s m }
+  {
+   \IfBooleanTF{#1}
+     { \exp_args:Nc \xpatch_patchcmd_all:Nnnnn {blx@bbx@#2} }
+     { \exp_args:Nc \xpatch_patchcmd_once:Nnnnn {blx@bbx@#2} }
+  }
+\NewDocumentCommand{\regexpatchbibdriver} { s m }
+  {
+   \IfBooleanTF{#1}
+     { \exp_args:Nc \xpatch_regexpatchcmd_all:Nnnnn {blx@bbx@#2} }
+     { \exp_args:Nc \xpatch_regexpatchcmd_once:Nnnnn {blx@bbx@#2} }
+  }
+\NewDocumentCommand{\checkpatchable}{ m }
+  {
+   \group_begin:
+   \bool_set_true:N \l_xpatch_tracing_bool
+   \xpatch_check_patchable:N #1
+   \group_end:
+  }
+\cs_generate_variant:Nn \xpatch_get_all:N {c}
+\cs_generate_variant:Nn \xpatch_rebuild:N {c}
+\NewDocumentCommand{\xpatchoptarg}{ m m }
+  {
+   \xpatch_main_check:N #1
+   \bool_if:NTF \l_xpatch_optional_bool
+     {
+      \tl_set:Nx \l_xpatch_name_tl { \tl_tail:V \l_xpatch_name_tl }
+      \exp_args:NNf \tl_set:Nn \l_xpatch_prefix_tl
+        {\token_get_prefix_spec:N #1 }
+      \tl_clear:N \l_xpatch_prefix_tl
+      \exp_args:NNnx \tl_set_rescan:Nnn
+         \l_xpatch_prefix_tl { } \l_xpatch_prefix_tl
+      \exp_args:NNV \tl_set_eq:Nc \l_xpatch_replacement_tl
+        { \l_xpatch_name_tl }
+      \tl_set:Nn \l_tmpa_tl { { #2 } }
+      \regex_replace_once:nnN { \cB. .* \cE. \Z} { \u{l_tmpa_tl} }
+        \l_xpatch_replacement_tl
+      \xpatch_rebuild:c { \l_xpatch_name_tl }
+      }
+     {
+      \group_begin:
+      \bool_set_true:N \l_xpatch_tracing_bool
+      \xpatch_message:n
+        {
+         Macro~`\token_to_str:N #1'~ has~no~optional~argument~
+         or~it~has~been~defined~with~`xparse'~and~operating~
+         on~such~commands~is~(still)~not~supported
+        }
+      \group_end:
+     }
+  }
+\NewDocumentCommand{\tracingxpatches}{ O{1} }
+  {
+   \int_compare:nTF { #1 > 0 }
+     { \bool_set_true:N \l_xpatch_tracing_bool }
+     { \bool_set_false:N \l_xpatch_tracing_bool }
+  }
+\NewDocumentCommand{\xpatchparametertext}{m m m m m}
+  {
+   \xpatch_check_patchable:N #1
+   \bool_if:NTF \l_xpatch_patchable_bool
+      {
+       \regex_replace_once:nnN { #2 } { #3 } \l_xpatch_arg_tl
+       \xpatch_rebuild:N #1
+       #4
+      }
+      {
+       #5
+      }
+  }
+%% 
+%%
+%% End of file `regexpatch.sty'.
-- 
cgit v1.2.3

