• Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r4wp

[Rebol School] REBOL School

Ladislav
14-May-2013
[1982]
Is this clear?
Endo
14-May-2013
[1983]
Your example should be "== 3" I guess?
DideC
15-May-2013
[1984x2]
:-)
(best of us can be wrong sometimes. Just to LOL, no pun intended)
Pekr
15-May-2013
[1986x2]
>> add: :multiply
>> a: 1
== 1
>> b: 2
== 2
>> add a b
== 2
You can always find a solution :-)
Endo
15-May-2013
[1988]
/LAST refinement doesn't return the last match when used with /REVERSE 
refinement. Is that a known issue?

>> FIND/reverse/last tail "aoboco" "o"
== "o"
>> FIND/reverse tail "aoboco" "o"
== "o"

>> FIND "aoboco" "o"
== "oboco"
>> FIND/last "aoboco" "o"
== "o"
MaxV
15-May-2013
[1989]
Hello, someone needs Sublime Text 2 editor  syntax highlight file, 
see http://rebol.informe.com/forum/rebol-2-f8/sublime-text-2-t59.html
Do you know where he may find it?
DideC
15-May-2013
[1990]
find/reverse and find/last are somewhat identical but not from the 
same point of start. So you have to use one XOR the other.
Gregg
15-May-2013
[1991]
Endo, what result do you expect for

  FIND/reverse/last tail "aoboco" "o"

?
Ladislav
15-May-2013
[1992]
Your example should be 

