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
diff --git a/src/pkg/unicode/maketables.go b/src/pkg/unicode/maketables.go
index 915101d..53d8b96 100644
--- a/src/pkg/unicode/maketables.go
+++ b/src/pkg/unicode/maketables.go
@@ -13,7 +13,6 @@
 	"bufio"
 	"flag"
 	"fmt"
-	"io"
 	"log"
 	"net/http"
 	"os"
@@ -321,16 +320,11 @@
 		flag.Set("data", *url+"UnicodeData.txt")
 	}
 	input := open(*dataURL)
+	defer input.close()
+	scanner := bufio.NewScanner(input)
 	var first rune = 0
-	for {
-		line, err := input.ReadString('\n')
-		if err != nil {
-			if err == io.EOF {
-				break
-			}
-			logger.Fatal(err)
-		}
-		switch parseCategory(line[0 : len(line)-1]) {
+	for scanner.Scan() {
+		switch parseCategory(scanner.Text()) {
 		case SNormal:
 			if first != 0 {
 				logger.Fatalf("bad state normal at %U", lastChar)
@@ -351,7 +345,9 @@
 			first = 0
 		}
 	}
-	input.close()
+	if scanner.Err() != nil {
+		logger.Fatal(scanner.Err())
+	}
 }
 
 func loadCasefold() {
@@ -359,15 +355,11 @@
 		flag.Set("casefolding", *url+"CaseFolding.txt")
 	}
 	input := open(*casefoldingURL)
-	for {
-		line, err := input.ReadString('\n')
-		if err != nil {
-			if err == io.EOF {
-				break
-			}
-			logger.Fatal(err)
-		}
-		if line[0] == '#' || len(strings.TrimSpace(line)) == 0 {
+	defer input.close()
+	scanner := bufio.NewScanner(input)
+	for scanner.Scan() {
+		line := scanner.Text()
+		if len(line) == 0 || line[0] == '#' || len(strings.TrimSpace(line)) == 0 {
 			continue
 		}
 		field := strings.Split(line, "; ")
@@ -389,7 +381,9 @@
 		}
 		chars[p1].foldCase = rune(p2)
 	}
-	input.close()
+	if scanner.Err() != nil {
+		logger.Fatal(scanner.Err())
+	}
 }
 
 const progHeader = `// Generated by running
@@ -710,15 +704,12 @@
 		return
 	}
 	input := open(*url + file)
-	for {
-		line, err := input.ReadString('\n')
-		if err != nil {
-			if err == io.EOF {
-				break
-			}
-			logger.Fatal(err)
-		}
-		parseScript(line[0:len(line)-1], table)
+	scanner := bufio.NewScanner(input)
+	for scanner.Scan() {
+		parseScript(scanner.Text(), table)
+	}
+	if scanner.Err() != nil {
+		logger.Fatal(scanner.Err())
 	}
 	input.close()