? latest.diff
Index: uri.man
===================================================================
RCS file: /cvsroot/tcllib/tcllib/modules/uri/uri.man,v
retrieving revision 1.2
diff -u -r1.2 uri.man
--- uri.man	26 Mar 2002 07:40:36 -0000	1.2
+++ uri.man	12 Nov 2002 06:45:09 -0000
@@ -23,10 +23,9 @@
 the constituents of the [arg url]. If the scheme is missing from the
 url it defaults to [strong http]. Currently only the schemes
 
-[strong http], [strong ftp], [strong mailto], [strong urn] and
-
-[strong file] are supported. See section [strong EXTENDING] on how to
-expand that range.
+[strong http], [strong ftp], [strong mailto], [strong urn], [strong news],
+and [strong file] are supported. See section [strong EXTENDING]
+on how to expand that range.
 
 
 [call [cmd uri::join] [opt "[arg key] [arg value]"]...]
@@ -35,8 +34,8 @@
 
 [cmd uri::split], for example) and returns the canonical url they
 represent. Currently only the schemes [strong http], [strong ftp],
-[strong mailto], [strong urn] and [strong file] are supported. See
-section [strong EXTENDING] on how to expand that range.
+[strong mailto], [strong urn], [strong news], and [strong file] are
+supported. See section [strong EXTENDING] on how to expand that range.
 
 
 [call [cmd uri::resolve] [arg base] [arg url]]
@@ -143,5 +142,4 @@
 Original code by Andreas Kupries.
 Modularisation by Steve Ball.
 
-[keywords uri url {fetching information} www http ftp mailto gopher wais prospero file]
-[manpage_end]
+[keywords uri url {fetching information} www http ftp mailto news gopher wais prospero file] [manpage_end]
Index: uri.tcl
===================================================================
RCS file: /cvsroot/tcllib/tcllib/modules/uri/uri.tcl,v
retrieving revision 1.15
diff -u -r1.15 uri.tcl
--- uri.tcl	26 Feb 2002 04:59:44 -0000	1.15
+++ uri.tcl	12 Nov 2002 06:45:10 -0000
@@ -22,7 +22,7 @@
     namespace export register
 
     variable file:counter 0
-    
+
     # extend these variable in the coming namespaces
     variable schemes       {}
     variable schemePattern ""
@@ -47,11 +47,11 @@
 	variable	hex		{[0-9A-Fa-f]}
 	variable	alphaDigit	{[A-Za-z0-9]}
 	variable	alphaDigitMinus	{[A-Za-z0-9-]}
-	
+
 	# next is <national | punctuation>
 	variable	unsafe		{[][<>"#%\{\}|\\^~`]} ;#" emacs hilit
 	variable	escape		"%${hex}${hex}"
-	
+
 	#	unreserved	= alpha | digit | safe | extra
 	#	xchar		= unreserved | reserved | escape
 
@@ -254,7 +254,7 @@
     if {[string length $components(type)]} {
 	set type \;type=$components(type)
     }
-    
+
     return ftp://${userPwd}$components(host)${port}/[string trimleft $components(path) /]$type
 }
 
@@ -435,6 +435,22 @@
     return mailto:$components(user)@$components(host)
 }
 
+proc uri::SplitNews {url} {
+    if { [string first @ $url] >= 0 } {
+	return [list message-id $url]
+    } else {
+	return [list newsgroup-name $url]
+    }
+}
+
+proc uri::JoinNews args {
+    array set components {
+	message-id {} newsgroup-name {}
+    }
+    array set components $args
+    return news:$components(message-id)$components(newsgroup-name)
+}
+
 proc uri::GetUPHP {urlvar} {
     # @c Parse user, password host and port out of the url stored in
     # @c variable <a urlvar>.
@@ -462,7 +478,7 @@
     if {[regexp -indices -- $upPattern $url match theUser c d thePassword]} {
 	set fu	[lindex $theUser 0]
 	set tu	[lindex $theUser 1]
-	    
+
 	set fp	[lindex $thePassword 0]
 	set tp	[lindex $thePassword 1]
 
@@ -775,7 +791,7 @@
 uri::register ftp {
     set escape [set [namespace parent [namespace current]]::basic::escape]
     set login  [set [namespace parent [namespace current]]::basic::login]
-    
+
     variable	charN	{[a-zA-Z0-9$_.+!*'(,)?:@&=-]}
     variable	char	"(${charN}|${escape})"
     variable	segment	"${char}*"
@@ -828,7 +844,7 @@
 	    "//${hostOrPort}(/(${type}(${selector}(%09${search}(%09${string})?)?)?)?)?"
     variable	url		"gopher:${schemepart}"
 }
-	
+
 # MAILTO
 uri::register mailto {
     set xChar	[set [namespace parent [namespace current]]::basic::xChar]
Index: uri.test
===================================================================
RCS file: /cvsroot/tcllib/tcllib/modules/uri/uri.test,v
retrieving revision 1.11
diff -u -r1.11 uri.test
--- uri.test	5 Jun 2002 22:59:07 -0000	1.11
+++ uri.test	12 Nov 2002 06:45:10 -0000
@@ -62,6 +62,15 @@
     eval kvsort [uri::split {ftp://localhost:21/a/b/c.d}]
 } {host localhost path a/b/c.d port 21 pwd {} scheme ftp type {} user {}}
 
+test uri-1.9 {uri::split - news with message-id} {
+    eval kvsort [uri::split {news:87lm40t3v7.fsf@dedasys.com}]
+} {message-id 87lm40t3v7.fsf@dedasys.com scheme news}
+
+test uri-1.10 {uri::split - news with newsgroup-name} {
+    eval kvsort [uri::split {news:comp.lang.tcl}]
+} {newsgroup-name comp.lang.tcl scheme news}
+
+
 # -------------------------------------------------------------------------
 
 test uri-2.1 {uri::join - http} {
@@ -122,6 +131,15 @@
 test uri-2.14 {uri::join - ftp w/- invalid type} {
     eval uri::join scheme ftp host localhost path a/b/c.d type X
 } {ftp://localhost/a/b/c.d;type=X}
+
+test uri-2.15 {uri::join - news message-id} {
+    eval uri::join scheme news message-id 87lm40t3v7.fsf@dedasys.com
+} {news:87lm40t3v7.fsf@dedasys.com}
+
+test uri-2.16 {uri::join - news newsgroup-name} {
+    eval uri::join scheme news newsgroup-name comp.lang.tcl
+} {news:comp.lang.tcl}
+
 
 # -------------------------------------------------------------------------
 
