aboutsummaryrefslogtreecommitdiffstats
path: root/helpers/do.outline
diff options
context:
space:
mode:
authorJuergen Kahrs <Juergen.Kahrs@googlemail.com>2013-12-23 18:26:45 +0100
committerJuergen Kahrs <Juergen.Kahrs@googlemail.com>2013-12-23 18:26:45 +0100
commitee9707cc44eea3ca64cb71666ac3e8ed26a3bb7f (patch)
tree3945f1b3afd64a7147582611f21b7f5e59891e41 /helpers/do.outline
parent0ac63db595a009d1f07dba8246e52710348b0798 (diff)
parentc66f7da30bb5635957b6e68c1e1db7e77e7b4174 (diff)
downloadegawk-ee9707cc44eea3ca64cb71666ac3e8ed26a3bb7f.tar.gz
egawk-ee9707cc44eea3ca64cb71666ac3e8ed26a3bb7f.tar.bz2
egawk-ee9707cc44eea3ca64cb71666ac3e8ed26a3bb7f.zip
Merge remote-tracking branch 'origin/master' into cmake
Diffstat (limited to 'helpers/do.outline')
-rwxr-xr-xhelpers/do.outline102
1 files changed, 102 insertions, 0 deletions
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"
+}