? stringprep.diff
Index: modules/stringprep/stringprep.tcl
===================================================================
RCS file: /cvsroot/tcllib/tcllib/modules/stringprep/stringprep.tcl,v
retrieving revision 1.1
diff -u -r1.1 stringprep.tcl
--- modules/stringprep/stringprep.tcl	29 Jan 2008 02:18:10 -0000	1.1
+++ modules/stringprep/stringprep.tcl	31 Oct 2009 19:52:03 -0000
@@ -25,7 +25,7 @@
 
     array set props [list -mapping "" \
 			  -normalization "" \
-			  -prohibited "" \
+			  -prohibited 0 \
 			  -prohibitedList {} \
 			  -prohibitedCommand "" \
 			  -prohibitedBidi 0]
@@ -253,6 +253,8 @@
 	return 0
     }
 
+    set info [data::GetUniCharInfo [lindex $uclist 0]]
+    set first_ral [expr {$info & $data::D1Mask}]
     set last_ral 0
     set have_ral 0
     set have_l 0
@@ -260,7 +262,7 @@
 	set info [data::GetUniCharInfo $uc]
 	set last_ral [expr {$info & $data::D1Mask}]
 	set have_ral [expr {$have_ral || $last_ral}]
-	set have_l   [expr {$info & $data::D2Mask}]
+	set have_l   [expr {$have_l || ($info & $data::D2Mask)}]
     }
     if {$have_ral && (!$first_ral || !$last_ral || $have_l)} {
 	return 1
Index: modules/stringprep/stringprep.test
===================================================================
RCS file: /cvsroot/tcllib/tcllib/modules/stringprep/stringprep.test,v
retrieving revision 1.2
diff -u -r1.2 stringprep.test
--- modules/stringprep/stringprep.test	7 Mar 2008 05:45:10 -0000	1.2
+++ modules/stringprep/stringprep.test	31 Oct 2009 19:52:03 -0000
@@ -86,10 +86,10 @@
     set result
 } {prohibited_character}
 
-test stringprep-2.3 {stringprep: prohibited bidi} knownBug {
+test stringprep-2.3 {stringprep: prohibited bidi} {
     catch {::stringprep::stringprep nameprep "\u0627\u0031"} result
     set result
-} {invalid_bidi}
+} {prohibited_bidi}
 
 
 # -------------------------------------------------------------------------
@@ -106,11 +106,14 @@
     { "Case folding 8bit U+00DF (german sharp s)" "\xC3\x9F" "ss" }
     { "Case folding U+0130 (turkish capital I with dot)" "\xC4\xB0" "i\xcc\x87" }
     { "Case folding multibyte U+0143 U+037A" "\xC5\x83\xCD\xBA" "\xC5\x84 \xCE\xB9" }
-    { "Case folding U+2121 U+33C6 U+1D7BB" "\xE2\x84\xA1\xE3\x8F\x86\xF0\x9D\x9E\xBB"
+    { "Case folding U+2121 U+33C6 U+1D7BB (Tcl cannot represent U+1D7BB)"
+	"\xE2\x84\xA1\xE3\x8F\x86\xF0\x9D\x9E\xBB"
         "telc\xE2\x88\x95kg\xCF\x83" }
     { "Normalization of U+006a U+030c U+00A0 U+00AA" "\x6A\xCC\x8C\xC2\xA0\xC2\xAA"
         "\xC7\xB0 a" }
     { "Case folding U+1FB7 and normalization" "\xE1\xBE\xB7" "\xE1\xBE\xB6\xCE\xB9" }
+    { "Case folding U+2121 U+33C6" "\xE2\x84\xA1\xE3\x8F\x86"
+        "telc\xE2\x88\x95kg" }
 }
 
 set id 0
@@ -147,17 +150,11 @@
     4  "\u00AA"       {0 a}          "output is NFKC, input in ISO 8859-1"
     5  "\u2168"       {0 IX}         "output is NFKC, will match #1"
     6  "\u0007"       {1 prohibited_character} "Error - prohibited character"
-    7  "\u0627\u0031" {1 invalid_bidi} "Error - bidirectional check"
+    7  "\u0627\u0031" {1 prohibited_bidi} "Error - bidirectional check"
 } {
-    if {$n == 7} {
-	test saslprep-1.$n $title knownBug {
-	    list [catch {::stringprep::stringprep saslprep $input} res] $res
-	} $result
-    } else {
-	test saslprep-1.$n $title {
-	    list [catch {::stringprep::stringprep saslprep $input} res] $res
-	} $result
-    }
+    test saslprep-1.$n $title {
+	list [catch {::stringprep::stringprep saslprep $input} res] $res
+    } $result
 }
 
 # -------------------------------------------------------------------------
