shithub: freetype+ttf2subf

Download patch

ref: 7085dc9b2efa8a419615018bb53207bd7aaa1a73
parent: adff5b0c210d90eb6da88ee2fe8376e0d3a70a77
author: Werner Lemberg <[email protected]>
date: Sat Aug 14 23:14:02 EDT 2004

* src/otlayout/gpos.c: Rename counting variables to be more
meaningful.
Add copyright.
(otl_liga_attach_validate): Renamed to...
(otl_liga_mark2_validate): This.
Update all callers.
(otl_mark2_array_validate): Removed.
(otl_gpos_lookup6_validate): Call otl_liga_mark2_validate, not
otl_mark2_array_validate.
(otl_pos_class_set_validate, otl_pos_class_rule_validate): Removed.
(otl_gpos_lookup7_validate): Complete code for format 2.
(otl_chain_pos_class_rule_validate,
otl_chaim_pos_class_set_validate): Removed.
(otl_gpos_lookup8_validate): Don't call
otl_chain_pos_class_set_validate but
otl_chain_pos_rule_set_validate.
Simplify some code.

* src/otlayout/otlgpos.h: Add copyright.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2004-08-15  Werner Lemberg  <[email protected]>
+
+	* src/otlayout/gpos.c: Rename counting variables to be more
+	meaningful.
+	Add copyright.
+	(otl_liga_attach_validate): Renamed to...
+	(otl_liga_mark2_validate): This.
+	Update all callers.
+	(otl_mark2_array_validate): Removed.
+	(otl_gpos_lookup6_validate): Call otl_liga_mark2_validate, not
+	otl_mark2_array_validate.
+	(otl_pos_class_set_validate, otl_pos_class_rule_validate): Removed.
+	(otl_gpos_lookup7_validate): Complete code for format 2.
+	(otl_chain_pos_class_rule_validate,
+	otl_chaim_pos_class_set_validate): Removed.
+	(otl_gpos_lookup8_validate): Don't call
+	otl_chain_pos_class_set_validate but
+	otl_chain_pos_rule_set_validate.
+	Simplify some code.
+
+	* src/otlayout/otlgpos.h: Add copyright.
+
 2004-08-14  Werner Lemberg  <[email protected]>
 
 	* src/otlayout/otljstf.c (otl_jstf_gsub_mods_validate): Removed.
--- a/src/otlayout/otlgpos.c
+++ b/src/otlayout/otlgpos.c
@@ -1,17 +1,36 @@
+/***************************************************************************/
+/*                                                                         */
+/*  otlgpos.c                                                              */
+/*                                                                         */
+/*    OpenType layout support, GPOS table (body).                          */
+/*                                                                         */
+/*  Copyright 2002, 2004 by                                                */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
 #include "otlgpos.h"
 #include "otlcommn.h"
 
+
  /* forward declaration */
   static OTL_ValidateFunc  otl_gpos_validate_funcs[];
 
 
- /************************************************************************/
- /************************************************************************/
- /*****                                                              *****/
- /*****                         VALUE RECORDS                        *****/
- /*****                                                              *****/
- /************************************************************************/
- /************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                        VALUE RECORDS                          *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
 
   static OTL_UInt
   otl_value_length( OTL_UInt  format )
@@ -18,10 +37,11 @@
   {
     OTL_UInt  count;
 
-    count = (( format & 0xAA ) >> 1) + ( format & 0x55 );
-    count = (( count  & 0xCC ) >> 2) + ( count  & 0x33 );
-    count = (( count  & 0xF0 ) >> 4) + ( count  & 0x0F );
 
+    count = ( ( format & 0xAA ) >> 1 ) + ( format & 0x55 );
+    count = ( ( count  & 0xCC ) >> 2 ) + ( count  & 0x33 );
+    count = ( ( count  & 0xF0 ) >> 4 ) + ( count  & 0x0F );
+
     return count;
   }
 
@@ -35,7 +55,8 @@
     OTL_Bytes  p = table;
     OTL_UInt   count, device;
 
-    if ( format >= 0x100U )
+
+    if ( format >= 0x100 )
       OTL_INVALID_DATA;
 
     for ( count = 4; count > 0; count-- )
@@ -63,13 +84,13 @@
   }
 
 
- /************************************************************************/
- /************************************************************************/
- /*****                                                              *****/
- /*****                          ANCHORS                             *****/
- /*****                                                              *****/
- /************************************************************************/
- /************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                           ANCHORS                             *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
 
   static void
   otl_anchor_validate( OTL_Bytes      table,
@@ -78,48 +99,50 @@
     OTL_Bytes  p = table;
     OTL_UInt   format;
 
+
     OTL_CHECK( 6 );
     format = OTL_NEXT_USHORT( p );
-    p += 4;
+    p += 4;     /* skip coordinates */
 
     switch ( format )
     {
-      case 1:
-        break;
+    case 1:
+      break;
 
-      case 2:
-        OTL_CHECK( 2 );  /* anchor point */
-        break;
+    case 2:
+      OTL_CHECK( 2 );  /* anchor point */
+      break;
 
-      case 3:
-        {
-          OTL_UInt  x_device, y_device;
+    case 3:
+      {
+        OTL_UInt  x_device, y_device;
 
-          OTL_CHECK( 4 );
-          x_device = OTL_NEXT_USHORT( p );
-          y_device = OTL_NEXT_USHORT( p );
 
-          if ( x_device )
-            otl_device_table_validate( table + x_device, valid );
+        OTL_CHECK( 4 );
+        x_device = OTL_NEXT_USHORT( p );
+        y_device = OTL_NEXT_USHORT( p );
 
-          if ( y_device )
-            otl_device_table_validate( table + y_device, valid );
-        }
-        break;
+        if ( x_device )
+          otl_device_table_validate( table + x_device, valid );
 
-      default:
-        OTL_INVALID_DATA;
+        if ( y_device )
+          otl_device_table_validate( table + y_device, valid );
+      }
+      break;
+
+    default:
+      OTL_INVALID_DATA;
     }
   }
 
 
