[OT] Save chosen script tag
authorBehdad Esfahbod <behdad@behdad.org>
Sun, 31 Jul 2011 00:57:01 +0000 (20:57 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Sun, 31 Jul 2011 00:57:01 +0000 (20:57 -0400)
src/hb-ot-layout.cc
src/hb-ot-layout.h
src/hb-ot-map-private.hh
src/hb-ot-map.cc

index 5e2d6ac..e7a1f98 100644 (file)
@@ -264,27 +264,39 @@ hb_bool_t
 hb_ot_layout_table_choose_script (hb_face_t      *face,
                                  hb_tag_t        table_tag,
                                  const hb_tag_t *script_tags,
-                                 unsigned int   *script_index)
+                                 unsigned int   *script_index,
+                                 hb_tag_t       *chosen_script)
 {
   ASSERT_STATIC (Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX);
   const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
 
   while (*script_tags)
   {
-    if (g.find_script_index (*script_tags, script_index))
+    if (g.find_script_index (*script_tags, script_index)) {
+      if (chosen_script)
+        *chosen_script = *script_tags;
       return TRUE;
+    }
     script_tags++;
   }
 
   /* try finding 'DFLT' */
-  if (g.find_script_index (HB_OT_TAG_DEFAULT_SCRIPT, script_index))
+  if (g.find_script_index (HB_OT_TAG_DEFAULT_SCRIPT, script_index)) {
+    if (chosen_script)
+      *chosen_script = HB_OT_TAG_DEFAULT_SCRIPT;
     return FALSE;
+  }
 
   /* try with 'dflt'; MS site has had typos and many fonts use it now :( */
-  if (g.find_script_index (HB_OT_TAG_DEFAULT_LANGUAGE, script_index))
+  if (g.find_script_index (HB_OT_TAG_DEFAULT_LANGUAGE, script_index)) {
+    if (chosen_script)
+      *chosen_script = HB_OT_TAG_DEFAULT_LANGUAGE;
     return FALSE;
+  }
 
   if (script_index) *script_index = HB_OT_LAYOUT_NO_SCRIPT_INDEX;
+  if (chosen_script)
+    *chosen_script = HB_OT_LAYOUT_NO_SCRIPT_INDEX;
   return FALSE;
 }
 
index 6320437..447e35d 100644 (file)
@@ -92,7 +92,8 @@ hb_bool_t
 hb_ot_layout_table_choose_script (hb_face_t      *face,
                                  hb_tag_t        table_tag,
                                  const hb_tag_t *script_tags,
-                                 unsigned int   *script_index);
+                                 unsigned int   *script_index,
+                                 hb_tag_t       *chosen_script);
 
 unsigned int
 hb_ot_layout_table_get_feature_tags (hb_face_t    *face,
index 84b4ccf..2327e04 100644 (file)
@@ -123,6 +123,7 @@ struct hb_ot_map_t
 
   hb_mask_t global_mask;
 
+  hb_tag_t chosen_script[2];
   hb_prealloced_array_t<feature_map_t, 8> features;
   hb_prealloced_array_t<lookup_map_t, 32> lookups[2]; /* GSUB/GPOS */
   hb_prealloced_array_t<pause_map_t, 1> pauses[2]; /* GSUB/GPOS */
index 67035ba..ad1290f 100644 (file)
@@ -134,7 +134,7 @@ hb_ot_map_builder_t::compile (hb_face_t *face,
   unsigned int script_index[2], language_index[2];
   for (unsigned int table_index = 0; table_index < 2; table_index++) {
     hb_tag_t table_tag = table_tags[table_index];
-    hb_ot_layout_table_choose_script (face, table_tag, script_tags, &script_index[table_index]);
+    hb_ot_layout_table_choose_script (face, table_tag, script_tags, &script_index[table_index], &m.chosen_script[table_index]);
     hb_ot_layout_script_find_language (face, table_tag, script_index[table_index], language_tag, &language_index[table_index]);
   }