Skip to content

Commit 6f96a76

Browse files
committed
unicode: use new Scanner interface in table creation
Update norm and local/collate as well. R=mpvl CC=golang-dev https://golang.org/cl/7395045
1 parent bca3f5f commit 6f96a76

File tree

5 files changed

+59
-91
lines changed

5 files changed

+59
-91
lines changed

src/pkg/exp/locale/collate/maketables.go

+6-11
Original file line numberDiff line numberDiff line change
@@ -236,18 +236,10 @@ func parseUCA(builder *build.Builder) {
236236
}
237237
failOnError(err)
238238
defer r.Close()
239-
input := bufio.NewReader(r)
239+
scanner := bufio.NewScanner(r)
240240
colelem := regexp.MustCompile(`\[([.*])([0-9A-F.]+)\]`)
241-
for i := 1; err == nil; i++ {
242-
l, prefix, e := input.ReadLine()
243-
err = e
244-
line := string(l)
245-
if prefix {
246-
log.Fatalf("%d: buffer overflow", i)
247-
}
248-
if err != nil && err != io.EOF {
249-
log.Fatalf("%d: %v", i, err)
250-
}
241+
for i := 1; scanner.Scan(); i++ {
242+
line := scanner.Text()
251243
if len(line) == 0 || line[0] == '#' {
252244
continue
253245
}
@@ -300,6 +292,9 @@ func parseUCA(builder *build.Builder) {
300292
failOnError(builder.Add(lhs, rhs, vars))
301293
}
302294
}
295+
if scanner.Err() != nil {
296+
log.Fatal(scanner.Err())
297+
}
303298
}
304299

