git.lucas.co / go_mono
git clone https://git.lucas.co/go_mono.git

commitb53870fbcf2dabd111ee3c99562452b9f4f72dc3
parent5ae59125bf
authorNigel Tao <[email protected]>
date2015-08-26 11:28
shiny/font/plan9font: add an example test.

The testdata/fixed font files come from the Plan 9 Port, and were all
marked as public domain. The total size of the new testdata is 112K.

Change-Id: I8cf5de4e5abd1aec7e6550d330271f2acdc12402
Reviewed-on: https://go-review.googlesource.com/13888
Reviewed-by: Rob Pike <[email protected]>

 font/plan9font/example_test.go        |  93 ++++++++++++++++++++++++++++++++++
 font/testdata/fixed/7x13.0000         | Bin 0 -> 3136 bytes
 font/testdata/fixed/7x13.0100         | Bin 0 -> 3908 bytes
 font/testdata/fixed/7x13.0200         | Bin 0 -> 3095 bytes
 font/testdata/fixed/7x13.0300         | Bin 0 -> 2631 bytes
 font/testdata/fixed/7x13.0400         | Bin 0 -> 3623 bytes
 font/testdata/fixed/7x13.0500         | Bin 0 -> 2492 bytes
 font/testdata/fixed/7x13.0E00         | Bin 0 -> 1235 bytes
 font/testdata/fixed/7x13.1000         | Bin 0 -> 2354 bytes
 font/testdata/fixed/7x13.1600         | Bin 0 -> 1825 bytes
 font/testdata/fixed/7x13.1E00         | Bin 0 -> 3713 bytes
 font/testdata/fixed/7x13.1F00         | Bin 0 -> 3012 bytes
 font/testdata/fixed/7x13.2000         | Bin 0 -> 2310 bytes
 font/testdata/fixed/7x13.2100         | Bin 0 -> 3206 bytes
 font/testdata/fixed/7x13.2200         | Bin 0 -> 3532 bytes
 font/testdata/fixed/7x13.2300         | Bin 0 -> 1613 bytes
 font/testdata/fixed/7x13.2400         | Bin 0 -> 1013 bytes
 font/testdata/fixed/7x13.2500         | Bin 0 -> 2747 bytes
 font/testdata/fixed/7x13.2600         | Bin 0 -> 1765 bytes
 font/testdata/fixed/7x13.2700         | Bin 0 -> 1762 bytes
 font/testdata/fixed/7x13.2800         | Bin 0 -> 1918 bytes
 font/testdata/fixed/7x13.2A00         | Bin 0 -> 620 bytes
 font/testdata/fixed/7x13.3000         | Bin 0 -> 569 bytes
 font/testdata/fixed/7x13.FB00         | Bin 0 -> 912 bytes
 font/testdata/fixed/7x13.FE00         | Bin 0 -> 387 bytes
 font/testdata/fixed/7x13.FF00         | Bin 0 -> 1687 bytes
 font/testdata/fixed/README            |   9 ++++
 font/testdata/fixed/unicode.7x13.font |  68 +++++++++++++++++++++++++
 28 files changed, 170 insertions(+)

