all repos — openbox @ 23686632d48fe9d31fb4538593e995df766743a2

openbox fork - make it a bit more like ryudo

fix some bugs where looked up wrong offsets for characters in the utf8_skip table, move the table into the .cc
Dana Jansens danakj@orodu.net
commit

23686632d48fe9d31fb4538593e995df766743a2

parent

784b879a52570828bf66ac6e4a87983e9cc70747

1 files changed, 16 insertions(+), 4 deletions(-)

jump to
M otk/ustring.ccotk/ustring.cc

@@ -14,6 +14,18 @@ namespace otk {

// helper functions +// The number of bytes to skip to find the next character in the string +static const char utf8_skip[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, + 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, + 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, + 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, + 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, + 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, + 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,2,2, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1 +}; + // takes a pointer into a utf8 string and returns a unicode character for the // first character at the pointer unichar utf8_get_char (const char *p)

@@ -41,7 +53,7 @@ {

ustring::size_type offset = 0; while (str < pos) { - str += utf8_skip[*str]; + str += utf8_skip[static_cast<unsigned char>(*str)]; offset++; }

@@ -52,7 +64,7 @@ // takes an offset into a string and returns a pointer to it

const char *utf8_offset_to_ptr(const char *str, ustring::size_type offset) { while (offset--) - str += utf8_skip[*str]; + str += utf8_skip[static_cast<unsigned char>(*str)]; return str; }

@@ -69,7 +81,7 @@ {

if(*p == '\0') return ustring::npos; - p += utf8_skip[*p]; + p += utf8_skip[static_cast<unsigned char>(*p)]; } return (p - str);

@@ -90,7 +102,7 @@ {

if(p >= pend) return ustring::npos; - p += utf8_skip[*p]; + p += utf8_skip[static_cast<unsigned char>(*p)]; } return (p - str);