aboutsummaryrefslogtreecommitdiffstats
path: root/helpers
diff options
context:
space:
mode:
Diffstat (limited to 'helpers')
-rw-r--r--helpers/ChangeLog21
-rwxr-xr-xhelpers/do.outline102
-rwxr-xr-xhelpers/quoteconvert2.sh49
-rw-r--r--helpers/scanfmt.c22
-rw-r--r--helpers/testdfa.c12
-rw-r--r--helpers/tryfmt.c23
6 files changed, 225 insertions, 4 deletions
diff --git a/helpers/ChangeLog b/helpers/ChangeLog
index 4b720787..17624c3f 100644
--- a/helpers/ChangeLog
+++ b/helpers/ChangeLog
@@ -1,3 +1,24 @@
+2014-04-08 Arnold D. Robbins <arnold@skeeve.com>
+
+ * 4.1.1: Release tar ball made.
+
+2014-03-10 Arnold D. Robbins <arnold@skeeve.com>
+
+ * quoteconvert2.sh: Use .UTF-8 locales per request from
+ Michal Jaegermann.
+
+2014-03-08 Arnold D. Robbins <arnold@skeeve.com>
+
+ * quoteconvert2.sh, tryfmt.c, scanfmt.c: New files.
+
+2013-12-21 Arnold D. Robbins <arnold@skeeve.com>
+
+ * testdfa.c: Fix some bugs and compiler warnings.
+
+2013-12-12 Arnold D. Robbins <arnold@skeeve.com>
+
+ * do.outline: New file.
+
2013-06-27 Arnold D. Robbins <arnold@skeeve.com>
* ChangeLog: Created.
diff --git a/helpers/do.outline b/helpers/do.outline
new file mode 100755
index 00000000..203d27ad
--- /dev/null
+++ b/helpers/do.outline
@@ -0,0 +1,102 @@
+#! /usr/local/bin2/gawk -f
+
+# do.outline --- produce an outline of a texinfo document
+
+BEGIN {
+ # manifest constants
+ TRUE = 1
+ FALSE = 0
+
+ # Levels at which different nodes can be
+ Level["@top"] = 0
+ Level["@appendix"] = 1
+ Level["@chapter"] = 1
+ Level["@majorheading"] = 1
+ Level["@unnumbered"] = 1
+ Level["@preface"] = 1
+ Level["@appendixsec"] = 2
+ Level["@heading"] = 2
+ Level["@section"] = 2
+ Level["@unnumberedsec"] = 2
+ Level["@unnumberedsubsec"] = 3
+ Level["@appendixsubsec"] = 3
+ Level["@subheading"] = 3
+ Level["@subsection"] = 3
+ Level["@appendixsubsubsec"] = 4
+ Level["@subsubheading"] = 4
+ Level["@subsubsection"] = 4
+ Level["@unnumberedsubsubsec"] = 4
+
+ ah = bh = ch = 0
+
+ appendix = 0
+}
+
+/^@ignore/ && Pass == 1, /^@end[ \t]+ignore/ && Pass == 1 {
+ next
+}
+
+
+$1 in Level {
+ # save type
+ type = $1
+
+ lev = Level[$1]
+
+ if (lev == 1 && tolower($0) !~ /preface|foreword/) {
+ if ($1 == "@appendix") {
+ appendix = next_appendix(appendix)
+ ah = appendix
+ } else
+ ah++
+ bh = ch = dh = 0
+ } else if (lev == 2) {
+ bh++
+ ch = dh = 0
+ } else if (lev == 3) {
+ ch++
+ dh = 0
+ } else if (lev == 4)
+ dh++
+
+ Unnumbered = ($1 ~ /^@unnumbered/)
+
+ $1 = ""
+ $0 = preprocess($0)
+
+ for (i = 1; i < lev; i++)
+ printf "\t"
+
+ if (! Unnumbered) {
+ printf("%s.", ah)
+ if (bh)
+ printf("%d.", bh)
+ if (ch)
+ printf("%d.", ch)
+ if (dh)
+ printf("%d.", dh)
+ }
+
+ printf("%s\n", $0)
+}
+
+function preprocess(record)
+{
+ record = gensub(/@(code|command|samp|env)\{([^\}]+)\}/, "\\2", "g", record)
+ record = gensub(/@dots\{\}/, "...", "g", record)
+
+ return record
+}
+
+function next_appendix(cur, ind, letters)
+{
+ if (cur == 0)
+ return "A" # first time
+
+ letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ ind = index(letters, cur)
+ if (ind > 0 && ind <= 26)
+ return substr(letters, ++ind, 1)
+
+ return "Z"
+}
diff --git a/helpers/quoteconvert2.sh b/helpers/quoteconvert2.sh
new file mode 100755
index 00000000..63750a37
--- /dev/null
+++ b/helpers/quoteconvert2.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+# quoteconvert2.sh --- test locale dependent output of numbers
+# Michal Jaegermann, michal@harddata.com, 2014/Mar/1
+
+#AWK="../gawk"
+SCRIPT=`basename $0`
+
+if [ "$AWK" = "" ]
+then
+ echo $0: You must set AWK >&2
+ exit 1
+fi
+
+# The last entry on this list represents "a locale with a typo".
+
+llist="
+C
+en_US
+en_US.UTF-8
+de_DE
+de_DE.UTF-8
+fr_FR
+fr_FR.UTF-8
+pt_PT
+pt_PT.UTF-8
+pt_BR
+pt_BR.UTF-8
+ru_RU
+ru_RU.UTF-8
+pl_PX
+"
+
+error=0
+for lc in $llist ; do
+ wanted=`LC_ALL=$lc locale -c LC_NUMERIC 2>/dev/null | \
+ $AWK 'NR == 2 { decimal_point = $0 }
+ NR == 3 { thousands_sep = $0 }
+ END { printf("123%s456%s789%s15\n",
+ thousands_sep, thousands_sep, decimal_point)}'`
+ got=`LC_ALL=$lc $AWK "BEGIN {printf(\"%'.2f\n\",123456789.15)}"`
+ if [ "$wanted" != "$got" ] ; then
+ echo "$lc - unexpected output $got instead of $wanted"
+ error=1
+ fi
+done
+
+[ "$error" = 0 ] && echo ok || echo bummer
+exit $error
diff --git a/helpers/scanfmt.c b/helpers/scanfmt.c
new file mode 100644
index 00000000..2d7bd73a
--- /dev/null
+++ b/helpers/scanfmt.c
@@ -0,0 +1,22 @@
+/*
+ * Test out ' flag in different locales.
+ * Michal Jaegermann
+ * March, 2014
+ */
+
+#include <stdio.h>
+#include <locale.h>
+#include <stdlib.h>
+int
+main(int argc, char **argv)
+{
+ double t;
+
+ if (argc == 1)
+ return 1;
+
+ setlocale(LC_ALL, getenv("LC_ALL"));
+ sscanf(argv[1], "%lf", &t);
+ printf("%.2f\n", t);
+ return 0;
+}
diff --git a/helpers/testdfa.c b/helpers/testdfa.c
index c644fb04..813acaab 100644
--- a/helpers/testdfa.c
+++ b/helpers/testdfa.c
@@ -76,7 +76,6 @@ int main(int argc, char **argv)
size_t len;
const char *pattern;
const char *rerr;
- int infd;
char *data;
reg_syntax_t dfa_syn;
bool ignorecase = false;
@@ -180,7 +179,7 @@ int main(int argc, char **argv)
/* run the regex matcher */
ret = re_search(& pat, data, len, 0, len, NULL);
- printf("re_search returned %d (%s)\n", ret, (ret != 0) ? "true" : "false");
+ printf("re_search returned position %d (%s)\n", ret, (ret >= 0) ? "true" : "false");
/* run the dfa matcher */
/*
@@ -202,6 +201,8 @@ int main(int argc, char **argv)
free(regs.end);
dfafree(dfareg);
free(dfareg);
+
+ return 0;
}
/* genflags2str --- general routine to convert a flag value to a string */
@@ -366,12 +367,15 @@ setup_pattern(const char *pattern, size_t len)
{
size_t is_multibyte = 0;
int c, c2;
- size_t buflen;
+ size_t buflen = 0;
mbstate_t mbs;
bool has_anchor = false;
- char *buf, *dest;
+ char *buf = NULL;
+ char *dest;
const char *src, *end;
+ memset(& mbs, 0, sizeof(mbs));
+
src = pattern;
end = pattern + len;
diff --git a/helpers/tryfmt.c b/helpers/tryfmt.c
new file mode 100644
index 00000000..8166d3f1
--- /dev/null
+++ b/helpers/tryfmt.c
@@ -0,0 +1,23 @@
+/*
+ * Test out ' flag in different locales.
+ * Michal Jaegermann
+ * March, 2014
+ */
+
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+int
+main(int argc, char **argv)
+{
+ const char *fmt;
+ if (argc == 1)
+ fmt = "%'.2f";
+ else
+ fmt = argv[1];
+
+ setlocale(LC_ALL, getenv("LC_ALL"));
+ printf(fmt, 12456789.01);
+ printf("\n");
+ return 0;
+}