summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2016-09-16 21:45:27 -0700
committerKaz Kylheku <kaz@kylheku.com>2016-09-16 21:45:27 -0700
commit3db9d4cb24375fc8fb84d0024f4e4b44be25c188 (patch)
tree2d1109915adbaff7a0cfab707431c2a79890ce32 /share
parentfbc383882377ef0e0cbed5a0fdc468f300e9526f (diff)
downloadtxr-3db9d4cb24375fc8fb84d0024f4e4b44be25c188.tar.gz
txr-3db9d4cb24375fc8fb84d0024f4e4b44be25c188.tar.bz2
txr-3db9d4cb24375fc8fb84d0024f4e4b44be25c188.zip
New awk variables: ft and kfs.
* share/txr/stdlib/awk.tl (sys:awk-state): New slots, ft and kfs. (sys:awk-state rec-to-f): Implement ft and kfs semantics. (sys:awk-let): Provide ft and kfs as "awk variable" via symbol macros. * txr.1: Documented ft and kfs.
Diffstat (limited to 'share')
-rw-r--r--share/txr/stdlib/awk.tl17
1 files changed, 12 insertions, 5 deletions
diff --git a/share/txr/stdlib/awk.tl b/share/txr/stdlib/awk.tl
index fd4788da..ad5cbe35 100644
--- a/share/txr/stdlib/awk.tl
+++ b/share/txr/stdlib/awk.tl
@@ -25,7 +25,7 @@
(defstruct sys:awk-state ()
(rs "\n")
- (fs)
+ fs ft kfs
(ofs " ")
(ors "\n")
(inputs (or *args* (list *stdin*)))
@@ -51,19 +51,24 @@
(defmeth sys:awk-state rec-to-f (self)
(cond
- ((equal self.rec "")
+ ((and (equal self.rec "") (not self.kfs))
(set self.fields nil
self.nf 0))
(self.fs
- (set self.fields (split-str self.rec self.fs)
+ (when self.ft
+ (throwf 'eval-error "awk: both fs and ft set"))
+ (set self.fields (split-str self.rec self.fs self.kfs)
+ self.nf (length self.fields)))
+ (self.ft
+ (set self.fields (tok-str self.rec self.ft self.kfs)
self.nf (length self.fields)))
((let ((trimmed (trim-str self.rec)))
(cond
- ((equal trimmed "")
+ ((and (equal trimmed "") (not self.kfs))
(set self.fields nil
self.nf 0))
(t
- (set self.fields (split-str trimmed #/[ \t\n]+/)
+ (set self.fields (split-str trimmed #/[ \t\n]+/ self.kfs)
self.nf (length self.fields))))))))
(defmeth sys:awk-state f-to-rec (self)
@@ -165,6 +170,8 @@
(arg (qref ,aws-sym file-num))
(rs (qref ,aws-sym rs))
(fs (qref ,aws-sym fs))
+ (ft (qref ,aws-sym ft))
+ (kfs (qref ,aws-sym kfs))
(ofs (qref ,aws-sym ofs))
(ors (qref ,aws-sym ors)))
(macrolet ((next () '(return-from :awk-rec))