From f781f3307435c46ed3ff21708f75261dc30d2e37 Mon Sep 17 00:00:00 2001 From: Patrick McCarty Date: Thu, 29 Oct 2009 15:46:01 -0700 Subject: [PATCH] Move UTF-8 char length routine into separate function. --- lily/include/misc.hh | 1 + lily/misc.cc | 20 ++++++++++++++++++++ lily/text-interface.cc | 35 ++++++++++++----------------------- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/lily/include/misc.hh b/lily/include/misc.hh index 12392c0cac..e3dffa49ef 100644 --- a/lily/include/misc.hh +++ b/lily/include/misc.hh @@ -47,6 +47,7 @@ Real directed_round (Real f, Direction d); Real peak_around (Real epsilon, Real threshold, Real x); Real convex_amplifier (Real standard_x, Real increase_factor, Real x); string camel_case_to_lisp_identifier (string in); +vsize utf8_char_len (char); #endif diff --git a/lily/misc.cc b/lily/misc.cc index ee55a00c7e..2499a09e37 100644 --- a/lily/misc.cc +++ b/lily/misc.cc @@ -9,6 +9,7 @@ #include "misc.hh" +#include "warn.hh" /* Return the 2-log, rounded down @@ -86,3 +87,22 @@ camel_case_to_lisp_identifier (string in) return result; } +vsize +utf8_char_len (char current) +{ + vsize char_len = 1; + + // U+10000 - U+10FFFF + if ((current & 0xF0) == 0xF0) + char_len = 4; + // U+0800 - U+FFFF + else if ((current & 0xE0) == 0xE0) + char_len = 3; + // U+0080 - U+07FF + else if ((current & 0xC0) == 0xC0) + char_len = 2; + else if (current & 0x80) + programming_error ("invalid UTF-8 string"); + + return char_len; +} diff --git a/lily/text-interface.cc b/lily/text-interface.cc index 8f2f7edc06..aba3105a18 100644 --- a/lily/text-interface.cc +++ b/lily/text-interface.cc @@ -9,15 +9,15 @@ #include "text-interface.hh" - -#include "main.hh" #include "config.hh" -#include "pango-font.hh" -#include "warn.hh" -#include "grob.hh" #include "font-interface.hh" -#include "output-def.hh" +#include "grob.hh" +#include "main.hh" +#include "misc.hh" #include "modified-font-metric.hh" +#include "output-def.hh" +#include "pango-font.hh" +#include "warn.hh" static void replace_whitespace (string *str) @@ -27,24 +27,13 @@ replace_whitespace (string *str) while (i < n) { - vsize char_len = 1; char cur = (*str)[i]; - - // U+10000 - U+10FFFF - if ((cur & 0xF0) == 0xF0) - char_len = 4; - // U+0800 - U+FFFF - else if ((cur & 0xE0) == 0xE0) - char_len = 3; - // U+0080 - U+07FF - else if ((cur & 0xC0) == 0xC0) - char_len = 2; - else if (cur & 0x80) - programming_error ("invalid utf-8 string"); - else - // avoid the locale-dependent isspace - if (cur == '\n' || cur == '\t' || cur == '\v') - (*str)[i] = ' '; + + // avoid the locale-dependent isspace + if (cur == '\n' || cur == '\t' || cur == '\v') + (*str)[i] = ' '; + + vsize char_len = utf8_char_len (cur); i += char_len; } -- 2.39.2