- /************************************************************************/
- /************************************************************************/
- /*****                                                              *****/
- /*****                           MARK ARRAY                         *****/
- /*****                                                              *****/
- /************************************************************************/
- /************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                          MARK ARRAY                           *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
 
   static void
   otl_mark_array_validate( OTL_Bytes      table,
@@ -140,13 +163,13 @@
   }
 
 
- /************************************************************************/
- /************************************************************************/
- /*****                                                              *****/
- /*****                 GPOS LOOKUP TYPE 1                           *****/
- /*****                                                              *****/
- /************************************************************************/
- /************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                     GPOS LOOKUP TYPE 1                        *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
 
   static void
   otl_gpos_lookup1_validate( OTL_Bytes      table,
@@ -155,57 +178,63 @@
     OTL_Bytes  p = table;
     OTL_UInt   format;
 
+
     OTL_CHECK( 2 );
     format = OTL_NEXT_USHORT( p );
     switch ( format )
     {
-      case 1:
-        {
-          OTL_UInt  coverage, value_format;
+    case 1:
+      {
+        OTL_UInt  coverage, value_format;
 
-          OTL_CHECK( 4 );
-          coverage     = OTL_NEXT_USHORT( p );
-          value_format = OTL_NEXT_USHORT( p );
 
-          otl_coverage_validate( table + coverage, valid );
-          otl_value_validate( p, table, value_format, valid );
-        }
-        break;
+        OTL_CHECK( 4 );
+        coverage     = OTL_NEXT_USHORT( p );
+        value_format = OTL_NEXT_USHORT( p );
 
-      case 2:
-        {
-          OTL_UInt  coverage, value_format, count, len;
+        otl_coverage_validate( table + coverage, valid );
+        otl_value_validate( p, table, value_format, valid );
+      }
+      break;
 
-          OTL_CHECK( 6 );
-          coverage     = OTL_NEXT_USHORT( p );
-          value_format = OTL_NEXT_USHORT( p );
-          count        = OTL_NEXT_USHORT( p );
-          len          = otl_value_length( value_format );
+    case 2:
+      {
+        OTL_UInt  coverage, value_format, num_values, len_value;
 
-          otl_coverage_validate( table + coverage, valid );
 
-          OTL_CHECK( count * len );
-          for ( ; count > 0; count-- )
-          {
-            otl_value_validate( p, table, value_format, valid );
-            p += len;
-          }
+        OTL_CHECK( 6 );
+        coverage     = OTL_NEXT_USHORT( p );
+        value_format = OTL_NEXT_USHORT( p );
+        num_values   = OTL_NEXT_USHORT( p );
+
+        len_value    = otl_value_length( value_format );
+
+        otl_coverage_validate( table + coverage, valid );
+
+        OTL_CHECK( num_values * len_value );
+
+        /* scan value records */
+        for ( ; num_values > 0; num_values-- )
+        {
+          otl_value_validate( p, table, value_format, valid );
+          p += len_value;
         }
-        break;
+      }
+      break;
 
-      default:
-        OTL_INVALID_DATA;
+    default:
+      OTL_INVALID_DATA;
     }
   }
 
 
- /************************************************************************/
- /************************************************************************/
- /*****                                                              *****/
- /*****                 GPOS LOOKUP TYPE 2                           *****/
- /*****                                                              *****/
- /************************************************************************/
- /************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                     GPOS LOOKUP TYPE 2                        *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
 
   static void
   otl_gpos_pairset_validate( OTL_Bytes      table,
@@ -215,25 +244,30 @@
                              OTL_Validator  valid )
   {
     OTL_Bytes  p = table;
-    OTL_UInt   len1, len2, count;
+    OTL_UInt   value_len1, value_len2, num_pairvalues;
 
+
     OTL_CHECK( 2 );
-    count = OTL_NEXT_USHORT( p );
-    len1  = otl_value_length( format1 );
-    len2  = otl_value_length( format2 );
+    num_pairvalues = OTL_NEXT_USHORT( p );
+    value_len1     = otl_value_length( format1 );
+    value_len2     = otl_value_length( format2 );
 
-    OTL_CHECK( count * (len1+len2+2) );
-    for ( ; count > 0; count-- )
+    OTL_CHECK( num_pairvalues * ( value_len1 + value_len2 + 2 ) );
+
+    /* scan pair value records */
+    for ( ; num_pairvalues > 0; num_pairvalues-- )
     {
-      p += 2;  /* ignore glyph id */
+      p += 2;       /* ignore glyph id */
+
       otl_value_validate( p, pos_table, format1, valid );
-      p += len1;
+      p += value_len1;
 
       otl_value_validate( p, pos_table, format2, valid );
-      p += len2;
+      p += value_len2;
     }
   }
 
+
   static void
   otl_gpos_lookup2_validate( OTL_Bytes      table,
                              OTL_Validator  valid )
@@ -241,78 +275,82 @@
     OTL_Bytes  p = table;
     OTL_UInt   format;
 
+
     OTL_CHECK( 2 );
     format = OTL_NEXT_USHORT( p );