305300
func convHex(line int, s string) int {

src/pkg/exp/locale/collate/regtest.go

+6-9
Original file line numberDiff line numberDiff line change
@@ -166,16 +166,10 @@ func loadTestData() []Test {
166166
ff, err := f.Open()
167167
Error(err)
168168
defer ff.Close()
169-
input := bufio.NewReader(ff)
169+
scanner := bufio.NewScanner(ff)
170170
test := Test{name: path.Base(f.Name)}
171-
for {
172-
line, err := input.ReadString('\n')
173-
if err != nil {
174-
if err == io.EOF {
175-
break
176-
}
177-
log.Fatal(err)
178-
}
171+
for scanner.Scan() {
172+
line := scanner.Text()
179173
if len(line) <= 1 || line[0] == '#' {
180174
if m := versionRe.FindStringSubmatch(line); m != nil {
181175
if m[1] != unicode.Version {
@@ -206,6 +200,9 @@ func loadTestData() []Test {
206200
test.comment = append(test.comment, m[2])
207201
}
208202
}
203+
if scanner.Err() != nil {
204+
log.Fatal(scanner.Err())
205+
}
209206
tests = append(tests, test)
210207
}
211208
return tests

src/pkg/exp/norm/maketables.go

+18-29
Original file line numberDiff line numberDiff line change
@@ -307,16 +307,12 @@ func parseCharacter(line string) {
307307
func loadUnicodeData() {
308308
f := openReader("UnicodeData.txt")
309309
defer f.Close()
310-
input := bufio.NewReader(f)
311-
for {
312-
line, err := input.ReadString('\n')
313-
if err != nil {
314-
if err == io.EOF {
315-
break
316-
}
317-
logger.Fatal(err)
318-
}
319-
parseCharacter(line[0 : len(line)-1])
310+
scanner := bufio.NewScanner(f)
311+
for scanner.Scan() {
312+
parseCharacter(scanner.Text())
313+
}
314+
if scanner.Err() != nil {
315+
logger.Fatal(scanner.Err())
320316
}
321317
}
322318

@@ -347,16 +343,9 @@ func parseExclusion(line string) int {
347343
func loadCompositionExclusions() {
348344
f := openReader("CompositionExclusions.txt")
349345
defer f.Close()
350-
input := bufio.NewReader(f)
351-
for {
352-
line, err := input.ReadString('\n')
353-
if err != nil {
354-
if err == io.EOF {
355-
break
356-
}
357-
logger.Fatal(err)
358-
}
359-
point := parseExclusion(line[0 : len(line)-1])
346+
scanner := bufio.NewScanner(f)
347+
for scanner.Scan() {
348+
point := parseExclusion(scanner.Text())
360349
if point == 0 {
361350
continue
362351
}
@@ -366,6 +355,9 @@ func loadCompositionExclusions() {
366355
}
367356
c.excludeInComp = true
368357
}
358+
if scanner.Err() != nil {
359+
log.Fatal(scanner.Err())
360+
}
369361
}
370362

371363
// hasCompatDecomp returns true if any of the recursive
@@ -853,15 +845,9 @@ func testDerived() {
853845
}
854846
f := openReader("DerivedNormalizationProps.txt")
855847
defer f.Close()
856-
input := bufio.NewReader(f)
857-
for {
858-
line, err := input.ReadString('\n')
859-
if err != nil {
860-
if err == io.EOF {
861-
break
862-
}
863-
logger.Fatal(err)
864-
}
848+
scanner := bufio.NewScanner(f)
849+
for scanner.Scan() {
850+
line := scanner.Text()
865851
qc := qcRe.FindStringSubmatch(line)
866852
if qc == nil {
867853
continue
@@ -920,6 +906,9 @@ func testDerived() {
920906
}
921907
}
922908
}
909+
if scanner.Err() != nil {
910+
logger.Fatal(scanner.Err())
911+
}
923912
// Any unspecified value must be QCYes. Verify this.
924913
for i, c := range chars {
925914
for j, fd := range c.forms {

src/pkg/exp/norm/normregtest.go

+8-12
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"exp/norm"
1313
"flag"
1414
"fmt"
15-
"io"
1615
"log"
1716
"net/http"
1817
"os"
@@ -118,8 +117,8 @@ func (t Test) Name() string {
118117
return fmt.Sprintf("%s:%d", part[t.partnr].name, t.number)
119118
}
120119

121-
var partRe = regexp.MustCompile(`@Part(\d) # (.*)\n$`)
122-
var testRe = regexp.MustCompile(`^` + strings.Repeat(`([\dA-F ]+);`, 5) + ` # (.*)\n?$`)
120+
var partRe = regexp.MustCompile(`@Part(\d) # (.*)$`)
121+
var testRe = regexp.MustCompile(`^` + strings.Repeat(`([\dA-F ]+);`, 5) + ` # (.*)$`)
123122

124123
var counter int
125124

@@ -141,15 +140,9 @@ func loadTestData() {
141140
}
142141
f := resp.Body
143142
defer f.Close()
144-
input := bufio.NewReader(f)
145-
for {
146-
line, err := input.ReadString('\n')
147-
if err != nil {
148-
if err == io.EOF {
149-
break
150-
}
151-
logger.Fatal(err)
152-
}
143+
scanner := bufio.NewScanner(f)
144+
for scanner.Scan() {
145+
line := scanner.Text()
153146
if len(line) == 0 || line[0] == '#' {
154147
continue
155148
}
@@ -190,6 +183,9 @@ func loadTestData() {
190183
part := &part[len(part)-1]
191184
part.tests = append(part.tests, test)
192185
}
186+
if scanner.Err() != nil {
187+
logger.Fatal(scanner.Err())
188+
}
193189
}
194190

195191
var fstr = []string{"NFC", "NFD", "NFKC", "NFKD"}

src/pkg/unicode/maketables.go

+21-30
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
"bufio"
1414
"flag"
1515
"fmt"
16-
"io"
1716
"log"
1817
"net/http"
1918
"os"
@@ -321,16 +320,11 @@ func loadChars() {
321320
flag.Set("data", *url+"UnicodeData.txt")
322321
}
323322
input := open(*dataURL)
323+
defer input.close()
324+
scanner := bufio.NewScanner(input)
324325
var first rune = 0
325-
for {
326-
line, err := input.ReadString('\n')
327-
if err != nil {
328-
if err == io.EOF {
329-
break
330-
}
331-
logger.Fatal(err)
332-
}
333-
switch parseCategory(line[0 : len(line)-1]) {
326+
for scanner.Scan() {
327+
switch parseCategory(scanner.Text()) {
334328
case SNormal:
335329
if first != 0 {
336330
logger.Fatalf("bad state normal at %U", lastChar)
@@ -351,23 +345,21 @@ func loadChars() {
351345
first = 0
352346
}
353347
}
354-
input.close()
348+
if scanner.Err() != nil {
349+
logger.Fatal(scanner.Err())
350+
}
355351
}
356352

357353
func loadCasefold() {
358354
if *casefoldingURL == "" {
359355
flag.Set("casefolding", *url+"CaseFolding.txt")
360356
}
361357
input := open(*casefoldingURL)
362-
for {
363-
line, err := input.ReadString('\n')
364-
if err != nil {
365-
if err == io.EOF {
366-
break
367-
}
368-
logger.Fatal(err)
369-
}
370-
if line[0] == '#' || len(strings.TrimSpace(line)) == 0 {
358+
defer input.close()
359+
scanner := bufio.NewScanner(input)
360+
for scanner.Scan() {
361+
line := scanner.Text()
362+
if len(line) == 0 || line[0] == '#' || len(strings.TrimSpace(line)) == 0 {
371363
continue
372364
}
373365
field := strings.Split(line, "; ")
@@ -389,7 +381,9 @@ func loadCasefold() {
389381
}
390382
chars[p1].foldCase = rune(p2)
391383
}
392-
input.close()
384+
if scanner.Err() != nil {
385+
logger.Fatal(scanner.Err())
386+
}
393387
}
394388

395389
const progHeader = `// Generated by running
@@ -710,15 +704,12 @@ func printScriptOrProperty(doProps bool) {
710704
return
711705
}
712706
input := open(*url + file)
713-
for {
714-
line, err := input.ReadString('\n')
715-
if err != nil {
716-
if err == io.EOF {
717-
break
718-
}
719-
logger.Fatal(err)
720-
}
721-
parseScript(line[0:len(line)-1], table)
707+
scanner := bufio.NewScanner(input)
708+
for scanner.Scan() {
709+
parseScript(scanner.Text(), table)
710+
}
711+
if scanner.Err() != nil {
712+
logger.Fatal(scanner.Err())
722713
}
723714
input.close()
724715

0 commit comments

Comments
 (0)