== 3" I guess?" - actually, I had a: 1 and b: 1 originally, and I 
somehow "managed" to change B to 2 :-(
Endo
15-May-2013
[1993]
Gregg: When use /REVERSE refinement it searches backwards from the 
current position. So I expect to find the /last "o" (in the negative 
direction) which is "oboco".
aOboco
 the captial O is the LAST one in backward direction.

I understand that the last "o" is still the right most one. But I 
expected the other one at first glance.
Gregg
15-May-2013
[1994]
Understood. That would make it redundant with /REVERSE, rather than 
overriding it.
DideC
17-May-2013
[1995x2]
To my understanding "find/last serie value" is the same thing than 
"find/reverse tail serie value".
But it found the first value backward from the position, so "o" is 
correct result.
Endo
23-May-2013
[1997x2]
Which script do you suggest me to use for parsing XML files for R'? 
There are many on rebol.org.

I mainly want XML to object, so I can export data from .xlsx file. 
XML to blocks might work but I may need to work on objects for more 
functionality.
* for R2
Geomol
23-May-2013
[1999x2]
If I remember correctly, you can't go 1 to 1 from xml to object. 
You can to block.


I've only used my xml2rebxml.r, which produces a block. You could 
work from there, pull out the elements, you need, and produce an 
object.
http://www.rebol.org/view-script.r?script=xml2rebxml.r
The RebXML format is described here:
http://www.fys.ku.dk/~niclasen/rebxml/rebxml-spec.html
Endo
23-May-2013
[2001]
Thank you Geomol. I saw AltXML from Christopher Ross-Gill, I'll try 
both. Thanks.
Endo
27-May-2013
[2002x2]
Chris: is that normal?
>> load-xml {<si><t xml:space="preserve">test</t></si>}
== [
    <si> [
        <t> [
            #space "preserve"
            %.txt "test"
        ]
    ]
]
Why it puts %.txt ?
GrahamC
27-May-2013
[2004]
Chris is in Peru at present .. don't expect any answers soon.  Unless 
you talk to him on SO chat
Maxim
27-May-2013
[2005]
for sure, you want stuff to be tag pair aligned so you can easily 
loop through it... though I don't know why he uses the file type 
to  mark tag content. 

probably just to differentiate it from attribute and tags
AdrianS
27-May-2013
[2006]
Endo, that's just his notation for a text node - not meant to imply 
it's a file.
Endo
28-May-2013
[2007x2]
I see, I just confused if it's a bug or not.
>> load-xml {<a>test</a>}  ; == [ <a> "test" ]

>> load-xml {<a b="c">test</a>}   ; == [ <a> [ #b "c" %.txt "test" 
] ]
Why this doesn't work?
>> parse [1] [1] ;== false

while this one works
>> parse [a] ['a] ; == true
Cyphre
28-May-2013
[2009]
parse uses literal numbers for rules definition
you need to use: parse [1][integer! (process-integer-here)]
Endo
28-May-2013
[2010]
So, no chance to specify an exact number in a parse rule?
Geomol
28-May-2013
[2011]
>> parse [1] [1 1 1]
== true
>> parse [1 1] [2 2 1]
== true
Maxim
28-May-2013
[2012]
darn... never new we could do that!!!!  logical enough... wonder 
why I never tried it.
Andreas
28-May-2013
[2013]
In R3, youi can also use the QUOTE command:

>> parse [1] [quote 1] 
== true
Gregg
28-May-2013
[2014x3]
parse-int-values: func [

    "Parses and returns integer values, each <n> chars long in a string."
    input [any-string!]

    spec [block!] "Dialected block of commands: <n>, skip <n>, done, 
    char, or string"
    /local
        gen'd-rules ; generated rules
        result      ; what we return to the caller

        emit emit-data-rule emit-skip-rule emit-literal-rule emit-data
        digit= n= literal=
        int-rule= skip-rule= literal-rule= done= build-rule=
        data-rule skip-rule
][

    ; This is where we put the rules we build; our gernated parse rules.
    gen'd-rules: copy []
    ; This is where we put the integer results
    result: copy []

    ; helper functions

    emit: func [rule n] [append gen'd-rules replace copy rule 'n n]
    emit-data-rule: func [n] [emit data-rule n]
    emit-skip-rule: func [n] [emit skip-rule n]
    emit-literal-rule: func [value] [append gen'd-rules value]
    emit-data: does [append result to integer! =chars]

    ; Rule templates; used to generate rules

    ;data-rule: [copy =chars n digit= (append result to integer! =chars)]
    data-rule: [copy =chars n digit= (emit-data)]
    skip-rule: [n skip]

    ; helper parse rules
	digit=: charset [#"0" - #"9"]
    n=: [set n integer!]
    literal=: [set lit-val [char! | any-string!]]

    ; Rule generation helper parse rules
    int-rule=: [n= (emit-data-rule n)]
    skip-rule=: ['skip n= (emit-skip-rule n)]
    literal-rule=: [literal= (emit-literal-rule lit-val)]
    done=: ['done (append gen'd-rules [to end])]

    ; This generates the parse rules used against the input

    build-rule=: [some [skip-rule= | int-rule= | literal-rule=] opt done=]


    ; We parse the spec they give us, and use that to generate the

    ; parse rules used against the actual input. If the spec parse

    ; fails, we return none (maybe we should throw an error though);

    ; if the data parse fails, we return false; otherwise they get
    ; back a block of integers. Have to decide what to do if they
    ; give us negative numbers as well.
    either parse spec build-rule= [
        either parse input gen'd-rules [result] [false]
    ] [none]
]
>> parse-int-values "123456" [1 2 3]
== [1 23 456]
Just as an example of how you can work around it with a bit of indirection.
Sujoy
7-Jun-2013
[2017]
this is on r3
am trying to do a simple 
read http://google.com
and get 

Access error: protocol error: "Redirect to other host - requires 
custom handling."
how do i custom handle?
Endo
7-Jun-2013
[2018]
I think you should use cURL binding for R3.
GrahamC
7-Jun-2013
[2019x3]
@Sujoy .. there some relatively easy fixes to the R3 http protocol 
to handle this.  But .. due to various issues .. they just have not 
found their way into the binaries :(
Basically the http protocol sees a redirect eg. from http:// google 
to https google and complains.
or from google.com to www.google.com etc.
Sujoy
7-Jun-2013
[2022x3]
thanks graham. 
endo - looking at cURL...thanks for the pointer
>> import %./cURL-binding.so

** access error: cannot open: %./cURL-binding.so reason: "not found 
or not valid"
any ideas why? i'm on a amazon linux instance...
GrahamC
7-Jun-2013
[2025]
Have you installed all the libraries required for cURL?
Sujoy
7-Jun-2013
[2026x2]
i think so graham - did a yum install curl
and i can curl http://google.comfine
GrahamC
7-Jun-2013
[2028]
Guess have to ask Kaj then ... I tried this before and worked fine 
for me
Sujoy
7-Jun-2013
[2029]
thanks graham...hoping kaj will see this...
Endo
7-Jun-2013
[2030]
Here you can find some info:
http://rebol.esperconsultancy.nl/extensions/cURL/
Kees
17-Jul-2013
[2031]
Question about an example from the R3 docs:

str: "abcdef"
end: find str "d"
for s str end 1 [print s]
abcdef
bcdef
cdef
def


find finds the d at position 4, if I replace end with 4, I get the 
same result.
However: type? end says string! and no pointer

If I replace the text in str, end still equals to "def", so it does 
not point
at str any more.
Can someone explane this?