PangoScriptIter * _pango_script_iter_init (PangoScriptIter *iter, const char *text, int length) { iter->text_start = text; if (length >= 0) iter->text_end = text + length; else iter->text_end = text + strlen (text); iter->script_start = text; iter->script_end = text; iter->script_code = PANGO_SCRIPT_COMMON; iter->paren_sp = -1; pango_script_iter_next (iter); return iter; }
static void test_script_iter (void) { static RunTestData test_data[] = { { "\\u0020\\u0946\\u0939\\u093F\\u0928\\u094D\\u0926\\u0940\\u0020", NULL, PANGO_SCRIPT_DEVANAGARI }, { "\\u0627\\u0644\\u0639\\u0631\\u0628\\u064A\\u0629\\u0020", NULL, PANGO_SCRIPT_ARABIC }, { "\\u0420\\u0443\\u0441\\u0441\\u043A\\u0438\\u0439\\u0020", NULL, PANGO_SCRIPT_CYRILLIC }, { "English (", NULL, PANGO_SCRIPT_LATIN }, { "\\u0E44\\u0E17\\u0E22", NULL, PANGO_SCRIPT_THAI }, { ") ", NULL, PANGO_SCRIPT_LATIN }, { "\\u6F22\\u5B75", NULL, PANGO_SCRIPT_HAN }, { "\\u3068\\u3072\\u3089\\u304C\\u306A\\u3068", NULL, PANGO_SCRIPT_HIRAGANA }, { "\\u30AB\\u30BF\\u30AB\\u30CA", NULL, PANGO_SCRIPT_KATAKANA }, { "\\U00010400\\U00010401\\U00010402\\U00010403", NULL, PANGO_SCRIPT_DESERET } }; PangoScriptIter *iter; GString *all = g_string_new (FALSE); char *pos; const char *start; const char *end; PangoScript script; unsigned int i; for (i = 0; i < G_N_ELEMENTS(test_data); i++) { test_data[i].run_text = unescape (test_data[i].run_text_escaped); g_string_append (all, test_data[i].run_text); } iter = pango_script_iter_new (all->str, -1); #ifdef VERBOSE g_print ("Total length: %d\n", all->len); #endif pos = all->str; for (i = 0; i < G_N_ELEMENTS(test_data); i++) { char *next_pos = pos + strlen (test_data[i].run_text); gboolean result; pango_script_iter_get_range (iter, &start, &end, &script); #ifdef VERBOSE g_print ("Range: %d-%d: %d\n", start - all->str, end - all->str, script); #endif ASSERT (start == pos); ASSERT (end == next_pos); ASSERT (script == test_data[i].run_code); result = pango_script_iter_next (iter); ASSERT (result == (i != G_N_ELEMENTS (test_data) - 1)); pos = next_pos; } pango_script_iter_free (iter); /* * Test an empty string. */ iter = pango_script_iter_new (all->str, 0); pango_script_iter_get_range (iter, &start, &end, &script); ASSERT (start == all->str); ASSERT (end == all->str); ASSERT (script == PANGO_SCRIPT_COMMON); ASSERT (!pango_script_iter_next (iter)); pango_script_iter_free (iter); /* Cleanup */ for (i = 0; i < G_N_ELEMENTS (test_data); i++) g_free (test_data[i].run_text); g_string_free (all, TRUE); }