-    switch (format)
+    switch ( format )
     {
-      case 1:
-        {
-          OTL_UInt  coverage, value1, value2, count;
+    case 1:
+      {
+        OTL_UInt  coverage, value1, value2, num_pairsets;
 
-          OTL_CHECK( 8 );
-          coverage = OTL_NEXT_USHORT( p );
-          value1   = OTL_NEXT_USHORT( p );
-          value2   = OTL_NEXT_USHORT( p );
-          count    = OTL_NEXT_USHORT( p );
 
-          otl_coverage_validate( table + coverage, valid );
+        OTL_CHECK( 8 );
+        coverage     = OTL_NEXT_USHORT( p );
+        value1       = OTL_NEXT_USHORT( p );
+        value2       = OTL_NEXT_USHORT( p );
+        num_pairsets = OTL_NEXT_USHORT( p );
 
-          OTL_CHECK( count*2 );
-          for ( ; count > 0; count-- )
-          {
-            otl_gpos_pairset_validate( table + OTL_NEXT_USHORT( p ),
-                                       table, value1, value2, valid );
-          }
-        }
-        break;
+        otl_coverage_validate( table + coverage, valid );
 
-      case 2:
-        {
-          OTL_UInt  coverage, value1, value2, class1, class2, count1, count2;
-          OTL_UInt  len1, len2;
+        OTL_CHECK( num_pairsets * 2 );
 
-          OTL_CHECK( 14 );
-          coverage = OTL_NEXT_USHORT( p );
-          value1   = OTL_NEXT_USHORT( p );
-          value2   = OTL_NEXT_USHORT( p );
-          class1   = OTL_NEXT_USHORT( p );
-          class2   = OTL_NEXT_USHORT( p );
-          count1   = OTL_NEXT_USHORT( p );
-          count2   = OTL_NEXT_USHORT( p );
+        for ( ; num_pairsets > 0; num_pairsets-- )
+          otl_gpos_pairset_validate( table + OTL_NEXT_USHORT( p ),
+                                     table, value1, value2, valid );
+      }
+      break;
 
-          len1 = otl_value_length( value1 );
-          len2 = otl_value_length( value2 );
+    case 2:
+      {
+        OTL_UInt  coverage, value1, value2, class1, class2;
+        OTL_UInt  num_classes1, num_classes2, len_value1, len_value2;
 
-          otl_coverage_validate( table + coverage, valid );
 
-          OTL_CHECK( count1*count2*(len1+len2) );
-          for ( ; count1 > 0; count1-- )
+        OTL_CHECK( 14 );
+        coverage     = OTL_NEXT_USHORT( p );
+        value1       = OTL_NEXT_USHORT( p );
+        value2       = OTL_NEXT_USHORT( p );
+        class1       = OTL_NEXT_USHORT( p );
+        class2       = OTL_NEXT_USHORT( p );
+        num_classes1 = OTL_NEXT_USHORT( p );
+        num_classes2 = OTL_NEXT_USHORT( p );
+
+        len_value1 = otl_value_length( value1 );
+        len_value2 = otl_value_length( value2 );
+
+        otl_coverage_validate( table + coverage, valid );
+
+        OTL_CHECK( num_classes1 * num_classes2 *
+                     ( len_value1 + len_value2 ) );
+
+        for ( ; num_classes1 > 0; num_classes1-- )
+        {
+          for ( ; num_classes2 > 0; num_classes2-- )
           {
-            for ( ; count2 > 0; count2-- )
-            {
-              otl_value_validate( p, table, value1, valid );
-              p += len1;
+            otl_value_validate( p, table, value1, valid );
+            p += len_value1;
 
-              otl_value_validate( p, table, value2, valid );
-              p += len2;
-            }
+            otl_value_validate( p, table, value2, valid );
+            p += len_value2;
           }
         }
-        break;
+      }
+      break;
 
-      default:
-        OTL_INVALID_DATA;
+    default:
+      OTL_INVALID_DATA;
     }
   }
 
 
- /************************************************************************/
- /************************************************************************/
- /*****                                                              *****/
- /*****                 GPOS LOOKUP TYPE 3                           *****/
- /*****                                                              *****/
- /************************************************************************/
- /************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                     GPOS LOOKUP TYPE 3                        *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
 
   static void
   otl_gpos_lookup3_validate( OTL_Bytes      table,
@@ -321,48 +359,52 @@
     OTL_Bytes  p = table;
     OTL_UInt   format;
 
+
     OTL_CHECK( 2 );
     format = OTL_NEXT_USHORT( p );
-    switch (format)
+    switch ( format )
     {
-      case 1:
-        {
-          OTL_UInt  coverage, count, anchor1, anchor2;
+    case 1:
+      {
+        OTL_UInt  coverage, num_entryexit, anchor1, anchor2;
 
-          OTL_CHECK( 4 );
-          coverage = OTL_NEXT_USHORT( p );
-          count    = OTL_NEXT_USHORT( p );
 
-          otl_coverage_validate( table + coverage, valid );
+        OTL_CHECK( 4 );
+        coverage      = OTL_NEXT_USHORT( p );
+        num_entryexit = OTL_NEXT_USHORT( p );
 
-          OTL_CHECK( count*4 );
-          for ( ; count > 0; count-- )
-          {
-            anchor1 = OTL_NEXT_USHORT( p );
-            anchor2 = OTL_NEXT_USHORT( p );
+        otl_coverage_validate( table + coverage, valid );
 
-            if ( anchor1 )
-              otl_anchor_validate( table + anchor1, valid );
+        OTL_CHECK( num_entryexit * 4 );
 
-            if ( anchor2 )
-              otl_anchor_validate( table + anchor2, valid );
-          }
+        /* scan entry-exit records */
+        for ( ; num_entryexit > 0; num_entryexit-- )
+        {
+          anchor1 = OTL_NEXT_USHORT( p );
+          anchor2 = OTL_NEXT_USHORT( p );
+
+          if ( anchor1 )
+            otl_anchor_validate( table + anchor1, valid );
+
+          if ( anchor2 )
+            otl_anchor_validate( table + anchor2, valid );
         }
-        break;
+      }
+      break;
 
-      default:
-        OTL_INVALID_DATA;
+    default:
+      OTL_INVALID_DATA;
     }
   }
 
 
- /************************************************************************/
- /************************************************************************/
- /*****                                                              *****/
- /*****                 GPOS LOOKUP TYPE 4                           *****/
- /*****                                                              *****/
- /************************************************************************/
- /************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                     GPOS LOOKUP TYPE 4                        *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
 
   static void
   otl_base_array_validate( OTL_Bytes      table,
@@ -370,14 +412,18 @@
                            OTL_Validator  valid )
   {
     OTL_Bytes  p = table;
-    OTL_UInt   count, count2;
+    OTL_UInt   num_bases, count;
 
+
     OTL_CHECK( 2 );
-    count = OTL_NEXT_USHORT( p );
+    num_bases = OTL_NEXT_USHORT( p );
 
-    OTL_CHECK( count*class_count*2 );
-    for ( ; count > 0; count-- )
-      for ( count2 = class_count; count2 > 0; count2-- )
+    OTL_CHECK( num_bases * class_count * 2 );
+
+    /* scan base array records */
+    for ( ; num_bases > 0; num_bases-- )
+      /* scan base records */
+      for ( count = class_count; count > 0; count-- )
         otl_anchor_validate( table + OTL_NEXT_USHORT( p ), valid );
   }
 
@@ -389,57 +435,64 @@
     OTL_Bytes  p = table;
     OTL_UInt   format;
 