Index: modules/stringprep/stringprep_data.tcl
===================================================================
RCS file: /cvsroot/tcllib/tcllib/modules/stringprep/stringprep_data.tcl,v
retrieving revision 1.1
diff -u -r1.1 stringprep_data.tcl
--- modules/stringprep/stringprep_data.tcl	29 Jan 2008 02:18:10 -0000	1.1
+++ modules/stringprep/stringprep_data.tcl	31 Oct 2009 19:52:05 -0000
@@ -6,12 +6,9 @@
 #
 # Copyright (c) 1998 Scriptics Corporation.
 # Copyright (c) 2007 Alexey Shchepin
-# Copyright (c) 2007 Sergei Golovan
+# Copyright (c) 2008 Sergei Golovan
 #
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-#
-# RCS: @(#) $Id: stringprep_data.tcl,v 1.1 2008/01/29 02:18:10 patthoyts Exp $
+# RCS: @(#) $Id$
 #
 
 package provide stringprep::data 1.0.0
@@ -571,8 +568,8 @@
     34 4 4 4 4 4 193 194 195 196 197 198 199 200 4 4 201 202 203 4 4 4 \
     204 205 206 207 208 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 209 210 \
     211 212 4 4 4 4 4 4 4 213 214 215 216 217 218 219 220 221 222 223 224 \
-    225 226 4 227 4 4 4 228 229 230 4 231 4 232 233 4 4 4 4 4 4 4 4 234 \
-    4 235 236 4 237 238 34 34 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 \
+    225 226 4 227 4 4 228 229 230 231 4 232 4 233 234 4 4 4 4 4 4 4 4 235 \
+    4 236 237 4 238 239 34 34 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 \
     4 4 4 4 4 4 4 4 4 4 34 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 \
     4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 34 \
     34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 \
@@ -604,8 +601,8 @@
     4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 34 34 4 4 4 \
     4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 \
     4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 34 34 34 34 34 34 34 34 \
-    34 34 34 34 34 34 34 34 34 34 34 34 34 239 240 241 242 243 244 245 \
-    34 34 34 34 34 34 34 34 34 34 34 34 246 247 248 249 250 34 34 34 34 \
+    34 34 34 34 34 34 34 34 34 34 34 34 34 240 241 242 243 244 245 246 \
+    34 34 34 34 34 34 34 34 34 34 34 34 247 248 249 250 251 34 34 34 34 \
     34 59 2 59 59 59 59 59 59 59 59 59 59 2 59 59 59 59 59 59 59 59 59 \
     59 59 59 59 34 59 59 59 59 59 34 59 34 59 59 34 59 59 34 59 59 59 59 \
     59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 \
@@ -655,9 +652,9 @@
     34 34 34 34 34 34 34 34 34 34 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 \
     4 4 4 4 4 4 4 4 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 \
     34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 \
-    34 34 34 34 34 34 34 34 34 34 34 34 34 251 251 251 251 251 251 251 \
-    251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 \
-    251 251 251 251 251 251 251 251 251 251 251 251 251 251 34 34 4 4 4 \
+    34 34 34 34 34 34 34 34 34 34 34 34 34 252 252 252 252 252 252 252 \
+    252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 \
+    252 252 252 252 252 252 252 252 252 252 252 252 252 252 34 34 4 4 4 \
     4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 \
     4 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 \
     34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 \
@@ -673,48 +670,48 @@
     4 4 4 4 4 4 4 2 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 \
     4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 34 34 34 34 34 34 \
     34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 \
-    34 34 34 34 34 252 252 252 252 252 252 252 252 252 252 252 252 252 \
-    252 252 252 252 252 252 252 252 252 252 252 252 252 4 4 4 4 4 4 4 4 \
-    4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 253 253 253 253 253 253 253 253 \
-    253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 \
-    253 4 4 4 4 4 4 4 34 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 254 254 254 \
+    34 34 34 34 34 253 253 253 253 253 253 253 253 253 253 253 253 253 \
+    253 253 253 253 253 253 253 253 253 253 253 253 253 4 4 4 4 4 4 4 4 \
+    4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 254 254 254 254 254 254 254 254 \
     254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254 \
