Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search

[REBOL] Re: Parse problem

From: carl:cybercraft at: 9-Oct-2005 14:56

Hi Patrick, I had a quick attempt at your problem when you first posted it, and have to agree, it's not so easy. ;-) I did expect someone to come up with a good method using PARSE though, and am surprised they haven't. Anyway, I've had another go tonight and have worked out a method - one that uses a recursive approach. Essentially, to find the end of an URL, it looks for a space, return character or the end of the file and copies from the URL start to there. Then, if it didn't find the end of the file the copied text is itself parsed. This finds the URLs, but they may of course have commas and so on attached to their ends. It's an easy matter to strip them off though, giving you the true URL which you can then modify to replace the original. So, here's the code: There's three parts to it - a parse rule where the recursion is performed, a function to call it, strip any extra characters and replace the original and the main parsing routing which calls the function... str: {Hey go visit, it's great! Or or or even!} rule: [ some [ to "http://" copy text to " " (parse text rule) | to "http://" copy text to "^/" (parse text rule) | to "http://" copy text to end ] ] modify: does [ parse text rule ;-- Add characters to the FIND string in the next line to increase ;-- the types of characters you need to remove from the end of an URL. while [find {.,!)"} last text][remove back tail text] new-text: rejoin [{<a href="} text {">} text </a>] change/part s new-text length? text s: skip s -1 + length? new-text ] parse str [ some [ to "http://" s: copy text to " " (modify) :s | to "http://" s: copy text to "^/" (modify) :s | to "http://" s: copy text to end (modify) :s ] to end ] print str Let me know if this behaves for you! :-) I've just thought of one problem - if there's already an URL inside tags within the text, it'd screw them up. So this isn't a universal solution. And it should really be made into a nice, tide function. -- Carl Read. On Friday, 7-October-2005 at 14:19:52 Patrick Philipot wrote,