[REBOL] Re: New Rebol Newsgroup Re:
Hello, On 04-Feb-00, [EMAIL PROTECTED] wrote: When will we get to see an IRC channel for Rebol programmers? There are times when I sure could use some instant help. Just "/join #rebol" on a server and it'll create one if it doesn't already exist. You just need other people to commit to being on too. A channel was started a few months ago on Dalnet. -Original Message- From:[EMAIL PROTECTED] [SMTP:[EMAIL PROTECTED]] I have started a Rebol Newsgroup. Please join in and start the posts! Have fun. Here are the details. nntp server: private.charter-stl.com newsgroup: rebol.discuss I have setup the server to allow other servers to pull the newsgroups. Enjoy and let me know your recommendations. Paul Tretter Paul's Rebol Page (Rebol Search Engine) http://24.217.20.110/rebolsearch/rebol.htm Elliott
[REBOL] HTML mails Was: Re: New format.r on rebol.org Re:
Hello, On 07-Feb-00, [EMAIL PROTECTED] wrote: html br I have a .r program sending an E-Mail with a HTML form (in responce to a HTML page) filled in by people on the net -and the message prints out on the my printer in the office.br br ---snip--- quot;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;quot;nbsp; cgi/email lt;Pgt;lt;BRgt;br nbsp;nbsp;nbsp; quot;Salvation: quot;nbsp; cgi/sal lt;pgt;br nbsp;nbsp;nbsp; quot;Education: quot;nbsp; cgi/edu lt;BRgt;lt;BRgt;br nbsp;nbsp;nbsp; quot;Ministry: quot;nbsp; cgi/min lt;Pgt;br nbsp;nbsp;nbsp; quot;Goals: quot;nbsp; cgi/gol lt;Pgt;br nbsp;nbsp;nbsp; quot;Other Remarks : quot;nbsp; cgi/rem lt;brgt;br nbsp;nbsp;nbsp; lt;/H5gt;br nbsp;nbsp;nbsp; lt;/bodygt;lt;/htmlgt;br ]br br web-page: read %form.htmlbr br br br br /html Carl crew, On the Rebol web site where you give the mailing list subscription information, could you please suggest to new subscribers that they diable html "rich text" in their mailers when writing to the list? Maybe also in the welcome message that we get when subscribing? Elliott
[REBOL] Re: XML-RPC Re:
On 13-Feb-00, [EMAIL PROTECTED] wrote: Great, someone who knows about XML and REBOL! I have just begun researching XML and was thinking about how it relates to REBOL. Can REBOL be used in place of XML? I would like to hear other's thoughts on the matter. As I see it, XML is a set of rules for generating data files. It is a bit more ambitious than just "a file format", but that's where it lies. It is quite similar to the IFF standard proposed by Electronic Arts (used for instance for Lightwave objects), but in text rather than binary. In both cases the files have a tree structure. XML relates well to the Document Object Model for web pages, or to the structure of a WML deck. (A WML deck is an XML document). You can parse or create XML files with routines written in Java or Rebol. Rebol is a programming language which doesn't really dictate any particular format for data files, although some might be easier to handle in Rebol than others. There is a good book called "XML and Java", covering parsing routines (classes) etc. I can easily imagine a book called "XML and Rebol", or "Creating WML, HTML and XML with Rebol". Regards -- Don Cox [EMAIL PROTECTED]
[REBOL] Re: XML-RPC
On Sun, 13 Feb 2000, [EMAIL PROTECTED] wrote: You can parse or create XML files with routines written in Java or Rebol. Rebol is a programming language which doesn't really dictate any particular format for data files, although some might be easier to handle in Rebol than others. There is a good book called "XML and Java", covering parsing routines (classes) etc. I can easily imagine a book called "XML and Rebol", or "Creating WML, HTML and XML with Rebol". I guess having to parse XML is one of the reasons I asked my question about using REBOL in place of XML. If given a choice, why would I use XML to store data and then have to use another language to parse and operate on it rather than just storing the data as REBOL and have it automatically parsed and usable by REBOL? -Karl Robillard
[REBOL] hostname parse rule Re:(2)
name-rule: [let-char [none | [[some let-digit-hyph-char] let-digit-char]] to end] Try: let-char any [let-digit-hyp=char] instead. The problem will be that it would then accept a "-" as the last character in a part of the hostname... Valid names are these starting with a letter, followed by an optional part consisting of any number of letters and "-":es, but must end with a letter or digit... The problem with my original rule was that the [some let-digit-hyph-char] part matched all the way up to the end of the string that I tried to parse.. (some should be "any", but that didn't help) I came up with this rule that seems to be working: name-rule: [ let-char [[any [[let-digit-hyph-char] let-digit-char]] | none]] parse "a" name-rule == true parse "1" name-rule == false parse "a-" name-rule == false parse "a-1" name-rule == true parse "aaa-1" name-rule == true /PeO
[REBOL] Re: XML-RPC
Hello [EMAIL PROTECTED] On 13-Feb-00, [EMAIL PROTECTED] wrote: On Sun, 13 Feb 2000, [EMAIL PROTECTED] wrote: You can parse or create XML files with routines written in Java or Rebol. Rebol is a programming language which doesn't really dictate any particular format for data files, although some might be easier to handle in Rebol than others. There is a good book called "XML and Java", covering parsing routines (classes) etc. I can easily imagine a book called "XML and Rebol", or "Creating WML, HTML and XML with Rebol". I guess having to parse XML is one of the reasons I asked my question about using REBOL in place of XML. If given a choice, why would I use XML to store data and then have to use another language to parse and operate on it rather than just storing the data as REBOL and have it automatically parsed and usable by REBOL? If it's your own data and only you want to access it, you can store it how you like. XML is an agreed, standardised and widely used format. If you want a data format that can be accessed by anybody, an XML format would be worth considering. (HTML is to be replaced by an XML version of HTML, for instance.) If in the future Rebol becomes as widespread as XML, and if the data format is completely open and stable, then a Rebol-based format might be a valid alternative to XML. At present, Rebol is a proprietary language which is still under development and is subject to unilaterally decided changes. Although the borderline between languages and data formats is fuzzy, I think Rebol is a language and XML is a family of data formats. Regards -- Don Cox [EMAIL PROTECTED]
[REBOL] XML-RPC Re:(3)
-Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] Sent: Sunday, February 13, 2000 11:37 AM To: [EMAIL PROTECTED] Subject: [REBOL] Re: XML-RPC Re: As I see it, XML is a set of rules for generating data files. It is a bit more ambitious than just "a file format", but that's where it lies. Hi, to be a bit more correct: XML is just a way to store data, nothing more. Than you have a DTD (document-type-definition) or XSL (style language) which describes how a particular XML file is structured. It is quite similar to the IFF standard proposed by Electronic Arts (used for instance for Lightwave objects), but in text rather than binary. In both cases the files have a tree structure. Right. You can parse or create XML files with routines written in Java or Rebol. Or anything else ;-) Robert
[REBOL] Demo of console animation, the Dancing Lady
I apologize for including code on this mailing list, but some of us need some Sunday afternoon diversion now that football season is over. And this is certainly one way to learn escape sequences. Enjoy, and suggestions for improvement welcomed. --Ralph REBOL [ TITLE: "The Dance Lady" AUTHOR: "Ralph Roberts, ©2000" DATE: "13-Jan-2000" PURPOSE: "console animation demo" FILE: %dancelady.r] print newline print "^(1B)[10CPresenting the exotic" print "^(1B)[10C MS. ASCII REBOLI" print newline print "^(1B)[12C.###. " print "^(1B)[12C _#*_*#_)" print "^(1B)[12C--(--/__\--" print "^(1B)[12C_\ \_" wait .2 prin "^(1B)[4A" print "^(1B)[12C .###. " print "^(1B)[12C ___#*_*#___ " print "^(1B)[12C--/_/--" print "^(1B)[12C _\ \_" wait .2 prin "^(1B)[4A" print "^(1B)[12C .###. " print "^(1B)[12C ___#*_*#___ " print "^(1B)[12C--\_\--" print "^(1B)[12C _/ /_ " wait .2 prin "^(1B)[4A" print "^(1B)[12C.###. " print "^(1B)[12C (_#*_*#_ " print "^(1B)[12C-/__\-)" print "^(1B)[12C _/ /_ " wait .2 prin "^(1B)[4A" print "^(1B)[12C.###. " print "^(1B)[12C _#*_*#_)" print "^(1B)[12C--(--/__\--" print "^(1B)[12C_\ \_" wait .2 prin "^(1B)[4A" print "^(1B)[12C .###. " print "^(1B)[12C ___#*_*#___ " print "^(1B)[12C--/_/--" print "^(1B)[12C _\ \_" wait .2 prin "^(1B)[4A" print "^(1B)[12C .###. " print "^(1B)[12C ___#*_*#___ " print "^(1B)[12C--\_\--" print "^(1B)[12C _/ /_ " wait .2 prin "^(1B)[4A" print "^(1B)[12C.###. " print "^(1B)[12C (_#*_*#_ " print "^(1B)[12C-/__\-)" print "^(1B)[12C _/ /_ " wait .2 prin "^(1B)[4A" print "^(1B)[12C.###. " print "^(1B)[12C _#*_*#_)" print "^(1B)[12C--(--/__\--" print "^(1B)[12C_\ \_" wait .2 prin "^(1B)[4A" print "^(1B)[12C .###. " print "^(1B)[12C ___#*_*#___ " print "^(1B)[12C--/_/--" print "^(1B)[12C _\ \_" wait .2 prin "^(1B)[4A" print "^(1B)[12C .###. " print "^(1B)[12C ___#*_*#___ " print "^(1B)[12C--\_\--" print "^(1B)[12C _/ /_ " wait .2 prin "^(1B)[4A" print "^(1B)[12C.###. " print "^(1B)[12C (_#*_*#_ " print "^(1B)[12C-/__\-)" print "^(1B)[12C _/ /_ " wait .2 prin "^(1B)[4A" print "^(1B)[12C.###. " print "^(1B)[12C _#*_*#_)" print "^(1B)[12C--(--/__\--" print "^(1B)[12C_\ \_" wait .2 prin "^(1B)[4A" print "^(1B)[12C .###. " print "^(1B)[12C ___#*_*#___ " print "^(1B)[12C--/_/--" print "^(1B)[12C _\ \_" wait .2 prin "^(1B)[4A" print "^(1B)[12C .###. " print "^(1B)[12C ___#*_*#___ " print "^(1B)[12C--\_\--" print "^(1B)[12C _/ /_ " wait .2 prin "^(1B)[4A" print "^(1B)[12C.###. " print "^(1B)[12C (_#*_*#_ " print "^(1B)[12C-/__\-)" print "^(1B)[12C _/ /_ " wait .2 prin "^(1B)[4A" print "^(1B)[12C.###. " print "^(1B)[12C _#*_*#_)" print "^(1B)[12C--(--/__\--" print "^(1B)[12C_\ \_" wait .2 prin "^(1B)[4A" print "^(1B)[12C .###. " print "^(1B)[12C ___#*_*#___ " print "^(1B)[12C--/_/--" print "^(1B)[12C _\ \_" wait .2 prin "^(1B)[4A" print "^(1B)[12C .###. " print "^(1B)[12C ___#*_*#___ " print "^(1B)[12C--\_\--" print "^(1B)[12C _/ /_ " wait .2 prin "^(1B)[4A" print "^(1B)[12C.###. " print "^(1B)[12C (_#*_*#_ " print "^(1B)[12C-/__\-)" print "^(1B)[12C _/ /_ " wait .2 prin "^(1B)[4A" print "^(1B)[12C.###. " print "^(1B)[12C _#*_*#_)" print "^(1B)[12C--(--/__\--" print "^(1B)[12C_\ \_" wait .2 prin "^(1B)[4A" print "^(1B)[12C .###. " print "^(1B)[12C ___#*_*#___ " print "^(1B)[12C--/_/--" print "^(1B)[12C _\ \_" wait .2 prin "^(1B)[4A" print "^(1B)[12C .###. " print "^(1B)[12C ___#*_*#___ " print "^(1B)[12C--\_\--" print "^(1B)[12C _/ /_ " wait .2 prin "^(1B)[4A" print "^(1B)[12C.###. " print "^(1B)[12C (_#*_*#_ " print "^(1B)[12C-/__\-)" print "^(1B)[12C _/ /_ " wait .2 prin "^(1B)[4A" print "^(1B)[12C.###. " print "^(1B)[12C _#*_*#_)" print "^(1B)[12C--(--/__\--" print "^(1B)[12C_\ \_" wait .2 prin "^(1B)[4A" print "^(1B)[12C .###. " print "^(1B)[12C ___#*_*#___ " print "^(1B)[12C--/_/--" print "^(1B)[12C _\ \_" wait .2 prin "^(1B)[4A" print "^(1B)[12C .###. " print "^(1B)[12C ___#*_*#___ " print "^(1B)[12C--\_\--" print "^(1B)[12C _/ /_ " wait .2 prin "^(1B)[4A" print "^(1B)[12C.###. " print "^(1B)[12C (_#*_*#_ " print
[REBOL] REBOL IRC client.. kind of..
Far from completed, but it works.. :) http://www.algonet.se/~peoyli/RebIRC/ For now, it reloads the server command handler and console input handler for each line it processes (slow, but useful while developing it).. /PeO
[REBOL] hostname parse rule Re:(2)
Hello [EMAIL PROTECTED]! On 13-Feb-00, you wrote: p hname-rule: [name-rule some ["." name-rule]] name-rule: p [let-char [none | [[some let-digit-hyph-char] let-digit-char]] p to end] p The problem is that it returns "true" too often... This is caused by the "to end" above. It should work if you remove it. Removing the "to end" did break the rule even more... name-rule: [let-char [none | [[some let-digit-hyph-char] let-digit-char]]] parse "a" name-rule == true OK a single letter hostname part is ok parse "a1" name-rule == false ERR!two chars which the first one is a letter and the last is letter or digit is ok parse "a1a" name-rule == false ERR!should be ok replacing "some" with "any" above caused the same error.. And.. the rule I came up with that I posted earlier... name-rule: [ let-char [[any [[let-digit-hyph-char] let-digit-char]] | none]] didn't work with a two character name... If I break down the rules... ; name must start with a letter let-char ; may have any number of letters, digits and ; hyphens in between, but this sequence must ; end with a letter or digit if it exists 0 1 [any let-digit-hyph-char let-digit-char] The problem is combining them to a working ruleset... parse "a" name-rule should return "true" parse "a1" name-rule should return "true" parse "aa" name-rule should return "true" parse "a-" name-rule should return "false" parse "a-1" name-rule should return "true" /PeO
[REBOL]
unsubscribe
[REBOL] XML-RPC Re:(2)
If given a choice, why would I use XML to store data and then have to use another language to parse and operate on it rather than just storing the data as REBOL and have it automatically parsed and usable by REBOL? Two comments. (A) what do you mean by "another language?" You mean, other than XML? Well, clearly, XML isn't an algorithmic language, so you have to use something you can express parsers and so forth in to parse and operate on it... and Rebol should be well-suited to that task. (B) The reasons for using a non-native data format include (1) you can leverage defined data formats / schemas for particular problem domains rather than inventing your own, (2) by virtue of the previous, you can easily exchange data with other systems without having to map your data model to theirs, (3) you aren't restricted to any particular language / implementation for various system components. If your system is entirely self-contained, never communicates with anything else and especially never with anything written outside of Rebol, there's no good reason to use XML. Just use Rebol blocks. But if you need to communicate with anything else across space or time, especially if you're talking about communication via the Web or with non-Rebol systems, you need something like XML. And if you need something like XML, you might as well use XML. :-) jb -Karl Robillard
[REBOL] XML-RPC Re:(2)
If in the future Rebol becomes as widespread as XML, and if the data format is completely open and stable, then a Rebol-based format might be a valid alternative to XML. At present, Rebol is a proprietary language which is still under development and is subject to unilaterally decided changes. I've had something very similar to this discussion with someone else regarding Newtonscript-like frames vs. XML. Both are tree-structured data formats. The real key difference, and the reason XML "wins," is that (while more verbose) XML is much more of a "metadata structure." The ability to "dialect" the data language via DTDs and the separation of structure definition from data representation make it much more flexible. The cost is some increase in complexity and size of data, but this is more than compensated by increased utility. A pure-block Rebol implementation, even if dealing with all-Rebol componentry, still suffers from the same deficiencies -wrt- XML as, say, Newstonscript frames. jb
[REBOL] Problem with to-money ??? Re:(4)
Olivier wrote: I think that precision when dealing with money is very important (more important than speed). Money values should be handled internally as an string of decimal digits, as in COBOL. Very big numbers are frequent when you deal with money : $1,000,000,000 converted to a weakest currency can have 5 or 6 significant digits. They is other problems when calculating in base 2 instead of base 10 : the numbers that have an infinite number of digit after the point are not the same. It has an impact on rounded values. I agree with this. REBOL should have a money class/value that handles these problems better, rather than using floating point base 2 arithmetic. Andrew Martin ICQ: 26227169 http://members.xoom.com/AndrewMartin/ --
[REBOL] Problem with to-money ??? Re:(5)
Hi Andrew, Olivier Actually MONEY! has about 16 decimal digits of precision. For instance: x: to-money 2 ** 52 / 100 == $45035996273704.96 x - $.01 == $45035996273704.95 x + $.01 == $45035996273704.97 So money values are still precise to the nearest cent at 45 trillion (45 million million). If the floating point arithmetic is properly handled, the precision should remain at $0.01 up to 2 ** 53 which is about 90 trillion. Cheers Larry - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Sunday, February 13, 2000 5:37 PM Subject: [REBOL] Problem with to-money ??? Re:(4) Olivier wrote: I think that precision when dealing with money is very important (more important than speed). Money values should be handled internally as an string of decimal digits, as in COBOL. Very big numbers are frequent when you deal with money : $1,000,000,000 converted to a weakest currency can have 5 or 6 significant digits. They is other problems when calculating in base 2 instead of base 10 : the numbers that have an infinite number of digit after the point are not the same. It has an impact on rounded values. I agree with this. REBOL should have a money class/value that handles these problems better, rather than using floating point base 2 arithmetic. Andrew Martin ICQ: 26227169 http://members.xoom.com/AndrewMartin/ --
[REBOL] Demo of console animation, the REBOL City Music Hall REBOLettes
Okay, okay--I'll quit after this, but one lady dancing was so much fun, I did a whole chorus line. Enjoy. --Ralph REBOL[ TITLE: "The REBOL City REBOLettes" AUTHOR: "Ralph Roberts, ©2000" DATE: "13-Jan-2000" PURPOSE: "console animation demo" FILE: %chorusline.r] print newline print "^(1B)[10CPresenting the REBOL City Music Hall REBOLettes" print newline loop 4 [ print "^(1B)[2C.@@@..@@@..@@@..@@@..@@@. " print "^(1B)[2C@o_o@@o_o@@o_o@@o_o@@o_o@ " print "^(1B)[2C/\v/\/\v/\/\v/\/\v/\/\v/\ " print "^(1B)[2C\(_)/\(_)/\(_)/\(_)/\(_)/ " print "^(1B)[2C | | | | | | | | | | " print "^(1B)[2C_| |__| |__| |__| |__| |_ " wait .5 prin "^(1B)[6A" print "^(1B)[2C .@@@..@@@..@@@..@@@..@@@. " print "^(1B)[2C @o_o@@o_o@@o_o@@o_o@@o_o@ " print "^(1B)[2C /\v/\/ /\v/\/ /\v/\/ /\v/\/ /\v/\/ " print "^(1B)[2C \ (_)\ (_)\ (_)\ (_)\ (_) " print "^(1B)[2C / \ / \ / \ / \ / \ " print "^(1B)[2C _/ |_ _/ |_ _/ |_ _/ |_ _/ |_ " wait .5 prin "^(1B)[6A" print "^(1B)[2C.@@@..@@@..@@@..@@@..@@@. " print "^(1B)[2C@o_o@@o_o@@o_o@@o_o@@o_o@ " print "^(1B)[2C/\v/\/ /\v/\/ /\v/\/ /\v/\/ /\v/\/" print "^(1B)[2C\(_),\(_),\(_),\(_), \(_)," print "^(1B)[2C ||||| " print "^(1B)[2C_| _| _| _| _| " wait .5 prin "^(1B)[6A" print "^(1B)[2C .@@@..@@@..@@@..@@@..@@@. " print "^(1B)[2C @o_o@@o_o@@o_o@@o_o@@o_o@ " print "^(1B)[2C /\v/\/ /\v/\/ /\v/\/ /\v/\/ /\v/\/ " print "^(1B)[2C \ (_)\ (_)\ (_)\ (_)\ (_) " print "^(1B)[2C / \ / \ / \ / \ / \ " print "^(1B)[2C _/ |_ _/ |_ _/ |_ _/ |_ _/ |_ " wait .1 prin "^(1B)[6A" print ".@@@..@@@..@@@..@@@..@@@. " print "@o_o@@o_o@@o_o@@o_o@@o_o@ " print "/\v/\/\v/\/\v/\/\v/\/\v/\ " print "\(_)/\(_)/\(_)/\(_)/\(_)/ " print " | | | | | | | | | | " print "_| |__| |__| |__| |__| |_ " wait .1 prin "^(1B)[6A" print " .@@@. .@@@. .@@@. .@@@. .@@@. " print " @o_o@ @o_o@ @o_o@ @o_o@ @o_o@ " print "\/\v/\\/\v/\\/\v/\\/\v/\\/\v/\ " print " (_) / (_) / (_) / (_) / (_) / " print " / \ / \ / \ / \ / \ " print " _| \_ _| \_ _| \_ _| \_ _| \_ " wait .1 prin "^(1B)[6A" print ".@@@..@@@..@@@..@@@..@@@. " print "@o_o@@o_o@@o_o@@o_o@@o_o@ " print " \/\v/\ \/\v/\ \/\v/\ \/\v/\ \/\v/\ " print ",(_)/,(_)/,(_)/,(_)/,(_)/ " print " ||||| " print " |_ |_ |_ |_ |_ " wait .1 prin "^(1B)[6A" print " .@@@. .@@@. .@@@. .@@@. .@@@. " print " @o_o@ @o_o@ @o_o@ @o_o@ @o_o@ " print "\/\v/\\/\v/\\/\v/\\/\v/\\/\v/\ " print " (_) / (_) / (_) / (_) / (_) / " print " / \ / \ / \ / \ / \ " print " _| \_ _| \_ _| \_ _| \_ _| \_ " wait .1 prin "^(1B)[6A" print ".@@@..@@@..@@@..@@@..@@@. " print "@o_o@@o_o@@o_o@@o_o@@o_o@ " print "/\v/\/\v/\/\v/\/\v/\/\v/\ " print "\(_)/\(_)/\(_)/\(_)/\(_)/ " print " | | | | | | | | | | " print "_| |__| |__| |__| |__| |_ " wait .1 prin "^(1B)[6A" ] wait .1 prin "^(1B)[7B" print [newline "^(1B)[10C**applause**applause***^/"] print "^(1B)[12CNext Show 10 p.m."
[REBOL] Re: Demo of console animation, the REBOL City Music Hall REBOLettes
Hello [EMAIL PROTECTED] On 13-Feb-00, [EMAIL PROTECTED] wrote: Okay, okay--I'll quit after this, but one lady dancing was so much fun, I did a whole chorus line. The single lady worked fine on Pc/Amiga Rebol but got this for the chorus line: do %chorusline.r ** Syntax Error: Invalid string -- "^(1B)[2C.@@@..@@@. .@@@. .@@@..@@@.. ** Where: (line 14) print "^(1B)[2C.@@@..@@@..@@@. .@@@. .@@@. union problem? :) Regards -- JMS Trustee http://www.jms.org HP=http://www.sonic.net/~alanwall/ First computer solar powered vic-20 AmigaQNX-notAmigaNG=no good computers for people not suits sent via Yam ver2 on AmigaForever ver3 UIN=9391028
[REBOL] hostname parse rule Re:(3)
Hi /PeO you wrote: ; name must start with a letter let-char ; may have any number of letters, digits and ; hyphens in between, but this sequence must ; end with a letter or digit if it exists 0 1 [any let-digit-hyph-char let-digit-char] The problem is combining them to a working ruleset... The problem is how you formulate your specification. You say: ; may have any number of letters, digits and ; hyphens in between, but this sequence must ; end with a letter or digit if it exists This is too general. You need to redefine your rules so that you precisely state that a hyphen - if it occurs - must be followed by a letter or digit. I.e., I believe you have a let-digit-char rule, your let-digit-hyph-char rule then must be: let-digit-hyph-char: [ "-" let-digit-char] This rule only evaluates to true if a hyphen is immediately followed by a character. It permits that a hyphen appear, provided that the hyphen is followed by a an obligatory character and thereby excludes the possibility of a trailing hyphen. Hope this helps ;- Elan [: - )]