From 2d253859c9e8f447449a77187d5dc5a21828b8c7 Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Sat, 12 Dec 2015 17:49:51 +0200 Subject: [PATCH 17/19] Shellvars: allow wrapping command sequences --- lenses/shellvars.aug | 10 +++++----- lenses/tests/test_shellvars.aug | 14 +++++++++++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lenses/shellvars.aug b/lenses/shellvars.aug index f7f4c47..5a48f11 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]#*|\\\\./ let dquot = let char = /[^"\\]|\\\\./ | Rx.cl in "\"" . char* . "\"" (* " Emacs, relax *) @@ -46,7 +46,7 @@ module Shellvars = let dollar_arithm = /\$\(\([^\)#\n]*\)\)/ let anyquot = (char|dquot|squot|dollar_assign|dollar_arithm)+ | bquot | dbquot - let sto_to_semicol = store (anyquot . (Rx.space . anyquot)*) + let sto_to_semicol = store (anyquot . (Rx.cl_or_space . anyquot)*) (* Array values of the form '(val1 val2 val3)'. We do not handle empty *) (* arrays here because of typechecking headaches. Instead, they are *) @@ -95,7 +95,7 @@ module Shellvars = let builtin = Util.indent . label "@builtin" . store shell_builtin_cmds - . (Util.del_ws_spc + . (Sep.cl_or_space . [ label "args" . sto_to_semicol ])? let keyword (kw:string) = Util.indent . Util.del_str kw @@ -107,7 +107,7 @@ module Shellvars = . ( Util.del_ws_spc . store Rx.integer )? let action (operator:string) (lbl:string) (sto:lens) = - [ del (Rx.opt_space . operator . Rx.opt_space) (" " . operator . " ") + [ del (Rx.cl_or_opt_space . operator . Rx.cl_or_opt_space) (" " . operator . " ") . label ("@".lbl) . sto ] let action_pipe = action "|" "pipe" @@ -158,7 +158,7 @@ module Shellvars = in let and = action_and entry in let or = action_or entry in Util.indent . label "@command" . store (word - reserved_key) - . [ Sep.space . label "@arg" . sto_to_semicol]? + . [ Sep.cl_or_space . label "@arg" . sto_to_semicol]? . ( pipe | and | or )? let entry_eol = entry_eol_nocommand diff --git a/lenses/tests/test_shellvars.aug b/lenses/tests/test_shellvars.aug index 2c810cb..9a1878c 100644 --- a/lenses/tests/test_shellvars.aug +++ b/lenses/tests/test_shellvars.aug @@ -168,7 +168,7 @@ unset ONBOOT # We do not want this var (* Allow wrapping builtin arguments to multiple lines *) test Shellvars.lns get "ulimit -c \\\nunlimited\nulimit \\\n -x 123\n" = { "@builtin" = "ulimit" { "args" = "-c \\\nunlimited" } } - { "@builtin" = "ulimit" { "args" = "\\\n -x 123" } } + { "@builtin" = "ulimit" { "args" = "-x 123" } } (* Test semicolons *) test lns get "VAR1=\"this;is;a;test\"\nVAR2=this;\n" = @@ -668,6 +668,18 @@ test Shellvars.lns get "cat /etc/issue | grep -q \"Debian\" && echo moo || echo { "@arg" = "baa" } } } } } } } } +(* Wrapped command sequences *) + +test Shellvars.lns get "foo && \\\nbar baz \\\n|| qux \\\n quux\\\ncorge grault\n" = + { "@command" = "foo" + { "@and" + { "@command" = "bar" + { "@arg" = "baz" } + { "@or" { "@command" = "qux" { "@arg" = "quux\\\ncorge grault" } } } + } + } + } + (* Local Variables: *) (* mode: caml *) (* End: *) -- 2.5.0