summaryrefslogtreecommitdiff
path: root/ipl/procs/readtbl.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/procs/readtbl.icn')
-rw-r--r--ipl/procs/readtbl.icn88
1 files changed, 88 insertions, 0 deletions
diff --git a/ipl/procs/readtbl.icn b/ipl/procs/readtbl.icn
new file mode 100644
index 0000000..d18b138
--- /dev/null
+++ b/ipl/procs/readtbl.icn
@@ -0,0 +1,88 @@
+############################################################################
+#
+# File: readtbl.icn
+#
+# Subject: Procedures to read user-created stripsgml table
+#
+# Author: Richard L. Goerwitz
+#
+# Date: May 2, 2001
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# Version: 1.1
+#
+############################################################################
+#
+# This file is part of the strpsgml package. It does the job of read-
+# ing option user-created mapping information from a file. The purpose
+# of this file is to specify how each code in a given input text should
+# be translated. Each line has the form:
+#
+# SGML-designator start_code end_code
+#
+# where the SGML designator is something like "quote" (without the quota-
+# tion marks), and the start and end codes are the way in which you want
+# the beginning and end of a <quote>...<\quote> sequence to be transla-
+# ted. Presumably, in this instance, your codes would indicate some set
+# level of indentation, and perhaps a font change. If you don't have an
+# end code for a particular SGML designator, just leave it blank.
+#
+############################################################################
+#
+# Links: stripunb
+#
+############################################################################
+
+link stripunb
+
+procedure readtbl(f)
+
+ local t, line, k, on_sequence, off_sequence
+
+ /f & stop("readtbl: Arg must be a valid open file.")
+
+ t := table()
+
+ every line := trim(!f,'\t ') do {
+ line ? {
+ k := tabslashupto('\t:') &
+ tab(many('\t:')) &
+ on_sequence := tabslashupto('\t:') | tab(0)
+ tab(many('\t:'))
+ off_sequence := tab(0)
+ } | stop("readtbl: Bad map file format.")
+ insert(t, k, outstr(on_sequence, off_sequence))
+ }
+
+ return t
+
+end
+
+
+
+procedure tabslashupto(c,s)
+ local POS
+
+ POS := &pos
+
+ while tab(upto('\\' ++ c)) do {
+ if ="\\" then {
+ move(1)
+ next
+ }
+ else {
+ if any(c) then {
+ suspend &subject[POS:.&pos]
+ }
+ }
+ }
+
+ &pos := POS
+ fail
+
+end