World: r3wp
[Parse] Discussion of PARSE dialect
older newer | first last |
Tomc 20-Mar-2005 [153] | that is just random chars not a pcre for paesing mail headers |
Graham 20-Mar-2005 [154x2] | Oh :) |
I was just attempting to bring the subject back on topic before I interrupted it. | |
Tomc 20-Mar-2005 [156] | that was not an interuprion , more liks exactly what this group is for |
Graham 20-Mar-2005 [157] | since I have no idea what pcre was .. |
Tomc 20-Mar-2005 [158x5] | . match any sigle char but newline |
* 0 or more of the precedding | |
() pit in var $n [n1,2,3 ...] | |
/T0: (.*) | |
$1 has to whom the email is addressed | |
Graham 20-Mar-2005 [163] | While we're here .. what this taint thing that Perl has, and is it a concern for Rebol ? |
Tomc 20-Mar-2005 [164] | tainting forces you to consider the users input and explicitly allow it to pass |
Anton 20-Mar-2005 [165] | I think only people who miss it want it. :) |
BrianW 20-Mar-2005 [166] | Taint mode tells Perl that you aren't sure whether your incoming data is safe. It's just a shortcut for enforcing commonsense programming. |
Graham 20-Mar-2005 [167] | so, it's to prevent incoming data being executed ? |
Tomc 20-Mar-2005 [168x2] | you can write a well considered script without taint that is far more secure than a script that passes taint mode by making a simple rule that does not properly catch problems |
you basicky have to weite a regular expression to accept user input | |
Vincent 20-Mar-2005 [170] | Graham: for your header, like Brett said, parse/all is needed when you work on strings with newlines and spaces. last line should be: parse/all header [header-rule some [ thru "^/" header-rule]] |
BrianW 20-Mar-2005 [171] | Graham, yes, but it's also used in other situations: force the programmer to escape HTML input before printing it back out, massaging data so that it's friendlier for the database, etc. |
Graham 20-Mar-2005 [172] | Yeah, I got that Vincent. Curiously though it has worked without it. |
Tomc 20-Mar-2005 [173x2] | in your example having a rule more like header-rule: [ "Date:" copy date-rule | "From:" copy email-rule | "Subject:" copy some alpha-num | "To:" copy email-rule | to newline ] where email-rule only matched email addresses would more taint like |
and being very careful to never effectivly do [ user-input] without being sure user-input could not cause unintended side effectd | |
Chris 31-Mar-2005 [175x3] | Not quite sure what to make of the following: >> rule: [set w 'pubDate (print w)] == [set w 'pubDate (print w)] >> parse [pubdate] rule pubdate == true >> parse/case [pubdate] rule pubdate == true |
First off, would the last result be a bug? | |
Secondly, I'd like to ensure that whether the block is [pubdate] or [pubDate] that 'w stores 'pubDate. I had hoped that as 'pubDate is set in the rule, it might take precedence over pubdate in the block :^( | |
DideC 1-Apr-2005 [178] | I suppose /case only act on string! |
Gabriele 1-Apr-2005 [179x3] | /case only applies to strings. Chris, you can: |
>> parse [pubdate] ['pubDate (w: 'pubDate print w)] pubDate == true | |
but i'm not sure you'll like it. | |
Graham 9-Apr-2005 [182x2] | should be something easier than this like-i: charset [ #"1" #"l" #"L" #"I" #"i" ] like-a: charset [ #"a" #"A" #"@" ] like-v: charset [ #"\" #"/" #"v" #"V" ] cialis: [ "c" like-i like-a 2 like-i "s" ] viagra: [ 1 2 like-v like-i like-a "gr" like-a ] parse "\/[1-:-gr]@" [ viagra ] parse "[c1-:-Lls]" [ cialis ] |
hmm.. altme converts my double quote to a single quote | |
Gabriele 9-Apr-2005 [184] | maybe use charset "1lLIi" to avoid that much typing ;) |
Anton 9-Apr-2005 [185] | Graham, the link width is slightly incorrect, so it obscures half of the double quote, so it looks like a single. |
Tomc 28-Apr-2005 [186x4] | flatten: func [b [block!] /local flat][ flat: copy[] rule: [ some[ [x: block! (parse first :x rule)] | [copy token any-type! (append flat token)] ] ] parse b rule flat ] |
without the recursive call to parse | |
flatten: func [b [block!] /local flat rule x][ flat: copy[] rule: [some[[x: block! :x into rule] | [copy token any-type! (append flat token)]]] parse b rule flat ] | |
a flatten that changed it's block in place would be useful at times | |
Gregg 30-Apr-2005 [190] | Something like this? (it's not parse based though) flatten: func [block] [ head forall block [ if block? block/1 [change/part block block/1 1] ] ] |
Robert 5-Jun-2005 [191x2] | I have a problem with parse not terminating the parsing. Here is my code for parsing CamelCase words: rebol [] ; CamelCase Test test-text: "FirstWord test. This is a CamelCase test Text. CamelCase2 is the base idea for a WiKi. CamelcasE" upper-case: charset "ABCDEFGHIJKLMNOPQRSTUVWXYZ" delimiters: charset " .,;|^-^/" rest-chars: complement union upper-case delimiters text: "" parse/all/case test-text [ some [ copy camelcase-word [upper-case some rest-chars upper-case any rest-chars] ( if not empty? text [?? text clear text] print ["CamelCase word found:" camelcase-word] ) | copy flowtext [any [rest-chars | upper-case] any delimiters] ( append text flowtext ) ] ] halt |
Any idea why parse doesn't return? | |
sqlab 5-Jun-2005 [193] | [any [rest-chars | upper-case] any delimiters] is always true, even if there is no char left at the end. But it does not move the cursor. |
Tomc 5-Jun-2005 [194] | rebol [] ; CamelCase Test test-text: "FirstWord test. This is a CamelCase test Text. CamelCase2 is the base idea for a WiKi. CamelcasE" upper-case: charset "ABCDEFGHIJKLMNOPQRSTUVWXYZ" delimiter: charset " .,;|^-^/" rest-char: complement union upper-case delimiter text: copy "" camelcase-rule: [some [upper-case some rest-char upper-case any rest-char] delimiter] parse/all/case test-text[ some [ copy camelcase-word camelcase-rule (if not empty? text [?? text clear text] print ["CamelCase word found: " camelcase-word] ) | copy flowtext upper-case (append text flowtext) | copy flowtext[any [rest-char | delimiter]] (append text flowtext) ] ] halt |
Graham 5-Jun-2005 [195x2] | what about camelCAse? |
Personally I prefer the way mediawiki does it ... using [[ .. ]] ... instead of having strange cases in words | |
Tomc 5-Jun-2005 [197] | yes, I was also concerned about A1CamelCase but figured Robert just needed to get thru his first question first |
Robert 6-Jun-2005 [198x2] | Thanks, for the fix. Sometimes it helps to get some distance by asking others :-)) |
I like CamelCase words. Simple to remember and use. IIRC camelCAse is not a valid CamelCase word. But anyway, it depends how I teach my users :-)) | |
Graham 6-Jun-2005 [200] | http://en.wikipedia.org/wiki/CamelCase... CamelCase is referred to UpperCamelCase, and camelCase is referred to as lowerCamelCase |
Robert 6-Jun-2005 [201] | Tom, your example doesn't terminate, like mine. The thing IMO is that the last Word is a CamelCase word and the 'end condition is somehow missed. It nevery reaches the halt. |
sqlab 6-Jun-2005 [202] | If you do not want to change the parse rules, you can just add if not flowtext [halt] before append text flowtext |
older newer | first last |