+
     OTL_CHECK( 2 );
     format = OTL_NEXT_USHORT( p );
-    switch (format)
+    switch ( format )
     {
-      case 1:
-        {
-          OTL_UInt  mark_coverage, base_coverage, class_count;
-          OTL_UInt  mark_array, base_array;
+    case 1:
+      {
+        OTL_UInt  mark_coverage, base_coverage, num_classes;
+        OTL_UInt  mark_array, base_array;
 
-          OTL_CHECK( 10 );
-          mark_coverage = OTL_NEXT_USHORT( p );
-          base_coverage = OTL_NEXT_USHORT( p );
-          class_count   = OTL_NEXT_USHORT( p );
-          mark_array    = OTL_NEXT_USHORT( p );
-          base_array    = OTL_NEXT_USHORT( p );
 
-          otl_coverage_validate( table + mark_coverage, valid );
-          otl_coverage_validate( table + base_coverage, valid );
+        OTL_CHECK( 10 );
+        mark_coverage = OTL_NEXT_USHORT( p );
+        base_coverage = OTL_NEXT_USHORT( p );
+        num_classes   = OTL_NEXT_USHORT( p );
+        mark_array    = OTL_NEXT_USHORT( p );
+        base_array    = OTL_NEXT_USHORT( p );
 
-          otl_mark_array_validate( table + mark_array, valid );
-          otl_base_array_validate( table, class_count, valid );
-        }
-        break;
+        otl_coverage_validate( table + mark_coverage, valid );
+        otl_coverage_validate( table + base_coverage, valid );
 
-      default:
-        OTL_INVALID_DATA;
+        otl_mark_array_validate( table + mark_array, valid );
+        otl_base_array_validate( table, num_classes, valid );
+      }
+      break;
+
+    default:
+      OTL_INVALID_DATA;
     }
   }
 
- /************************************************************************/
- /************************************************************************/
- /*****                                                              *****/
- /*****                 GPOS LOOKUP TYPE 5                           *****/
- /*****                                                              *****/
- /************************************************************************/
- /************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                     GPOS LOOKUP TYPE 5                        *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
 
+  /* used by lookup type 5 and 6 */
   static void
-  otl_liga_attach_validate( OTL_Bytes      table,
-                            OTL_UInt       class_count,
-                            OTL_Validator  valid )
+  otl_liga_mark2_validate( OTL_Bytes      table,
+                           OTL_UInt       class_count,
+                           OTL_Validator  valid )
   {
     OTL_Bytes  p = table;
-    OTL_UInt   count, count2;
+    OTL_UInt   num_components, count;
 
+
     OTL_CHECK( 2 );
-    count = OTL_NEXT_USHORT( p );
+    num_components = OTL_NEXT_USHORT( p );
 
-    OTL_CHECK( count*class_count*2 );
-    for ( ; count > 0; count-- )
-      for ( count2 = class_count; class_count > 0; class_count-- )
+    OTL_CHECK( num_components * class_count * 2 );
+
+    /* scan component records */
+    for ( ; num_components > 0; num_components-- )
+      /* scan ligature anchor records */
+      for ( count = class_count; class_count > 0; class_count-- )
         otl_anchor_validate( table + OTL_NEXT_USHORT( p ), valid );
   }
 
@@ -450,15 +503,18 @@
                            OTL_Validator  valid )
   {
     OTL_Bytes  p = table;
-    OTL_UInt   count, count2;
+    OTL_UInt   ligature_count;
 
+
     OTL_CHECK( 2 );
-    count = OTL_NEXT_USHORT( p );
+    ligature_count = OTL_NEXT_USHORT( p );
 
-    OTL_CHECK( count*2 );
-    for ( ; count > 0; count-- )
-      otl_liga_attach_validate( table + OTL_NEXT_USHORT( p ),
-                                class_count, valid );
+    OTL_CHECK( ligature_count * 2 );
+
+    /* scan ligature attach records */
+    for ( ; ligature_count > 0; ligature_count-- )
+      otl_liga_mark2_validate( table + OTL_NEXT_USHORT( p ), class_count,
+                               valid );
   }
 
 
@@ -469,63 +525,47 @@
     OTL_Bytes  p = table;
     OTL_UInt   format;
 
+
     OTL_CHECK( 2 );
     format = OTL_NEXT_USHORT( p );
-    switch (format)
+    switch ( format )
     {
-      case 1:
-        {
-          OTL_UInt  mark_coverage, liga_coverage, class_count;
-          OTL_UInt  mark_array, liga_array;
+    case 1:
+      {
+        OTL_UInt  mark_coverage, liga_coverage, num_classes;
+        OTL_UInt  mark_array, liga_array;
 
-          OTL_CHECK( 10 );
-          mark_coverage = OTL_NEXT_USHORT( p );
-          liga_coverage = OTL_NEXT_USHORT( p );
-          class_count   = OTL_NEXT_USHORT( p );
-          mark_array    = OTL_NEXT_USHORT( p );
-          liga_array    = OTL_NEXT_USHORT( p );
 
-          otl_coverage_validate( table + mark_coverage, valid );
-          otl_coverage_validate( table + liga_coverage, valid );
+        OTL_CHECK( 10 );
+        mark_coverage = OTL_NEXT_USHORT( p );
+        liga_coverage = OTL_NEXT_USHORT( p );
+        num_classes   = OTL_NEXT_USHORT( p );
+        mark_array    = OTL_NEXT_USHORT( p );
+        liga_array    = OTL_NEXT_USHORT( p );
 
-          otl_mark_array_validate( table + mark_array, valid );
-          otl_liga_array_validate( table + liga_array, class_count, valid );
-        }
-        break;
+        otl_coverage_validate( table + mark_coverage, valid );
+        otl_coverage_validate( table + liga_coverage, valid );
 
-      default:
-        OTL_INVALID_DATA;
+        otl_mark_array_validate( table + mark_array, valid );
+        otl_liga_array_validate( table + liga_array, num_classes, valid );
+      }
+      break;
+
+    default:
+      OTL_INVALID_DATA;
     }
   }
 
- /************************************************************************/
- /************************************************************************/
- /*****                                                              *****/
- /*****                 GPOS LOOKUP TYPE 6                           *****/
- /*****                                                              *****/
- /************************************************************************/
- /************************************************************************/
 
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                     GPOS LOOKUP TYPE 6                        *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
 
   static void