-    254 254 254 254 254 254 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 \
-    4 4 4 4 255 34 255 255 34 34 255 34 34 255 255 34 34 255 255 255 255 \
-    34 255 255 255 255 255 255 255 255 4 4 4 4 34 4 34 4 4 4 4 34 4 4 34 \
-    4 4 4 4 4 4 4 4 4 4 4 256 256 256 256 256 256 256 256 256 256 256 256 \
-    256 256 256 256 256 256 256 256 256 256 256 256 256 256 4 4 4 4 4 4 \
-    4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 257 257 34 257 257 257 257 \
-    34 34 257 257 257 257 257 257 257 257 34 257 257 257 257 257 257 257 \
-    34 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 258 258 34 258 \
-    258 258 258 34 258 258 258 258 258 34 258 34 34 34 258 258 258 258 \
-    258 258 258 34 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 \
-    259 259 259 259 259 259 259 259 259 259 259 259 259 259 259 259 259 \
-    259 259 259 259 259 259 259 259 259 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 \
-    4 4 4 4 4 4 4 4 4 4 260 260 260 260 260 260 260 260 260 260 260 260 \
-    260 260 260 260 260 260 260 260 260 260 260 260 260 260 4 4 4 4 4 4 \
-    4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 261 261 261 261 261 261 261 \
-    261 261 261 261 261 261 261 261 261 261 261 261 261 261 261 261 261 \
-    261 261 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 262 262 \
+    254 4 4 4 4 4 4 4 34 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 255 255 255 \
+    255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 \
+    255 255 255 255 255 255 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 \
+    4 4 4 4 256 34 256 256 34 34 256 34 34 256 256 34 34 256 256 256 256 \
+    34 256 256 256 256 256 256 256 256 4 4 4 4 34 4 34 4 4 4 4 34 4 4 34 \
+    4 4 4 4 4 4 4 4 4 4 4 257 257 257 257 257 257 257 257 257 257 257 257 \
+    257 257 257 257 257 257 257 257 257 257 257 257 257 257 4 4 4 4 4 4 \
+    4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 258 258 34 258 258 258 258 \
+    34 34 258 258 258 258 258 258 258 258 34 258 258 258 258 258 258 258 \
+    34 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 259 259 34 259 \
+    259 259 259 34 259 259 259 259 259 34 259 34 34 34 259 259 259 259 \
+    259 259 259 34 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 \
+    260 260 260 260 260 260 260 260 260 260 260 260 260 260 260 260 260 \
+    260 260 260 260 260 260 260 260 260 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 \
+    4 4 4 4 4 4 4 4 4 4 261 261 261 261 261 261 261 261 261 261 261 261 \
+    261 261 261 261 261 261 261 261 261 261 261 261 261 261 4 4 4 4 4 4 \
+    4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 262 262 262 262 262 262 262 \
     262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 262 \
-    262 262 262 262 262 262 262 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 \
-    4 4 4 4 4 4 263 263 263 263 263 263 263 263 263 263 263 263 263 263 \
-    263 263 263 263 263 263 263 263 263 263 263 263 4 4 4 4 4 4 4 4 4 4 \
-    4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 264 264 264 264 264 264 264 264 264 \
-    264 264 264 264 264 264 264 264 264 264 264 264 264 264 264 264 264 \
-    4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 34 34 34 34 265 \
-    265 265 265 265 265 265 265 265 265 265 265 265 265 265 265 265 266 \
-    265 265 265 265 265 265 265 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 267 \
-    4 4 4 4 4 4 4 4 4 4 4 4 4 4 268 268 268 268 268 268 268 268 268 268 \
-    268 268 268 268 268 268 268 269 268 268 268 268 268 268 268 4 4 4 4 \
-    4 4 4 4 4 4 4 4 4 4 4 4 4 4 270 4 4 4 4 4 4 4 4 4 4 4 4 4 4 271 271 \
-    271 271 271 271 271 271 271 271 271 271 271 271 271 271 271 272 271 \
-    271 271 271 271 271 271 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 273 4 4 \
-    4 4 4 4 4 4 4 4 4 4 4 4 274 274 274 274 274 274 274 274 274 274 274 \
-    274 274 274 274 274 274 275 274 274 274 274 274 274 274 4 4 4 4 4 4 \
-    4 4 4 4 4 4 4 4 4 4 4 4 276 4 4 4 4 4 4 4 4 4 4 4 4 4 4 277 277 277 \
-    277 277 277 277 277 277 277 277 277 277 277 277 277 277 278 277 277 \
-    277 277 277 277 277 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 279 4 4 4 4 \
+    262 262 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 263 263 \
+    263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 \
+    263 263 263 263 263 263 263 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 \
+    4 4 4 4 4 4 264 264 264 264 264 264 264 264 264 264 264 264 264 264 \
+    264 264 264 264 264 264 264 264 264 264 264 264 4 4 4 4 4 4 4 4 4 4 \
+    4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 265 265 265 265 265 265 265 265 265 \
+    265 265 265 265 265 265 265 265 265 265 265 265 265 265 265 265 265 \
+    4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 34 34 34 34 266 \
+    266 266 266 266 266 266 266 266 266 266 266 266 266 266 266 266 267 \
+    266 266 266 266 266 266 266 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 268 \
+    4 4 4 4 4 4 4 4 4 4 4 4 4 4 269 269 269 269 269 269 269 269 269 269 \
+    269 269 269 269 269 269 269 270 269 269 269 269 269 269 269 4 4 4 4 \
+    4 4 4 4 4 4 4 4 4 4 4 4 4 4 271 4 4 4 4 4 4 4 4 4 4 4 4 4 4 272 272 \
+    272 272 272 272 272 272 272 272 272 272 272 272 272 272 272 273 272 \
+    272 272 272 272 272 272 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 274 4 4 \
+    4 4 4 4 4 4 4 4 4 4 4 4 275 275 275 275 275 275 275 275 275 275 275 \
+    275 275 275 275 275 275 276 275 275 275 275 275 275 275 4 4 4 4 4 4 \
+    4 4 4 4 4 4 4 4 4 4 4 4 277 4 4 4 4 4 4 4 4 4 4 4 4 4 4 278 278 278 \
+    278 278 278 278 278 278 278 278 278 278 278 278 278 278 279 278 278 \
+    278 278 278 278 278 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 280 4 4 4 4 \
     4 4 4 4 4 4 4 4 4 4 34 34 34 34 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 \
     2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 34 \
     34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 \
