From bbd7baad4e6a1946295117d56f069c8edadba855 Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Mon, 13 Jul 2015 14:51:37 +0300 Subject: [PATCH 13/19] Shellvars: allow && and || constructs after condition --- lenses/shellvars.aug | 8 ++++++-- lenses/tests/test_shellvars.aug | 8 ++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lenses/shellvars.aug b/lenses/shellvars.aug index 0384a6f..c47f566 100644 --- a/lenses/shellvars.aug +++ b/lenses/shellvars.aug @@ -34,7 +34,7 @@ module Shellvars = let xchgs = Build.xchgs let semicol = del /;?/ "" - let char = /[^`;()'"|\n\\# \t]#*|\\\\(.|\n)/ + let char = /[^`;()'"&|\n\\# \t]#*|\\\\(.|\n)/ let dquot = let char = /[^"\\]|\\\\./ | Rx.cl in "\"" . char* . "\"" (* " Emacs, relax *) @@ -107,9 +107,13 @@ module Shellvars = . ( Util.del_ws_spc . store Rx.integer )? let condition = - let cond (start:string) (end:string) = [ label "type" . store start ] + let action (operator:string) (lbl:string) = + [ Sep.opt_space . Util.del_str operator . Sep.opt_space + . label lbl . sto_to_semicol ] + in let cond (start:string) (end:string) = [ label "type" . store start ] . Util.del_ws_spc . sto_to_semicol . Util.del_ws_spc . Util.del_str end + . ( action "&&" "@and" | action "||" "@or" )* in Util.indent . label "@condition" . (cond "[" "]" | cond "[[" "]]") diff --git a/lenses/tests/test_shellvars.aug b/lenses/tests/test_shellvars.aug index d07918d..0f27a73 100644 --- a/lenses/tests/test_shellvars.aug +++ b/lenses/tests/test_shellvars.aug @@ -604,6 +604,14 @@ esac\n" = test lns get "alias ls='ls $LS_OPTIONS'\n" = { "@alias" = "ls" { "value" = "'ls $LS_OPTIONS'" } } + (* Allow && and || constructs after condition *) + test Shellvars.lns get "[ -f $FILENAME ] && do this || or that\n" = + { "@condition" = "-f $FILENAME" + { "type" = "[" } + { "@and" = "do this" } + { "@or" = "or that" } + } + (* Local Variables: *) (* mode: caml *) (* End: *) -- 2.5.0