r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[I'm new] Ask any question, and a helpful person will try to answer.

Anton
14-Apr-2006
[340x2]
Hmm... OK then, here's the fixed version:
page: read http://www.rebol.com
; special test cases from Alek_K
;page: {<img src="one two.jpg">} ; OK
;page: {<img alt="picture" src=one.jpg />} ; OK
images: copy []


use [whsp ws non-end-tag strd wh- non-str-delim p1 p2 delim non-delim][

	whsp: charset " ^-^/" ; whitespace
	ws: [any whsp] ; a rule for any number of whitespace characters
	non-end-tag: complement charset ">" ; all characters except ">"
	strd: charset {"'} ; string delimiters, double and single quote


 wh-: charset "^-^/" ; whitespace minus the space character (space 
 is allowed inside a quoted string)
	non-str-delim: complement union whsp charset ">"	

	parse/all page [
		any [
			thru "<img" whsp [
				any [
					ws "src" ws "=" ws 

     ;p1: [strd (delim: form p1/1) | (delim: ">")] (non-delim: complement 
     union whsp charset delim)

     p1: [strd (non-delim: complement union wh- charset form p1/1) | (non-delim: 
     non-str-delim)]

     p1: any non-delim p2: (append images copy/part p1 p2) ; keep the 
     url
					| non-end-tag 
				]
			] | skip
		]
	]

]


new-line/all images on ; add hidden newlines to the images block 
so it molds nicely
print mold images
Anton
17-Apr-2006
[342]
Now, the tricky thing with modifying parts of a string in a parse 
rule is that you have to leave the current parse index at the end 
of your new replacement string.

What usually happens is you parse up to your search string, set a 
marker (here it's done with p1:), parse through your search string, 
set another marker (p2:), then

 	(remove/part p1 p2
	insert p1 "my new string")


but if the the new string is shorter or longer than the old string, 
then the parse index will be left in the wrong position.

So to fix that we need to set p2 to p1 plus the length of the new 
string, then set the parse index to that position so it can continue 
as intended:

	(p2: p1 + length? new-string) :p2


So the full example above can modify links in place if you simply 
replace:

	(append images copy/part p1 p2)

with something like:

 	(
		old-string: copy/part p1 p2
		new-string: "create your new link from the old one here"
		remove/part p1 p2
		insert p1 new-string
		p2: p1 + length? new-string
	) :p2
Thør
26-May-2006
[343]
sync attempt...
Normand
21-Jun-2006
[344]
Simple blocks mappings: I looked in the maillist, but did not find 
for such a simple case.  I am trying to devise a function to map 
values from rebDB to the user UI in rebGui.  So I need to map the 
respective values in two blocks, as in a: [a b c d e] and b: [1 2 
3 4 5], thinking that a foreach would do the mapping.  To no avail?
z: []
foreach [i j] [a b] [append z [i j]]
I want [a 1 b 2 c 3 d 4 e 5]

I would need two foreach, side by side, not to embed one in the other. 
This does not work, but the idea is there.
>> z: []
== []
>> foreach i a foreach j b [append z [i j]]
== 5
>> :z
== [i j i j i j i j i j] -> ?What is the formula?
Henrik
21-Jun-2006
[345x2]
I made a function for this to interface MySQL:

keyed: func [keys [block!] values [block!] /local out] [
  out: copy []
  if not any [empty? keys empty? values] [
    repeat i length? keys [
      insert tail out reduce [

        keys/:i either block? first values [values/1/:i][values/:i]
      ]
    ]
  ]
  out
]
>> keyed [a b c] [1 2 3]
== [a 1 b 2 c 3]
Normand
21-Jun-2006
[347]
So usefull.  Thanks.
Anton
22-Jun-2006
[348]
>> a: [a b c d e] b: [1 2 3 4 5] z: [] repeat n length? a [repend 
z [a/:n b/:n]]
== [a 1 b 2 c 3 d 4 e 5]
Normand
29-Jun-2006
[349]
Integer digits of a string: I want to check if all the digits of 
a string, str: "1984", are integer number, to check the validity 
of a date. Ideally I do not want to use integer to-integer, as in:

check: func [ str [string!] ] [ for n 1 (length? str) 1 [integer? 
to-integer to-string pick str 1] ]. It seems to me that to beg the 
question.  Any more elegant way to do that?
Tomc
29-Jun-2006
[350x2]
parse string [integer!]
integer? load string
Henrik
29-Jun-2006
[352]
normand, also remember that rebol can do date checking, so you don't 
have to check that manually as well
BrianH
29-Jun-2006
[353]
Although, only of dates that are in one of the ISO formats.
Henrik
29-Jun-2006
[354]
yes, you need to shape them to that first, but that might be easier 
than the other thing :-)
Geomol
30-Jun-2006
[355x2]
Example:
Let's say, our date is 6 digits YYMMDD.
>> date: "230812"
We deside, it's the year 2023:
>> insert date "20"
Now dashes are inserted to form a date understandable by REBOL:
>> insert skip date 6 "-"
>> insert skip date 4 "-"
Date now looks like this:
>> date
== "2023-08-12"
And we can control, it's a valid date with:
>> to-date date
== 12-Aug-2023

If it's not a valid date, like if the original had other characters 
than digits, we'll get an error. Errors can be caught with:
>> error? try [to-date "foobar"]
== true

Hope it helps.
control = check
Normand
30-Jun-2006
[357]
Oh! I was persuming - wrongly -  that no check was done.  I thought 
that because at first glance Rebol did not produce an error on the 
function   >> a: to-date "afrt-01-02"  which results in == "afrt-01-02". 
 Thanks for the explanation; then checking all the digits in a date 
is not usefull.
Henrik
30-Jun-2006
[358x2]
if you load a string with a date, it will be checked:

>> load "25-mar-2006"             
== 25-Mar-2006
>> load "25-12-2006" 
== 25-Dec-2006
>> load "3-3-6" 
== 3-Mar-2006
>> error? try [load "32-13-2006"] 
== true
>> error? try [load "01-16-2006"]
== true
load is pretty good for checking valid content
Normand
12-Jul-2006
[360]
Multiple refinement functions :  I need to formulate a function with 
more than one refinement.  I know in Rebol we usually use the word 
'either to formulate them, but with more than 3 refinements (and 
its following default case) it becomes tedious.   Structures like 
'record-operations: func [/delit /addit /modit] [ either  delit [print 
"delete"] [either addit [print "add"] [either modit [print "modify"][print 
"no refinement"]]]]'  are overly complicated.  I would like a more 
flat structure, to be able to distinguish the conditions which are 
independants from the ones mutually dependants, albeit mutually exclusive. 
 I tried multiple if's but that does not seem to work.  What are 
