Exemple #1
0
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;
}
Exemple #2
0
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);
}