src/java.desktop/share/native/libfreetype/src/psaux/psintrp.c
author prr
Thu, 09 May 2019 16:09:39 -0700
changeset 54876 da3834261f0c
parent 50479 70e706c85f1d
permissions -rw-r--r--
8222362: Upgrade to Freetype 2.10.0 Reviewed-by: serb, erikj
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
     1
/****************************************************************************
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
     2
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
     3
 * psintrp.c
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
     4
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
     5
 *   Adobe's CFF Interpreter (body).
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
     6
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
     7
 * Copyright 2007-2014 Adobe Systems Incorporated.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
     8
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
     9
 * This software, and all works of authorship, whether in source or
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    10
 * object code form as indicated by the copyright notice(s) included
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    11
 * herein (collectively, the "Work") is made available, and may only be
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    12
 * used, modified, and distributed under the FreeType Project License,
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    13
 * LICENSE.TXT.  Additionally, subject to the terms and conditions of the
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    14
 * FreeType Project License, each contributor to the Work hereby grants
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    15
 * to any individual or legal entity exercising permissions granted by
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    16
 * the FreeType Project License and this section (hereafter, "You" or
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    17
 * "Your") a perpetual, worldwide, non-exclusive, no-charge,
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    18
 * royalty-free, irrevocable (except as stated in this section) patent
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    19
 * license to make, have made, use, offer to sell, sell, import, and
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    20
 * otherwise transfer the Work, where such license applies only to those
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    21
 * patent claims licensable by such contributor that are necessarily
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    22
 * infringed by their contribution(s) alone or by combination of their
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    23
 * contribution(s) with the Work to which such contribution(s) was
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    24
 * submitted.  If You institute patent litigation against any entity
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    25
 * (including a cross-claim or counterclaim in a lawsuit) alleging that
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    26
 * the Work or a contribution incorporated within the Work constitutes
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    27
 * direct or contributory patent infringement, then any patent licenses
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    28
 * granted to You under this License for that Work shall terminate as of
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    29
 * the date such litigation is filed.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    30
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    31
 * By using, modifying, or distributing the Work you indicate that you
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    32
 * have read and understood the terms and conditions of the
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    33
 * FreeType Project License as well as those provided in this section,
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    34
 * and you accept them fully.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    35
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    36
 */
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    37
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    38
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    39
#include "psft.h"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    40
#include FT_INTERNAL_DEBUG_H
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    41
#include FT_SERVICE_CFF_TABLE_LOAD_H
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    42
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    43
#include "psglue.h"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    44
#include "psfont.h"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    45
#include "psstack.h"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    46
#include "pshints.h"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    47
#include "psintrp.h"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    48
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    49
#include "pserror.h"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    50
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    51
#include "psobjs.h"   /* for cff_random */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    52
#include "t1decode.h" /* for t1 seac    */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    53
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    54
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    55
  /**************************************************************************
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    56
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    57
   * The macro FT_COMPONENT is used in trace mode.  It is an implicit
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    58
   * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    59
   * messages during execution.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    60
   */
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    61
#undef  FT_COMPONENT
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
    62
