From ad8d1a8cc82d898f39bd0c09a619c19f3c317e8c Mon Sep 17 00:00:00 2001 From: pkoppstein Date: Mon, 7 Dec 2015 18:51:26 -0500 Subject: [PATCH] Two sub bugs fixed; two new gsub tests have been added. ./jq --run-tests < tests/onig.test has been run successfully: ... Testing 'gsub("a";"b")' at line number 70 Testing 'gsub( "(.*)"; ""; "x")' at line number 74 ... 22 of 22 tests passed (0 malformed) --- src/builtin.jq | 8 ++++---- tests/onig.test | 8 ++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/builtin.jq b/src/builtin.jq index 4add681..53998a8 100644 --- a/src/builtin.jq +++ b/src/builtin.jq @@ -125,8 +125,8 @@ def sub($re; s): # # If s contains capture variables, then create a capture object and pipe it to s def sub($re; s; flags): - def subg: explode | select(. != 103) | implode; -# "fla" should be flags with all occurrences of g removed; gs should be non-nil if flags has a g + def subg: [explode[] | select(. != 103)] | implode; + # "fla" should be flags with all occurrences of g removed; gs should be non-nil if flags has a g def sub1(fla; gs): def mysub: . as $in @@ -134,12 +134,12 @@ def sub($re; s; flags): | if length == 0 then $in else .[0] as $edit | ($edit | .offset + .length) as $len -# # create the "capture" object: + # create the "capture" object: | reduce ( $edit | .captures | .[] | select(.name != null) | { (.name) : .string } ) as $pair ({}; . + $pair) | $in[0:$edit.offset] + s - + ($in[$len:] | if gs then mysub else . end) + + ($in[$len:] | if length > 0 and gs then mysub else . end) end ; mysub ; (flags | index("g")) as $gs diff --git a/tests/onig.test b/tests/onig.test index 763bf0b..daacae9 100644 --- a/tests/onig.test +++ b/tests/onig.test @@ -67,6 +67,14 @@ gsub("(?\\d)"; ":\(.d);") "a1b2" "a:1;b:2;" +gsub("a";"b") +"aaaaa" +"bbbbb" + +gsub( "(.*)"; ""; "x") +"" +"" + [.[] | scan(", ")] ["a,b, c, d, e,f",", a,b, c, d, e,f, "] [", ",", ",", ",", ",", ",", ",", ",", "] -- 2.49.0