From dd0dce10e8d13a88f7a359068a3700c7e87fbdc2 Mon Sep 17 00:00:00 2001
From: Karim Belabas <Karim.Belabas@math.u-bordeaux1.fr>
Date: Tue, 14 Jul 2015 13:20:07 +0200
Subject: [PATCH 1/2] gphelp: escape all {} in regexps [ perl-5.22 warns on
 these => fatal ]

---
 doc/gphelp.in |   70 ++++++++++++++++++++++++++++-----------------------------
 1 file changed, 35 insertions(+), 35 deletions(-)

diff --git a/doc/gphelp.in b/doc/gphelp.in
index f5737e0..89f3c63 100755
--- a/doc/gphelp.in
+++ b/doc/gphelp.in
@@ -301,7 +301,7 @@ sub treat {
   if ($pat =~ /[a-zA-Z0-9]$/) { $pat .= '\b'; } else { $pat .= '}'; }
   while (<DOC>)
   {
-    if (/\\(subsubsec[a-z]*|subsec[a-z]*|section|chapter|label){$pat/)
+    if (/\\(subsubsec[a-z]*|subsec[a-z]*|section|chapter|label)\{$pat/)
       { $first = $_; last; }
   }
   if (eof(DOC))
@@ -383,7 +383,7 @@ sub apropos_check {
   return if ($line !~ /$help/i);
 
   local($_) = $current;
-  s/\\b{(.)}/\\$1/;
+  s/\\b\{(.)\}/\\$1/;
   s/\{\}//g;
   s/\\pow/^/;
   s/\\%/%/;
@@ -402,7 +402,7 @@ sub apropos {
   @sentence_list = @list = "";
   while (<DOC>)
   {
-    if (/^\\(subsubsec[a-z]*|subsec[a-z]*|section|chapter){/)
+    if (/^\\(subsubsec[a-z]*|subsec[a-z]*|section|chapter)\{/)
     {
       $new = &get_match($_,'{','}');
       &apropos_check($line, $current);
@@ -744,7 +744,7 @@ sub basic_subst {
   s/\\fun\s*\{([^{}]*)\}\s*\{((?:[^{}]|\{[^{}]*\})*)\}\s*\{((?:[^{}]|\{[^{}]*\})*)\}/\\kbd{$1 \\key{$2}($3)}\\sidx{$2}/g;
 
   s/\\\\(?=[a-zA-Z])/\\bs /g;
-  s/\\b{}\\b{}/\\bs\\bs /g;
+  s/\\b\{\}\\b\{\}/\\bs\\bs /g;
   s/\\\\/\\bs/g;
   s/(\'\'|\`\`)/"/g unless $to_pod;     # (english) double quotes
   # asymptotic or isomorphic (~) [beware of ties]
@@ -756,16 +756,16 @@ sub basic_subst {
   s/\\(~|tilde)/~/g;
 
   s/\\(equiv)(?![a-zA-Z])/ = /g;
-  s/\\`a/$tr{agrave}/; s/\\`{a}/$tr{agrave}/;
-  s/\\"o/$tr{ouml}/;   s/\\"{o}/$tr{ouml}/;
-  s/\\"u/$tr{uuml}/;   s/\\"{u}/$tr{uuml}/;
-  s/\\'e/$tr{eacute}/; s/\\'{e}/$tr{eacute}/;
+  s/\\`a/$tr{agrave}/; s/\\`\{a\}/$tr{agrave}/;
+  s/\\"o/$tr{ouml}/;   s/\\"\{o\}/$tr{ouml}/;
+  s/\\"u/$tr{uuml}/;   s/\\"\{u\}/$tr{uuml}/;
+  s/\\'e/$tr{eacute}/; s/\\'\{e\}/$tr{eacute}/;
 
   s/(^|[^\\])%.*/$1/g;		        # comments
   s/\\vadjust\s*\{\s*\\penalty\s*\d+\s*\}//g;
 
   # We do not strip %\n, thus:
-  s/\\kbd{\n\s*/\\kbd{/g;
+  s/\\kbd\{\n\s*/\\kbd{/g;
   s/\$\\bf(\b|(?=[\d_]))\s*([^\$]+)\$/\$$tr{startbcode}$1$tr{endbcode}\$/g;
   s/\$/$tr{dollar}/g;		        # math mode
   s/\t/ /g; s/\\,//g; s/\\[ ;]/ /g;     # various spaces
@@ -775,7 +775,7 @@ sub basic_subst {
   s/\\TeX\{\}/TeX/g;
   s/\\TeX(\W)/TeX$1/g;
   s/ *\\circ\b */ o /g;
-  s/\\d?frac{\s*((?:[^{}]|\{[^{}]*\})*)}{\s*((?:[^{}]|\{[^{}]*\})*)}/($1)\/($2)/g;
+  s/\\d?frac\{\s*((?:[^{}]|\{[^{}]*\})*)\}\{\s*((?:[^{}]|\{[^{}]*\})*)\}/($1)\/($2)/g;
   s(\\d?frac\s*(\d)\s*(\d))(($1/$2))g;
   s[{\s*(\w)\s*\\over(?![a-zA-Z])\s*(\w)\s*}]{($1/$2)}g;
   s[{\s*((?:[^{}]|\{[^{}]*\})*)\\over(?![a-zA-Z])\s*((?:[^{}]|\{[^{}]*\})*)}][($1)/($2)]g;
@@ -792,7 +792,7 @@ sub basic_subst {
 
   s/(\\string)?\\_/_/g;
   s/\\([#\$&%|])/$1/g;
-  s/\\(hat(?![a-zA-Z])|\^)({\\?\s*})?/^/g;
+  s/\\(hat(?![a-zA-Z])|\^)(\{\\?\s*\})?/^/g;
   s/^(\@\[podleader\]head\d *)\\pow(?![a-zA-z])( *)/$1^$2/gm;
   s/ *\\pow(?![a-zA-z]) */^/g;
 
@@ -895,21 +895,21 @@ sub basic_subst {
   s/\\(floor|ceil|round|binom)\{/$1\{/g;
   s/\\(var|emph)\{([^\}]*)\}/$tr{startit}$2$tr{endit}/g;
   s/\\fl(?![a-zA-Z])/$tr{startit}flag$tr{endit}/g;
-  s/\\b{([^}]*)}/$tr{startcode}\\$1$tr{endcode}/g;
+  s/\\b\{([^}]*)\}/$tr{startcode}\\$1$tr{endcode}/g;
   s/\\kbdsidx/\\sidx/g;
   s/\\sidx\{[^\}]*\}//g unless $to_pod;
   s/\\[a-zA-Z]*idx\{([^\}]*)\}/$1/g unless $to_pod;
-  s/{\\text{(st|nd|th)}}/\\text{$1}/g;
-  s/\^\\text{th}/-th/g;
-  s/1\^\\text{st}/1st/g;
-  s/2\^\\text{nd}/2nd/g;
+  s/\{\\text\{(st|nd|th)\}\}/\\text{$1}/g;
+  s/\^\\text\{th\}/-th/g;
+  s/1\^\\text\{st\}/1st/g;
+  s/2\^\\text\{nd\}/2nd/g;
 
   s/\\(text|hbox|Big)//g;
   s/^([ \t]+)\{ *\\(it|sl|bf|tt)\b/S<$1>{\\$2/gm;
   s/\{ *\\(it|sl) *(([^{}]+(?=[{}])|\{[^{}]*\})*)\}/$tr{startit}$2$tr{endit}/g;
   s/\{ *\\bf *(([^{}]+(?=[{}])|\{[^{}]*\})*)\}/$tr{startbold}$1$tr{endbold}/g;
   s/\{ *\\tt *(([^{}]+(?=[{}])|\{[^{}]*\})*)\}/$tr{startpodcode}$1$tr{endpodcode}/g;
-  $seek=1 if (s/\\emph{ */$tr{startit}/g);
+  $seek=1 if (s/\\emph\{ */$tr{startit}/g);
   if ($seek) { $seek=0 if (s/\}/$tr{endit}/) }
   s/\\(backslash|bs)\{(\w)\}/\\$2/g;
   s/\\(backslash|bs)(?![a-zA-Z]) */\\/g;
@@ -1027,21 +1027,21 @@ sub TeXprint_topod {
   # Try to guard \label/\sidx (removing possible '.')
 #  This somehow breaks index...
 #  s/(\\(?:section|subsec(?:ref|idx|op)?(unix)?)\s*{(?:(?:[^{}]+(?=[{}])|{[^{}]+})+)})\.?\s*\\(label|sidx)/$1\n\\$2/;
-  s/(\\(?:section|subsec(?:ref|idx|op)?)\s*{(?:(?:[^{}]+(?=[{}])|{[^{}]+})+)})\.?\s*\\(label|sidx)/$1\n\\$2/;
+  s/(\\(?:section|subsec(?:ref|idx|op)?)\s*\{(?:(?:[^{}]+(?=[{}])|{[^{}]+})+)\})\.?\s*\\(label|sidx)/$1\n\\$2/;
 
   # last if /\\subsec[\\{}ref]*[\\\${]$help[}\\\$]/o;
-  s/\\chapter\s*{((?:[^{}]|\{[^{}]*\})*)}\s*/\n\n$tr{podleader}head1 NAME\n\nlibPARI - $1\n\n/;
-  s/\\appendix\s*{((?:[^{}]|\{[^{}]*\})*)}\s*/\n\n$tr{podleader}head1 NAME\n\nAppendix - $1\n\n/;
-  s/\\section\s*{((?:[^{}]|\{[^{}]*\})*)}\s*/"\n\n$tr{podleader}head1 " . indexify($1) . "\n\n"/e;
+  s/\\chapter\s*\{((?:[^{}]|\{[^{}]*\})*)\}\s*/\n\n$tr{podleader}head1 NAME\n\nlibPARI - $1\n\n/;
+  s/\\appendix\s*\{((?:[^{}]|\{[^{}]*\})*)\}\s*/\n\n$tr{podleader}head1 NAME\n\nAppendix - $1\n\n/;
+  s/\\section\s*\{((?:[^{}]|\{[^{}]*\})*)\}\s*/"\n\n$tr{podleader}head1 " . indexify($1) . "\n\n"/e;
 
   # Try to delimit by :
-  s/\\subsec(?:ref)?(?:unix)?\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}([^\n]*):[\n ]/"\n\n$tr{podleader}head2 " . indexify("$1$3") . "\n\n"/e;
-  s/\\subsubsec(?:ref)?(?:unix)?\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}([^:]*):\s*/"\n\n$tr{podleader}head3 " . indexify("$1$3") . "\n\n"/e;
+  s/\\subsec(?:ref)?(?:unix)?\s*\{(([^{}]+(?=[{}])|{[^{}]+})+)\}([^\n]*):[\n ]/"\n\n$tr{podleader}head2 " . indexify("$1$3") . "\n\n"/e;
+  s/\\subsubsec(?:ref)?(?:unix)?\s*\{(([^{}]+(?=[{}])|{[^{}]+})+)\}([^:]*):\s*/"\n\n$tr{podleader}head3 " . indexify("$1$3") . "\n\n"/e;
   s/\\subsubsec\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}(.*)$/"\n\n$tr{podleader}head3 " . indexify("$1") . "$3\n\n"/me;
   s/\\subseckbd\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}([^:]*):\s*/"\n\n$tr{podleader}head2 " . indexify("$1$3") . "\n\n"/e;
   # Try to delimit by ' '
-  s/\\subsec(?:ref)?(?:unix)?\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}(\S*)\s+/"\n\n$tr{podleader}head2 " . indexify("$1$3") . "\n\n"/e;
-  s/\\subsec(?:title)?(?:unix)?\s*{(([^{}]+(?=[{}])|{[^{}]*})+)}:?\s*/"\n\n$tr{podleader}head2 " . indexify("$1") . "\n\n"/e;
+  s/\\subsec(?:ref)?(?:unix)?\s*\{(([^{}]+(?=[{}])|{[^{}]+})+)\}(\S*)\s+/"\n\n$tr{podleader}head2 " . indexify("$1$3") . "\n\n"/e;
+  s/\\subsec(?:title)?(?:unix)?\s*\{(([^{}]+(?=[{}])|{[^{}]*})+)\}:?\s*/"\n\n$tr{podleader}head2 " . indexify("$1") . "\n\n"/e;
 
   # This is to skip preface in refcard:
   /\Q$tr{podleader}\Ehead1|\\title(?![a-zA-Z])\s*\{/o and $seen_start = 1
@@ -1096,18 +1096,18 @@ sub TeXprint_topod {
   s/\$\$(.*?)\$\$\s*/\n\nS<  >$tr{startcode}$1$tr{endcode}\n\n/gs;
   s/\$([^\$]+)\$/$tr{startcode}$1$tr{endcode}/g;
 
-  s/\\s(?:ref|idx){\s*([^{}]*)}/"X<" . for_index($1) . ">"/ge; #
-  s/\\(?:ref|idx){\s*([^{}]*)}/"X<" . for_index($1) . ">$1"/ge;
+  s/\\s(?:ref|idx)\{\s*([^{}]*)\}/"X<" . for_index($1) . ">"/ge; #
+  s/\\(?:ref|idx)\{\s*([^{}]*)\}/"X<" . for_index($1) . ">$1"/ge;
 
 # Conflict between different versions of PARI and refcard:
-# s/\\(?:key|li)\s*{(.*)}\s*{(.+)}[ \t]*\n/\n\n=item C<$2>\n\n$1\n\n/msg;
-# s/\\(?:key|li)\s*{(.*)}\s*{}[ \t]*\n/\n\n=back\n\n$1\n\n=over\n\n/mgs;
-# s/\\(key|var)(?![a-zA-Z])\s*{(\w+)}/C<$2>/mg;
-  s/\\var\s*{X<(\w+)>(\w+)}/X<$1>$tr{startcode}$2$tr{endcode}/mg;
-  s/\\var\s*{f{}lag}/$tr{startcode}flag$tr{endcode}/mg;
-
-  s/\\metax(?![a-zA-Z])\s*{(.*)}\s*{\s*(\w+)(?=C\<)(.*)}[ \t]*\n/\n\n=item C<L<$2>$3>\n\n$1\n\n/mg;
-  s/\\metax(?![a-zA-Z])\s*{(.*)}\s*{(.*)}[ \t]*\n/\n\n=item C<$2>\n\n$1\n\n/mg;
+# s/\\(?:key|li)\s*\{(.*)\}\s*\{(.+)\}[ \t]*\n/\n\n=item C<$2>\n\n$1\n\n/msg;
+# s/\\(?:key|li)\s*\{(.*)\}\s*\{\}[ \t]*\n/\n\n=back\n\n$1\n\n=over\n\n/mgs;
+# s/\\(key|var)(?![a-zA-Z])\s*\{(\w+)\}/C<$2>/mg;
+  s/\\var\s*\{X<(\w+)>(\w+)\}/X<$1>$tr{startcode}$2$tr{endcode}/mg;
+  s/\\var\s*\{f\{\}lag\}/$tr{startcode}flag$tr{endcode}/mg;
+
+  s/\\metax(?![a-zA-Z])\s*\{(.*)\}\s*\{\s*(\w+)(?=C\<)(.*)\}[ \t]*\n/\n\n=item C<L<$2>$3>\n\n$1\n\n/mg;
+  s/\\metax(?![a-zA-Z])\s*\{(.*)\}\s*\{(.*)\}[ \t]*\n/\n\n=item C<$2>\n\n$1\n\n/mg;
   s/C\<\{\}=/C\<=/g;
   s/\\fl(?![a-zA-Z])/I<flag>/g;
   s/\\file(?![a-zA-Z])/F<file>/g;
-- 
1.7.10.4