#define FT_COMPONENT  cf2interp
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    63
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    64
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    65
  FT_LOCAL_DEF( void )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    66
  cf2_hintmask_init( CF2_HintMask  hintmask,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    67
                     FT_Error*     error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    68
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    69
    FT_ZERO( hintmask );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    70
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    71
    hintmask->error = error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    72
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    73
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    74
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    75
  FT_LOCAL_DEF( FT_Bool )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    76
  cf2_hintmask_isValid( const CF2_HintMask  hintmask )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    77
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    78
    return hintmask->isValid;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    79
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    80
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    81
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    82
  FT_LOCAL_DEF( FT_Bool )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    83
  cf2_hintmask_isNew( const CF2_HintMask  hintmask )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    84
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    85
    return hintmask->isNew;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    86
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    87
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    88
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    89
  FT_LOCAL_DEF( void )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    90
  cf2_hintmask_setNew( CF2_HintMask  hintmask,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    91
                       FT_Bool       val )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    92
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    93
    hintmask->isNew = val;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    94
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    95
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    96
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    97
  /* clients call `getMaskPtr' in order to iterate */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    98
  /* through hint mask                             */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    99
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   100
  FT_LOCAL_DEF( FT_Byte* )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   101
  cf2_hintmask_getMaskPtr( CF2_HintMask  hintmask )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   102
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   103
    return hintmask->mask;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   104
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   105
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   106
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   107
  static size_t
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   108
  cf2_hintmask_setCounts( CF2_HintMask  hintmask,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   109
                          size_t        bitCount )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   110
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   111
    if ( bitCount > CF2_MAX_HINTS )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   112
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   113
      /* total of h and v stems must be <= 96 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   114
      CF2_SET_ERROR( hintmask->error, Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   115
      return 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   116
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   117
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   118
    hintmask->bitCount  = bitCount;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   119
    hintmask->byteCount = ( hintmask->bitCount + 7 ) / 8;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   120
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   121
    hintmask->isValid = TRUE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   122
    hintmask->isNew   = TRUE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   123
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   124
    return bitCount;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   125
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   126
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   127
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   128
  /* consume the hintmask bytes from the charstring, advancing the src */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   129
  /* pointer                                                           */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   130
  static void
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   131
  cf2_hintmask_read( CF2_HintMask  hintmask,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   132
                     CF2_Buffer    charstring,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   133
                     size_t        bitCount )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   134
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   135
    size_t  i;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   136
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   137
#ifndef CF2_NDEBUG
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   138
    /* these are the bits in the final mask byte that should be zero  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   139
    /* Note: this variable is only used in an assert expression below */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   140
    /* and then only if CF2_NDEBUG is not defined                     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   141
    CF2_UInt  mask = ( 1 << ( -(CF2_Int)bitCount & 7 ) ) - 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   142
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   143
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   144
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   145
    /* initialize counts and isValid */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   146
    if ( cf2_hintmask_setCounts( hintmask, bitCount ) == 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   147
      return;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   148
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   149
    FT_ASSERT( hintmask->byteCount > 0 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   150
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   151
    FT_TRACE4(( " (maskbytes:" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   152
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   153
    /* set mask and advance interpreter's charstring pointer */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   154
    for ( i = 0; i < hintmask->byteCount; i++ )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   155
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   156
      hintmask->mask[i] = (FT_Byte)cf2_buf_readByte( charstring );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   157
      FT_TRACE4(( " 0x%02X", hintmask->mask[i] ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   158
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   159
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   160
    FT_TRACE4(( ")\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   161
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   162
    /* assert any unused bits in last byte are zero unless there's a prior */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   163
    /* error                                                               */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   164
    /* bitCount -> mask, 0 -> 0, 1 -> 7f, 2 -> 3f, ... 6 -> 3, 7 -> 1      */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   165
#ifndef CF2_NDEBUG
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   166
    FT_ASSERT( ( hintmask->mask[hintmask->byteCount - 1] & mask ) == 0 ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   167
               *hintmask->error                                        );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   168
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   169
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   170
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   171
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   172
  FT_LOCAL_DEF( void )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   173
  cf2_hintmask_setAll( CF2_HintMask  hintmask,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   174
                       size_t        bitCount )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   175
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   176
    size_t    i;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   177
    CF2_UInt  mask = ( 1 << ( -(CF2_Int)bitCount & 7 ) ) - 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   178
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   179
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   180
    /* initialize counts and isValid */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   181
    if ( cf2_hintmask_setCounts( hintmask, bitCount ) == 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   182
      return;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   183
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   184
    FT_ASSERT( hintmask->byteCount > 0 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   185
    FT_ASSERT( hintmask->byteCount <=
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   186
                 sizeof ( hintmask->mask ) / sizeof ( hintmask->mask[0] ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   187
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   188
    /* set mask to all ones */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   189
    for ( i = 0; i < hintmask->byteCount; i++ )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   190
      hintmask->mask[i] = 0xFF;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   191
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   192
    /* clear unused bits                                              */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   193
    /* bitCount -> mask, 0 -> 0, 1 -> 7f, 2 -> 3f, ... 6 -> 3, 7 -> 1 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   194
    hintmask->mask[hintmask->byteCount - 1] &= ~mask;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   195
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   196
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   197
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   198
  /* Type2 charstring opcodes */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   199
  enum
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   200
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   201
    cf2_cmdRESERVED_0,   /* 0 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   202
    cf2_cmdHSTEM,        /* 1 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   203
    cf2_cmdRESERVED_2,   /* 2 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   204
    cf2_cmdVSTEM,        /* 3 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   205
    cf2_cmdVMOVETO,      /* 4 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   206
    cf2_cmdRLINETO,      /* 5 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   207
    cf2_cmdHLINETO,      /* 6 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   208
    cf2_cmdVLINETO,      /* 7 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   209
    cf2_cmdRRCURVETO,    /* 8 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   210
    cf2_cmdCLOSEPATH,    /* 9      T1 only */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   211
    cf2_cmdCALLSUBR,     /* 10 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   212
    cf2_cmdRETURN,       /* 11 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   213
    cf2_cmdESC,          /* 12 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   214
    cf2_cmdHSBW,         /* 13     T1 only */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   215
    cf2_cmdENDCHAR,      /* 14 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   216
    cf2_cmdVSINDEX,      /* 15 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   217
    cf2_cmdBLEND,        /* 16 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   218
    cf2_cmdRESERVED_17,  /* 17 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   219
    cf2_cmdHSTEMHM,      /* 18 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   220
    cf2_cmdHINTMASK,     /* 19 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   221
    cf2_cmdCNTRMASK,     /* 20 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   222
    cf2_cmdRMOVETO,      /* 21 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   223
    cf2_cmdHMOVETO,      /* 22 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   224
    cf2_cmdVSTEMHM,      /* 23 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   225
    cf2_cmdRCURVELINE,   /* 24 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   226
    cf2_cmdRLINECURVE,   /* 25 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   227
    cf2_cmdVVCURVETO,    /* 26 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   228
    cf2_cmdHHCURVETO,    /* 27 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   229
    cf2_cmdEXTENDEDNMBR, /* 28 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   230
    cf2_cmdCALLGSUBR,    /* 29 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   231
    cf2_cmdVHCURVETO,    /* 30 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   232
    cf2_cmdHVCURVETO     /* 31 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   233
  };
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   235
  enum
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   236
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   237
    cf2_escDOTSECTION,   /* 0 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   238
    cf2_escVSTEM3,       /* 1      T1 only */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   239
    cf2_escHSTEM3,       /* 2      T1 only */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   240
    cf2_escAND,          /* 3 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   241
    cf2_escOR,           /* 4 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   242
    cf2_escNOT,          /* 5 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   243
    cf2_escSEAC,         /* 6      T1 only */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   244
    cf2_escSBW,          /* 7      T1 only */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   245
    cf2_escRESERVED_8,   /* 8 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   246
    cf2_escABS,          /* 9 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   247
    cf2_escADD,          /* 10     like otherADD */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   248
    cf2_escSUB,          /* 11     like otherSUB */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   249
    cf2_escDIV,          /* 12 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   250
    cf2_escRESERVED_13,  /* 13 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   251
    cf2_escNEG,          /* 14 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   252
    cf2_escEQ,           /* 15 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   253
    cf2_escCALLOTHERSUBR,/* 16     T1 only */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   254
    cf2_escPOP,          /* 17     T1 only */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   255
    cf2_escDROP,         /* 18 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   256
    cf2_escRESERVED_19,  /* 19 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   257
    cf2_escPUT,          /* 20     like otherPUT    */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   258
    cf2_escGET,          /* 21     like otherGET    */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   259
    cf2_escIFELSE,       /* 22     like otherIFELSE */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   260
    cf2_escRANDOM,       /* 23     like otherRANDOM */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   261
    cf2_escMUL,          /* 24     like otherMUL    */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   262
    cf2_escRESERVED_25,  /* 25 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   263
    cf2_escSQRT,         /* 26 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   264
    cf2_escDUP,          /* 27     like otherDUP    */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   265
    cf2_escEXCH,         /* 28     like otherEXCH   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   266
    cf2_escINDEX,        /* 29 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   267
    cf2_escROLL,         /* 30 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   268
    cf2_escRESERVED_31,  /* 31 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   269
    cf2_escRESERVED_32,  /* 32 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   270
    cf2_escSETCURRENTPT, /* 33     T1 only */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   271
    cf2_escHFLEX,        /* 34 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   272
    cf2_escFLEX,         /* 35 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   273
    cf2_escHFLEX1,       /* 36 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   274
    cf2_escFLEX1,        /* 37 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   275
    cf2_escRESERVED_38   /* 38     & all higher     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   276
  };
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   277
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   278
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   279
  /* `stemHintArray' does not change once we start drawing the outline. */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   280
  static void
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   281
  cf2_doStems( const CF2_Font  font,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   282
               CF2_Stack       opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   283
               CF2_ArrStack    stemHintArray,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   284
               CF2_Fixed*      width,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   285
               FT_Bool*        haveWidth,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   286
               CF2_Fixed       hintOffset )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   287
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   288
    CF2_UInt  i;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   289
    CF2_UInt  count       = cf2_stack_count( opStack );
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   290
    FT_Bool   hasWidthArg = FT_BOOL( count & 1 );
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   291
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   292
    /* variable accumulates delta values from operand stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   293
    CF2_Fixed  position = hintOffset;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   294
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   295
    if ( font->isT1 && !font->decoder->flex_state && !*haveWidth )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   296
      FT_ERROR(( "cf2_doStems (Type 1 mode):"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   297
                 " No width. Use hsbw/sbw as first op\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   298
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   299
    if ( !font->isT1 && hasWidthArg && !*haveWidth )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   300
      *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   301
                          cf2_getNominalWidthX( font->decoder ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   302
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   303
    if ( font->decoder->width_only )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   304
      goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   305
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   306
    for ( i = hasWidthArg ? 1 : 0; i < count; i += 2 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   307
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   308
      /* construct a CF2_StemHint and push it onto the list */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   309
      CF2_StemHintRec  stemhint;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   310
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   311
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   312
      stemhint.min =
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   313
      position     = ADD_INT32( position,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   314
                                cf2_stack_getReal( opStack, i ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   315
      stemhint.max =
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   316
      position     = ADD_INT32( position,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   317
                                cf2_stack_getReal( opStack, i + 1 ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   318
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   319
      stemhint.used  = FALSE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   320
      stemhint.maxDS =
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   321
      stemhint.minDS = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   322
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   323
      cf2_arrstack_push( stemHintArray, &stemhint ); /* defer error check */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   324
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   325
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   326
    cf2_stack_clear( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   327
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   328
  exit:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   329
    /* cf2_doStems must define a width (may be default) */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   330
    *haveWidth = TRUE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   331
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   332
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   333
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   334
  static void
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   335
  cf2_doFlex( CF2_Stack       opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   336
              CF2_Fixed*      curX,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   337
              CF2_Fixed*      curY,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   338
              CF2_GlyphPath   glyphPath,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   339
              const FT_Bool*  readFromStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   340
              FT_Bool         doConditionalLastRead )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   341
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   342
    CF2_Fixed  vals[14];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   343
    CF2_UInt   idx;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   344
    FT_Bool    isHFlex;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   345
    CF2_Int    top, i, j;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   346
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   347
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   348
    vals[0] = *curX;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   349
    vals[1] = *curY;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   350
    idx     = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   351
    isHFlex = FT_BOOL( readFromStack[9] == FALSE );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   352
    top     = isHFlex ? 9 : 10;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   353
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   354
    for ( i = 0; i < top; i++ )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   355
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   356
      vals[i + 2] = vals[i];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   357
      if ( readFromStack[i] )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   358
        vals[i + 2] = ADD_INT32( vals[i + 2], cf2_stack_getReal( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   359
                                                                 idx++ ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   360
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   361
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   362
    if ( isHFlex )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   363
      vals[9 + 2] = *curY;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   364
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   365
    if ( doConditionalLastRead )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   366
    {
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   367
      FT_Bool    lastIsX = FT_BOOL(
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   368
                             cf2_fixedAbs( SUB_INT32( vals[10], *curX ) ) >
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   369
                             cf2_fixedAbs( SUB_INT32( vals[11], *curY ) ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   370
      CF2_Fixed  lastVal = cf2_stack_getReal( opStack, idx );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   371
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   372
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   373
      if ( lastIsX )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   374
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   375
        vals[12] = ADD_INT32( vals[10], lastVal );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   376
        vals[13] = *curY;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   377
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   378
      else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   379
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   380
        vals[12] = *curX;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   381
        vals[13] = ADD_INT32( vals[11], lastVal );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   382
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   383
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   384
    else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   385
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   386
      if ( readFromStack[10] )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   387
        vals[12] = ADD_INT32( vals[10],
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   388
                              cf2_stack_getReal( opStack, idx++ ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   389
      else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   390
        vals[12] = *curX;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   391
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   392
      if ( readFromStack[11] )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   393
        vals[13] = ADD_INT32( vals[11],
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   394
                              cf2_stack_getReal( opStack, idx ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   395
      else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   396
        vals[13] = *curY;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   397
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   398
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   399
    for ( j = 0; j < 2; j++ )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   400
      cf2_glyphpath_curveTo( glyphPath, vals[j * 6 + 2],
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   401
                                        vals[j * 6 + 3],
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   402
                                        vals[j * 6 + 4],
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   403
                                        vals[j * 6 + 5],
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   404
                                        vals[j * 6 + 6],
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   405
                                        vals[j * 6 + 7] );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   406
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   407
    cf2_stack_clear( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   408
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   409
    *curX = vals[12];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   410
    *curY = vals[13];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   411
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   412
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   413
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   414
  /* Blend numOperands on the stack,                */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   415
  /* store results into the first numBlends values, */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   416
  /* then pop remaining arguments.                  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   417
  static void
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   418
  cf2_doBlend( const CFF_Blend  blend,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   419
               CF2_Stack        opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   420
               CF2_UInt         numBlends )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   421
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   422
    CF2_UInt  delta;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   423
    CF2_UInt  base;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   424
    CF2_UInt  i, j;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   425
    CF2_UInt  numOperands = (CF2_UInt)( numBlends * blend->lenBV );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   426
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   427
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   428
    base  = cf2_stack_count( opStack ) - numOperands;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   429
    delta = base + numBlends;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   430
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   431
    for ( i = 0; i < numBlends; i++ )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   432
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   433
      const CF2_Fixed*  weight = &blend->BV[1];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   434
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   435
      /* start with first term */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   436
      CF2_Fixed  sum = cf2_stack_getReal( opStack, i + base );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   437
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   438
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   439
      for ( j = 1; j < blend->lenBV; j++ )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   440
        sum = ADD_INT32( sum,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   441
                         FT_MulFix( *weight++,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   442
                                    cf2_stack_getReal( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   443
                                                       delta++ ) ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   444
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   445
      /* store blended result  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   446
      cf2_stack_setReal( opStack, i + base, sum );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   447
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   448
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   449
    /* leave only `numBlends' results on stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   450
    cf2_stack_pop( opStack, numOperands - numBlends );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   451
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   452
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   453
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   454
  /*
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   455
   * `error' is a shared error code used by many objects in this
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   456
   * routine.  Before the code continues from an error, it must check and
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   457
   * record the error in `*error'.  The idea is that this shared
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   458
   * error code will record the first error encountered.  If testing
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   459
   * for an error anyway, the cost of `goto exit' is small, so we do it,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   460
   * even if continuing would be safe.  In this case, `lastError' is
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   461
   * set, so the testing and storing can be done in one place, at `exit'.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   462
   *
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   463
   * Continuing after an error is intended for objects which do their own
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   464
   * testing of `*error', e.g., array stack functions.  This allows us to
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   465
   * avoid an extra test after the call.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   466
   *
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   467
   * Unimplemented opcodes are ignored.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   468
   *
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   469
   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   470
  FT_LOCAL_DEF( void )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   471
  cf2_interpT2CharString( CF2_Font              font,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   472
                          CF2_Buffer            buf,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   473
                          CF2_OutlineCallbacks  callbacks,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   474
                          const FT_Vector*      translation,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   475
                          FT_Bool               doingSeac,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   476
                          CF2_Fixed             curX,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   477
                          CF2_Fixed             curY,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   478
                          CF2_Fixed*            width )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   479
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   480
    /* lastError is used for errors that are immediately tested */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   481
    FT_Error  lastError = FT_Err_Ok;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   482
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   483
    /* pointer to parsed font object */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   484
    PS_Decoder*  decoder = font->decoder;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   485
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   486
    FT_Error*  error  = &font->error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   487
    FT_Memory  memory = font->memory;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   488
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   489
    CF2_Fixed  scaleY        = font->innerTransform.d;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   490
    CF2_Fixed  nominalWidthX = cf2_getNominalWidthX( decoder );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   491
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   492
    /* stuff for Type 1 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   493
    FT_Int   known_othersubr_result_cnt = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   494
    FT_Bool  large_int                  = FALSE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   495
    FT_Bool  initial_map_ready          = FALSE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   496
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   497
#define PS_STORAGE_SIZE 3
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   498
    CF2_F16Dot16  results[PS_STORAGE_SIZE];   /* for othersubr results */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   499
    FT_Int        result_cnt = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   500
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   501
    /* save this for hinting seac accents */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   502
    CF2_Fixed  hintOriginY = curY;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   503
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   504
    CF2_Stack  opStack = NULL;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   505
    FT_UInt    stackSize;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   506
    FT_Byte    op1;                       /* first opcode byte */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   507
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   508
    CF2_F16Dot16  storage[CF2_STORAGE_SIZE];    /* for `put' and `get' */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   509
    CF2_F16Dot16  flexStore[6];                 /* for Type 1 flex     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   510
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   511
    /* instruction limit; 20,000,000 matches Avalon */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   512
    FT_UInt32  instructionLimit = 20000000UL;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   513
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   514
    CF2_ArrStackRec  subrStack;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   515
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   516
    FT_Bool     haveWidth;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   517
    CF2_Buffer  charstring = NULL;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   518
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   519
    CF2_Int  charstringIndex = -1;       /* initialize to empty */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   520
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   521
    /* TODO: placeholders for hint structures */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   522
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   523
    /* objects used for hinting */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   524
    CF2_ArrStackRec  hStemHintArray;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   525
    CF2_ArrStackRec  vStemHintArray;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   526
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   527
    CF2_HintMaskRec   hintMask;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   528
    CF2_GlyphPathRec  glyphPath;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   529
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   530
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   531
    FT_ZERO( &storage );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   532
    FT_ZERO( &results );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   533
    FT_ZERO( &flexStore );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   534
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   535
    /* initialize the remaining objects */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   536
    cf2_arrstack_init( &subrStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   537
                       memory,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   538
                       error,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   539
                       sizeof ( CF2_BufferRec ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   540
    cf2_arrstack_init( &hStemHintArray,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   541
                       memory,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   542
                       error,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   543
                       sizeof ( CF2_StemHintRec ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   544
    cf2_arrstack_init( &vStemHintArray,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   545
                       memory,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   546
                       error,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   547
                       sizeof ( CF2_StemHintRec ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   548
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   549
    /* initialize CF2_StemHint arrays */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   550
    cf2_hintmask_init( &hintMask, error );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   551
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   552
    /* initialize path map to manage drawing operations */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   553
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   554
    /* Note: last 4 params are used to handle `MoveToPermissive', which */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   555
    /*       may need to call `hintMap.Build'                           */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   556
    /* TODO: MoveToPermissive is gone; are these still needed?          */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   557
    cf2_glyphpath_init( &glyphPath,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   558
                        font,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   559
                        callbacks,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   560
                        scaleY,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   561
                        /* hShift, */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   562
                        &hStemHintArray,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   563
                        &vStemHintArray,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   564
                        &hintMask,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   565
                        hintOriginY,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   566
                        &font->blues,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   567
                        translation );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   568
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   569
    /*
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   570
     * Initialize state for width parsing.  From the CFF Spec:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   571
     *
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   572
     *   The first stack-clearing operator, which must be one of hstem,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   573
     *   hstemhm, vstem, vstemhm, cntrmask, hintmask, hmoveto, vmoveto,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   574
     *   rmoveto, or endchar, takes an additional argument - the width (as
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   575
     *   described earlier), which may be expressed as zero or one numeric
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   576
     *   argument.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   577
     *
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   578
     * What we implement here uses the first validly specified width, but
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   579
     * does not detect errors for specifying more than one width.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   580
     *
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   581
     * If one of the above operators occurs without explicitly specifying
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   582
     * a width, we assume the default width.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   583
     *
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   584
     * CFF2 charstrings always return the default width (0).
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   585
     *
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   586
     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   587
    haveWidth = font->isCFF2 ? TRUE : FALSE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   588
    *width    = cf2_getDefaultWidthX( decoder );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   589
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   590
    /*
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   591
     * Note: At this point, all pointers to resources must be NULL
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   592
     *       and all local objects must be initialized.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   593
     *       There must be no branches to `exit:' above this point.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   594
     *
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   595
     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   596
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   597
    /* allocate an operand stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   598
    stackSize = font->isCFF2 ? cf2_getMaxstack( decoder )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   599
                             : CF2_OPERAND_STACK_SIZE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   600
    opStack   = cf2_stack_init( memory, error, stackSize );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   601
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   602
    if ( !opStack )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   603
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   604
      lastError = FT_THROW( Out_Of_Memory );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   605
      goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   606
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   607
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   608
    /* initialize subroutine stack by placing top level charstring as */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   609
    /* first element (max depth plus one for the charstring)          */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   610
    /* Note: Caller owns and must finalize the first charstring.      */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   611
    /*       Our copy of it does not change that requirement.         */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   612
    cf2_arrstack_setCount( &subrStack, CF2_MAX_SUBR + 1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   613
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   614
    charstring  = (CF2_Buffer)cf2_arrstack_getBuffer( &subrStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   615
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   616
    /* catch errors so far */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   617
    if ( *error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   618
      goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   619
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   620
    *charstring     = *buf;    /* structure copy     */
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   621
    charstringIndex = 0;       /* entry is valid now */
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   622
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   623
    /* main interpreter loop */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   624
    while ( 1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   625
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   626
      if ( font->isT1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   627
        FT_ASSERT( known_othersubr_result_cnt == 0 ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   628
                   result_cnt == 0                 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   629
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   630
      if ( cf2_buf_isEnd( charstring ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   631
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   632
        /* If we've reached the end of the charstring, simulate a */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   633
        /* cf2_cmdRETURN or cf2_cmdENDCHAR.                       */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   634
        /* We do this for both CFF and CFF2.                      */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   635
        if ( charstringIndex )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   636
          op1 = cf2_cmdRETURN;  /* end of buffer for subroutine */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   637
        else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   638
          op1 = cf2_cmdENDCHAR; /* end of buffer for top level charstring */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   639
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   640
      else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   641
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   642
        op1 = (FT_Byte)cf2_buf_readByte( charstring );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   643
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   644
        /* Explicit RETURN and ENDCHAR in CFF2 should be ignored. */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   645
        /* Note: Trace message will report 0 instead of 11 or 14. */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   646
        if ( ( op1 == cf2_cmdRETURN || op1 == cf2_cmdENDCHAR ) &&
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   647
             font->isCFF2                                      )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   648
          op1 = cf2_cmdRESERVED_0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   649
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   650
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   651
      if ( font->isT1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   652
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   653
        if ( !initial_map_ready           &&
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   654
             !( op1 == cf2_cmdHSTEM     ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   655
                op1 == cf2_cmdVSTEM     ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   656
                op1 == cf2_cmdHSBW      ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   657
                op1 == cf2_cmdCALLSUBR  ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   658
                op1 == cf2_cmdRETURN    ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   659
                op1 == cf2_cmdESC       ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   660
                op1 == cf2_cmdENDCHAR   ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   661
                op1 >= 32 /* Numbers */ ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   662
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   663
          /* Skip outline commands first time round.       */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   664
          /* `endchar' will trigger initial hintmap build  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   665
          /* and rewind the charstring.                    */
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   666
          FT_TRACE4(( " <outline command skipped>\n" ));
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   667
          cf2_stack_clear( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   668
          continue;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   669
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   670
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   671
        if ( result_cnt > 0               &&
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   672
             !( op1 == cf2_cmdCALLSUBR  ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   673
                op1 == cf2_cmdRETURN    ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   674
                op1 == cf2_cmdESC       ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   675
                op1 >= 32 /* Numbers */ ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   676
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   677
          /* all operands have been transferred by previous pops */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   678
          result_cnt = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   679
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   680
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   681
        if ( large_int && !( op1 >= 32 || op1 == cf2_escDIV ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   682
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   683
          FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   684
                     " no `div' after large integer\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   685
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   686
          large_int = FALSE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   687
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   688
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   689
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   690
      /* check for errors once per loop */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   691
      if ( *error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   692
        goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   693
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   694
      instructionLimit--;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   695
      if ( instructionLimit == 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   696
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   697
        lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   698
        goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   699
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   700
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   701
      switch( op1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   702
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   703
      case cf2_cmdRESERVED_0:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   704
      case cf2_cmdRESERVED_2:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   705
      case cf2_cmdRESERVED_17:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   706
        /* we may get here if we have a prior error */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   707
        FT_TRACE4(( " unknown op (%d)\n", op1 ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   708
        break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   709
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   710
      case cf2_cmdVSINDEX:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   711
        FT_TRACE4(( " vsindex\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   712
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   713
        if ( !font->isCFF2 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   714
          break;    /* clear stack & ignore */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   715
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   716
        if ( font->blend.usedBV )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   717
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   718
          /* vsindex not allowed after blend */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   719
          lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   720
          goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   721
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   722
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   723
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   724
          FT_Int  temp = cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   725
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   726
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   727
          if ( temp >= 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   728
            font->vsindex = (FT_UInt)temp;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   729
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   730
        break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   731
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   732
      case cf2_cmdBLEND:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   733
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   734
          FT_UInt  numBlends;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   735
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   736
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   737
          FT_TRACE4(( " blend\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   738
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   739
          if ( !font->isCFF2 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   740
            break;    /* clear stack & ignore */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   741
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   742
          /* do we have a `blend' op in a non-variant font? */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   743
          if ( !font->blend.font )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   744
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   745
            lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   746
            goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   747
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   748
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   749
          /* check cached blend vector */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   750
          if ( font->cffload->blend_check_vector( &font->blend,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   751
                                                  font->vsindex,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   752
                                                  font->lenNDV,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   753
                                                  font->NDV ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   754
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   755
            lastError = font->cffload->blend_build_vector( &font->blend,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   756
                                                           font->vsindex,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   757
                                                           font->lenNDV,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   758
                                                           font->NDV );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   759
            if ( lastError )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   760
              goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   761
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   762
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   763
          /* do the blend */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   764
          numBlends = (FT_UInt)cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   765
          if ( numBlends > stackSize )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   766
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   767
            lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   768
            goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   769
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   770
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   771
          cf2_doBlend( &font->blend, opStack, numBlends );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   772
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   773
          font->blend.usedBV = TRUE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   774
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   775
        continue;     /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   776
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   777
      case cf2_cmdHSTEMHM:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   778
      case cf2_cmdHSTEM:
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   779
        FT_TRACE4(( "%s\n", op1 == cf2_cmdHSTEMHM ? " hstemhm"
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   780
                                                  : " hstem" ));
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   781
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   782
        if ( !font->isT1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   783
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   784
          /* never add hints after the mask is computed */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   785
          /* except if in Type 1 mode (no hintmask op)  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   786
          if ( cf2_hintmask_isValid( &hintMask ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   787
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   788
            FT_TRACE4(( "cf2_interpT2CharString:"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   789
                        " invalid horizontal hint mask\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   790
            break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   791
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   792
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   793
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   794
        /* add left-sidebearing correction in Type 1 mode */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   795
        cf2_doStems( font,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   796
                     opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   797
                     &hStemHintArray,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   798
                     width,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   799
                     &haveWidth,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   800
                     font->isT1 ? decoder->builder.left_bearing->y
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   801
                                : 0 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   802
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   803
        if ( decoder->width_only )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   804
          goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   805
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   806
        break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   807
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   808
      case cf2_cmdVSTEMHM:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   809
      case cf2_cmdVSTEM:
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   810
        FT_TRACE4(( "%s\n", op1 == cf2_cmdVSTEMHM ? " vstemhm"
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   811
                                                  : " vstem" ));
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   812
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   813
        if ( !font->isT1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   814
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   815
          /* never add hints after the mask is computed */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   816
          /* except if in Type 1 mode (no hintmask op)  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   817
          if ( cf2_hintmask_isValid( &hintMask ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   818
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   819
            FT_TRACE4(( "cf2_interpT2CharString:"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   820
                        " invalid vertical hint mask\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   821
            break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   822
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   823
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   824
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   825
        /* add left-sidebearing correction in Type 1 mode */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   826
        cf2_doStems( font,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   827
                     opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   828
                     &vStemHintArray,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   829
                     width,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   830
                     &haveWidth,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   831
                     font->isT1 ? decoder->builder.left_bearing->x
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   832
                                : 0 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   833
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   834
        if ( decoder->width_only )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   835
          goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   836
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   837
        break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   838
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   839
      case cf2_cmdVMOVETO:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   840
        FT_TRACE4(( " vmoveto\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   841
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   842
        if ( font->isT1 && !decoder->flex_state && !haveWidth )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   843
          FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   844
                     " No width. Use hsbw/sbw as first op\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   845
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   846
        if ( cf2_stack_count( opStack ) > 1 && !haveWidth )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   847
          *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   848
                              nominalWidthX );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   849
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   850
        /* width is defined or default after this */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   851
        haveWidth = TRUE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   852
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   853
        if ( decoder->width_only )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   854
          goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   855
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   856
        curY = ADD_INT32( curY, cf2_stack_popFixed( opStack ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   857
50479
70e706c85f1d 8203367: Upgrade to freetype 2.9.1
prr
parents: 49234
diff changeset
   858
        if ( !decoder->flex_state )
70e706c85f1d 8203367: Upgrade to freetype 2.9.1
prr
parents: 49234
diff changeset
   859
          cf2_glyphpath_moveTo( &glyphPath, curX, curY );
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   860
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   861
        break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   862
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   863
      case cf2_cmdRLINETO:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   864
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   865
          CF2_UInt  idx;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   866
          CF2_UInt  count = cf2_stack_count( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   867
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   868
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   869
          FT_TRACE4(( " rlineto\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   870
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   871
          for ( idx = 0; idx < count; idx += 2 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   872
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   873
            curX = ADD_INT32( curX, cf2_stack_getReal( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   874
                                                       idx + 0 ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   875
            curY = ADD_INT32( curY, cf2_stack_getReal( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   876
                                                       idx + 1 ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   877
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   878
            cf2_glyphpath_lineTo( &glyphPath, curX, curY );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   879
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   880
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   881
          cf2_stack_clear( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   882
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   883
        continue; /* no need to clear stack again */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   884
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   885
      case cf2_cmdHLINETO:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   886
      case cf2_cmdVLINETO:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   887
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   888
          CF2_UInt  idx;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   889
          CF2_UInt  count = cf2_stack_count( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   890
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   891
          FT_Bool  isX = FT_BOOL( op1 == cf2_cmdHLINETO );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   892
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   893
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   894
          FT_TRACE4(( "%s\n", isX ? " hlineto" : " vlineto" ));
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   895
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   896
          for ( idx = 0; idx < count; idx++ )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   897
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   898
            CF2_Fixed  v = cf2_stack_getReal( opStack, idx );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   899
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   900
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   901
            if ( isX )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   902
              curX = ADD_INT32( curX, v );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   903
            else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   904
              curY = ADD_INT32( curY, v );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   905
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   906
            isX = !isX;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   907
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   908
            cf2_glyphpath_lineTo( &glyphPath, curX, curY );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   909
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   910
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   911
          cf2_stack_clear( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   912
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   913
        continue;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   914
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   915
      case cf2_cmdRCURVELINE:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   916
      case cf2_cmdRRCURVETO:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   917
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   918
          CF2_UInt  count = cf2_stack_count( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   919
          CF2_UInt  idx   = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   920
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   921
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   922
          FT_TRACE4(( "%s\n", op1 == cf2_cmdRCURVELINE ? " rcurveline"
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   923
                                                       : " rrcurveto" ));
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   924
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   925
          while ( idx + 6 <= count )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   926
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   927
            CF2_Fixed  x1, y1, x2, y2, x3, y3;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   928
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   929
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   930
            x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   931
            y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), curY );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   932
            x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), x1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   933
            y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   934
            x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), x2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   935
            y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 5 ), y2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   936
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   937
            cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   938
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   939
            curX  = x3;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   940
            curY  = y3;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   941
            idx  += 6;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   942
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   943
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   944
          if ( op1 == cf2_cmdRCURVELINE )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   945
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   946
            curX = ADD_INT32( curX, cf2_stack_getReal( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   947
                                                       idx + 0 ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   948
            curY = ADD_INT32( curY, cf2_stack_getReal( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   949
                                                       idx + 1 ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   950
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   951
            cf2_glyphpath_lineTo( &glyphPath, curX, curY );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   952
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   953
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   954
          cf2_stack_clear( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   955
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   956
        continue; /* no need to clear stack again */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   957
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   958
      case cf2_cmdCLOSEPATH:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   959
        if ( !font->isT1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   960
          FT_TRACE4(( " unknown op (%d)\n", op1 ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   961
        else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   962
        {
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   963
          FT_TRACE4(( " closepath\n" ));
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   964
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   965
          /* if there is no path, `closepath' is a no-op */
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   966
          cf2_glyphpath_closeOpenPath( &glyphPath );
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   967
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   968
          haveWidth = TRUE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   969
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   970
        break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   971
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   972
      case cf2_cmdCALLGSUBR:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   973
      case cf2_cmdCALLSUBR:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   974
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   975
          CF2_Int  subrNum;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   976
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   977
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   978
          FT_TRACE4(( "%s", op1 == cf2_cmdCALLGSUBR ? " callgsubr"
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
   979
                                                    : " callsubr" ));
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   980
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   981
          if ( ( !font->isT1 && charstringIndex > CF2_MAX_SUBR )       ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   982
               (  font->isT1 && charstringIndex > T1_MAX_SUBRS_CALLS ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   983
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   984
            /* max subr plus one for charstring */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   985
            lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   986
            goto exit;                      /* overflow of stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   987
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   988
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   989
          /* push our current CFF charstring region on subrStack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   990
          charstring = (CF2_Buffer)
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   991
                         cf2_arrstack_getPointer(
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   992
                           &subrStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   993
                           (size_t)charstringIndex + 1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   994
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   995
          /* set up the new CFF region and pointer */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   996
          subrNum = cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   997
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   998
          if ( font->isT1 && decoder->locals_hash )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   999
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1000
            size_t*  val = ft_hash_num_lookup( subrNum,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1001
                                               decoder->locals_hash );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1002
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1003
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1004
            if ( val )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1005
              subrNum = *val;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1006
            else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1007
              subrNum = -1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1008
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1009
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1010
          switch ( op1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1011
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1012
          case cf2_cmdCALLGSUBR:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1013
            FT_TRACE4(( " (idx %d, entering level %d)\n",
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1014
                        subrNum + decoder->globals_bias,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1015
                        charstringIndex + 1 ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1016
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1017
            if ( cf2_initGlobalRegionBuffer( decoder,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1018
                                             subrNum,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1019
                                             charstring ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1020
            {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1021
              lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1022
              goto exit;  /* subroutine lookup or stream error */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1023
            }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1024
            break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1025
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1026
          default:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1027
            /* cf2_cmdCALLSUBR */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1028
            FT_TRACE4(( " (idx %d, entering level %d)\n",
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1029
                        subrNum + decoder->locals_bias,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1030
                        charstringIndex + 1 ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1031
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1032
            if ( cf2_initLocalRegionBuffer( decoder,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1033
                                            subrNum,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1034
                                            charstring ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1035
            {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1036
              lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1037
              goto exit;  /* subroutine lookup or stream error */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1038
            }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1039
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1040
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1041
          charstringIndex += 1;       /* entry is valid now */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1042
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1043
        continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1044
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1045
      case cf2_cmdRETURN:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1046
        FT_TRACE4(( " return (leaving level %d)\n", charstringIndex ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1047
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1048
        if ( charstringIndex < 1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1049
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1050
          /* Note: cannot return from top charstring */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1051
          lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1052
          goto exit;                      /* underflow of stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1053
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1054
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1055
        /* restore position in previous charstring */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1056
        charstring = (CF2_Buffer)
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1057
                       cf2_arrstack_getPointer(
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1058
                         &subrStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1059
                         (CF2_UInt)--charstringIndex );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1060
        continue;     /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1061
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1062
      case cf2_cmdESC:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1063
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1064
          FT_Byte  op2 = (FT_Byte)cf2_buf_readByte( charstring );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1065
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1066
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1067
          /* first switch for 2-byte operators handles CFF2      */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1068
          /* and opcodes that are reserved for both CFF and CFF2 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1069
          switch ( op2 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1070
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1071
          case cf2_escHFLEX:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1072
            {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1073
              static const FT_Bool  readFromStack[12] =
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1074
              {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1075
                TRUE /* dx1 */, FALSE /* dy1 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1076
                TRUE /* dx2 */, TRUE  /* dy2 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1077
                TRUE /* dx3 */, FALSE /* dy3 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1078
                TRUE /* dx4 */, FALSE /* dy4 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1079
                TRUE /* dx5 */, FALSE /* dy5 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1080
                TRUE /* dx6 */, FALSE /* dy6 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1081
              };
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1082
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1083
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1084
              FT_TRACE4(( " hflex\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1085
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1086
              cf2_doFlex( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1087
                          &curX,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1088
                          &curY,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1089
                          &glyphPath,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1090
                          readFromStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1091
                          FALSE /* doConditionalLastRead */ );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1092
            }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1093
            continue;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1094
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1095
          case cf2_escFLEX:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1096
            {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1097
              static const FT_Bool  readFromStack[12] =
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1098
              {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1099
                TRUE /* dx1 */, TRUE /* dy1 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1100
                TRUE /* dx2 */, TRUE /* dy2 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1101
                TRUE /* dx3 */, TRUE /* dy3 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1102
                TRUE /* dx4 */, TRUE /* dy4 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1103
                TRUE /* dx5 */, TRUE /* dy5 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1104
                TRUE /* dx6 */, TRUE /* dy6 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1105
              };
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1106
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1107
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1108
              FT_TRACE4(( " flex\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1109
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1110
              cf2_doFlex( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1111
                          &curX,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1112
                          &curY,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1113
                          &glyphPath,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1114
                          readFromStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1115
                          FALSE /* doConditionalLastRead */ );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1116
            }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1117
            break;      /* TODO: why is this not a continue? */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1118
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1119
          case cf2_escHFLEX1:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1120
            {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1121
              static const FT_Bool  readFromStack[12] =
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1122
              {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1123
                TRUE /* dx1 */, TRUE  /* dy1 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1124
                TRUE /* dx2 */, TRUE  /* dy2 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1125
                TRUE /* dx3 */, FALSE /* dy3 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1126
                TRUE /* dx4 */, FALSE /* dy4 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1127
                TRUE /* dx5 */, TRUE  /* dy5 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1128
                TRUE /* dx6 */, FALSE /* dy6 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1129
              };
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1130
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1131
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1132
              FT_TRACE4(( " hflex1\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1133
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1134
              cf2_doFlex( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1135
                          &curX,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1136
                          &curY,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1137
                          &glyphPath,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1138
                          readFromStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1139
                          FALSE /* doConditionalLastRead */ );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1140
            }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1141
            continue;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1142
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1143
          case cf2_escFLEX1:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1144
            {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1145
              static const FT_Bool  readFromStack[12] =
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1146
              {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1147
                TRUE  /* dx1 */, TRUE  /* dy1 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1148
                TRUE  /* dx2 */, TRUE  /* dy2 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1149
                TRUE  /* dx3 */, TRUE  /* dy3 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1150
                TRUE  /* dx4 */, TRUE  /* dy4 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1151
                TRUE  /* dx5 */, TRUE  /* dy5 */,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1152
                FALSE /* dx6 */, FALSE /* dy6 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1153
              };
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1154
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1155
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1156
              FT_TRACE4(( " flex1\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1157
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1158
              cf2_doFlex( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1159
                          &curX,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1160
                          &curY,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1161
                          &glyphPath,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1162
                          readFromStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1163
                          TRUE /* doConditionalLastRead */ );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1164
            }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1165
            continue;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1166
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1167
          /* these opcodes are always reserved */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1168
          case cf2_escRESERVED_8:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1169
          case cf2_escRESERVED_13:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1170
          case cf2_escRESERVED_19:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1171
          case cf2_escRESERVED_25:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1172
          case cf2_escRESERVED_31:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1173
          case cf2_escRESERVED_32:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1174
            FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1175
            break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1176
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1177
          default:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1178
            {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1179
              if ( font->isCFF2 || op2 >= cf2_escRESERVED_38 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1180
                FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1181
              else if ( font->isT1 && result_cnt > 0 && op2 != cf2_escPOP )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1182
              {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1183
                /* all operands have been transferred by previous pops */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1184
                result_cnt = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1185
              }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1186
              else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1187
              {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1188
                /* second switch for 2-byte operators handles */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1189
                /* CFF and Type 1                             */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1190
                switch ( op2 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1191
                {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1192
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1193
                case cf2_escDOTSECTION:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1194
                  /* something about `flip type of locking' -- ignore it */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1195
                  FT_TRACE4(( " dotsection\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1196
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1197
                  break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1198
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1199
                case cf2_escVSTEM3:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1200
                case cf2_escHSTEM3:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1201
                  /*
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1202
                   * Type 1:                          Type 2:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1203
                   *   x0 dx0 x1 dx1 x2 dx2 vstem3      x dx {dxa dxb}* vstem
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1204
                   *   y0 dy0 y1 dy1 y2 dy2 hstem3      y dy {dya dyb}* hstem
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1205
                   *   relative to lsb point            relative to zero
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1206
                   *
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1207
                   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1208
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1209
                    if ( !font->isT1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1210
                      FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1211
                    else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1212
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1213
                      CF2_F16Dot16  v0, v1, v2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1214
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1215
                      FT_Bool  isV = FT_BOOL( op2 == cf2_escVSTEM3 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1216
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1217
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
  1218
                      FT_TRACE4(( "%s\n", isV ? " vstem3"
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
  1219
                                              : " hstem3" ));
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1220
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1221
                      FT_ASSERT( cf2_stack_count( opStack ) == 6 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1222
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1223
                      v0 = cf2_stack_getReal( opStack, 0 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1224
                      v1 = cf2_stack_getReal( opStack, 2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1225
                      v2 = cf2_stack_getReal( opStack, 4 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1226
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1227
                      cf2_stack_setReal(
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1228
                        opStack, 2,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1229
                        SUB_INT32( SUB_INT32( v1, v0 ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1230
                                   cf2_stack_getReal( opStack, 1 ) ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1231
                      cf2_stack_setReal(
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1232
                        opStack, 4,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1233
                        SUB_INT32( SUB_INT32( v2, v1 ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1234
                                   cf2_stack_getReal( opStack, 3 ) ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1235
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1236
                      /* add left-sidebearing correction */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1237
                      cf2_doStems( font,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1238
                                   opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1239
                                   isV ? &vStemHintArray : &hStemHintArray,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1240
                                   width,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1241
                                   &haveWidth,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1242
                                   isV ? decoder->builder.left_bearing->x
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1243
                                       : decoder->builder.left_bearing->y );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1244
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1245
                      if ( decoder->width_only )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1246
                        goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1247
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1248
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1249
                  break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1250
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1251
                case cf2_escAND:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1252
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1253
                    CF2_F16Dot16  arg1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1254
                    CF2_F16Dot16  arg2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1255
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1256
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1257
                    FT_TRACE4(( " and\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1258
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1259
                    arg2 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1260
                    arg1 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1261
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1262
                    cf2_stack_pushInt( opStack, arg1 && arg2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1263
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1264
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1265
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1266
                case cf2_escOR:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1267
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1268
                    CF2_F16Dot16  arg1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1269
                    CF2_F16Dot16  arg2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1270
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1271
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1272
                    FT_TRACE4(( " or\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1273
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1274
                    arg2 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1275
                    arg1 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1276
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1277
                    cf2_stack_pushInt( opStack, arg1 || arg2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1278
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1279
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1280
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1281
                case cf2_escNOT:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1282
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1283
                    CF2_F16Dot16  arg;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1284
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1285
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1286
                    FT_TRACE4(( " not\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1287
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1288
                    arg = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1289
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1290
                    cf2_stack_pushInt( opStack, !arg );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1291
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1292
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1293
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1294
                case cf2_escSEAC:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1295
                  if ( !font->isT1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1296
                    FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1297
                  else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1298
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1299
                    FT_Error   error2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1300
                    CF2_Int    bchar_index, achar_index;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1301
                    FT_Vector  left_bearing, advance;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1302
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1303
#ifdef FT_CONFIG_OPTION_INCREMENTAL
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1304
                    T1_Face  face = (T1_Face)decoder->builder.face;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1305
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1306
                    CF2_BufferRec  component;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1307
                    CF2_Fixed      dummyWidth;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1308
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1309
                    CF2_Int  achar = cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1310
                    CF2_Int  bchar = cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1311
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1312
                    FT_Pos  ady = cf2_stack_popFixed ( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1313
                    FT_Pos  adx = cf2_stack_popFixed ( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1314
                    FT_Pos  asb = cf2_stack_popFixed ( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1315
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1316
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1317
                    FT_TRACE4(( " seac\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1318
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1319
                    if ( doingSeac )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1320
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1321
                      FT_ERROR(( " nested seac\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1322
                      lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1323
                      goto exit;      /* nested seac */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1324
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1325
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1326
                    if ( decoder->builder.metrics_only )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1327
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1328
                      FT_ERROR(( " unexpected seac\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1329
                      lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1330
                      goto exit;      /* unexpected seac */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1331
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1332
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1333
                    /* `glyph_names' is set to 0 for CID fonts which do */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1334
                    /* not include an encoding.  How can we deal with   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1335
                    /* these?                                           */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1336
#ifdef FT_CONFIG_OPTION_INCREMENTAL
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1337
                    if ( decoder->glyph_names == 0                   &&
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1338
                         !face->root.internal->incremental_interface )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1339
#else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1340
                      if ( decoder->glyph_names == 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1341
#endif /* FT_CONFIG_OPTION_INCREMENTAL */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1342
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1343
                        FT_ERROR((
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1344
                          "cf2_interpT2CharString: (Type 1 seac)"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1345
                          " glyph names table not available in this font\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1346
                        lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1347
                        goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1348
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1349
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1350
                    /* seac weirdness */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1351
                    adx += decoder->builder.left_bearing->x;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1352
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1353
#ifdef FT_CONFIG_OPTION_INCREMENTAL
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1354
                    if ( face->root.internal->incremental_interface )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1355
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1356
                      /* the caller must handle the font encoding also */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1357
                      bchar_index = bchar;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1358
                      achar_index = achar;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1359
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1360
                    else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1361
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1362
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1363
                      bchar_index = t1_lookup_glyph_by_stdcharcode_ps(
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1364
                                      decoder, bchar );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1365
                      achar_index = t1_lookup_glyph_by_stdcharcode_ps(
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1366
                                      decoder, achar );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1367
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1368
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1369
                    if ( bchar_index < 0 || achar_index < 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1370
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1371
                      FT_ERROR((
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1372
                        "cf2_interpT2CharString: (Type 1 seac)"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1373
                        " invalid seac character code arguments\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1374
                      lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1375
                      goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1376
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1377
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1378
                    /* if we are trying to load a composite glyph, */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1379
                    /* do not load the accent character and return */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1380
                    /* the array of subglyphs.                     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1381
                    if ( decoder->builder.no_recurse )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1382
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1383
                      FT_GlyphSlot    glyph  = (FT_GlyphSlot)decoder->builder.glyph;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1384
                      FT_GlyphLoader  loader = glyph->internal->loader;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1385
                      FT_SubGlyph     subg;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1386
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1387
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1388
                      /* reallocate subglyph array if necessary */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1389
                      error2 = FT_GlyphLoader_CheckSubGlyphs( loader, 2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1390
                      if ( error2 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1391
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1392
                        lastError = error2; /* pass FreeType error through */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1393
                        goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1394
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1395
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1396
                      subg = loader->current.subglyphs;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1397
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1398
                      /* subglyph 0 = base character */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1399
                      subg->index = bchar_index;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1400
                      subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES |
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1401
                                    FT_SUBGLYPH_FLAG_USE_MY_METRICS;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1402
                      subg->arg1  = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1403
                      subg->arg2  = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1404
                      subg++;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1405
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1406
                      /* subglyph 1 = accent character */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1407
                      subg->index = achar_index;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1408
                      subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1409
                      subg->arg1  = (FT_Int)FIXED_TO_INT( adx - asb );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1410
                      subg->arg2  = (FT_Int)FIXED_TO_INT( ady );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1411
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1412
                      /* set up remaining glyph fields */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1413
                      glyph->num_subglyphs = 2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1414
                      glyph->subglyphs     = loader->base.subglyphs;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1415
                      glyph->format        = FT_GLYPH_FORMAT_COMPOSITE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1416
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1417
                      loader->current.num_subglyphs = 2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1418
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1419
                      goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1420
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1421
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1422
                    /* First load `bchar' in builder */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1423
                    /* now load the unscaled outline */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1424
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1425
                    /* prepare loader */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1426
                    FT_GlyphLoader_Prepare( decoder->builder.loader );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1427
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1428
                    error2 = cf2_getT1SeacComponent( decoder,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1429
                                                     (FT_UInt)bchar_index,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1430
                                                     &component );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1431
                    if ( error2 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1432
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1433
                      lastError = error2; /* pass FreeType error through */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1434
                      goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1435
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1436
                    cf2_interpT2CharString( font,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1437
                                            &component,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1438
                                            callbacks,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1439
                                            translation,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1440
                                            TRUE,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1441
                                            0,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1442
                                            0,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1443
                                            &dummyWidth );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1444
                    cf2_freeT1SeacComponent( decoder, &component );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1445
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1446
                    /* save the left bearing and width of the base       */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1447
                    /* character as they will be erased by the next load */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1448
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1449
                    left_bearing = *decoder->builder.left_bearing;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1450
                    advance      = *decoder->builder.advance;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1451
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1452
                    decoder->builder.left_bearing->x = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1453
                    decoder->builder.left_bearing->y = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1454
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1455
                    /* Now load `achar' on top of */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1456
                    /* the base outline           */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1457
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1458
                    error2 = cf2_getT1SeacComponent( decoder,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1459
                                                     (FT_UInt)achar_index,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1460
                                                     &component );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1461
                    if ( error2 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1462
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1463
                      lastError = error2; /* pass FreeType error through */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1464
                      goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1465
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1466
                    cf2_interpT2CharString( font,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1467
                                            &component,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1468
                                            callbacks,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1469
                                            translation,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1470
                                            TRUE,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1471
                                            adx - asb,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1472
                                            ady,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1473
                                            &dummyWidth );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1474
                    cf2_freeT1SeacComponent( decoder, &component );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1475
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1476
                    /* restore the left side bearing and   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1477
                    /* advance width of the base character */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1478
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1479
                    *decoder->builder.left_bearing = left_bearing;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1480
                    *decoder->builder.advance      = advance;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1481
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1482
                    goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1483
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1484
                  break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1485
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1486
                case cf2_escSBW:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1487
                  if ( !font->isT1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1488
                    FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1489
                  else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1490
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1491
                    CF2_Fixed    lsb_x, lsb_y;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1492
                    PS_Builder*  builder;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1493
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1494
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1495
                    FT_TRACE4(( " sbw" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1496
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1497
                    builder = &decoder->builder;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1498
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1499
                    builder->advance->y = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1500
                    builder->advance->x = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1501
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1502
                    lsb_y = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1503
                    lsb_x = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1504
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1505
                    builder->left_bearing->x =
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1506
                      ADD_INT32( builder->left_bearing->x, lsb_x );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1507
                    builder->left_bearing->y =
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1508
                      ADD_INT32( builder->left_bearing->y, lsb_y );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1509
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1510
                    haveWidth = TRUE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1511
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1512
                    /* the `metrics_only' indicates that we only want */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1513
                    /* to compute the glyph's metrics (lsb + advance  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1514
                    /* width), not load the  rest of it; so exit      */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1515
                    /* immediately                                    */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1516
                    if ( builder->metrics_only )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1517
                      goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1518
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1519
                    if ( initial_map_ready )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1520
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1521
                      curX = ADD_INT32( curX, lsb_x );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1522
                      curY = ADD_INT32( curY, lsb_y );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1523
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1524
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1525
                  break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1526
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1527
                case cf2_escABS:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1528
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1529
                    CF2_F16Dot16  arg;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1530
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1531
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1532
                    FT_TRACE4(( " abs\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1533
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1534
                    arg = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1535
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1536
                    if ( arg < -CF2_FIXED_MAX )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1537
                      cf2_stack_pushFixed( opStack, CF2_FIXED_MAX );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1538
                    else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1539
                      cf2_stack_pushFixed( opStack, FT_ABS( arg ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1540
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1541
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1542
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1543
                case cf2_escADD:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1544
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1545
                    CF2_F16Dot16  summand1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1546
                    CF2_F16Dot16  summand2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1547
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1548
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1549
                    FT_TRACE4(( " add\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1550
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1551
                    summand2 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1552
                    summand1 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1553
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1554
                    cf2_stack_pushFixed( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1555
                                         ADD_INT32( summand1,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1556
                                                    summand2 ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1557
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1558
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1559
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1560
                case cf2_escSUB:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1561
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1562
                    CF2_F16Dot16  minuend;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1563
                    CF2_F16Dot16  subtrahend;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1564
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1565
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1566
                    FT_TRACE4(( " sub\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1567
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1568
                    subtrahend = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1569
                    minuend    = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1570
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1571
                    cf2_stack_pushFixed( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1572
                                         SUB_INT32( minuend, subtrahend ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1573
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1574
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1575
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1576
                case cf2_escDIV:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1577
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1578
                    CF2_F16Dot16  dividend;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1579
                    CF2_F16Dot16  divisor;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1580
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1581
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1582
                    FT_TRACE4(( " div\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1583
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1584
                    if ( font->isT1 && large_int )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1585
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1586
                      divisor  = (CF2_F16Dot16)cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1587
                      dividend = (CF2_F16Dot16)cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1588
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1589
                      large_int = FALSE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1590
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1591
                    else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1592
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1593
                      divisor  = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1594
                      dividend = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1595
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1596
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1597
                    cf2_stack_pushFixed( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1598
                                         FT_DivFix( dividend, divisor ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1599
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1600
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1601
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1602
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1603
                case cf2_escNEG:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1604
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1605
                    CF2_F16Dot16  arg;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1606
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1607
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1608
                    FT_TRACE4(( " neg\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1609
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1610
                    arg = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1611
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1612
                    if ( arg < -CF2_FIXED_MAX )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1613
                      cf2_stack_pushFixed( opStack, CF2_FIXED_MAX );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1614
                    else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1615
                      cf2_stack_pushFixed( opStack, -arg );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1616
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1617
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1618
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1619
                case cf2_escEQ:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1620
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1621
                    CF2_F16Dot16  arg1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1622
                    CF2_F16Dot16  arg2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1623
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1624
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1625
                    FT_TRACE4(( " eq\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1626
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1627
                    arg2 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1628
                    arg1 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1629
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1630
                    cf2_stack_pushInt( opStack, arg1 == arg2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1631
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1632
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1633
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1634
                case cf2_escCALLOTHERSUBR:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1635
                  if ( !font->isT1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1636
                    FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1637
                  else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1638
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1639
                    CF2_Int   subr_no;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1640
                    CF2_Int   arg_cnt;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1641
                    CF2_UInt  count;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1642
                    CF2_UInt  opIdx = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1643
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1644
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1645
                    FT_TRACE4(( " callothersubr\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1646
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1647
                    subr_no = cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1648
                    arg_cnt = cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1649
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
  1650
                    /********************************************************
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
  1651
                     *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
  1652
                     * remove all operands to callothersubr from the stack
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
  1653
                     *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
  1654
                     * for handled othersubrs, where we know the number of
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
  1655
                     * arguments, we increase the stack by the value of
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
  1656
                     * known_othersubr_result_cnt
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
  1657
                     *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
  1658
                     * for unhandled othersubrs the following pops adjust
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
  1659
                     * the stack pointer as necessary
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
  1660
                     */
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1661
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1662
                    count = cf2_stack_count( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1663
                    FT_ASSERT( (CF2_UInt)arg_cnt <= count );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1664
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1665
                    opIdx += count - (CF2_UInt)arg_cnt;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1666
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1667
                    known_othersubr_result_cnt = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1668
                    result_cnt                 = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1669
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1670
                    /* XXX TODO: The checks to `arg_count == <whatever>'   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1671
                    /* might not be correct; an othersubr expects a        */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1672
                    /* certain number of operands on the PostScript stack  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1673
                    /* (as opposed to the T1 stack) but it doesn't have to */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1674
                    /* put them there by itself; previous othersubrs might */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1675
                    /* have left the operands there if they were not       */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1676
                    /* followed by an appropriate number of pops           */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1677
                    /*                                                     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1678
                    /* On the other hand, Adobe Reader 7.0.8 for Linux     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1679
                    /* doesn't accept a font that contains charstrings     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1680
                    /* like                                                */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1681
                    /*                                                     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1682
                    /*     100 200 2 20 callothersubr                      */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1683
                    /*     300 1 20 callothersubr pop                      */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1684
                    /*                                                     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1685
                    /* Perhaps this is the reason why BuildCharArray       */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1686
                    /* exists.                                             */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1687
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1688
                    switch ( subr_no )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1689
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1690
                    case 0:                     /* end flex feature */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1691
                      if ( arg_cnt != 3 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1692
                        goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1693
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1694
                      if ( initial_map_ready &&
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1695
                           ( !decoder->flex_state           ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1696
                             decoder->num_flex_vectors != 7 ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1697
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1698
                        FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1699
                                   " unexpected flex end\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1700
                        lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1701
                        goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1702
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1703
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1704
                      /* the two `results' are popped     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1705
                      /* by the following setcurrentpoint */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1706
                      cf2_stack_pushFixed( opStack, curX );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1707
                      cf2_stack_pushFixed( opStack, curY );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1708
                      known_othersubr_result_cnt = 2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1709
                      break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1710
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1711
                    case 1:                     /* start flex feature */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1712
                      if ( arg_cnt != 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1713
                        goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1714
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1715
                      if ( !initial_map_ready )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1716
                        break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1717
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1718
                      if ( ps_builder_check_points( &decoder->builder, 6 ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1719
                        goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1720
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1721
                      decoder->flex_state        = 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1722
                      decoder->num_flex_vectors  = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1723
                      break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1724
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1725
                    case 2:                     /* add flex vectors */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1726
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1727
                        FT_Int  idx;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1728
                        FT_Int  idx2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1729
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1730
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1731
                        if ( arg_cnt != 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1732
                          goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1733
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1734
                        if ( !initial_map_ready )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1735
                          break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1736
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1737
                        if ( !decoder->flex_state )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1738
                        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1739
                          FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1740
                                     " missing flex start\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1741
                          lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1742
                          goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1743
                        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1744
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1745
                        /* note that we should not add a point for      */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1746
                        /* index 0; this will move our current position */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1747
                        /* to the flex point without adding any point   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1748
                        /* to the outline                               */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1749
                        idx = decoder->num_flex_vectors++;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1750
                        if ( idx > 0 && idx < 7 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1751
                        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1752
                          /* in malformed fonts it is possible to have    */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1753
                          /* other opcodes in the middle of a flex (which */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1754
                          /* don't increase `num_flex_vectors'); we thus  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1755
                          /* have to check whether we can add a point     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1756
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1757
                          if ( ps_builder_check_points( &decoder->builder,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1758
                                                        1 ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1759
                          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1760
                            lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1761
                            goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1762
                          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1763
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1764
                          /* map: 1->2 2->4 3->6 4->2 5->4 6->6 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1765
                          idx2 = ( idx > 3 ? idx - 3 : idx ) * 2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1766
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1767
                          flexStore[idx2 - 2] = curX;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1768
                          flexStore[idx2 - 1] = curY;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1769
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1770
                          if ( idx == 3 || idx == 6 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1771
                            cf2_glyphpath_curveTo( &glyphPath,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1772
                                                   flexStore[0],
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1773
                                                   flexStore[1],
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1774
                                                   flexStore[2],
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1775
                                                   flexStore[3],
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1776
                                                   flexStore[4],
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1777
                                                   flexStore[5] );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1778
                        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1779
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1780
                      break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1781
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1782
                    case 3:                     /* change hints */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1783
                      if ( arg_cnt != 1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1784
                        goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1785
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1786
                      if ( initial_map_ready )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1787
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1788
                        /* do not clear hints if initial hintmap */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1789
                        /* is not ready - we need to collate all */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1790
                        cf2_arrstack_clear( &vStemHintArray );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1791
                        cf2_arrstack_clear( &hStemHintArray );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1792
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1793
                        cf2_hintmask_init( &hintMask, error );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1794
                        hintMask.isValid = FALSE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1795
                        hintMask.isNew   = TRUE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1796
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1797
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1798
                      known_othersubr_result_cnt = 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1799
                      break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1800
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1801
                    case 12:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1802
                    case 13:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1803
                      /* counter control hints, clear stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1804
                      cf2_stack_clear( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1805
                      break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1806
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1807
                    case 14:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1808
                    case 15:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1809
                    case 16:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1810
                    case 17:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1811
                    case 18:                    /* multiple masters */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1812
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1813
                        PS_Blend  blend = decoder->blend;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1814
                        FT_UInt   num_points, nn, mm;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1815
                        CF2_UInt  delta;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1816
                        CF2_UInt  values;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1817
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1818
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1819
                        if ( !blend )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1820
                        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1821
                          FT_ERROR((
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1822
                            "cf2_interpT2CharString:"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1823
                            " unexpected multiple masters operator\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1824
                          lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1825
                          goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1826
                        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1827
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1828
                        num_points = (FT_UInt)subr_no - 13 +
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1829
                                       ( subr_no == 18 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1830
                        if ( arg_cnt != (FT_Int)( num_points *
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1831
                                                  blend->num_designs ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1832
                        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1833
                          FT_ERROR((
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1834
                            "cf2_interpT2CharString:"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1835
                            " incorrect number of multiple masters arguments\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1836
                          lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1837
                          goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1838
                        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1839
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1840
                        /* We want to compute                                */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1841
                        /*                                                   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1842
                        /*   a0*w0 + a1*w1 + ... + ak*wk                     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1843
                        /*                                                   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1844
                        /* but we only have a0, a1-a0, a2-a0, ..., ak-a0.    */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1845
                        /*                                                   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1846
                        /* However, given that w0 + w1 + ... + wk == 1, we   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1847
                        /* can rewrite it easily as                          */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1848
                        /*                                                   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1849
                        /*   a0 + (a1-a0)*w1 + (a2-a0)*w2 + ... + (ak-a0)*wk */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1850
                        /*                                                   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1851
                        /* where k == num_designs-1.                         */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1852
                        /*                                                   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1853
                        /* I guess that's why it's written in this `compact' */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1854
                        /* form.                                             */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1855
                        /*                                                   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1856
                        delta  = opIdx + num_points;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1857
                        values = opIdx;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1858
                        for ( nn = 0; nn < num_points; nn++ )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1859
                        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1860
                          CF2_Fixed  tmp = cf2_stack_getReal( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1861
                                                              values );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1862
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1863
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1864
                          for ( mm = 1; mm < blend->num_designs; mm++ )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1865
                            tmp = ADD_INT32( tmp,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1866
                                             FT_MulFix(
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1867
                                               cf2_stack_getReal( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1868
                                                                  delta++ ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1869
                                               blend->weight_vector[mm] ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1870
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1871
                          cf2_stack_setReal( opStack, values++, tmp );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1872
                        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1873
                        cf2_stack_pop( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1874
                                       (CF2_UInt)arg_cnt - num_points );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1875
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1876
                        known_othersubr_result_cnt = (FT_Int)num_points;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1877
                        break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1878
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1879
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1880
                    case 19:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1881
                      /* <idx> 1 19 callothersubr                 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1882
                      /* ==> replace elements starting from index */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1883
                      /*     cvi( <idx> ) of BuildCharArray with  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1884
                      /*     WeightVector                         */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1885
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1886
                        FT_Int    idx;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1887
                        PS_Blend  blend = decoder->blend;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1888
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1889
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1890
                        if ( arg_cnt != 1 || !blend )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1891
                          goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1892
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1893
                        idx = cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1894
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1895
                        if ( idx < 0                             ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1896
                             (FT_UInt)idx + blend->num_designs >
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1897
                               decoder->len_buildchar            )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1898
                          goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1899
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1900
                        ft_memcpy( &decoder->buildchar[idx],
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1901
                                   blend->weight_vector,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1902
                                   blend->num_designs *
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1903
                                   sizeof ( blend->weight_vector[0] ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1904
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1905
                      break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1906
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1907
                    case 20:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1908
                      /* <arg1> <arg2> 2 20 callothersubr pop   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1909
                      /* ==> push <arg1> + <arg2> onto T1 stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1910
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1911
                        CF2_F16Dot16  summand1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1912
                        CF2_F16Dot16  summand2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1913
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1914
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1915
                        if ( arg_cnt != 2 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1916
                          goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1917
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1918
                        summand2 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1919
                        summand1 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1920
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1921
                        cf2_stack_pushFixed( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1922
                                             ADD_INT32( summand1,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1923
                                                        summand2 ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1924
                        known_othersubr_result_cnt = 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1925
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1926
                      break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1927
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1928
                    case 21:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1929
                      /* <arg1> <arg2> 2 21 callothersubr pop   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1930
                      /* ==> push <arg1> - <arg2> onto T1 stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1931
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1932
                        CF2_F16Dot16  minuend;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1933
                        CF2_F16Dot16  subtrahend;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1934
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1935
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1936
                        if ( arg_cnt != 2 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1937
                          goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1938
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1939
                        subtrahend = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1940
                        minuend    = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1941
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1942
                        cf2_stack_pushFixed( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1943
                                             SUB_INT32( minuend,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1944
                                                        subtrahend ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1945
                        known_othersubr_result_cnt = 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1946
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1947
                      break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1948
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1949
                    case 22:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1950
                      /* <arg1> <arg2> 2 22 callothersubr pop   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1951
                      /* ==> push <arg1> * <arg2> onto T1 stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1952
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1953
                        CF2_F16Dot16  factor1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1954
                        CF2_F16Dot16  factor2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1955
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1956
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1957
                        if ( arg_cnt != 2 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1958
                          goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1959
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1960
                        factor2 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1961
                        factor1 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1962
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1963
                        cf2_stack_pushFixed( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1964
                                             FT_MulFix( factor1, factor2 ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1965
                        known_othersubr_result_cnt = 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1966
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1967
                      break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1968
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1969
                    case 23:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1970
                      /* <arg1> <arg2> 2 23 callothersubr pop   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1971
                      /* ==> push <arg1> / <arg2> onto T1 stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1972
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1973
                        CF2_F16Dot16  dividend;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1974
                        CF2_F16Dot16  divisor;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1975
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1976
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1977
                        if ( arg_cnt != 2 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1978
                          goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1979
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1980
                        divisor  = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1981
                        dividend = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1982
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1983
                        if ( divisor == 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1984
                          goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1985
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1986
                        cf2_stack_pushFixed( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1987
                                             FT_DivFix( dividend,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1988
                                                        divisor ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1989
                        known_othersubr_result_cnt = 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1990
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1991
                      break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1992
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1993
                    case 24:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1994
                      /* <val> <idx> 2 24 callothersubr               */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1995
                      /* ==> set BuildCharArray[cvi( <idx> )] = <val> */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1996
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1997
                        CF2_Int   idx;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1998
                        PS_Blend  blend = decoder->blend;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1999
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2000
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2001
                        if ( arg_cnt != 2 || !blend )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2002
                          goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2003
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2004
                        idx = cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2005
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2006
                        if ( idx < 0                                ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2007
                             (FT_UInt)idx >= decoder->len_buildchar )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2008
                          goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2009
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2010
                        decoder->buildchar[idx] =
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2011
                          cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2012
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2013
                      break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2014
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2015
                    case 25:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2016
                      /* <idx> 1 25 callothersubr pop        */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2017
                      /* ==> push BuildCharArray[cvi( idx )] */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2018
                      /*     onto T1 stack                   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2019
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2020
                        CF2_Int   idx;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2021
                        PS_Blend  blend = decoder->blend;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2022
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2023
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2024
                        if ( arg_cnt != 1 || !blend )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2025
                          goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2026
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2027
                        idx = cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2028
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2029
                        if ( idx < 0                                ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2030
                             (FT_UInt)idx >= decoder->len_buildchar )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2031
                          goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2032
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2033
                        cf2_stack_pushFixed( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2034
                                             decoder->buildchar[idx] );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2035
                        known_othersubr_result_cnt = 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2036
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2037
                      break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2038
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2039
#if 0
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2040
                    case 26:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2041
                      /* <val> mark <idx>                              */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2042
                      /* ==> set BuildCharArray[cvi( <idx> )] = <val>, */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2043
                      /*     leave mark on T1 stack                    */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2044
                      /* <val> <idx>                                   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2045
                      /* ==> set BuildCharArray[cvi( <idx> )] = <val>  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2046
                      XXX which routine has left its mark on the
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2047
                      XXX (PostScript) stack?;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2048
                      break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2049
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2050
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2051
                    case 27:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2052
                      /* <res1> <res2> <val1> <val2> 4 27 callothersubr pop */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2053
                      /* ==> push <res1> onto T1 stack if <val1> <= <val2>, */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2054
                      /*     otherwise push <res2>                          */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2055
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2056
                        CF2_F16Dot16  arg1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2057
                        CF2_F16Dot16  arg2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2058
                        CF2_F16Dot16  cond1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2059
                        CF2_F16Dot16  cond2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2060
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2061
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2062
                        if ( arg_cnt != 4 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2063
                          goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2064
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2065
                        cond2 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2066
                        cond1 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2067
                        arg2  = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2068
                        arg1  = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2069
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2070
                        cf2_stack_pushFixed( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2071
                                             cond1 <= cond2 ? arg1 : arg2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2072
                        known_othersubr_result_cnt = 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2073
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2074
                      break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2075
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2076
                    case 28:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2077
                      /* 0 28 callothersubr pop                     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2078
                      /* ==> push random value from interval [0, 1) */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2079
                      /*     onto stack                             */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2080
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2081
                        CF2_F16Dot16  r;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2082
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2083
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2084
                        if ( arg_cnt != 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2085
                          goto Unexpected_OtherSubr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2086
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2087
                        /* only use the lower 16 bits of `random'  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2088
                        /* to generate a number in the range (0;1] */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2089
                        r = (CF2_F16Dot16)
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2090
                              ( ( decoder->current_subfont->random & 0xFFFF ) + 1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2091
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2092
                        decoder->current_subfont->random =
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2093
                          cff_random( decoder->current_subfont->random );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2094
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2095
                        cf2_stack_pushFixed( opStack, r );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2096
                        known_othersubr_result_cnt = 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2097
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2098
                      break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2099
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2100
                    default:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2101
                      if ( arg_cnt >= 0 && subr_no >= 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2102
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2103
                        FT_Int  i;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2104
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2105
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2106
                        FT_ERROR((
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2107
                          "cf2_interpT2CharString (Type 1 mode):"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2108
                          " unknown othersubr [%d %d], wish me luck\n",
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2109
                          arg_cnt, subr_no ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2110
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2111
                        /* store the unused args        */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2112
                        /* for this unhandled OtherSubr */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2113
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2114
                        if ( arg_cnt > PS_STORAGE_SIZE )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2115
                          arg_cnt = PS_STORAGE_SIZE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2116
                        result_cnt = arg_cnt;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2117
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2118
                        for ( i = 1; i <= arg_cnt; i++ )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2119
                          results[result_cnt - i] =
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2120
                            cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2121
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2122
                        break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2123
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2124
                      /* fall through */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2125
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2126
                    Unexpected_OtherSubr:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2127
                      FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2128
                                 " invalid othersubr [%d %d]\n",
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2129
                                 arg_cnt, subr_no ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2130
                      lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2131
                      goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2132
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2133
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2134
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2135
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2136
                case cf2_escPOP:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2137
                  if ( !font->isT1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2138
                    FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2139
                  else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2140
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2141
                    FT_TRACE4(( " pop" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2142
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2143
                    if ( known_othersubr_result_cnt > 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2144
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2145
                      known_othersubr_result_cnt--;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2146
                      /* ignore, we pushed the operands ourselves */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2147
                      continue;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2148
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2149
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2150
                    if ( result_cnt == 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2151
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2152
                      FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2153
                                 " no more operands for othersubr\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2154
                      lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2155
                      goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2156
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2157
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2158
                    result_cnt--;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2159
                    cf2_stack_pushFixed( opStack, results[result_cnt] );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2160
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2161
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2162
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2163
                case cf2_escDROP:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2164
                  FT_TRACE4(( " drop\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2165
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2166
                  (void)cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2167
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2168
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2169
                case cf2_escPUT:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2170
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2171
                    CF2_F16Dot16  val;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2172
                    CF2_Int       idx;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2173
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2174
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2175
                    FT_TRACE4(( " put\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2176
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2177
                    idx = cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2178
                    val = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2179
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2180
                    if ( idx >= 0 && idx < CF2_STORAGE_SIZE )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2181
                      storage[idx] = val;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2182
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2183
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2184
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2185
                case cf2_escGET:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2186
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2187
                    CF2_Int  idx;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2188
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2189
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2190
                    FT_TRACE4(( " get\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2191
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2192
                    idx = cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2193
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2194
                    if ( idx >= 0 && idx < CF2_STORAGE_SIZE )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2195
                      cf2_stack_pushFixed( opStack, storage[idx] );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2196
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2197
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2198
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2199
                case cf2_escIFELSE:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2200
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2201
                    CF2_F16Dot16  arg1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2202
                    CF2_F16Dot16  arg2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2203
                    CF2_F16Dot16  cond1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2204
                    CF2_F16Dot16  cond2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2205
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2206
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2207
                    FT_TRACE4(( " ifelse\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2208
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2209
                    cond2 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2210
                    cond1 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2211
                    arg2  = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2212
                    arg1  = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2213
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2214
                    cf2_stack_pushFixed( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2215
                                         cond1 <= cond2 ? arg1 : arg2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2216
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2217
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2218
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2219
                case cf2_escRANDOM: /* in spec */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2220
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2221
                    CF2_F16Dot16  r;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2222
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2223
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2224
                    FT_TRACE4(( " random\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2225
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2226
                    /* only use the lower 16 bits of `random'  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2227
                    /* to generate a number in the range (0;1] */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2228
                    r = (CF2_F16Dot16)
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2229
                          ( ( decoder->current_subfont->random & 0xFFFF ) + 1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2230
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2231
                    decoder->current_subfont->random =
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2232
                      cff_random( decoder->current_subfont->random );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2233
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2234
                    cf2_stack_pushFixed( opStack, r );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2235
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2236
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2237
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2238
                case cf2_escMUL:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2239
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2240
                    CF2_F16Dot16  factor1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2241
                    CF2_F16Dot16  factor2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2242
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2243
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2244
                    FT_TRACE4(( " mul\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2245
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2246
                    factor2 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2247
                    factor1 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2248
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2249
                    cf2_stack_pushFixed( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2250
                                         FT_MulFix( factor1, factor2 ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2251
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2252
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2253
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2254
                case cf2_escSQRT:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2255
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2256
                    CF2_F16Dot16  arg;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2257
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2258
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2259
                    FT_TRACE4(( " sqrt\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2260
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2261
                    arg = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2262
                    if ( arg > 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2263
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2264
                      /* use a start value that doesn't make */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2265
                      /* the algorithm's addition overflow   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2266
                      FT_Fixed  root = arg < 10 ? arg : arg >> 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2267
                      FT_Fixed  new_root;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2268
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2269
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2270
                      /* Babylonian method */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2271
                      for (;;)
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2272
                      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2273
                        new_root = ( root + FT_DivFix( arg, root ) + 1 ) >> 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2274
                        if ( new_root == root )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2275
                          break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2276
                        root = new_root;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2277
                      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2278
                      arg = new_root;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2279
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2280
                    else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2281
                      arg = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2282
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2283
                    cf2_stack_pushFixed( opStack, arg );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2284
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2285
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2286
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2287
                case cf2_escDUP:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2288
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2289
                    CF2_F16Dot16  arg;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2290
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2291
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2292
                    FT_TRACE4(( " dup\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2293
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2294
                    arg = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2295
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2296
                    cf2_stack_pushFixed( opStack, arg );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2297
                    cf2_stack_pushFixed( opStack, arg );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2298
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2299
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2300
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2301
                case cf2_escEXCH:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2302
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2303
                    CF2_F16Dot16  arg1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2304
                    CF2_F16Dot16  arg2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2305
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2306
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2307
                    FT_TRACE4(( " exch\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2308
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2309
                    arg2 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2310
                    arg1 = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2311
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2312
                    cf2_stack_pushFixed( opStack, arg2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2313
                    cf2_stack_pushFixed( opStack, arg1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2314
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2315
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2316
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2317
                case cf2_escINDEX:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2318
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2319
                    CF2_Int   idx;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2320
                    CF2_UInt  size;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2321
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2322
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2323
                    FT_TRACE4(( " index\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2324
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2325
                    idx  = cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2326
                    size = cf2_stack_count( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2327
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2328
                    if ( size > 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2329
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2330
                      /* for `cf2_stack_getReal',   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2331
                      /* index 0 is bottom of stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2332
                      CF2_UInt  gr_idx;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2333
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2334
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2335
                      if ( idx < 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2336
                        gr_idx = size - 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2337
                      else if ( (CF2_UInt)idx >= size )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2338
                        gr_idx = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2339
                      else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2340
                        gr_idx = size - 1 - (CF2_UInt)idx;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2341
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2342
                      cf2_stack_pushFixed( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2343
                                           cf2_stack_getReal( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2344
                                                              gr_idx ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2345
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2346
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2347
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2348
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2349
                case cf2_escROLL:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2350
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2351
                    CF2_Int  idx;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2352
                    CF2_Int  count;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2353
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2354
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2355
                    FT_TRACE4(( " roll\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2356
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2357
                    idx   = cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2358
                    count = cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2359
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2360
                    cf2_stack_roll( opStack, count, idx );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2361
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2362
                  continue; /* do not clear the stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2363
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2364
                case cf2_escSETCURRENTPT:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2365
                  if ( !font->isT1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2366
                    FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2367
                  else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2368
                  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2369
                    FT_TRACE4(( " setcurrentpoint" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2370
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2371
                    if ( !initial_map_ready )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2372
                      break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2373
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2374
                    /* From the T1 specification, section 6.4:            */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2375
                    /*                                                    */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2376
                    /*   The setcurrentpoint command is used only in      */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2377
                    /*   conjunction with results from OtherSubrs         */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2378
                    /*   procedures.                                      */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2379
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2380
                    /* known_othersubr_result_cnt != 0 is already handled */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2381
                    /* above.                                             */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2382
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2383
                    /* Note, however, that both Ghostscript and Adobe     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2384
                    /* Distiller handle this situation by silently        */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2385
                    /* ignoring the inappropriate `setcurrentpoint'       */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2386
                    /* instruction.  So we do the same.                   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2387
#if 0
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2388
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2389
                    if ( decoder->flex_state != 1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2390
                    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2391
                      FT_ERROR(( "cf2_interpT2CharString:"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2392
                                 " unexpected `setcurrentpoint'\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2393
                      goto Syntax_Error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2394
                    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2395
                    else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2396
                      ...
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2397
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2398
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2399
                    curY = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2400
                    curX = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2401
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2402
                    decoder->flex_state = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2403
                  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2404
                  break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2405
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2406
                } /* end of 2nd switch checking op2 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2407
              }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2408
            }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2409
          } /* end of 1st switch checking op2 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2410
        } /* case cf2_cmdESC */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2411
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2412
        break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2413
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2414
      case cf2_cmdHSBW:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2415
        if ( !font->isT1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2416
          FT_TRACE4(( " unknown op (%d)\n", op1 ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2417
        else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2418
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2419
          CF2_Fixed    lsb_x;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2420
          PS_Builder*  builder;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2421
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2422
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
  2423
          FT_TRACE4(( " hsbw\n" ));
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2424
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2425
          builder = &decoder->builder;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2426
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2427
          builder->advance->x = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2428
          builder->advance->y = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2429
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2430
          lsb_x = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2431
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2432
          builder->left_bearing->x = ADD_INT32( builder->left_bearing->x,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2433
                                                lsb_x );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2434
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2435
          haveWidth = TRUE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2436
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2437
          /* the `metrics_only' indicates that we only want to compute */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2438
          /* the glyph's metrics (lsb + advance width), not load the   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2439
          /* rest of it; so exit immediately                           */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2440
          if ( builder->metrics_only )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2441
            goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2442
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2443
          if ( initial_map_ready )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2444
            curX = ADD_INT32( curX, lsb_x );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2445
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2446
        break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2447
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2448
      case cf2_cmdENDCHAR:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2449
        FT_TRACE4(( " endchar\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2450
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2451
        if ( font->isT1 && !initial_map_ready )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2452
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2453
          FT_TRACE5(( "cf2_interpT2CharString (Type 1 mode): "
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2454
                      "Build initial hintmap, rewinding...\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2455
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2456
          /* trigger initial hintmap build */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2457
          cf2_glyphpath_moveTo( &glyphPath, curX, curY );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2458
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2459
          initial_map_ready = TRUE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2460
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2461
          /* change hints routine - clear for rewind */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2462
          cf2_arrstack_clear( &vStemHintArray );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2463
          cf2_arrstack_clear( &hStemHintArray );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2464
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2465
          cf2_hintmask_init( &hintMask, error );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2466
          hintMask.isValid = FALSE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2467
          hintMask.isNew   = TRUE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2468
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2469
          /* rewind charstring */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2470
          /* some charstrings use endchar from a final subroutine call */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2471
          /* without returning, detect these and exit to the top level */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2472
          /* charstring                                                */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2473
          while ( charstringIndex > 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2474
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2475
            FT_TRACE4(( " return (leaving level %d)\n", charstringIndex ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2476
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2477
            /* restore position in previous charstring */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2478
            charstring = (CF2_Buffer)
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2479
                           cf2_arrstack_getPointer(
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2480
                             &subrStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2481
                             (CF2_UInt)--charstringIndex );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2482
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2483
          charstring->ptr = charstring->start;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2484
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2485
          break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2486
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2487
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2488
        if ( cf2_stack_count( opStack ) == 1 ||
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2489
             cf2_stack_count( opStack ) == 5 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2490
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2491
          if ( !haveWidth )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2492
            *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2493
                                nominalWidthX );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2494
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2495
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2496
        /* width is defined or default after this */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2497
        haveWidth = TRUE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2498
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2499
        if ( decoder->width_only )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2500
          goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2501
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2502
        /* close path if still open */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2503
        cf2_glyphpath_closeOpenPath( &glyphPath );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2504
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2505
        /* disable seac for CFF2 and Type1        */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2506
        /* (charstring ending with args on stack) */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2507
        if ( !font->isCFF2 && !font->isT1 && cf2_stack_count( opStack ) > 1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2508
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2509
          /* must be either 4 or 5 --                       */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2510
          /* this is a (deprecated) implied `seac' operator */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2511
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2512
          CF2_Int        achar;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2513
          CF2_Int        bchar;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2514
          CF2_BufferRec  component;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2515
          CF2_Fixed      dummyWidth;   /* ignore component width */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2516
          FT_Error       error2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2517
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2518
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2519
          if ( doingSeac )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2520
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2521
            lastError = FT_THROW( Invalid_Glyph_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2522
            goto exit;      /* nested seac */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2523
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2524
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2525
          achar = cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2526
          bchar = cf2_stack_popInt( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2527
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2528
          curY = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2529
          curX = cf2_stack_popFixed( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2530
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2531
          error2 = cf2_getSeacComponent( decoder, achar, &component );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2532
          if ( error2 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2533
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2534
            lastError = error2;      /* pass FreeType error through */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2535
            goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2536
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2537
          cf2_interpT2CharString( font,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2538
                                  &component,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2539
                                  callbacks,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2540
                                  translation,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2541
                                  TRUE,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2542
                                  curX,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2543
                                  curY,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2544
                                  &dummyWidth );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2545
          cf2_freeSeacComponent( decoder, &component );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2546
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2547
          error2 = cf2_getSeacComponent( decoder, bchar, &component );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2548
          if ( error2 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2549
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2550
            lastError = error2;      /* pass FreeType error through */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2551
            goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2552
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2553
          cf2_interpT2CharString( font,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2554
                                  &component,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2555
                                  callbacks,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2556
                                  translation,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2557
                                  TRUE,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2558
                                  0,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2559
                                  0,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2560
                                  &dummyWidth );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2561
          cf2_freeSeacComponent( decoder, &component );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2562
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2563
        goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2564
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2565
      case cf2_cmdCNTRMASK:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2566
      case cf2_cmdHINTMASK:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2567
        /* the final \n in the tracing message gets added in      */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2568
        /* `cf2_hintmask_read' (which also traces the mask bytes) */
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
  2569
        FT_TRACE4(( "%s", op1 == cf2_cmdCNTRMASK ? " cntrmask" : " hintmask" ));
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2570
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2571
        /* never add hints after the mask is computed */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2572
        if ( cf2_stack_count( opStack ) > 1    &&
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2573
             cf2_hintmask_isValid( &hintMask ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2574
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2575
          FT_TRACE4(( "cf2_interpT2CharString: invalid hint mask\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2576
          break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2577
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2578
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2579
        /* if there are arguments on the stack, there this is an */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2580
        /* implied cf2_cmdVSTEMHM                                */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2581
        cf2_doStems( font,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2582
                     opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2583
                     &vStemHintArray,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2584
                     width,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2585
                     &haveWidth,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2586
                     0 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2587
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2588
        if ( decoder->width_only )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2589
          goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2590
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2591
        if ( op1 == cf2_cmdHINTMASK )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2592
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2593
          /* consume the hint mask bytes which follow the operator */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2594
          cf2_hintmask_read( &hintMask,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2595
                             charstring,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2596
                             cf2_arrstack_size( &hStemHintArray ) +
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2597
                               cf2_arrstack_size( &vStemHintArray ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2598
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2599
        else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2600
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2601
          /*
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2602
           * Consume the counter mask bytes which follow the operator:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2603
           * Build a temporary hint map, just to place and lock those
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2604
           * stems participating in the counter mask.  These are most
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2605
           * likely the dominant hstems, and are grouped together in a
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2606
           * few counter groups, not necessarily in correspondence
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2607
           * with the hint groups.  This reduces the chances of
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2608
           * conflicts between hstems that are initially placed in
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2609
           * separate hint groups and then brought together.  The
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2610
           * positions are copied back to `hStemHintArray', so we can
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2611
           * discard `counterMask' and `counterHintMap'.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2612
           *
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2613
           */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2614
          CF2_HintMapRec   counterHintMap;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2615
          CF2_HintMaskRec  counterMask;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2616
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2617
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2618
          cf2_hintmap_init( &counterHintMap,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2619
                            font,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2620
                            &glyphPath.initialHintMap,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2621
                            &glyphPath.hintMoves,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2622
                            scaleY );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2623
          cf2_hintmask_init( &counterMask, error );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2624
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2625
          cf2_hintmask_read( &counterMask,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2626
                             charstring,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2627
                             cf2_arrstack_size( &hStemHintArray ) +
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2628
                               cf2_arrstack_size( &vStemHintArray ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2629
          cf2_hintmap_build( &counterHintMap,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2630
                             &hStemHintArray,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2631
                             &vStemHintArray,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2632
                             &counterMask,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2633
                             0,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2634
                             FALSE );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2635
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2636
        break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2637
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2638
      case cf2_cmdRMOVETO:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2639
        FT_TRACE4(( " rmoveto\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2640
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2641
        if ( font->isT1 && !decoder->flex_state && !haveWidth )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2642
          FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2643
                     " No width. Use hsbw/sbw as first op\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2644
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2645
        if ( cf2_stack_count( opStack ) > 2 && !haveWidth )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2646
          *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2647
                              nominalWidthX );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2648
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2649
        /* width is defined or default after this */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2650
        haveWidth = TRUE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2651
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2652
        if ( decoder->width_only )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2653
          goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2654
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2655
        curY = ADD_INT32( curY, cf2_stack_popFixed( opStack ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2656
        curX = ADD_INT32( curX, cf2_stack_popFixed( opStack ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2657
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2658
        if ( !decoder->flex_state )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2659
          cf2_glyphpath_moveTo( &glyphPath, curX, curY );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2660
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2661
        break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2662
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2663
      case cf2_cmdHMOVETO:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2664
        FT_TRACE4(( " hmoveto\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2665
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2666
        if ( font->isT1 && !decoder->flex_state && !haveWidth )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2667
          FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2668
                     " No width. Use hsbw/sbw as first op\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2669
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2670
        if ( cf2_stack_count( opStack ) > 1 && !haveWidth )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2671
          *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ),
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2672
                              nominalWidthX );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2673
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2674
        /* width is defined or default after this */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2675
        haveWidth = TRUE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2676
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2677
        if ( decoder->width_only )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2678
          goto exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2679
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2680
        curX = ADD_INT32( curX, cf2_stack_popFixed( opStack ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2681
50479
70e706c85f1d 8203367: Upgrade to freetype 2.9.1
prr
parents: 49234
diff changeset
  2682
        if ( !decoder->flex_state )
70e706c85f1d 8203367: Upgrade to freetype 2.9.1
prr
parents: 49234
diff changeset
  2683
          cf2_glyphpath_moveTo( &glyphPath, curX, curY );
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2684
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2685
        break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2686
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2687
      case cf2_cmdRLINECURVE:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2688
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2689
          CF2_UInt  count = cf2_stack_count( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2690
          CF2_UInt  idx   = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2691
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2692
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2693
          FT_TRACE4(( " rlinecurve\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2694
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2695
          while ( idx + 6 < count )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2696
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2697
            curX = ADD_INT32( curX, cf2_stack_getReal( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2698
                                                       idx + 0 ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2699
            curY = ADD_INT32( curY, cf2_stack_getReal( opStack,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2700
                                                       idx + 1 ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2701
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2702
            cf2_glyphpath_lineTo( &glyphPath, curX, curY );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2703
            idx += 2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2704
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2705
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2706
          while ( idx < count )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2707
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2708
            CF2_Fixed  x1, y1, x2, y2, x3, y3;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2709
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2710
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2711
            x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2712
            y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), curY );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2713
            x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), x1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2714
            y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2715
            x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), x2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2716
            y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 5 ), y2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2717
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2718
            cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2719
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2720
            curX  = x3;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2721
            curY  = y3;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2722
            idx  += 6;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2723
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2724
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2725
          cf2_stack_clear( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2726
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2727
        continue; /* no need to clear stack again */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2728
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2729
      case cf2_cmdVVCURVETO:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2730
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2731
          CF2_UInt  count, count1 = cf2_stack_count( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2732
          CF2_UInt  idx = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2733
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2734
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2735
          /* if `cf2_stack_count' isn't of the form 4n or 4n+1, */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2736
          /* we enforce it by clearing the second bit           */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2737
          /* (and sorting the stack indexing to suit)           */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2738
          count = count1 & ~2U;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2739
          idx  += count1 - count;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2740
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2741
          FT_TRACE4(( " vvcurveto\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2742
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2743
          while ( idx < count )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2744
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2745
            CF2_Fixed  x1, y1, x2, y2, x3, y3;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2746
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2747
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2748
            if ( ( count - idx ) & 1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2749
            {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2750
              x1 = ADD_INT32( cf2_stack_getReal( opStack, idx ), curX );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2751
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2752
              idx++;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2753
            }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2754
            else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2755
              x1 = curX;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2756
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2757
            y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curY );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2758
            x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2759
            y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2760
            x3 = x2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2761
            y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2762
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2763
            cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2764
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2765
            curX  = x3;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2766
            curY  = y3;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2767
            idx  += 4;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2768
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2769
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2770
          cf2_stack_clear( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2771
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2772
        continue; /* no need to clear stack again */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2773
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2774
      case cf2_cmdHHCURVETO:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2775
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2776
          CF2_UInt  count, count1 = cf2_stack_count( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2777
          CF2_UInt  idx = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2778
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2779
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2780
          /* if `cf2_stack_count' isn't of the form 4n or 4n+1, */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2781
          /* we enforce it by clearing the second bit           */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2782
          /* (and sorting the stack indexing to suit)           */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2783
          count = count1 & ~2U;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2784
          idx  += count1 - count;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2785
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2786
          FT_TRACE4(( " hhcurveto\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2787
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2788
          while ( idx < count )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2789
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2790
            CF2_Fixed  x1, y1, x2, y2, x3, y3;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2791
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2792
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2793
            if ( ( count - idx ) & 1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2794
            {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2795
              y1 = ADD_INT32( cf2_stack_getReal( opStack, idx ), curY );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2796
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2797
              idx++;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2798
            }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2799
            else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2800
              y1 = curY;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2801
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2802
            x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2803
            x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2804
            y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2805
            x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), x2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2806
            y3 = y2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2807
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2808
            cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2809
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2810
            curX  = x3;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2811
            curY  = y3;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2812
            idx  += 4;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2813
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2814
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2815
          cf2_stack_clear( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2816
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2817
        continue; /* no need to clear stack again */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2818
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2819
      case cf2_cmdVHCURVETO:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2820
      case cf2_cmdHVCURVETO:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2821
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2822
          CF2_UInt  count, count1 = cf2_stack_count( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2823
          CF2_UInt  idx = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2824
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2825
          FT_Bool  alternate = FT_BOOL( op1 == cf2_cmdHVCURVETO );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2826
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2827
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2828
          /* if `cf2_stack_count' isn't of the form 8n, 8n+1, */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2829
          /* 8n+4, or 8n+5, we enforce it by clearing the     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2830
          /* second bit                                       */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2831
          /* (and sorting the stack indexing to suit)         */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2832
          count = count1 & ~2U;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2833
          idx  += count1 - count;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2834
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 50479
diff changeset
  2835
          FT_TRACE4(( "%s\n", alternate ? " hvcurveto" : " vhcurveto" ));
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2836
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2837
          while ( idx < count )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2838
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2839
            CF2_Fixed x1, x2, x3, y1, y2, y3;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2840
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2841
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2842
            if ( alternate )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2843
            {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2844
              x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2845
              y1 = curY;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2846
              x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2847
              y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2848
              y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2849
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2850
              if ( count - idx == 5 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2851
              {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2852
                x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), x2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2853
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2854
                idx++;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2855
              }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2856
              else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2857
                x3 = x2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2858
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2859
              alternate = FALSE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2860
            }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2861
            else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2862
            {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2863
              x1 = curX;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2864
              y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curY );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2865
              x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2866
              y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2867
              x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), x2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2868
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2869
              if ( count - idx == 5 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2870
              {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2871
                y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), y2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2872
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2873
                idx++;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2874
              }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2875
              else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2876
                y3 = y2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2877
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2878
              alternate = TRUE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2879
            }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2880
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2881
            cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2882
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2883
            curX  = x3;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2884
            curY  = y3;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2885
            idx  += 4;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2886
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2887
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2888
          cf2_stack_clear( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2889
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2890
        continue;     /* no need to clear stack again */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2891
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2892
      case cf2_cmdEXTENDEDNMBR:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2893
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2894
          CF2_Int  v;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2895
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2896
          CF2_Int  byte1 = cf2_buf_readByte( charstring );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2897
          CF2_Int  byte2 = cf2_buf_readByte( charstring );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2898
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2899
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2900
          v = (FT_Short)( ( byte1 << 8 ) |
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2901
                            byte2        );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2902
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2903
          FT_TRACE4(( " %d", v ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2904
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2905
          cf2_stack_pushInt( opStack, v );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2906
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2907
        continue;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2908
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2909
      default:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2910
        /* numbers */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2911
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2912
          if ( /* op1 >= 32 && */ op1 <= 246 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2913
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2914
            CF2_Int  v;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2915
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2916
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2917
            v = op1 - 139;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2918
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2919
            FT_TRACE4(( " %d", v ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2920
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2921
            /* -107 .. 107 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2922
            cf2_stack_pushInt( opStack, v );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2923
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2924
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2925
          else if ( /* op1 >= 247 && */ op1 <= 250 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2926
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2927
            CF2_Int  v;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2928
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2929
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2930
            v  = op1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2931
            v -= 247;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2932
            v *= 256;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2933
            v += cf2_buf_readByte( charstring );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2934
            v += 108;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2935
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2936
            FT_TRACE4(( " %d", v ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2937
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2938
            /* 108 .. 1131 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2939
            cf2_stack_pushInt( opStack, v );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2940
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2941
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2942
          else if ( /* op1 >= 251 && */ op1 <= 254 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2943
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2944
            CF2_Int  v;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2945
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2946
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2947
            v  = op1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2948
            v -= 251;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2949
            v *= 256;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2950
            v += cf2_buf_readByte( charstring );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2951
            v  = -v - 108;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2952
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2953
            FT_TRACE4(( " %d", v ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2954
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2955
            /* -1131 .. -108 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2956
            cf2_stack_pushInt( opStack, v );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2957
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2958
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2959
          else /* op1 == 255 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2960
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2961
            CF2_Fixed  v;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2962
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2963
            FT_UInt32  byte1 = (FT_UInt32)cf2_buf_readByte( charstring );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2964
            FT_UInt32  byte2 = (FT_UInt32)cf2_buf_readByte( charstring );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2965
            FT_UInt32  byte3 = (FT_UInt32)cf2_buf_readByte( charstring );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2966
            FT_UInt32  byte4 = (FT_UInt32)cf2_buf_readByte( charstring );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2967
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2968
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2969
            v = (CF2_Fixed)( ( byte1 << 24 ) |
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2970
                             ( byte2 << 16 ) |
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2971
                             ( byte3 <<  8 ) |
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2972
                               byte4         );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2973
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2974
            /*
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2975
             * For Type 1:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2976
             *
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2977
             * According to the specification, values > 32000 or < -32000
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2978
             * must be followed by a `div' operator to make the result be
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2979
             * in the range [-32000;32000].  We expect that the second
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2980
             * argument of `div' is not a large number.  Additionally, we
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2981
             * don't handle stuff like `<large1> <large2> <num> div <num>
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2982
             * div' or <large1> <large2> <num> div div'.  This is probably
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2983
             * not allowed anyway.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2984
             *
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2985
             * <large> <num> <num>+ div is not checked but should not be
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2986
             * allowed as the large value remains untouched.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2987
             *
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2988
             */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2989
            if ( font->isT1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2990
            {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2991
              if ( v > 32000 || v < -32000 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2992
              {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2993
                if ( large_int )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2994
                  FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2995
                             " no `div' after large integer\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2996
                else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2997
                  large_int = TRUE;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2998
              }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  2999
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3000
              FT_TRACE4(( " %d", v ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3001
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3002
              cf2_stack_pushInt( opStack, (CF2_Int)v );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3003
            }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3004
            else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3005
            {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3006
              FT_TRACE4(( " %.5fF", v / 65536.0 ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3007
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3008
              cf2_stack_pushFixed( opStack, v );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3009
            }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3010
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3011
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3012
        continue;   /* don't clear stack */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3013
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3014
      } /* end of switch statement checking `op1' */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3015
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3016
      cf2_stack_clear( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3017
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3018
    } /* end of main interpreter loop */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3019
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3020
    /* we get here if the charstring ends without cf2_cmdENDCHAR */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3021
    FT_TRACE4(( "cf2_interpT2CharString:"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3022
                "  charstring ends without ENDCHAR\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3023
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3024
  exit:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3025
    /* check whether last error seen is also the first one */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3026
    cf2_setError( error, lastError );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3027
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3028
    if ( *error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3029
      FT_TRACE4(( "charstring error %d\n", *error ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3030
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3031
    /* free resources from objects we've used */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3032
    cf2_glyphpath_finalize( &glyphPath );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3033
    cf2_arrstack_finalize( &vStemHintArray );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3034
    cf2_arrstack_finalize( &hStemHintArray );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3035
    cf2_arrstack_finalize( &subrStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3036
    cf2_stack_free( opStack );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3037
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3038
    FT_TRACE4(( "\n" ));
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3039
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3040
    return;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3041
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3042
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3043
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  3044
/* END */