Skip to content

Instantly share code, notes, and snippets.

/file.rs Secret

Created May 26, 2014 21:56
Show Gist options
  • Save anonymous/87716d9ca0990d52cdff to your computer and use it in GitHub Desktop.
Save anonymous/87716d9ca0990d52cdff to your computer and use it in GitHub Desktop.
pub fn width(c: char) -> Option<uint> {
let c = c as u32;
if (c > 0 && c < 32) || (c >= 0x7f && c < 0xa0) {
return None;
}
let ret = match c {
0x00000 .. 0x00000 => 0,
// Non-spacing characters (Mn, Me @ Unicode)
0x00300 .. 0x0036F => 0,
0x00483 .. 0x00486 => 0,
0x00488 .. 0x00489 => 0,
0x00591 .. 0x005BD => 0,
0x005BF .. 0x005BF => 0,
0x005C1 .. 0x005C2 => 0,
0x005C4 .. 0x005C5 => 0,
0x005C7 .. 0x005C7 => 0,
0x00600 .. 0x00603 => 0,
0x00610 .. 0x00615 => 0,
0x0064B .. 0x0065E => 0,
0x00670 .. 0x00670 => 0,
0x006D6 .. 0x006E4 => 0,
0x006E7 .. 0x006E8 => 0,
0x006EA .. 0x006ED => 0,
0x0070F .. 0x0070F => 0,
0x00711 .. 0x00711 => 0,
0x00730 .. 0x0074A => 0,
0x007A6 .. 0x007B0 => 0,
0x007EB .. 0x007F3 => 0,
0x00901 .. 0x00902 => 0,
0x0093C .. 0x0093C => 0,
0x00941 .. 0x00948 => 0,
0x0094D .. 0x0094D => 0,
0x00951 .. 0x00954 => 0,
0x00962 .. 0x00963 => 0,
0x00981 .. 0x00981 => 0,
0x009BC .. 0x009BC => 0,
0x009C1 .. 0x009C4 => 0,
0x009CD .. 0x009CD => 0,
0x009E2 .. 0x009E3 => 0,
0x00A01 .. 0x00A02 => 0,
0x00A3C .. 0x00A3C => 0,
0x00A41 .. 0x00A42 => 0,
0x00A47 .. 0x00A48 => 0,
0x00A4B .. 0x00A4D => 0,
0x00A70 .. 0x00A71 => 0,
0x00A81 .. 0x00A82 => 0,
0x00ABC .. 0x00ABC => 0,
0x00AC1 .. 0x00AC5 => 0,
0x00AC7 .. 0x00AC8 => 0,
0x00ACD .. 0x00ACD => 0,
0x00AE2 .. 0x00AE3 => 0,
0x00B01 .. 0x00B01 => 0,
0x00B3C .. 0x00B3C => 0,
0x00B3F .. 0x00B3F => 0,
0x00B41 .. 0x00B43 => 0,
0x00B4D .. 0x00B4D => 0,
0x00B56 .. 0x00B56 => 0,
0x00B82 .. 0x00B82 => 0,
0x00BC0 .. 0x00BC0 => 0,
0x00BCD .. 0x00BCD => 0,
0x00C3E .. 0x00C40 => 0,
0x00C46 .. 0x00C48 => 0,
0x00C4A .. 0x00C4D => 0,
0x00C55 .. 0x00C56 => 0,
0x00CBC .. 0x00CBC => 0,
0x00CBF .. 0x00CBF => 0,
0x00CC6 .. 0x00CC6 => 0,
0x00CCC .. 0x00CCD => 0,
0x00CE2 .. 0x00CE3 => 0,
0x00D41 .. 0x00D43 => 0,
0x00D4D .. 0x00D4D => 0,
0x00DCA .. 0x00DCA => 0,
0x00DD2 .. 0x00DD4 => 0,
0x00DD6 .. 0x00DD6 => 0,
0x00E31 .. 0x00E31 => 0,
0x00E34 .. 0x00E3A => 0,
0x00E47 .. 0x00E4E => 0,
0x00EB1 .. 0x00EB1 => 0,
0x00EB4 .. 0x00EB9 => 0,
0x00EBB .. 0x00EBC => 0,
0x00EC8 .. 0x00ECD => 0,
0x00F18 .. 0x00F19 => 0,
0x00F35 .. 0x00F35 => 0,
0x00F37 .. 0x00F37 => 0,
0x00F39 .. 0x00F39 => 0,
0x00F71 .. 0x00F7E => 0,
0x00F80 .. 0x00F84 => 0,
0x00F86 .. 0x00F87 => 0,
0x00F90 .. 0x00F97 => 0,
0x00F99 .. 0x00FBC => 0,
0x00FC6 .. 0x00FC6 => 0,
0x0102D .. 0x01030 => 0,
0x01032 .. 0x01032 => 0,
0x01036 .. 0x01037 => 0,
0x01039 .. 0x01039 => 0,
0x01058 .. 0x01059 => 0,
0x01160 .. 0x011FF => 0,
0x0135F .. 0x0135F => 0,
0x01712 .. 0x01714 => 0,
0x01732 .. 0x01734 => 0,
0x01752 .. 0x01753 => 0,
0x01772 .. 0x01773 => 0,
0x017B4 .. 0x017B5 => 0,
0x017B7 .. 0x017BD => 0,
0x017C6 .. 0x017C6 => 0,
0x017C9 .. 0x017D3 => 0,
0x017DD .. 0x017DD => 0,
0x0180B .. 0x0180D => 0,
0x018A9 .. 0x018A9 => 0,
0x01920 .. 0x01922 => 0,
0x01927 .. 0x01928 => 0,
0x01932 .. 0x01932 => 0,
0x01939 .. 0x0193B => 0,
0x01A17 .. 0x01A18 => 0,
0x01B00 .. 0x01B03 => 0,
0x01B34 .. 0x01B34 => 0,
0x01B36 .. 0x01B3A => 0,
0x01B3C .. 0x01B3C => 0,
0x01B42 .. 0x01B42 => 0,
0x01B6B .. 0x01B73 => 0,
0x01DC0 .. 0x01DCA => 0,
0x01DFE .. 0x01DFF => 0,
0x0200B .. 0x0200F => 0,
0x0202A .. 0x0202E => 0,
0x02060 .. 0x02063 => 0,
0x0206A .. 0x0206F => 0,
0x020D0 .. 0x020EF => 0,
0x0302A .. 0x0302F => 0,
0x03099 .. 0x0309A => 0,
0x0A806 .. 0x0A806 => 0,
0x0A80B .. 0x0A80B => 0,
0x0A825 .. 0x0A826 => 0,
0x0FB1E .. 0x0FB1E => 0,
0x0FE00 .. 0x0FE0F => 0,
0x0FE20 .. 0x0FE23 => 0,
0x0FEFF .. 0x0FEFF => 0,
0x0FFF9 .. 0x0FFFB => 0,
0x10A01 .. 0x10A03 => 0,
0x10A05 .. 0x10A06 => 0,
0x10A0C .. 0x10A0F => 0,
0x10A38 .. 0x10A3A => 0,
0x10A3F .. 0x10A3F => 0,
0x1D167 .. 0x1D169 => 0,
0x1D173 .. 0x1D182 => 0,
0x1D185 .. 0x1D18B => 0,
0x1D1AA .. 0x1D1AD => 0,
0x1D242 .. 0x1D244 => 0,
0xE0001 .. 0xE0001 => 0,
0xE0020 .. 0xE007F => 0,
0xE0100 .. 0xE01EF => 0,
// Hangul Jamo init. consonants
0x01100 .. 0x0115f => 2,
0x02329 .. 0x02329 => 2,
0x0232a .. 0x0232a => 2,
// CJK ... Yi
0x02e80 .. 0x0a4cf if c != 0x0303f => 2,
// Hangul Syllables
0x0ac00 .. 0x0d7a3 => 2,
// CJK Compatibility Ideographs
0x0f900 .. 0x0faff => 2,
// Vertical forms
0x0fe10 .. 0x0fe19 => 2,
// CJK Compatibility Forms
0x0fe30 .. 0x0fe6f => 2,
// Fullwidth Forms
0x0ff00 .. 0x0ff60 => 2,
0x0ffe0 .. 0x0ffe6 => 2,
0x20000 .. 0x2fffd => 2,
0x30000 .. 0x3fffd => 2,
_ => 1,
};
Some(ret)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment