From 31572a2da5e82898dd29afc9ecb029c45e5d4158 Mon Sep 17 00:00:00 2001 From: Ty Overby Date: Sun, 12 Apr 2015 21:12:24 -0700 Subject: [PATCH] remove use of the unicode library --- src/lib.rs | 1 - src/reader.rs | 28 ++++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 22c95c3..3a660ec 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,7 +7,6 @@ extern crate rustc_serialize; extern crate byteorder; -extern crate unicode; use rustc_serialize::{Encodable, Decodable}; diff --git a/src/reader.rs b/src/reader.rs index 67be642..2a141b4 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -8,9 +8,6 @@ use rustc_serialize::Decoder; use byteorder::{BigEndian, ReadBytesExt}; use byteorder::Error as ByteOrderError; - -use unicode; - use super::SizeLimit; #[derive(Eq, PartialEq, Clone, Debug)] @@ -210,7 +207,7 @@ impl<'a, R: Read> Decoder for DecoderReader<'a, R> { let _ = try!(self.reader.read(&mut buf[..])); let first_byte = buf[0]; - let width = unicode::str::utf8_char_width(first_byte); + let width = utf8_char_width(first_byte); if width == 1 { return Ok(first_byte as char) } if width == 0 { return Err(error)} @@ -351,3 +348,26 @@ impl<'a, R: Read> Decoder for DecoderReader<'a, R> { }) } } + +static UTF8_CHAR_WIDTH: [u8; 256] = [ +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x1F +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x3F +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x5F +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x7F +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x9F +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0xBF +0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // 0xDF +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, // 0xEF +4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0, // 0xFF +]; + +fn utf8_char_width(b: u8) -> usize { + UTF8_CHAR_WIDTH[b as usize] as usize +}