From 8359c047aaebe274a2d811d61922b571ca7d10df Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 10 Dec 2024 12:29:03 -0300 Subject: Namespace packages with "urubu/" --- src/urubu/ucd/scripts.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/urubu/ucd/scripts.go (limited to 'src/urubu/ucd/scripts.go') diff --git a/src/urubu/ucd/scripts.go b/src/urubu/ucd/scripts.go new file mode 100644 index 0000000..5040283 --- /dev/null +++ b/src/urubu/ucd/scripts.go @@ -0,0 +1,52 @@ +package ucd + +import ( + "fmt" + "io" +) + +type Scripts struct { + Script map[string][]*CodePointRange + ScriptDefaultRange *CodePointRange + ScriptDefaultValue string +} + +// ParseScripts parses the Scripts.txt. +func ParseScripts(r io.Reader, propValAliases *PropertyValueAliases) (*Scripts, error) { + ss := map[string][]*CodePointRange{} + var defaultRange *CodePointRange + var defaultValue string + p := newParser(r) + for p.parse() { + if len(p.fields) > 0 { + cp, err := p.fields[0].codePointRange() + if err != nil { + return nil, err + } + + name, ok := propValAliases.Script[p.fields[1].normalizedSymbol()] + if !ok { + return nil, fmt.Errorf("unknown property: %v", p.fields[1].symbol()) + } + ss[name] = append(ss[name], cp) + } + + if len(p.defaultFields) > 0 { + var err error + defaultRange, err = p.defaultFields[0].codePointRange() + if err != nil { + return nil, err + } + defaultValue = p.defaultFields[1].normalizedSymbol() + } + } + if p.err != nil { + return nil, p.err + } + + return &Scripts{ + Script: ss, + ScriptDefaultRange: defaultRange, + ScriptDefaultValue: defaultValue, + }, nil +} -- cgit v1.2.3