-  otl_mark2_array_validate( OTL_Bytes      table,
-                            OTL_UInt       class_count,
-                            OTL_Validator  valid )
-  {
-    OTL_Bytes  p = table;
-    OTL_UInt   count, count2;
-
-    OTL_CHECK( 2 );
-    count = OTL_NEXT_USHORT( p );
-
-    OTL_CHECK( count*class_count*2 );
-    for ( ; count > 0; count-- )
-      for ( count2 = class_count; class_count > 0; class_count-- )
-        otl_anchor_validate( table + OTL_NEXT_USHORT( p ), valid );
-  }
-
-
-  static void
   otl_gpos_lookup6_validate( OTL_Bytes      table,
                              OTL_Validator  valid )
   {
@@ -532,117 +572,92 @@
     OTL_Bytes  p = table;
     OTL_UInt   format;
 
+
     OTL_CHECK( 2 );
     format = OTL_NEXT_USHORT( p );
-    switch (format)
+    switch ( format )
     {
-      case 1:
-        {
-          OTL_UInt  coverage1, coverage2, class_count, array1, array2;
+    case 1:
+      {
+        OTL_UInt  coverage1, coverage2, num_classes, array1, array2;
 
-          OTL_CHECK( 10 );
-          coverage1   = OTL_NEXT_USHORT( p );
-          coverage2   = OTL_NEXT_USHORT( p );
-          class_count = OTL_NEXT_USHORT( p );
-          array1      = OTL_NEXT_USHORT( p );
-          array2      = OTL_NEXT_USHORT( p );
 
-          otl_coverage_validate( table + coverage1, valid );
-          otl_coverage_validate( table + coverage2, valid );
+        OTL_CHECK( 10 );
+        coverage1   = OTL_NEXT_USHORT( p );
+        coverage2   = OTL_NEXT_USHORT( p );
+        num_classes = OTL_NEXT_USHORT( p );
+        array1      = OTL_NEXT_USHORT( p );
+        array2      = OTL_NEXT_USHORT( p );
 
-          otl_mark_array_validate( table + array1, valid );
-          otl_mark2_array_validate( table + array2, class_count, valid );
-        }
-        break;
+        otl_coverage_validate( table + coverage1, valid );
+        otl_coverage_validate( table + coverage2, valid );
 
-      default:
-        OTL_INVALID_DATA;
+        otl_mark_array_validate( table + array1, valid );
+        otl_liga_mark2_validate( table + array2, num_classes, valid );
+      }
+      break;
+
+    default:
+      OTL_INVALID_DATA;
     }
   }
 
 
- /************************************************************************/
- /************************************************************************/
- /*****                                                              *****/
- /*****                 GPOS LOOKUP TYPE 7                           *****/
- /*****                                                              *****/
- /************************************************************************/
- /************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                     GPOS LOOKUP TYPE 7                        *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
 
+  /* used for both format 1 and 2 */
   static void
   otl_pos_rule_validate( OTL_Bytes      table,
                          OTL_Validator  valid )
   {
     OTL_Bytes  p = table;
-    OTL_UInt   glyph_count, pos_count;
+    OTL_UInt   num_glyphs, num_pos;
 
+
     OTL_CHECK( 4 );
-    glyph_count = OTL_NEXT_USHORT( p );
-    pos_count   = OTL_NEXT_USHORT( p );
+    num_glyphs = OTL_NEXT_USHORT( p );
+    num_pos    = OTL_NEXT_USHORT( p );
 
-    if ( glyph_count == 0 )
+    if ( num_glyphs == 0 )
       OTL_INVALID_DATA;
 
-    OTL_CHECK( (glyph_count-1)*2 + pos_count*4 );
+    OTL_CHECK( ( num_glyphs - 1 ) * 2 + num_pos * 4 );
 
-    /* XXX: check glyph indices and pos lookups */
+    /* XXX: check pos lookups */
+
+    /* no need to check glyph indices/classes used as input for this  */
+    /* context rule since even invalid glyph indices/classes return a */
+    /* meaningful result                                              */
   }
 
 
+  /* used for both format 1 and 2 */
   static void
   otl_pos_rule_set_validate( OTL_Bytes      table,
                              OTL_Validator  valid )
   {
     OTL_Bytes  p = table;
-    OTL_UInt   count;
+    OTL_UInt   num_posrules;
 
+
     OTL_CHECK( 2 );
-    count = OTL_NEXT_USHORT( p );
+    num_posrules = OTL_NEXT_USHORT( p );
 
-    OTL_CHECK( count*2 );
-    for ( ; count > 0; count-- )
-      otl_pos_rule_validate( table + OTL_NEXT_USHORT(p), valid );
-  }
+    OTL_CHECK( num_posrules * 2 );
 
-
-
-  static void
-  otl_pos_class_rule_validate( OTL_Bytes      table,
-                               OTL_Validator  valid )
-  {
-    OTL_Bytes  p = table;
-    OTL_UInt   glyph_count, pos_count;
-
-    OTL_CHECK( 4 );
-    glyph_count = OTL_NEXT_USHORT( p );
-    pos_count   = OTL_NEXT_USHORT( p );
-
-    if ( glyph_count == 0 )
-      OTL_INVALID_DATA;
-
-    OTL_CHECK( (glyph_count-1)*2 + pos_count*4 );
-
-    /* XXX: check glyph indices and pos lookups */
+    /* scan posrule records */
+    for ( ; num_posrules > 0; num_posrules-- )
+      otl_pos_rule_validate( table + OTL_NEXT_USHORT( p ), valid );
   }
 
 
   static void
