unicode/cldr: improve documentation
Change-Id: I376ad957a3417cc909f828786d6faf2a0d61bb1f
Reviewed-on: https://go-review.googlesource.com/101995
Run-TryBot: Marcel van Lohuizen <mpvl@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ross Light <light@google.com>
diff --git a/unicode/cldr/cldr.go b/unicode/cldr/cldr.go
index 2197f8a..052845f 100644
--- a/unicode/cldr/cldr.go
+++ b/unicode/cldr/cldr.go
@@ -5,14 +5,15 @@
//go:generate go run makexml.go -output xml.go
// Package cldr provides a parser for LDML and related XML formats.
-// This package is intended to be used by the table generation tools
-// for the various internationalization-related packages.
-// As the XML types are generated from the CLDR DTD, and as the CLDR standard
-// is periodically amended, this package may change considerably over time.
-// This mostly means that data may appear and disappear between versions.
-// That is, old code should keep compiling for newer versions, but data
-// may have moved or changed.
-// CLDR version 22 is the first version supported by this package.
+//
+// This package is intended to be used by the table generation tools for the
+// various packages in x/text and is not internal for historical reasons.
+//
+// As the XML types are generated from the CLDR DTD, and as the CLDR standard is
+// periodically amended, this package may change considerably over time. This
+// mostly means that data may appear and disappear between versions. That is,
+// old code should keep compiling for newer versions, but data may have moved or
+// changed. CLDR version 22 is the first version supported by this package.
// Older versions may not work.
package cldr // import "golang.org/x/text/unicode/cldr"
@@ -94,6 +95,12 @@
// LDML returns the fully resolved LDML XML for loc, which must be one of
// the strings returned by Locales.
+//
+// Deprecated: use RawLDML and implement inheritance manually or using the
+// internal cldrtree package.
+// Inheritance has changed quite a bit since the onset of this package and in
+// practice data often represented in a way where knowledge of how it was
+// inherited is relevant.
func (cldr *CLDR) LDML(loc string) (*LDML, error) {
return cldr.resolve(loc)
}
diff --git a/unicode/cldr/decode.go b/unicode/cldr/decode.go
index 094d431..bb4d4d1 100644
--- a/unicode/cldr/decode.go
+++ b/unicode/cldr/decode.go
@@ -58,9 +58,10 @@
if len(d.dirFilter) > 0 && !in(d.dirFilter, m[1]) {
continue
}
- var r io.Reader
+ var r io.ReadCloser
if r, err = l.Reader(i); err == nil {
err = d.decode(m[1], m[2], r)
+ r.Close()
}
if err != nil {
return nil, err
diff --git a/unicode/cldr/examples_test.go b/unicode/cldr/examples_test.go
index 1a69b00..85d79d1 100644
--- a/unicode/cldr/examples_test.go
+++ b/unicode/cldr/examples_test.go
@@ -2,10 +2,85 @@
import (
"fmt"
+ "os"
+ "path/filepath"
+ "golang.org/x/text/internal/gen"
"golang.org/x/text/unicode/cldr"
)
+func ExampleDecoder() {
+ // Obtain the default CLDR reader (only for x/text packages).
+
+ var d cldr.Decoder
+
+ // Speed up decoding by setting filters for only what you need.
+ d.SetDirFilter("main", "supplemental")
+ d.SetSectionFilter("numbers", "plurals")
+
+ cldr, err := d.DecodeZip(gen.OpenCLDRCoreZip())
+ if err != nil {
+ fmt.Println("ERROR", err)
+ return
+ }
+ supplemental := cldr.Supplemental()
+
+ fmt.Println(supplemental.MeasurementData.MeasurementSystem[0].Type)
+ for _, lang := range cldr.Locales() {
+ data := cldr.RawLDML(lang)
+ fmt.Println(lang, data.Identity.Version.Number)
+ }
+}
+
+func ExampleDecoder_DecodePath() {
+ // This directory will exist if a go generate has been run in any of the
+ // packages in x/text using the cldr package.
+ path := filepath.FromSlash("../../DATA/cldr/" + cldr.Version)
+
+ var d cldr.Decoder
+
+ // Speed up decoding by setting filters for only what you need.
+ d.SetDirFilter("main")
+ d.SetSectionFilter("numbers")
+
+ cldr, err := d.DecodePath(path)
+ if err != nil {
+ // handle error
+ fmt.Println("ERROR", err)
+ return
+ }
+ for _, lang := range cldr.Locales() {
+ if numbers := cldr.RawLDML(lang).Numbers; numbers != nil {
+ fmt.Println(lang, len(numbers.Symbols))
+ }
+ }
+}
+
+func ExampleDecoder_DecodeZip() {
+ // This directory will exist if a go generate has been run in any of the
+ // packages in x/text using the cldr package.
+ path := filepath.FromSlash("../../DATA/cldr/" + cldr.Version)
+
+ var d cldr.Decoder
+
+ r, err := os.Open(filepath.Join(path, "core.zip"))
+ if err != nil {
+ fmt.Println("error:", err)
+ return
+ }
+
+ // Only loading supplemental data can be done much faster using a dir
+ // filter.
+ d.SetDirFilter("supplemental")
+ cldr, err := d.DecodeZip(r)
+ if err != nil {
+ fmt.Println("error:", err)
+ return
+ }
+
+ fmt.Println(cldr.Supplemental().MeasurementData.MeasurementSystem[0].Type)
+}
+
func ExampleSlice() {
var dr *cldr.CLDR // assume this is initialized