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

World: r3wp

[Parse] Discussion of PARSE dialect

JaimeVargas
27-Jun-2006
[976x2]
capitalize-word: func [

    s [string!]
    /local len

][

    either 5 < len: length? s [

        s: rejoin ["<strong>" uppercase s/1 next s </strong>]

    ][

        s

    ]
 
]



capitalize-text: func [
    s [string!]

    /local result word-rule alpha non-alpha w c
][

    result: copy {}
    alpha: charset [#"A" - #"Z" #"a" - #"z"]

    non-alpha: complement alpha

     word-rule: [copy w [some alpha] (insert tail result capitalize-word 
     w)]
    other-rule: [copy c non-alpha (insert tail result c)]

    parse/all s [some [word-rule | other-rule] end]
    result

]
>> capitalize-text {The result changes according to formating.}  
          

; 
== {The <strong>Result</strong> <strong>Changes</strong> <strong>According</strong> 
to <strong>Formating</strong>.}
Graham
27-Jun-2006
[978x2]
Not quite the problem I was stating!
search for a series of capitalised words and strong them
JaimeVargas
27-Jun-2006
[980]
Ah. Very easy modification.
Graham
27-Jun-2006
[981x2]
bolden-word: func [
    s [string!]
    /local len
][
    either 5 < len: length? s [
        s: rejoin ["<strong>" s </strong>]
    ][
        s
    ]
 ]

enhance-text: func [
    s [string!]
    /local result word-rule alpha non-alpha w c
][
    result: copy {}
    alpha: charset [#"A" - #"Z"]
    non-alpha: complement alpha

    word-rule: [copy w [some alpha] (insert tail result bolden-word w)]
    other-rule: [copy c non-alpha (insert tail result c)]
    parse/all s [some [word-rule | other-rule] end]
    result
]
Thanks Jaime.
BrianH
27-Jun-2006
[983x2]
capitals: charset ["#"A" - #"Z"]
alpha: charset ["#"A" - #"Z" #"a" - #"z"]
non-alpha: complement alpha
parse/all/case [any non-alpha any [
    a: 5 capitals any capitals b: non-alpha (

        b: change/part a rejoin ["<strong>" copy/part a b "</strong>"] b
    ) :b |
    some alpha any non-alpha
] to end]
This is the Parse group after all.
Graham
27-Jun-2006
[985]
ohhhh... shorter :)
BrianH
27-Jun-2006
[986]
; A few fixes
capitals: charset ["#"A" - #"Z"]
alpha: charset ["#"A" - #"Z" #"a" - #"z"]
non-alpha: complement alpha
parse/all/case [any non-alpha any [
    a: 5 capitals any capitals b: [non-alpha | end] (

        b: change/part a rejoin ["<strong>" copy/part a b "</strong>"] b
    ) :b |
    some alpha any non-alpha
] to end]
Graham
27-Jun-2006
[987]
capitals: charset ["#"A" - #"Z"] ... remove  leading "
JaimeVargas
27-Jun-2006
[988]
I think I missunderstood the problem. I thought the the emphasis 
was not for words all in uppercase. Just ther first char.
Graham
27-Jun-2006
[989]
Yeah ... it was a way to mark up text wherever a sequence of CAPS 
occurs
JaimeVargas
27-Jun-2006
[990]
Any how you got the idea. This type of problem could actually use 
the rewrite rules engine from gabriele. The principle is the same.
BrianH
27-Jun-2006
[991]
; Sorry, more fixes
capitals: charset ["#"A" - #"Z"]
alpha: charset ["#"A" - #"Z" #"a" - #"z"]
non-alpha: complement alpha
parse/all/case [any [

    any non-alpha a: 5 capitals any capitals b: [non-alpha | end] (

        b: change/part a rejoin ["<strong>" copy/part a b "</strong>"] b
    ) :b |
    some alpha
] to end]
Graham
27-Jun-2006
[992x2]
Brian ... your rules are incorrect.
you have extra " in the charset defiitions
BrianH
27-Jun-2006
[994]
Right. I was running this in my head, as I don't have test data. 
REBOL usually catches syntax errors :)
Graham
27-Jun-2006
[995]
Actually I would like to add a parse problem to the weeklyblog and 
get people to submit answers :)
BrianH
27-Jun-2006
[996]
I use parse quite a bit. It's funny, I've never needed the GUI of 
View, but I use parse daily.
Graham
27-Jun-2006
[997x2]
And give a prize for the shortest answer
say a copy of Microsoft VB :)
BrianH
27-Jun-2006
[999]
By shortest, go for most efficient. Otherwise variable naming becomes 
an issue.
JaimeVargas
27-Jun-2006
[1000]
Shorter may not be clearer or abstract enough. I prefer the something 
that can become an API an reused. But we will need to exclude the 
rewrite-rule of Gabriel. ;-)
BrianH
27-Jun-2006
[1001]
Hey, I worked on those rules, they're pretty good :)
Graham
27-Jun-2006
[1002]
shortest .. I mean the least number of words, and operators - not 
in length
JaimeVargas
27-Jun-2006
[1003]
Hahaha, no offense Brian. ;-)
Graham
27-Jun-2006
[1004]
Can't use this problem though .. this group is web public!
BrianH
27-Jun-2006
[1005]
It's too simple anyways.
Graham
27-Jun-2006
[1006x2]
I am hoping that it will be instructive ... as well.
so simple things are good to start with ... we can have harder ones 
once we see how people respond
BrianH
27-Jun-2006
[1008]
Seriously though, three charsets and two temporary variables, there's 
got to be a more efficient way.
Volker
27-Jun-2006
[1009]
should non-alpha be non-captitals? (running in head too)
BrianH
27-Jun-2006
[1010x2]
; Sorry, more fixes
capitals: charset [#"A" - #"Z"]
alpha: charset [#"A" - #"Z" #"a" - #"z"]
non-alpha: complement alpha
parse/all/case [any [to alpha [
    a: 5 capitals any capitals b: [non-alpha | end] (

        b: change/part a rejoin ["<strong>" copy/part a b "</strong>"] b
    ) :b |
    some alpha
]] to end]
No, because that would allow words like this: ABCDEFghij
Volker
27-Jun-2006
[1012x2]
it would collect as long as there are capitals?
and "g" is none
BrianH
27-Jun-2006
[1014]
Well, that would be up to Graham. His original description would 
seem to exclude such words.
Volker
27-Jun-2006
[1015]
means all uppercase?
BrianH
27-Jun-2006
[1016]
As far as I can tell.
Graham
27-Jun-2006
[1017]
Yeah .. all uppercase ..
Volker
27-Jun-2006
[1018]
because " a: 5 capitals any capitals b:" stops at "g" and friends.
BrianH
27-Jun-2006
[1019]
More importantly, it fails at "g" and friends, backtracks and proceeds 
to the next alternate action, some alpha.
Volker
27-Jun-2006
[1020]
Late, but got it. it would enclose "ABCDEF" but should ignore it 
because of the small letters..
BrianH
27-Jun-2006
[1021x2]
Yup. Parse is fun.
You can drop one charset by changing [non-alpha | end] to [alpha 
end skip | end | none] .
Volker
27-Jun-2006
[1023]
would alpha break work?
BrianH
27-Jun-2006
[1024]
No, that would break out of the enclosing all loop. The end skip 
will always fail and proceed to the next alternate.
Tomc
27-Jun-2006
[1025]
capital: charset {ABCDEFGHIJKLMNOPQRSTUVWXYZ}
latipac: complement capital
rule: [
    any latipac here:
    copy token some capital there:
    (all[ 4 < length? token
        insert :there "</strong>"
        insert :here "<strong>"
        there: skip :there 16
    ])
    :there
]
parse/all/case txt [some rule]