diff options
author | Rob Pike <r@golang.org> | 2009-03-06 03:22:02 -0800 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2009-03-06 03:22:02 -0800 |
commit | d29c50df64399a72d1c1751d0496c74e59a49048 (patch) | |
tree | 6586f9c507fb717e8f58782faf65b1221bae4f76 | |
parent | 8e31e565aa38872f09d589cefb374e81ffabebcf (diff) | |
download | golang-d29c50df64399a72d1c1751d0496c74e59a49048.tar.gz |
document unicode, such as it is
R=rsc
DELTA=18 (9 added, 0 deleted, 9 changed)
OCL=25817
CL=25832
-rw-r--r-- | src/lib/unicode/letter.go | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/lib/unicode/letter.go b/src/lib/unicode/letter.go index 3b1221b87..d7aa678c9 100644 --- a/src/lib/unicode/letter.go +++ b/src/lib/unicode/letter.go @@ -10,14 +10,19 @@ // link in only the tables that are used by the program, // etc. +// This package provides data and functions to test some properties of Unicode code points. +// It is rudimentary but will improve. package unicode +// The representation of a range of Unicode code points. The range runs from Lo to Hi +// inclusive and has the specified stride. type Range struct { - lo int; - hi int; - stride int; + Lo int; + Hi int; + Stride int; } +// Upper is the set of Unicode upper case letters. var Upper = []Range{ Range{0x0041, 0x005a, 1}, Range{0x00c0, 0x00d6, 1}, @@ -150,6 +155,7 @@ var Upper = []Range{ Range{0x1d7ca, 0x1d7ca, 1}, } +// Letter is the set of Unicode letters. var Letter = []Range { Range{0x0041, 0x005a, 1}, Range{0x0061, 0x007a, 1}, @@ -525,18 +531,19 @@ var Letter = []Range { Range{0x2f800, 0x2fa1d, 1}, } +// Is tests whether rune is in the specified table of ranges. 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]; - if rune > r.hi { + if rune > r.Hi { continue; } - if rune < r.lo { + if rune < r.Lo { return false; } - return (rune - r.lo) % r.stride == 0; + return (rune - r.Lo) % r.Stride == 0; } return false; } @@ -547,10 +554,10 @@ func Is(ranges []Range, rune int) bool { for lo < hi { m := lo + (hi - lo)/2; r := ranges[m]; - if r.lo <= rune && rune <= r.hi { - return (rune - r.lo) % r.stride == 0; + if r.Lo <= rune && rune <= r.Hi { + return (rune - r.Lo) % r.Stride == 0; } - if rune < r.lo { + if rune < r.Lo { hi = m; } else { lo = m+1; @@ -559,10 +566,12 @@ func Is(ranges []Range, rune int) bool { return false; } +// IsLetter reports whether the rune is an upper case letter. func IsUpper(rune int) bool { return Is(Upper, rune); } +// IsLetter reports whether the rune is a letter. func IsLetter(rune int) bool { return Is(Letter, rune); } |