1// Copyright 2013 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package utf8_test
6
7import (
8	"fmt"
9	"unicode/utf8"
10)
11
12func ExampleDecodeLastRune() {
13	b := []byte("Hello, 世界")
14
15	for len(b) > 0 {
16		r, size := utf8.DecodeLastRune(b)
17		fmt.Printf("%c %v\n", r, size)
18
19		b = b[:len(b)-size]
20	}
21	// Output:
22	// 界 3
23	// 世 3
24	//   1
25	// , 1
26	// o 1
27	// l 1
28	// l 1
29	// e 1
30	// H 1
31}
32
33func ExampleDecodeLastRuneInString() {
34	str := "Hello, 世界"
35
36	for len(str) > 0 {
37		r, size := utf8.DecodeLastRuneInString(str)
38		fmt.Printf("%c %v\n", r, size)
39
40		str = str[:len(str)-size]
41	}
42	// Output:
43	// 界 3
44	// 世 3
45	//   1
46	// , 1
47	// o 1
48	// l 1
49	// l 1
50	// e 1
51	// H 1
52
53}
54
55func ExampleDecodeRune() {
56	b := []byte("Hello, 世界")
57
58	for len(b) > 0 {
59		r, size := utf8.DecodeRune(b)
60		fmt.Printf("%c %v\n", r, size)
61
62		b = b[size:]
63	}
64	// Output:
65	// H 1
66	// e 1
67	// l 1
68	// l 1
69	// o 1
70	// , 1
71	//   1
72	// 世 3
73	// 界 3
74}
75
76func ExampleDecodeRuneInString() {
77	str := "Hello, 世界"
78
79	for len(str) > 0 {
80		r, size := utf8.DecodeRuneInString(str)
81		fmt.Printf("%c %v\n", r, size)
82
83		str = str[size:]
84	}
85	// Output:
86	// H 1
87	// e 1
88	// l 1
89	// l 1
90	// o 1
91	// , 1
92	//   1
93	// 世 3
94	// 界 3
95}
96
97func ExampleEncodeRune() {
98	r := '世'
99	buf := make([]byte, 3)
100
101	n := utf8.EncodeRune(buf, r)
102
103	fmt.Println(buf)
104	fmt.Println(n)
105	// Output:
106	// [228 184 150]
107	// 3
108}
109
110func ExampleFullRune() {
111	buf := []byte{228, 184, 150} // 世
112	fmt.Println(utf8.FullRune(buf))
113	fmt.Println(utf8.FullRune(buf[:2]))
114	// Output:
115	// true
116	// false
117}
118
119func ExampleFullRuneInString() {
120	str := "世"
121	fmt.Println(utf8.FullRuneInString(str))
122	fmt.Println(utf8.FullRuneInString(str[:2]))
123	// Output:
124	// true
125	// false
126}
127
128func ExampleRuneCount() {
129	buf := []byte("Hello, 世界")
130	fmt.Println("bytes =", len(buf))
131	fmt.Println("runes =", utf8.RuneCount(buf))
132	// Output:
133	// bytes = 13
134	// runes = 9
135}
136
137func ExampleRuneCountInString() {
138	str := "Hello, 世界"
139	fmt.Println("bytes =", len(str))
140	fmt.Println("runes =", utf8.RuneCountInString(str))
141	// Output:
142	// bytes = 13
143	// runes = 9
144}
145
146func ExampleRuneLen() {
147	fmt.Println(utf8.RuneLen('a'))
148	fmt.Println(utf8.RuneLen('界'))
149	// Output:
150	// 1
151	// 3
152}
153
154func ExampleRuneStart() {
155	buf := []byte("a界")
156	fmt.Println(utf8.RuneStart(buf[0]))
157	fmt.Println(utf8.RuneStart(buf[1]))
158	fmt.Println(utf8.RuneStart(buf[2]))
159	// Output:
160	// true
161	// true
162	// false
163}
164
165func ExampleValid() {
166	valid := []byte("Hello, 世界")
167	invalid := []byte{0xff, 0xfe, 0xfd}
168
169	fmt.Println(utf8.Valid(valid))
170	fmt.Println(utf8.Valid(invalid))
171	// Output:
172	// true
173	// false
174}
175
176func ExampleValidRune() {
177	valid := 'a'
178	invalid := rune(0xfffffff)
179
180	fmt.Println(utf8.ValidRune(valid))
181	fmt.Println(utf8.ValidRune(invalid))
182	// Output:
183	// true
184	// false
185}
186
187func ExampleValidString() {
188	valid := "Hello, 世界"
189	invalid := string([]byte{0xff, 0xfe, 0xfd})
190
191	fmt.Println(utf8.ValidString(valid))
192	fmt.Println(utf8.ValidString(invalid))
193	// Output:
194	// true
195	// false
196}
197