-  otl_pos_class_set_validate( OTL_Bytes      table,
-                              OTL_Validator  valid )
-  {
-    OTL_Bytes  p = table;
-    OTL_UInt   count;
-
-    OTL_CHECK( 2 );
-    count = OTL_NEXT_USHORT( p );
-
-    OTL_CHECK( count*2 );
-    for ( ; count > 0; count-- )
-      otl_pos_rule_validate( table + OTL_NEXT_USHORT(p), valid );
-  }
-
-
-  static void
   otl_gpos_lookup7_validate( OTL_Bytes      table,
                              OTL_Validator  valid )
   {
@@ -649,164 +664,134 @@
     OTL_Bytes  p = table;
     OTL_UInt   format;
 
+
     OTL_CHECK( 2 );
     format = OTL_NEXT_USHORT( p );
-    switch (format)
+    switch ( format )
     {
-      case 1:
-        {
-          OTL_UInt  coverage, count;
+    case 1:
+      {
+        OTL_UInt  coverage, num_posrule_sets;
 
-          OTL_CHECK( 4 );
-          coverage = OTL_NEXT_USHORT( p );
-          count    = OTL_NEXT_USHORT( p );
 
-          otl_coverage_validate( table + coverage, valid );
+        OTL_CHECK( 4 );
+        coverage         = OTL_NEXT_USHORT( p );
+        num_posrule_sets = OTL_NEXT_USHORT( p );
 
-          OTL_CHECK( count*2 );
-          for ( ; count > 0; count-- )
-            otl_pos_rule_set_validate( table + OTL_NEXT_USHORT( p ), valid );
-        }
-        break;
+        otl_coverage_validate( table + coverage, valid );
 
-      case 2:
-        {
-          OTL_UInt  coverage, class_def, count;
+        OTL_CHECK( num_posrule_sets * 2 );
 
-          OTL_CHECK( 6 );
-          coverage  = OTL_NEXT_USHORT( p );
-          class_def = OTL_NEXT_USHORT( p );
-          count     = OTL_NEXT_USHORT( p );
+        /* scan posrule set records */
+        for ( ; num_posrule_sets > 0; num_posrule_sets-- )
+          otl_pos_rule_set_validate( table + OTL_NEXT_USHORT( p ), valid );
+      }
+      break;
 
-          otl_coverage_validate        ( table + coverage, valid );
-          otl_class_definition_validate( table + class_def, valid );
+    case 2:
+      {
+        OTL_UInt  coverage, class_def, num_posclass_sets;
 
-          OTL_CHECK( count*2 );
-#if 0 /* XXX */
-          for ( ; count > 0; count-- )
-            otl_
-#endif
-        }
-        break;
 
-      case 3:
-        {
-          OTL_UInt  glyph_count, pos_count;
+        OTL_CHECK( 6 );
+        coverage          = OTL_NEXT_USHORT( p );
+        class_def         = OTL_NEXT_USHORT( p );
+        num_posclass_sets = OTL_NEXT_USHORT( p );
 
-          OTL_CHECK( 4 );
-          glyph_count = OTL_NEXT_USHORT( p );
-          pos_count   = OTL_NEXT_USHORT( p );
+        otl_coverage_validate( table + coverage, valid );
+        otl_class_definition_validate( table + class_def, valid );
 
-          OTL_CHECK( glyph_count*2 + pos_count*4 );
-          for ( ; glyph_count > 0; glyph_count-- )
-            otl_coverage_validate( table + OTL_NEXT_USHORT( p ), valid );
+        OTL_CHECK( num_posclass_sets * 2 );
 
-          /* XXX: check pos lookups */
-        }
-        break;
+        /* scan pos class set rules */
+        for ( ; num_posclass_sets > 0; num_posclass_sets-- )
+          otl_pos_rule_set_validate( table + OTL_NEXT_USHORT( p ), valid );
+      }
+      break;
 
-      default:
-        OTL_INVALID_DATA;
-    }
-  }
+    case 3:
+      {
+        OTL_UInt  num_glyphs, num_pos;
 
 
- /************************************************************************/
- /************************************************************************/
- /*****                                                              *****/
- /*****                 GPOS LOOKUP TYPE 8                           *****/
- /*****                                                              *****/
- /************************************************************************/
- /************************************************************************/
+        OTL_CHECK( 4 );
+        num_glyphs = OTL_NEXT_USHORT( p );
+        num_pos    = OTL_NEXT_USHORT( p );
 
-  static void
-  otl_chain_pos_rule_validate( OTL_Bytes      table,
-                               OTL_Validator  valid )
-  {
-    OTL_Bytes  p = table;
-    OTL_UInt   back_count, input_count, ahead_count, pos_count;
+        OTL_CHECK( num_glyphs * 2 + num_pos * 4 );
 
-    OTL_CHECK( 2 );
-    back_count = OTL_NEXT_USHORT( p );
+        for ( ; num_glyphs > 0; num_glyphs-- )
+          otl_coverage_validate( table + OTL_NEXT_USHORT( p ), valid );
 
-    OTL_CHECK( back_count*2 + 2 );
-    p += back_count*2;
+        /* XXX: check pos lookups */
+      }
+      break;
 
-    input_count = OTL_NEXT_USHORT( p );
-    if ( input_count == 0 )
+    default:
       OTL_INVALID_DATA;
-
-    OTL_CHECK( input_count*2 );
-    p += (input_count-1)*2;
-
-    ahead_count = OTL_NEXT_USHORT( p );
-    OTL_CHECK( ahead_count*2 + 2 );
-    p += ahead_count*2;
-
-    pos_count = OTL_NEXT_USHORT( p );
-    OTL_CHECK( pos_count*4 );
+    }
   }
 
 
-  static void
-  otl_chain_pos_rule_set_validate( OTL_Bytes      table,
-                                   OTL_Validator  valid )
-  {
-    OTL_Bytes  p = table;
-    OTL_UInt   count;
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                     GPOS LOOKUP TYPE 8                        *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
 
-    OTL_CHECK( 2 );
-    count = OTL_NEXT_USHORT( p );
-
-    OTL_CHECK( 2*count );
-    for ( ; count > 0; count-- )
-      otl_chain_pos_rule_validate( table + OTL_NEXT_USHORT( p ), valid );
-  }
-
-
-
+  /* used for both format 1 and 2 */
   static void