diff --git a/font/plan9font/example_test.go b/font/plan9font/example_test.go
new file mode 100644
index 0000000..071fcfa
--- /dev/null
+++ b/font/plan9font/example_test.go
@@ -0,0 +1,93 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package plan9font_test
+
+import (
+	"image"
+	"image/draw"
+	"io/ioutil"
+	"log"
+	"os"
+	"path"
+	"path/filepath"
+
+	"golang.org/x/exp/shiny/font"
+	"golang.org/x/exp/shiny/font/plan9font"
+	"golang.org/x/image/math/fixed"
+)
+
+func ExampleParseFont() {
+	readFile := func(name string) ([]byte, error) {
+		return ioutil.ReadFile(filepath.FromSlash(path.Join("../testdata/fixed", name)))
+	}
+	fontData, err := readFile("unicode.7x13.font")
+	if err != nil {
+		log.Fatal(err)
+	}
+	face, err := plan9font.ParseFont(fontData, readFile)
+	if err != nil {
+		log.Fatal(err)
+	}
+	// TODO: derive the ascent from the face's metrics.
+	const ascent = 11
+
+	dst := image.NewRGBA(image.Rect(0, 0, 4*7, 13))
+	draw.Draw(dst, dst.Bounds(), image.Black, image.Point{}, draw.Src)
+	d := &font.Drawer{
+		Dst:  dst,
+		Src:  image.White,
+		Face: face,
+		Dot:  fixed.P(0, ascent),
+	}
+	// Draw:
+	// 	- U+0053 LATIN CAPITAL LETTER S
+	//	- U+03A3 GREEK CAPITAL LETTER SIGMA
+	//	- U+222B INTEGRAL
+	//	- U+3055 HIRAGANA LETTER SA
+	// The testdata does not contain the CJK subfont files, so U+3055 HIRAGANA
+	// LETTER SA (さ) should be rendered as U+FFFD REPLACEMENT CHARACTER (�).
+	//
+	// The missing subfont file will trigger an "open
+	// ../testdata/shinonome/k12.3000: no such file or directory" log message.
+	// This is expected and can be ignored.
+	d.DrawString("SΣ∫さ")
+
+	// Convert the dst image to ASCII art.
+	var out []byte
+	b := dst.Bounds()
+	for y := b.Min.Y; y < b.Max.Y; y++ {
+		out = append(out, '0'+byte(y%10), ' ')
+		for x := b.Min.X; x < b.Max.X; x++ {
+			if dst.RGBAAt(x, y).R > 0 {
+				out = append(out, 'X')
+			} else {
+				out = append(out, '.')
+			}
+		}
+		// Highlight the last row before the baseline. Glyphs like 'S' without
+		// descenders should not affect any pixels whose Y coordinate is >= the
+		// baseline.
+		if y == ascent-1 {
+			out = append(out, '_')
+		}
+		out = append(out, '\n')
+	}
+	os.Stdout.Write(out)
+
+	// Output:
+	// 0 ..................X.........
+	// 1 .................X.X........
+	// 2 .XXXX..XXXXXX....X.....XXX..
+	// 3 X....X.X.........X....XX.XX.
+	// 4 X.......X........X....X.X.X.
+	// 5 X........X.......X....XXX.X.
+	// 6 .XXXX.....X......X....XX.XX.
+	// 7 .....X...X.......X....XX.XX.
+	// 8 .....X..X........X....XXXXX.
+	// 9 X....X.X.........X....XX.XX.
+	// 0 .XXXX..XXXXXX....X.....XXX.._
+	// 1 ...............X.X..........
+	// 2 ................X...........
+}
diff --git a/font/testdata/fixed/7x13.0000 b/font/testdata/fixed/7x13.0000
new file mode 100644
index 0000000..9509cdf
Binary files /dev/null and b/font/testdata/fixed/7x13.0000 differ
diff --git a/font/testdata/fixed/7x13.0100 b/font/testdata/fixed/7x13.0100
new file mode 100644
index 0000000..0a79f55
Binary files /dev/null and b/font/testdata/fixed/7x13.0100 differ
diff --git a/font/testdata/fixed/7x13.0200 b/font/testdata/fixed/7x13.0200
new file mode 100644
index 0000000..e25247e
Binary files /dev/null and b/font/testdata/fixed/7x13.0200 differ
diff --git a/font/testdata/fixed/7x13.0300 b/font/testdata/fixed/7x13.0300
new file mode 100644
index 0000000..86eb33f
Binary files /dev/null and b/font/testdata/fixed/7x13.0300 differ
diff --git a/font/testdata/fixed/7x13.0400 b/font/testdata/fixed/7x13.0400
new file mode 100644
index 0000000..43300ad
Binary files /dev/null and b/font/testdata/fixed/7x13.0400 differ
diff --git a/font/testdata/fixed/7x13.0500 b/font/testdata/fixed/7x13.0500
new file mode 100644
index 0000000..2d93267
Binary files /dev/null and b/font/testdata/fixed/7x13.0500 differ
diff --git a/font/testdata/fixed/7x13.0E00 b/font/testdata/fixed/7x13.0E00
new file mode 100644
index 0000000..7c51a1e
Binary files /dev/null and b/font/testdata/fixed/7x13.0E00 differ
diff --git a/font/testdata/fixed/7x13.1000 b/font/testdata/fixed/7x13.1000
new file mode 100644
index 0000000..019698c
Binary files /dev/null and b/font/testdata/fixed/7x13.1000 differ
diff --git a/font/testdata/fixed/7x13.1600 b/font/testdata/fixed/7x13.1600
new file mode 100644
index 0000000..f69a977
Binary files /dev/null and b/font/testdata/fixed/7x13.1600 differ
diff --git a/font/testdata/fixed/7x13.1E00 b/font/testdata/fixed/7x13.1E00
new file mode 100644
index 0000000..3bc5068
Binary files /dev/null and b/font/testdata/fixed/7x13.1E00 differ
diff --git a/font/testdata/fixed/7x13.1F00 b/font/testdata/fixed/7x13.1F00
new file mode 100644
index 0000000..43b320b
Binary files /dev/null and b/font/testdata/fixed/7x13.1F00 differ
diff --git a/font/testdata/fixed/7x13.2000 b/font/testdata/fixed/7x13.2000
new file mode 100644
index 0000000..f9244e1
Binary files /dev/null and b/font/testdata/fixed/7x13.2000 differ
diff --git a/font/testdata/fixed/7x13.2100 b/font/testdata/fixed/7x13.2100
new file mode 100644
index 0000000..c565abb
Binary files /dev/null and b/font/testdata/fixed/7x13.2100 differ
diff --git a/font/testdata/fixed/7x13.2200 b/font/testdata/fixed/7x13.2200
new file mode 100644
index 0000000..a992d35
Binary files /dev/null and b/font/testdata/fixed/7x13.2200 differ
diff --git a/font/testdata/fixed/7x13.2300 b/font/testdata/fixed/7x13.2300
new file mode 100644
index 0000000..8ff099d
Binary files /dev/null and b/font/testdata/fixed/7x13.2300 differ
diff --git a/font/testdata/fixed/7x13.2400 b/font/testdata/fixed/7x13.2400
new file mode 100644
index 0000000..99927a1
Binary files /dev/null and b/font/testdata/fixed/7x13.2400 differ
diff --git a/font/testdata/fixed/7x13.2500 b/font/testdata/fixed/7x13.2500
new file mode 100644
index 0000000..60dc224
Binary files /dev/null and b/font/testdata/fixed/7x13.2500 differ
diff --git a/font/testdata/fixed/7x13.2600 b/font/testdata/fixed/7x13.2600
new file mode 100644
index 0000000..1b393c2
Binary files /dev/null and b/font/testdata/fixed/7x13.2600 differ
diff --git a/font/testdata/fixed/7x13.2700 b/font/testdata/fixed/7x13.2700
new file mode 100644
index 0000000..c39a572
Binary files /dev/null and b/font/testdata/fixed/7x13.2700 differ
diff --git a/font/testdata/fixed/7x13.2800 b/font/testdata/fixed/7x13.2800
new file mode 100644
index 0000000..c7572de
Binary files /dev/null and b/font/testdata/fixed/7x13.2800 differ
diff --git a/font/testdata/fixed/7x13.2A00 b/font/testdata/fixed/7x13.2A00
new file mode 100644
index 0000000..71791ac
Binary files /dev/null and b/font/testdata/fixed/7x13.2A00 differ
diff --git a/font/testdata/fixed/7x13.3000 b/font/testdata/fixed/7x13.3000
new file mode 100644
index 0000000..fb830f4
Binary files /dev/null and b/font/testdata/fixed/7x13.3000 differ
diff --git a/font/testdata/fixed/7x13.FB00 b/font/testdata/fixed/7x13.FB00
new file mode 100644
index 0000000..3a0b30a
Binary files /dev/null and b/font/testdata/fixed/7x13.FB00 differ
diff --git a/font/testdata/fixed/7x13.FE00 b/font/testdata/fixed/7x13.FE00
new file mode 100644
index 0000000..3989d26
Binary files /dev/null and b/font/testdata/fixed/7x13.FE00 differ
diff --git a/font/testdata/fixed/7x13.FF00 b/font/testdata/fixed/7x13.FF00
new file mode 100644
index 0000000..78ed398
Binary files /dev/null and b/font/testdata/fixed/7x13.FF00 differ
diff --git a/font/testdata/fixed/README b/font/testdata/fixed/README
new file mode 100644
index 0000000..a39f8a5
--- /dev/null
+++ b/font/testdata/fixed/README
@@ -0,0 +1,9 @@
+These font files were copied from the Plan 9 Port's font/fixed directory. The
+README in that directory states that: "These fonts are converted from the BDFs
+in the XFree86 distribution. They were all marked as public domain."
+
+The Plan 9 Port is at https://github.com/9fans/plan9port and the copy was made
+from commit a78b1841 (2015-08-18).
+
+The unicode.7x13.font file also refers to a ../shinonome directory, but this
+testdata does not include those subfont files.
diff --git a/font/testdata/fixed/unicode.7x13.font b/font/testdata/fixed/unicode.7x13.font
new file mode 100644
index 0000000..337b428
--- /dev/null
+++ b/font/testdata/fixed/unicode.7x13.font
@@ -0,0 +1,68 @@
+13 10
+0x0000 0x001F 7x13.2400
+0x0000 0x00FF 7x13.0000
+0x0100 0x01FF 7x13.0100
+0x0200 0x02FF 7x13.0200
+0x0300 0x03FF 7x13.0300
+0x0400 0x04FF 7x13.0400
+0x0500 0x05FF 7x13.0500
+0x0E00 0x0EFF 7x13.0E00
+0x1000 0x10FF 7x13.1000
+0x1600 0x16FF 7x13.1600
+0x1E00 0x1EFF 7x13.1E00
+0x1F00 0x1FFF 7x13.1F00
+0x2000 0x20FF 7x13.2000
+0x2100 0x21FF 7x13.2100
+0x2200 0x22FF 7x13.2200
+0x2300 0x23FF 7x13.2300
+0x2400 0x24FF 7x13.2400
+0x2500 0x25FF 7x13.2500
+0x2600 0x26FF 7x13.2600
+0x2700 0x27FF 7x13.2700
+0x2800 0x28FF 7x13.2800
+0x2A00 0x2AFF 7x13.2A00
+0x3000 0x30fe ../shinonome/k12.3000
+0x4e00 0x4ffe ../shinonome/k12.4e00
+0x5005 0x51fe ../shinonome/k12.5005
+0x5200 0x53fa ../shinonome/k12.5200
+0x5401 0x55fe ../shinonome/k12.5401
+0x5606 0x57fc ../shinonome/k12.5606
+0x5800 0x59ff ../shinonome/k12.5800
+0x5a01 0x5bff ../shinonome/k12.5a01
+0x5c01 0x5dfe ../shinonome/k12.5c01
+0x5e02 0x5fff ../shinonome/k12.5e02
+0x600e 0x61ff ../shinonome/k12.600e
+0x6200 0x63fa ../shinonome/k12.6200
+0x6406 0x65fb ../shinonome/k12.6406
+0x6602 0x67ff ../shinonome/k12.6602
+0x6802 0x69ff ../shinonome/k12.6802
+0x6a02 0x6bf3 ../shinonome/k12.6a02
+0x6c08 0x6dfb ../shinonome/k12.6c08
+0x6e05 0x6ffe ../shinonome/k12.6e05
+0x7001 0x71ff ../shinonome/k12.7001
+0x7206 0x73fe ../shinonome/k12.7206
+0x7403 0x75ff ../shinonome/k12.7403
+0x7601 0x77fc ../shinonome/k12.7601
+0x7802 0x79fb ../shinonome/k12.7802
+0x7a00 0x7bf7 ../shinonome/k12.7a00
+0x7c00 0x7dfb ../shinonome/k12.7c00
+0x7e01 0x7ffc ../shinonome/k12.7e01
+0x8000 0x81fe ../shinonome/k12.8000
+0x8201 0x83fd ../shinonome/k12.8201
+0x8403 0x85fe ../shinonome/k12.8403
+0x8602 0x87fe ../shinonome/k12.8602
+0x8805 0x89f8 ../shinonome/k12.8805
+0x8a00 0x8b9a ../shinonome/k12.8a00
+0x8c37 0x8dff ../shinonome/k12.8c37
+0x8e08 0x8ffd ../shinonome/k12.8e08
+0x9000 0x91ff ../shinonome/k12.9000
+0x920d 0x93e8 ../shinonome/k12.920d
+0x9403 0x95e5 ../shinonome/k12.9403
+0x961c 0x97ff ../shinonome/k12.961c
+0x9801 0x99ff ../shinonome/k12.9801
+0x9a01 0x9bf5 ../shinonome/k12.9a01
+0x9c04 0x9dfd ../shinonome/k12.9c04
+0x9e1a 0x9fa0 ../shinonome/k12.9e1a
+0xFB00 0xFBFF 7x13.FB00
+0xFE00 0xFEFF 7x13.FE00
+0xFF00 0xFFFF 7x13.FF00