summaryrefslogtreecommitdiff
path: root/app/conversion/1.0/src/FILEUTIL.PAC
diff options
context:
space:
mode:
Diffstat (limited to 'app/conversion/1.0/src/FILEUTIL.PAC')
-rw-r--r--app/conversion/1.0/src/FILEUTIL.PAC142
1 files changed, 142 insertions, 0 deletions
diff --git a/app/conversion/1.0/src/FILEUTIL.PAC b/app/conversion/1.0/src/FILEUTIL.PAC
new file mode 100644
index 0000000..f772a38
--- /dev/null
+++ b/app/conversion/1.0/src/FILEUTIL.PAC
@@ -0,0 +1,142 @@
+PACKET eumel file utilities
+ DEFINES sort,
+ in denoter,
+ even number of command delimiters,
+ extract command,
+ next text command pos,
+ word wrap,
+ enumerator,
+ enumeration offset :
+PROC sort (THESAURUS VAR th) :
+ disable stop;
+ FILE VAR d := sequential file (output, "dummy");
+ d FILLBY th;
+ sort ("dummy");
+ th := empty thesaurus;
+ input (d);
+ th FILLBY d;
+ forget ("dummy", quiet);
+ enable stop
+END PROC sort;
+BOOL PROC in denoter (TEXT CONST l, INT CONST p) :
+ INT VAR number of quotes := 0,
+ last quote pos,
+ quote pos := 0;
+ quote count loop;
+ number of quotes MOD 2 = 1
+.
+quote count loop :
+ REP
+ last quote pos := quote pos;
+ quote pos := pos (l, """", last quote pos + 1, p - 1);
+ IF quote pos <> 0
+ THEN number of quotes INCR 1
+ ELSE LEAVE quote count loop
+ FI
+ PER
+END PROC in denoter;
+BOOL PROC even number of command delimiters (TEXT CONST l, INT CONST end pos) :
+ INT VAR number := 0, current pos := 1, cross pos;
+ counting loop;
+ number MOD 2 = 0
+.
+ counting loop :
+ REP
+ cross pos := pos (l, "#", current pos, end pos);
+ IF cross pos <> 0
+ THEN number INCR 1;
+ current pos := cross pos + 1
+ FI
+ UNTIL cross pos = 0 PER
+END PROC even number of command delimiters;
+BOOL PROC even number of command delimiters (TEXT CONST l) :
+ even number of command delimiters (l, LENGTH l)
+END PROC even number of command delimiters;
+PROC extract command (TEXT CONST l, INT CONST start pos, INT VAR next pos,
+ TEXT VAR cmd) :
+ next pos := pos (l, "#", start pos + 1);
+ IF next pos = 0
+ THEN errorstop ("unkorrekte Textanweisung")
+ FI;
+ cmd := subtext (l, start pos + 1, next pos - 1);
+ next pos INCR 1
+END PROC extract command;
+PROC next text command pos (TEXT CONST t, INT CONST start pos,
+ INT VAR start cross pos, end cross pos) :
+ start cross pos := pos (t, "#", start pos);
+ IF start cross pos <> 0
+ THEN end cross pos := pos (t, "#", start cross pos + 1)
+ FI
+END PROC next text command pos;
+BOOL PROC word wrap (TEXT CONST file name) :
+ FILE VAR f := sequential file (input, file name);
+ word wrap (f)
+END PROC word wrap;
+BOOL PROC word wrap (FILE VAR f) :
+ TEXT VAR l;
+ modify (f);
+ toline (f, lines (f));
+ WHILE line no (f) > 1 REP
+ read record (f, l);
+ IF l <> ""
+ THEN LEAVE word wrap WITH (l SUB LENGTH l) = " "
+ ELSE up (f, 1)
+ FI
+ PER;
+ FALSE
+END PROC word wrap;
+INT PROC enumeration offset (TEXT CONST this line, next line,
+ BOOL CONST in enumeration, INT CONST start pos) :
+ TEXT VAR initial chunk, next line initial chunk;
+ INT VAR blank pos, next line blank pos,
+ text start pos := 0, next line text start pos;
+ IF NOT only command line (this line)
+ THEN ascertain text start pos
+ FI;
+ text start pos
+.
+ascertain text start pos :
+ blank pos := pos (this line, " ", start pos);
+ IF blank pos > 1 CAND blank pos < LENGTH this line
+ THEN text start pos := pos (this line, ""33"", ""255"", blank pos);
+ IF is enumeration
+ THEN text start pos DECR 1
+ ELSE text start pos := 0
+ FI
+ FI
+.
+is enumeration :
+ neighboring lines correspond CAND this line is enumerated
+.
+neighboring lines correspond :
+ in enumeration COR next line corresponds
+.
+next line corresponds :
+ next line blank pos := pos (next line, " ", start pos);
+ next line text start pos :=
+ pos (next line, ""33"", ""255"", next line blank pos);
+ text start pos = next line text start pos CAND
+ (next line indented COR also enumerated)
+.
+next line indented :
+ pos (next line, ""33"", ""255"", 1) = next line text start pos
+.
+also enumerated :
+ next line initial chunk
+ := subtext (next line, start pos, next line blank pos - 1);
+ enumerator (next line initial chunk)
+.
+this line is enumerated :
+ initial chunk := subtext (this line, start pos, blank pos - 1);
+ enumerator (initial chunk)
+END PROC enumeration offset;
+BOOL PROC enumerator (TEXT CONST t) :
+ t = "-" COR substantial enumerator
+.
+substantial enumerator :
+ INT CONST l := LENGTH t;
+ TEXT CONST last char := t SUB l;
+ l < 20 CAND last char = ":" COR
+ l < 7 CAND pos (".)", last char) <> 0
+END PROC enumerator;
+END PACKET eumel file utilities;