func isDigit(ch int) bool {
return
'0' <= ch && ch <= '9' ||
- ch >= 0x80 && unicode.IsDecimalDigit(ch);
+ ch >= 0x80 && unicode.IsDigit(ch);
}
TARG=unicode
GOFILES=\
- decimaldigit.go\
+ digit.go\
digittables.go\
letter.go\
lettertables.go\
+++ /dev/null
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package unicode
-
-// IsDecimalDigit reports whether the rune is a decimal digit.
-func IsDecimalDigit(rune int) bool {
- return Is(DecimalDigit, rune);
-}
--- /dev/null
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package unicode
+
+// IsDigit reports whether the rune is a decimal digit.
+func IsDigit(rune int) bool {
+ if rune < 0x100 { // quick ASCII (Latin-1, really) check
+ return '0' <= rune && rune <= '9'
+ }
+ return Is(Digit, rune);
+}
// grep '^....;[^;]*;Nd;' UnicodeData.txt
// To generate this table:
// ,s/([^;]+).+/ 0x\1, \/\/ &/g
-var testDecimal = []int{
+var testDigit = []int{
0x0030, // 0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
0x0031, // 0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
0x0032, // 0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
0x2fa1d,
}
-func TestIsDecimalDigit(t *testing.T) {
- for i, r := range testDecimal {
- if !IsDecimalDigit(r) {
- t.Errorf("IsDecimalDigit(%#x) = false, want true\n", r);
+func TestDigit(t *testing.T) {
+ for i, r := range testDigit {
+ if !IsDigit(r) {
+ t.Errorf("IsDigit(%#x) = false, want true\n", r);
}
}
for i, r := range testLetter {
- if IsDecimalDigit(r) {
- t.Errorf("IsDecimalDigit(%#x) = true, want false\n", r);
+ if IsDigit(r) {
+ t.Errorf("IsDigit(%#x) = true, want false\n", r);
}
}
}
// Generated by running
-// tables --digits=true --url=http://www.unicode.org/Public/5.1.0/ucd/UnicodeData.txt
+// maketables --digits=true --url=http://www.unicode.org/Public/5.1.0/ucd/UnicodeData.txt
// DO NOT EDIT
package unicode
-// DecimalDigit is the set of Unicode characters with the "decimal digit" property.
-var DecimalDigit = decimalDigit
-var decimalDigit = []Range {
+// Digit is the set of Unicode characters with the "decimal digit" (Nd) property.
+var Digit = digit
+var digit = []Range {
Range{0x0030, 0x0039, 1},
Range{0x0660, 0x0669, 1},
Range{0x06f0, 0x06f9, 1},
func Is(ranges []Range, rune int) bool {
// common case: rune is ASCII or Latin-1
if rune < 0x100 {
- for i := 0; i < len(ranges); i++ {
- r := ranges[i];
+ for i, r := range ranges {
if rune > r.Hi {
continue;
}
// IsUpper reports whether the rune is an upper case letter.
func IsUpper(rune int) bool {
+ if rune < 0x80 { // quick ASCII check
+ return 'A' <= rune && rune <= 'Z';
+ }
return Is(Upper, rune);
}
// IsLower reports whether the rune is a lower case letter.
func IsLower(rune int) bool {
+ if rune < 0x80 { // quick ASCII check
+ return 'a' <= rune && rune <= 'z';
+ }
return Is(Lower, rune);
}
// IsTitle reports whether the rune is a title case letter.
func IsTitle(rune int) bool {
+ if rune < 0x80 { // quick ASCII check
+ return false;
+ }
return Is(Title, rune);
}
// IsLetter reports whether the rune is a letter.
func IsLetter(rune int) bool {
+ if rune < 0x80 { // quick ASCII check
+ rune &^= ' ';
+ return 'A' <= rune && rune <= 'Z';
+ }
return Is(Letter, rune);
}
resp.Body.Close();
fmt.Printf(
"// Generated by running\n"
- "// tables --digits=%t --url=%s\n"
+ "// maketables --digits=%t --url=%s\n"
"// DO NOT EDIT\n\n"
"package unicode\n",
*digits,
// available to clients.
if *digits {
dumpRange(
- "\n// DecimalDigit is the set of Unicode characters with the \"decimal digit\" property.\n"
- "var DecimalDigit = decimalDigit\n"
- "var decimalDigit = []Range {\n",
+ "\n// Digit is the set of Unicode characters with the \"decimal digit\" (Nd) property.\n"
+ "var Digit = digit\n"
+ "var digit = []Range {\n",
func(code int) bool { return chars[code].category == "Nd" },
"}\n"
);