-  otl_chain_pos_class_rule_validate( OTL_Bytes      table,
-                                     OTL_Validator  valid )
+  otl_chain_pos_rule_validate( OTL_Bytes      table,
+                               OTL_Validator  valid )
   {
     OTL_Bytes  p = table;
-    OTL_UInt   back_count, input_count, ahead_count, pos_count;
+    OTL_UInt   num_backtrack_glyphs, num_input_glyphs, num_lookahead_glyphs;
+    OTL_UInt   num_pos;
 
+
     OTL_CHECK( 2 );
-    back_count = OTL_NEXT_USHORT( p );
+    num_backtrack_glyphs = OTL_NEXT_USHORT( p );
 
-    OTL_CHECK( back_count*2 + 2 );
-    p += back_count*2;
+    OTL_CHECK( num_backtrack_glyphs * 2 + 2 );
+    p += num_backtrack_glyphs * 2;
 
-    input_count = OTL_NEXT_USHORT( p );
-    if ( input_count == 0 )
+    num_input_glyphs = OTL_NEXT_USHORT( p );
+    if ( num_input_glyphs == 0 )
       OTL_INVALID_DATA;
 
-    OTL_CHECK( input_count*2 );
-    p += (input_count-1)*2;
+    OTL_CHECK( num_input_glyphs * 2 );
+    p += ( num_input_glyphs - 1 ) * 2;
 
-    ahead_count = OTL_NEXT_USHORT( p );
-    OTL_CHECK( ahead_count*2 + 2 );
-    p += ahead_count*2;
+    num_lookahead_glyphs = OTL_NEXT_USHORT( p );
+    OTL_CHECK( num_lookahead_glyphs * 2 + 2 );
+    p += num_lookahead_glyphs * 2;
 
-    pos_count = OTL_NEXT_USHORT( p );
-    OTL_CHECK( pos_count*4 );
+    num_pos = OTL_NEXT_USHORT( p );
+    OTL_CHECK( num_pos * 4 );
+
+    /* XXX: check pos lookups */
   }
 
 
+  /* used for both format 1 and 2 */
   static void
-  otl_chain_pos_class_set_validate( OTL_Bytes      table,
+  otl_chain_pos_rule_set_validate( OTL_Bytes      table,
                                    OTL_Validator  valid )
   {
     OTL_Bytes  p = table;
     OTL_UInt   count;
 
+
     OTL_CHECK( 2 );
     count = OTL_NEXT_USHORT( p );
 
-    OTL_CHECK( 2*count );
+    OTL_CHECK( 2 * count );
+
+    /* scan chain pos rule records */
     for ( ; count > 0; count-- )
-      otl_chain_pos_class_rule_validate( table + OTL_NEXT_USHORT( p ), valid );
+      otl_chain_pos_rule_validate( table + OTL_NEXT_USHORT( p ), valid );
   }
 
 
@@ -817,92 +802,106 @@
     OTL_Bytes  p = table;
     OTL_UInt   format;
 
+
     OTL_CHECK( 2 );
     format = OTL_NEXT_USHORT( p );
-    switch (format)
+    switch ( format )
     {
-      case 1:
-        {
-          OTL_UInt  coverage, count;
+    case 1:
+      {
+        OTL_UInt  coverage, num_chain_pos_rulesets;
 
-          OTL_CHECK( 4 );
-          coverage = OTL_NEXT_USHORT( p );
-          count    = OTL_NEXT_USHORT( p );
 
-          otl_coverage_validate( table + coverage, valid );
+        OTL_CHECK( 4 );
+        coverage               = OTL_NEXT_USHORT( p );
+        num_chain_pos_rulesets = OTL_NEXT_USHORT( p );
 
-          OTL_CHECK( count*2 );
-          for ( ; count > 0; count-- )
-            otl_chain_pos_rule_set_validate( table + OTL_NEXT_USHORT( p ),
-                                             valid );
-        }
-        break;
+        otl_coverage_validate( table + coverage, valid );
 
-      case 2:
-        {
-          OTL_UInt  coverage, back_class, input_class, ahead_class, count;
+        OTL_CHECK( num_chain_pos_rulesets * 2 );
 
-          OTL_CHECK( 10 );
-          coverage    = OTL_NEXT_USHORT( p );
-          back_class  = OTL_NEXT_USHORT( p );
-          input_class = OTL_NEXT_USHORT( p );
-          ahead_class = OTL_NEXT_USHORT( p );
-          count       = OTL_NEXT_USHORT( p );
+        /* scan chain pos ruleset records */
+        for ( ; num_chain_pos_rulesets > 0; num_chain_pos_rulesets-- )
+          otl_chain_pos_rule_set_validate( table + OTL_NEXT_USHORT( p ),
+                                           valid );
+      }
+      break;
 
-          otl_coverage_validate( table + coverage, valid );
+    case 2:
+      {
+        OTL_UInt  coverage, back_class, input_class, ahead_class;
+        OTL_UInt  num_chainpos_class_sets;
 
-          otl_class_definition_validate( table + back_class,  valid );
-          otl_class_definition_validate( table + input_class, valid );
-          otl_class_definition_validate( table + ahead_class, valid );
 
-          OTL_CHECK( count*2 );
-          for ( ; count > 0; count-- )
-            otl_chain_pos_class_set_validate( table + OTL_NEXT_USHORT( p ),
-                                              valid );
-        }
-        break;
+        OTL_CHECK( 10 );
+        coverage                = OTL_NEXT_USHORT( p );
+        back_class              = OTL_NEXT_USHORT( p );
+        input_class             = OTL_NEXT_USHORT( p );
+        ahead_class             = OTL_NEXT_USHORT( p );
+        num_chainpos_class_sets = OTL_NEXT_USHORT( p );
 
-      case 3:
-        {
-          OTL_UInt  back_count, input_count, ahead_count, pos_count, count;
+        otl_coverage_validate( table + coverage, valid );
 
-          OTL_CHECK( 2 );
-          back_count = OTL_NEXT_USHORT( p );
+        otl_class_definition_validate( table + back_class,  valid );
+        otl_class_definition_validate( table + input_class, valid );
+        otl_class_definition_validate( table + ahead_class, valid );
 
-          OTL_CHECK( 2*back_count+2 );
-          for ( count = back_count; count > 0; count-- )
-            otl_coverage_validate( table + OTL_NEXT_USHORT( p ), valid );
+        OTL_CHECK( num_chainpos_class_sets * 2 );
 
-          input_count = OTL_NEXT_USHORT( p );
+        /* scan chainpos class set records */
+        for ( ; num_chainpos_class_sets > 0; num_chainpos_class_sets-- )
+          otl_chain_pos_rule_set_validate( table + OTL_NEXT_USHORT( p ),
+                                           valid );
+      }
+      break;
 
-          OTL_CHECK( 2*input_count+2 );
-          for ( count = input_count; count > 0; count-- )
-            otl_coverage_validate( table + OTL_NEXT_USHORT( p ), valid );
+    case 3:
+      {
+        OTL_UInt  num_backtrack_glyphs, num_input_glyphs;
+        OTL_UInt  num_lookahead_glyphs, num_pos;
 
-          ahead_count = OTL_NEXT_USHORT( p );
 
-          OTL_CHECK( 2*ahead_count+2 );
-          for ( count = ahead_count; count > 0; count-- )
-            otl_coverage_validate( table + OTL_NEXT_USHORT( p ), valid );
+        OTL_CHECK( 2 );
+        num_backtrack_glyphs = OTL_NEXT_USHORT( p );
 
-          pos_count = OTL_NEXT_USHORT( p );
-          OTL_CHECK( pos_count*4 );
-        }
-        break;
+        OTL_CHECK( 2 * num_backtrack_glyphs + 2 );
 
-      default:
-        OTL_INVALID_DATA;
+        for ( ; num_backtrack_glyphs > 0; num_backtrack_glyphs-- )
+          otl_coverage_validate( table + OTL_NEXT_USHORT( p ), valid );
+
+        num_input_glyphs = OTL_NEXT_USHORT( p );
+        OTL_CHECK( 2 * num_input_glyphs + 2 );
+
+        for ( ; num_input_glyphs > 0; num_input_glyphs-- )
+          otl_coverage_validate( table + OTL_NEXT_USHORT( p ), valid );
+
+        num_lookahead_glyphs = OTL_NEXT_USHORT( p );
+        OTL_CHECK( 2 * num_lookahead_glyphs + 2 );
+
+        for ( ; num_lookahead_glyphs > 0; num_lookahead_glyphs-- )
+          otl_coverage_validate( table + OTL_NEXT_USHORT( p ), valid );
+
+        num_pos = OTL_NEXT_USHORT( p );
+        OTL_CHECK( num_pos * 4 );
+
+        /* XXX: check pos lookups */
+      }
+      break;
+
+    default:
+      OTL_INVALID_DATA;
     }
   }
 
