Implement pattern-based variable operators.
This commit adds an implementation for the '#', '##', '%', and '%%' variable operators. * gash/word.scm (word->qword): Add an implementation for the '<sh-ref-except-min>', '<sh-ref-except-max>', '<sh-ref-skip-min>', and '<sh-ref-skip-max>' cases.
This commit is contained in:
parent
5c1602d5f2
commit
5a27fd59cc
|
@ -152,9 +152,6 @@ FULL_TESTS = \
|
|||
|
||||
TESTS = $(UNIT_TESTS) $(FULL_TESTS)
|
||||
|
||||
XFAIL_TESTS = \
|
||||
tests/variable-patterns.org
|
||||
|
||||
TEST_DATA_FILES = \
|
||||
tests/data/star/2 \
|
||||
tests/data/star/3 \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
;;; Gash -- Guile As SHell
|
||||
;;; Copyright © 2018 Timothy Sample <samplet@ngyro.com>
|
||||
;;; Copyright © 2018, 2019 Timothy Sample <samplet@ngyro.com>
|
||||
;;;
|
||||
;;; This file is part of Gash.
|
||||
;;;
|
||||
|
@ -285,14 +285,18 @@ and arithmetic substitions."
|
|||
(or (and (parameter-ref name)
|
||||
(word->qword (or value "")))
|
||||
""))
|
||||
(('<sh-ref-except-min> name pattern)
|
||||
(error (format #f "Not implemented: ~s" word)))
|
||||
(('<sh-ref-except-max> name pattern)
|
||||
(error (format #f "Not implemented: ~s" word)))
|
||||
(('<sh-ref-skip-min> name pattern)
|
||||
(error (format #f "Not implemented: ~s" word)))
|
||||
(('<sh-ref-skip-max> name pattern)
|
||||
(error (format #f "Not implemented: ~s" word)))
|
||||
(('<sh-ref-except-min> name pattern-word)
|
||||
(let ((pattern (expand-word pattern-word #:output 'pattern)))
|
||||
(pattern-drop-right pattern (parameter-ref name ""))))
|
||||
(('<sh-ref-except-max> name pattern-word)
|
||||
(let ((pattern (expand-word pattern-word #:output 'pattern)))
|
||||
(pattern-drop-right pattern (parameter-ref name "") #:greedy? #t)))
|
||||
(('<sh-ref-skip-min> name pattern-word)
|
||||
(let ((pattern (expand-word pattern-word #:output 'pattern)))
|
||||
(pattern-drop pattern (parameter-ref name ""))))
|
||||
(('<sh-ref-skip-max> name pattern-word)
|
||||
(let ((pattern (expand-word pattern-word #:output 'pattern)))
|
||||
(pattern-drop pattern (parameter-ref name "") #:greedy? #t)))
|
||||
(('<sh-ref-length> name)
|
||||
(number->string (string-length (parameter-ref name ""))))
|
||||
(_ (map word->qword word))))
|
||||
|
|
Loading…
Reference in New Issue