func TestNonRepertoire(t *testing.T) { testCases := []struct { init func(e encoding.Encoding) (string, transform.Transformer, error) e encoding.Encoding src, want string }{ {dec, EUCKR, "\xfe\xfe", "\ufffd"}, // {dec, EUCKR, "א", "\ufffd"}, // TODO: why is this different? {enc, EUCKR, "א", ""}, {enc, EUCKR, "aא", "a"}, {enc, EUCKR, "\uac00א", "\xb0\xa1"}, // TODO: should we also handle Jamo? } for _, tc := range testCases { dir, tr, wantErr := tc.init(tc.e) dst, _, err := transform.String(tr, tc.src) if err != wantErr { t.Errorf("%s %v(%q): got %v; want %v", dir, tc.e, tc.src, err, wantErr) } if got := string(dst); got != tc.want { t.Errorf("%s %v(%q):\ngot %q\nwant %q", dir, tc.e, tc.src, got, tc.want) } } }
func TestNonRepertoire(t *testing.T) { testCases := []struct { init func(e encoding.Encoding) (string, transform.Transformer, error) e encoding.Encoding src, want string }{ {dec, EUCJP, "\xfe\xfc", "\ufffd"}, {dec, ISO2022JP, "\x1b$B\x7e\x7e", "\ufffd"}, {dec, ShiftJIS, "\xef\xfc", "\ufffd"}, {enc, EUCJP, "갂", ""}, {enc, EUCJP, "a갂", "a"}, {enc, EUCJP, "丌갂", "\x8f\xb0\xa4"}, {enc, ISO2022JP, "갂", ""}, {enc, ISO2022JP, "a갂", "a"}, {enc, ISO2022JP, "朗갂", "\x1b$BzF\x1b(B"}, // switch back to ASCII mode at end {enc, ShiftJIS, "갂", ""}, {enc, ShiftJIS, "a갂", "a"}, {enc, ShiftJIS, "\u2190갂", "\x81\xa9"}, } for _, tc := range testCases { dir, tr, wantErr := tc.init(tc.e) dst, _, err := transform.String(tr, tc.src) if err != wantErr { t.Errorf("%s %v(%q): got %v; want %v", dir, tc.e, tc.src, err, wantErr) } if got := string(dst); got != tc.want { t.Errorf("%s %v(%q):\ngot %q\nwant %q", dir, tc.e, tc.src, got, tc.want) } } }
func ExampleRemove() { t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC) s, _, _ := transform.String(t, "résumé") fmt.Println(s) // Output: // resume }
func ExampleIf() { // Widen everything but ASCII. isASCII := func(r rune) bool { return r <= unicode.MaxASCII } t := runes.If(runes.Predicate(isASCII), nil, width.Widen) s, _, _ := transform.String(t, "アルアノリウ tech / 中國 / 5₩") fmt.Println(s) // Output: // アルアノリウ tech / 中國 / 5₩ }
func ExampleIn() { // Convert Latin characters to their canonical form, while keeping other // width distinctions. t := runes.If(runes.In(unicode.Latin), width.Fold, nil) s, _, _ := transform.String(t, "アルアノリウ tech / アルアノリウ tech") fmt.Println(s) // Output: // アルアノリウ tech / アルアノリウ tech }
func ExampleMap() { replaceHyphens := runes.Map(func(r rune) rune { if unicode.Is(unicode.Hyphen, r) { return '|' } return r }) s, _, _ := transform.String(replaceHyphens, "a-b‐c⸗d﹣e") fmt.Println(s) // Output: // a|b|c|d|e }