- /************************************************************************/
- /************************************************************************/
- /*****                                                              *****/
- /*****                 GPOS LOOKUP TYPE 9                           *****/
- /*****                                                              *****/
- /************************************************************************/
- /************************************************************************/
 
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                     GPOS LOOKUP TYPE 9                        *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
   static void
   otl_gpos_lookup9_validate( OTL_Bytes      table,
                              OTL_Validator  valid )
@@ -910,32 +909,35 @@
     OTL_Bytes  p = table;
     OTL_UInt   format;
 
+
     OTL_CHECK( 2 );
     format = OTL_NEXT_USHORT( p );
-    switch (format)
+    switch ( format )
     {
-      case 1:
-        {
-          OTL_UInt          lookup_type, lookup_offset;
-          OTL_ValidateFunc  validate;
+    case 1:
+      {
+        OTL_UInt          lookup_type, lookup_offset;
+        OTL_ValidateFunc  validate;
 
-          OTL_CHECK( 6 );
-          lookup_type   = OTL_NEXT_USHORT( p );
-          lookup_offset = OTL_NEXT_ULONG( p );
 
-          if ( lookup_type == 0 || lookup_type >= 9 )
-            OTL_INVALID_DATA;
+        OTL_CHECK( 6 );
+        lookup_type   = OTL_NEXT_USHORT( p );
+        lookup_offset = OTL_NEXT_ULONG( p );
 
-          validate = otl_gpos_validate_funcs[ lookup_type-1 ];
-          validate( table + lookup_offset, valid );
-        }
-        break;
+        if ( lookup_type == 0 || lookup_type >= 9 )
+          OTL_INVALID_DATA;
 
-      default:
-        OTL_INVALID_DATA;
+        validate = otl_gpos_validate_funcs[lookup_type - 1];
+        validate( table + lookup_offset, valid );
+      }
+      break;
+
+    default:
+      OTL_INVALID_DATA;
     }
   }
 
+
   static OTL_ValidateFunc  otl_gpos_validate_funcs[9] =
   {
     otl_gpos_lookup1_validate,
@@ -946,7 +948,7 @@
     otl_gpos_lookup6_validate,
     otl_gpos_lookup7_validate,
     otl_gpos_lookup8_validate,
-    otl_gpos_lookup9_validate,
+    otl_gpos_lookup9_validate
   };
 
 
@@ -966,7 +968,6 @@
   /*************************************************************************/
   /*************************************************************************/
 
-
   OTL_LOCALDEF( void )
   otl_gpos_validate( OTL_Bytes      table,
                      OTL_Validator  valid )
@@ -974,6 +975,7 @@
     OTL_Bytes  p = table;
     OTL_UInt   scripts, features, lookups;
 
+
     OTL_CHECK( 10 );
 
     if ( OTL_NEXT_USHORT( p ) != 0x10000UL )
@@ -987,3 +989,6 @@
     otl_feature_list_validate( table + features, table + lookups, valid );
     otl_script_list_validate( table + scripts, table + features, valid );
   }
+
+
+/* END */
--- a/src/otlayout/otlgpos.h
+++ b/src/otlayout/otlgpos.h
@@ -1,3 +1,21 @@
+/***************************************************************************/
+/*                                                                         */
+/*  otlgpos.h                                                              */
+/*                                                                         */
+/*    OpenType layout support, GPOS table (specification).                 */
+/*                                                                         */
+/*  Copyright 2002, 2004 by                                                */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
 #ifndef __OTLGPOS_H__
 #define __OTLGPOS_H__
 
@@ -5,6 +23,7 @@
 
 OTL_BEGIN_HEADER
 
+
   OTL_LOCAL( void )
   otl_gpos_subtable_validate( OTL_Bytes      table,
                               OTL_Validator  valid );
@@ -13,6 +32,10 @@
   otl_gpos_validate( OTL_Bytes      table,
                      OTL_Validator  valid );
 
+
 OTL_END_HEADER
 
 #endif /* __OTLGPOS_H__ */
+
+
+/* END */