From 82abcd6fd693549b225e53c6c161ea3909f2cf00 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Mon, 12 Nov 2018 11:07:41 -0500 Subject: plumb: allow @ in file names Helps Go module download cache, Upspin, maybe others. --- plumb/basic | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'plumb') diff --git a/plumb/basic b/plumb/basic index f728132f..438fc48f 100644 --- a/plumb/basic +++ b/plumb/basic @@ -37,8 +37,8 @@ plumb start wdoc2txt $file # image files go to page type is text -data matches '[a-zA-Z¡-￿0-9_\-./]+' -data matches '([a-zA-Z¡-￿0-9_\-./]+)\.(jpe?g|JPE?G|gif|GIF|tiff?|TIFF?|ppm|bit|png|PNG)' +data matches '[a-zA-Z¡-￿0-9_\-./@]+' +data matches '([a-zA-Z¡-￿0-9_\-./@]+)\.(jpe?g|JPE?G|gif|GIF|tiff?|TIFF?|ppm|bit|png|PNG)' arg isfile $0 plumb to image plumb start 9 page $file @@ -46,22 +46,22 @@ plumb start 9 page $file # postscript/pdf/dvi go to page but not over the a plumb port # the port is here for reference but is unused type is text -data matches '[a-zA-Z¡-￿0-9_\-./]+' -data matches '([a-zA-Z¡-￿0-9_\-./]+)\.(ps|PS|eps|EPS|pdf|PDF|dvi|DVI)' +data matches '[a-zA-Z¡-￿0-9_\-./@]+' +data matches '([a-zA-Z¡-￿0-9_\-./@]+)\.(ps|PS|eps|EPS|pdf|PDF|dvi|DVI)' arg isfile $0 plumb to postscript plumb start 9 page $file # open office - s[xt][cdigmw], doc, xls, ppt -data matches '[a-zA-Z¡-￿0-9_\-./]+' -data matches '([a-zA-Z¡-￿0-9_\-./]+)\.([Ss][XxTt][CcDdIiGgMmWw]|[Dd][Oo][Cc]|[Xx][Ll][Ss]|[Pp][Pp][Tt])' +data matches '[a-zA-Z¡-￿0-9_\-./@]+' +data matches '([a-zA-Z¡-￿0-9_\-./@]+)\.([Ss][XxTt][CcDdIiGgMmWw]|[Dd][Oo][Cc]|[Xx][Ll][Ss]|[Pp][Pp][Tt])' arg isfile $0 plumb to openoffice plumb start openoffice $file # existing files tagged by line number:columnumber or linenumber.columnumber, twice, go to editor type is text -data matches '([.a-zA-Z¡-￿0-9_/\-]*[a-zA-Z¡-￿0-9_/\-])':$twocolonaddr,$twocolonaddr +data matches '([.a-zA-Z¡-￿0-9_/\-@]*[a-zA-Z¡-￿0-9_/\-])':$twocolonaddr,$twocolonaddr arg isfile $1 data set $file attr add addr=$2-#1+#$3,$4-#1+#$5 @@ -70,7 +70,7 @@ plumb client $editor # existing files tagged by line number:columnumber or linenumber.columnumber, twice, go to editor type is text -data matches '([.a-zA-Z¡-￿0-9_/\-]*[a-zA-Z¡-￿0-9_/\-])':$twocolonaddr +data matches '([.a-zA-Z¡-￿0-9_/\-@]*[a-zA-Z¡-￿0-9_/\-])':$twocolonaddr arg isfile $1 data set $file attr add addr=$2-#1+#$3 @@ -79,7 +79,7 @@ plumb client $editor # existing files, possibly tagged by line number, go to editor type is text -data matches '([.a-zA-Z¡-￿0-9_/\-]*[a-zA-Z¡-￿0-9_/\-])('$addr')?' +data matches '([.a-zA-Z¡-￿0-9_/\-@]*[a-zA-Z¡-￿0-9_/\-])('$addr')?' arg isfile $1 data set $file attr add addr=$3 -- cgit v1.2.3 From 73ea36569e83560168cfd7e40d85d9d247bce593 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20K=C3=BChl?= Date: Wed, 14 Nov 2018 05:59:04 +0100 Subject: plumb/basic: avoid wrap around in file:1:2 (#158) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #122, #140. As reported in #122, `file:1:1` moves to the end of the file, and `file:1:2` fails with “address out of range”. I’ll use file:2:3 as an example so we can tell the line and column number apart. What’s happening is this: plumb/basic matches `2:3` using twocolonaddr (from plumb/fileaddr), then sets addr to `2-#1+#3` (the 1 is constant and was introduced because column numbers are 1-based). Acme interprets this in three steps: 1. find the range (q0, q1) that contains line 2 2. create the range (q2, q2) where q2 = q0 - 1 3. create the range (q3, q3) where q3 = q2 + 3 The second step has a branch where if q0 == 0 and 1 > 0 (remember that 1 is constant and comes form plumb/basic), q0 is set to the end of the file. This makes addressing things at the end of the file easier. The problem then is that if we select line 1, which starts at the beginning of the file, q0 is always 0 and the branch in step 2) will always be used. `1:1` is interpreted as `1-#1+#1` which starts at 0, wraps around to the end of the file, then moves 1 character backwards and then forwards again, ending at the end of the file. `1:2` is interpretes as `1-#1+#2` which starts at 0, wraps around to the end od the file, then moves 1 character backwards and tries moving 2 characters forwards beyond the end of the file, resulting in the out of range error. In #140 @rsc proposed transforming `:X:Y` into `:X-#0+#Y-#1` instead since that avoids wrapping around by not moving backwards at first. This change modifies `plumb/basic` to do that. --- plumb/basic | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'plumb') diff --git a/plumb/basic b/plumb/basic index 438fc48f..b59b7948 100644 --- a/plumb/basic +++ b/plumb/basic @@ -64,7 +64,7 @@ type is text data matches '([.a-zA-Z¡-￿0-9_/\-@]*[a-zA-Z¡-￿0-9_/\-])':$twocolonaddr,$twocolonaddr arg isfile $1 data set $file -attr add addr=$2-#1+#$3,$4-#1+#$5 +attr add addr=$2-#0+#$3-#1,$4-#0+#$5-#1 plumb to edit plumb client $editor @@ -73,7 +73,7 @@ type is text data matches '([.a-zA-Z¡-￿0-9_/\-@]*[a-zA-Z¡-￿0-9_/\-])':$twocolonaddr arg isfile $1 data set $file -attr add addr=$2-#1+#$3 +attr add addr=$2-#0+#$3-#1 plumb to edit plumb client $editor -- cgit v1.2.3