aboutsummaryrefslogtreecommitdiff
path: root/src/urubu/ucd/scripts.go
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2024-12-10 12:29:03 -0300
committerEuAndreh <eu@euandre.org>2024-12-10 12:29:03 -0300
commit8359c047aaebe274a2d811d61922b571ca7d10df (patch)
tree070e0ed93d27a842776ada805eeb4270e7e3c806 /src/urubu/ucd/scripts.go
parentStart building test files (diff)
downloadcotia-8359c047aaebe274a2d811d61922b571ca7d10df.tar.gz
cotia-8359c047aaebe274a2d811d61922b571ca7d10df.tar.xz
Namespace packages with "urubu/"
Diffstat (limited to 'src/urubu/ucd/scripts.go')
-rw-r--r--src/urubu/ucd/scripts.go52
1 files changed, 52 insertions, 0 deletions
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
+}