the good options to code multiple refinements functions.  The mail 
list does not seem to have an example discussing just that.  And 
in the source, most functions with multiple refinements are native.
Sunanda
12-Jul-2006
[361]
Multiple ifs should work....
   if addit [addit code termined with a return]
  if modit [ modit code terminated with a return]


If you have multiple refinements that make up one logical unit, try 
something like this:


f: func [/a /b /c /d] [if all [a b c] [print 'abc return true] print 
'not-triggered]
f/a
not-triggered
f/b/c/a
abc
true
Geomol
12-Jul-2006
[362]
If you allow more than one refinement at a time, an approach is to 
build up the code in a block, depending on the refinements (using 
if), and then evaluate the block at the end of the function. Example:


f: func [/a /b /c] [blk: copy [] if a [append blk [print "ref a active"]] 
if b [append blk [print "ref b active"]] if c [append blk [print 
"ref c active"]] do blk]

>> f/c/a
ref a active
ref c active
Anton
12-Jul-2006
[363]
How about this ?
f: func [/aref /bref /cref /local refs symbs][
	refs: copy [aref bref cref]
	symbs: copy []

 forall refs [if get refs/1 [append symbs to-char #"a" - 1 + index? 
 refs]] ; convert to #"a" #"b" #"c" ...
	switch rejoin symbs [
		"abc" [print "All of them"]
		"ac" [print "Just A and C"]
		"b" [print "Just B"]
	]
]
Normand
12-Jul-2006
[364]
Thanks for those answers.
Anton
13-Jul-2006
[365]
Using an issue (or could be a string) instead of a block:

f: func [/aref /bref /cref /local refs symbs][
	refs: copy [aref bref cref]
	symbs: copy #

 forall refs [if get refs/1 [append symbs to-char #"a" - 1 + index? 
 refs]] ; convert to #"a" #"b" #"c" ...
	switch symbs [
		#abc [print "All of them"]
		#ac [print "Just A and C"]
		#b [print "Just B"]
	]
]
Ingo
13-Jul-2006
[366]
Newer version also have case ...

case [
 aref [ print 'aref]
 bref [print 'bref]
 true [print 'default]
]
Maxim
13-Jul-2006
[367x5]
normand,  a lot of us forget about the two following words:  ANY 
  ALL
they are extremely powerfull when used together in cascade, and allow 
you to bake many ifs and eithers into one line of code:

ANY   stops evaluating an expression while it encounters none! values,
ALL   stops evaluating at the first none! value it encounters.
here is an example for handling multiple non-exlusive switches:


lets say you have refinements /a /b /c /d.      /d is mutually-exlusive 
to all others and a + b reacts differently than when alone... trying 
to wrap that in if/either can be a nightmare, and its impossible 
using case or switch... BUT using any/all actually makes it quite 
visual and simple to see flow:
option:	ANY [
	ALL [d (print "Exclusive d submitted") 1]
	ALL [a b (print "A and B supplied together") 2]
	ALL [a (print "A alone") 3]
	ALL [b (print "B alone") 4]
	0
]

if d [print "D also specified" option: option + 10]
here, the first occurence of any possible refinement combination 
returns a number, the trailing 0 is there so that ANY does not return 
none (which could also be what you want)

the /d is checked a part since its not exclusive.
Normand
14-Jul-2006
[372]
Glad to see that in Rebol there are many ways to Rome.

Alphabetical sort - Is there a built-in way to obtain the right sort 
order for the french language.

a b c d e é è ë f g ... I dont see it as a 'sort refinement, and 
'am a bit surprised.  Else why fuss with 8 bit chars?  So I suppose 
it is there, but don't see it.

In plain sort, the accented caracters are coming last! a: [é è ê 
ë a c b d e g f h i k j l m n p o q r t s u v x w y z]   sort a
== [a b c d e f g h i j k l m n o p q r s t u v w x y z è é ê ë]
Volker
14-Jul-2006
[373x2]
Sort sorts only by ascii, the other things you need to compare yourself.
Else why fuss with 8 bit chars
 - erm, to display such chars, for example in altme?
Sunanda
15-Jul-2006
[375]
Sorting.....Check this thread. It contains worked solutions for correct 
sorting in Hungarian. French should be similar:

http://www.rebol.org/cgi-bin/cgiwrap/rebol/ml-display-thread.r?m=rmlMWWJ
Anton
15-Jul-2006
[376]
Surely French rebolers have dealt with sorting... Have you checked 
rebolfrance  ?
Normand
16-Jul-2006
[377]
Ill do. Thanks.
BenK
18-Jul-2006
[378]
HNewbie here and considering purchasing View/Pro. Not rich so I was 
wondering, will I have to pay again when Rebol3 comes out?
Gabriele
19-Jul-2006
[379]
licensing for R3 hasn't been discussed at all so far. you should 
probably ask your question to cindy at rebol dot com.
Pekr
19-Jul-2006
[380x2]
isn't it preliminary to talk about licensing of R3, when even alpha 
was not posted? :-)
(so we don't know much about architecture, I mean - e.g. language 
extensibility via plug-ins ..)
BenK
19-Jul-2006
[382]
I'll ask Cindy: only thing I wish to know is if DLL access is not 
free in R3 if there will be a (cheap) upgrade path for R2 licensees.
james_nak
19-Jul-2006
[383]
BenK, I waited a real long time to purchase Pro/sdk but glad I did 
as I had a project come up that required binding my app into a simple 
to use .exe.
BenK
19-Jul-2006
[384]
Well, I have no such requirements, no commercialisation of anything 
I write (it's just for my own and my family's use) so there's no 
way I can justify coughing up much money; just looking for the bare 
minimum I can get away with
Henrik
19-Jul-2006
[385]
good question on the licensing. I'm also about to buy the SDK and 
it would be nice to know how much it's going to be worth until a 
3.0 SDK comes out.
BenK
19-Jul-2006
[386]
If Cindy answers, I'll pass it on here...
BenK
24-Jul-2006
[387]
For thos einterested: just received e-mail from Cindy stating that 
there will be a (cheaper) upgrade path to R3 for R2 licensees, butno 
details available just yet.
xavier
13-Jan-2007
[388]
.
RayA
31-May-2007
[389]
G'day,