Edit

kc3-lang/freetype/src/otlayout/otlbase.c

Branch :

  • Show log

    Commit

  • Author : David Turner
    Date : 2002-05-04 18:02:59
    Hash : 8cd89073
    Message : * src/truetype/ttgload.c (TT_Load_Glyph): finally fixing the last bug that prevented FreeType 2.x and FreeType 1.x to produce bit-by-bit identical monochrome glyph bitmaps with native TrueType hinting. The culprit was a single-bit flag that wasn't set correctly by the TrueType glyph loader !! * src/otlayout/otlayout.h, src/otlayout/otlbase.c, src/otlayout/otlbase.h, src/otlayout/otlconf.h, src/otlayout/otlgdef.c, src/otlayout/otlgdef.h, src/otlayout/otlgpos.c, src/otlayout/otlgpos.h, src/otlayout/otlgsub.c, src/otlayout/otlgsub.h, src/otlayout/otljstf.c, src/otlayout/otljstf.h, src/otlayout/otltable.c, src/otlayout/otltable.h, src/otlayout/otltags.h: adding OpenType Layout source files. Module is still incomplete

  • src/otlayout/otlbase.c
  • #include "otlbase.h"
    #include "otlcommn.h"
    
      static void
      otl_base_coord_validate( OTL_Bytes      table,
                               OTL_Validator  valid )
      {
        OTL_Bytes  p = table;
        OTL_UInt   format;
    
        OTL_CHECK( 4 );
    
        format = OTL_NEXT_USHORT( p );
        p += 2;
    
        switch ( format )
        {
          case 1:
            break;
    
          case 2:
            OTL_CHECK( 4 );
            break;
    
          case 3:
            OTL_CHECK( 2 );
            otl_device_table_validate( table + OTL_PEEK_USHORT( p ) );
            break;
    
          default:
            OTL_INVALID_DATA;
        }
      }
    
    
      static void
      otl_base_tag_list_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*4 );
      }
    
    
    
      static void
      otl_base_values_validate( OTL_Bytes      table,
                                OTL_Validator  valid )
      {
        OTL_Bytes  p = table;
        OTL_UInt   count;
    
        OTL_CHECK( 4 );
    
        p    += 2;  /* skip default index */
        count = OTL_NEXT_USHORT( p );
    
        OTL_CHECK( count*2 );
    
        for ( ; count > 0; count-- )
          otl_base_coord_validate( table + OTL_NEXT_USHORT( p ), valid );
      }
    
    
      static void
      otl_base_minmax_validate( OTL_Bytes      table,
                                OTL_Validator  valid )
      {
        OTL_Bytes  p = table;
        OTL_UInt   min_coord, max_coord, count;
    
        OTL_CHECK(6);
        min_coord = OTL_NEXT_USHORT( p );
        max_coord = OTL_NEXT_USHORT( p );
        count     = OTL_NEXT_USHORT( p );
    
        if ( min_coord )
          otl_base_coord_validate( table + min_coord, valid );
    
        if ( max_coord )
          otl_base_coord_validate( table + max_coord, valid );
    
        OTL_CHECK( count*8 );
        for ( ; count > 0; count-- )
        {
          p += 4;  /* ignore tag */
          min_coord = OTL_NEXT_USHORT( p );
          max_coord = OTL_NEXT_USHORT( p );
    
          if ( min_coord )
            otl_base_coord_validate( table + min_coord, valid );
    
          if ( max_coord )
            otl_base_coord_validate( table + max_coord, valid );
        }
      }
    
    
      static void
      otl_base_script_validate( OTL_Bytes      table,
                                OTL_Validator  valid )
      {
        OTL_Bytes  p = table;
        OTL_UInt   values, default_minmax;
    
        OTL_CHECK(6);
    
        values         = OTL_NEXT_USHORT( p );
        default_minmax = OTL_NEXT_USHORT( p );
        count          = OTL_NEXT_USHORT( p );
    
        if ( values )
          otl_base_values_validate( table + values, valid );
    
        if ( default_minmax )
          otl_base_minmax_validate( table + default_minmax, valid );
    
        OTL_CHECK( count*6 );
        for ( ; count > 0; count-- )
        {
          p += 4;  /* ignore tag */
          otl_base_minmax_validate( table + OTL_NEXT_USHORT( p ), valid );
        }
      }
    
    
      static void
      otl_base_script_list_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*6);
    
        for ( ; count > 0; count-- )
        {
          p += 4;  /* ignore script tag */
          otl_base_script_validate( table + OTL_NEXT_USHORT( p ) );
        }
      }
    
      static void
      otl_axis_table_validate( OTL_Bytes      table,
                               OTL_Validator  valid )
      {
        OTL_Bytes  p = table;
        OTL_UInt   tags;
    
        OTL_CHECK(4);
    
        tags = OTL_NEXT_USHORT( p );
        if ( tags )
          otl_base_tag_list_validate   ( table + tags );
    
        otl_base_script_list_validate( table + OTL_NEXT_USHORT( p ) );
      }
    
    
      OTL_LOCALDEF( void )
      otl_base_validate( OTL_Bytes      table,
                         OTL_Validator  valid )
      {
        OTL_Bytes p = table;
    
        OTL_CHECK(6);
    
        if ( OTL_NEXT_ULONG( p ) != 0x10000UL )
          OTL_INVALID_DATA;
    
        otl_axis_table_validate( table + OTL_NEXT_USHORT( p ) );
        otl_axis_table_validate( table + OTL_NEXT_USHORT( p ) );
      }