@@ -803,13 +800,13 @@
     247296 249344 251392 253440 255488 257536 259584 261632 263680 \
     265728 267776 269824 271872 273920 275968 278016 280064 282112 \
     284160 286208 288256 290304 292352 294400 296448 298496 300544 \
-    302592 304644 306692 308740 310788 312836 314884 316932 318980 \
-    321028 323076 325124 327172 82436 -245167616 -245274112 -245380608 \
-    -245487104 -245593600 -245700096 -245806592 -245913088 -246019584 \
-    -246126080 -246232576 -246339072 -246445568 -244823552 -244844032 \
-    -244874752 -244942336 -244962816 -244993536 -245061120 -245081600 \
-    -245112320 -245179904 -245200384 -245231104 -245298688 -245319168 \
-    -245349888]
+    302592 304640 306692 308740 310788 312836 314884 316932 318980 \
+    321028 323076 325124 327172 329220 82436 -245167616 -245274112 \
+    -245380608 -245487104 -245593600 -245700096 -245806592 -245913088 \
+    -246019584 -246126080 -246232576 -246339072 -246445568 -244823552 \
+    -244844032 -244874752 -244942336 -244962816 -244993536 -245061120 \
+    -245081600 -245112320 -245179904 -245200384 -245231104 -245298688 \
+    -245319168 -245349888]
 
 #
 # Table for characters that lowercased to multiple ones
@@ -953,6 +950,7 @@
     {107 969} \
     {109 969} \
     {98 113} \
+    {99 8725 107 103} \
     {99 111 46} \
     {100 98} \
     {103 121} \
Index: modules/stringprep/tools/gen_stringprep_data.tcl
===================================================================
RCS file: /cvsroot/tcllib/tcllib/modules/stringprep/tools/gen_stringprep_data.tcl,v
retrieving revision 1.1
diff -u -r1.1 gen_stringprep_data.tcl
--- modules/stringprep/tools/gen_stringprep_data.tcl	29 Jan 2008 02:18:10 -0000	1.1
+++ modules/stringprep/tools/gen_stringprep_data.tcl	31 Oct 2009 19:52:06 -0000
@@ -203,6 +203,19 @@
 			    set casemap2($from) [llength $multicasemap]
 			    lappend multicasemap [list $to1 $to2 $to3]
 			}
+		    } elseif {[regexp {^   ([[:xdigit:]]+); ([[:xdigit:]]+) ([[:xdigit:]]+) ([[:xdigit:]]+) ([[:xdigit:]]+);} $line \
+			     temp from to1 to2 to3 to4]} {
+			scan $from %x from
+			scan $to1 %x to1
+			scan $to2 %x to2
+			scan $to3 %x to3
+			scan $to4 %x to4
+			if {$from <= 0x10ffff && \
+				$to1 <= 0x10ffff && $to2 <= 0x10ffff && \
+				$to3 <= 0x10ffff && $to4 <= 0x10ffff} {
+			    set casemap2($from) [llength $multicasemap]
+			    lappend multicasemap [list $to1 $to2 $to3 $to4]
+			}
 		    } else {
 			#puts "missed: $line"
 		    }
