From 25d6ae69d1cb392922b9d9dc0da1c17aef9a9db2 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Sun, 7 Sep 2014 19:58:01 -0400 Subject: Remove hg dep --- modules/mahonia/ASCII.go | 76 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 modules/mahonia/ASCII.go (limited to 'modules/mahonia/ASCII.go') diff --git a/modules/mahonia/ASCII.go b/modules/mahonia/ASCII.go new file mode 100644 index 00000000..5e4eebf4 --- /dev/null +++ b/modules/mahonia/ASCII.go @@ -0,0 +1,76 @@ +package mahonia + +// Converters for ASCII and ISO-8859-1 + +func init() { + for i := 0; i < len(asciiCharsets); i++ { + RegisterCharset(&asciiCharsets[i]) + } +} + +var asciiCharsets = []Charset{ + { + Name: "US-ASCII", + NewDecoder: func() Decoder { return decodeASCIIRune }, + NewEncoder: func() Encoder { return encodeASCIIRune }, + Aliases: []string{"ASCII", "US", "ISO646-US", "IBM367", "cp367", "ANSI_X3.4-1968", "iso-ir-6", "ANSI_X3.4-1986", "ISO_646.irv:1991", "csASCII"}, + }, + { + Name: "ISO-8859-1", + NewDecoder: func() Decoder { return decodeLatin1Rune }, + NewEncoder: func() Encoder { return encodeLatin1Rune }, + Aliases: []string{"latin1", "ISO Latin 1", "IBM819", "cp819", "ISO_8859-1:1987", "iso-ir-100", "l1", "csISOLatin1"}, + }, +} + +func decodeASCIIRune(p []byte) (c rune, size int, status Status) { + if len(p) == 0 { + status = NO_ROOM + return + } + + b := p[0] + if b > 127 { + return 0xfffd, 1, INVALID_CHAR + } + return rune(b), 1, SUCCESS +} + +func encodeASCIIRune(p []byte, c rune) (size int, status Status) { + if len(p) == 0 { + status = NO_ROOM + return + } + + if c < 128 { + p[0] = byte(c) + return 1, SUCCESS + } + + p[0] = '?' + return 1, INVALID_CHAR +} + +func decodeLatin1Rune(p []byte) (c rune, size int, status Status) { + if len(p) == 0 { + status = NO_ROOM + return + } + + return rune(p[0]), 1, SUCCESS +} + +func encodeLatin1Rune(p []byte, c rune) (size int, status Status) { + if len(p) == 0 { + status = NO_ROOM + return + } + + if c < 256 { + p[0] = byte(c) + return 1, SUCCESS + } + + p[0] = '?' + return 1, INVALID_CHAR +} -- cgit v1.2.3