Ignore:
Timestamp:
Jan 18, 2007, 5:32:59 PM (15 years ago)
Author:
Eugene Romanenko
Message:

freetype update to version 2.3.0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/poppler/freetype2/src/cff/cffload.c

    r165 r182  
    55/*    OpenType and CFF data/program tables loader (body).                  */
    66/*                                                                         */
    7 /*  Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006 by                   */
     7/*  Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by             */
    88/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
    99/*                                                                         */
     
    2323#include FT_SERVICE_POSTSCRIPT_CMAPS_H
    2424#include FT_TRUETYPE_TAGS_H
     25#include FT_TYPE1_TABLES_H
    2526
    2627#include "cffload.h"
     
    3334  static const FT_UShort  cff_isoadobe_charset[229] =
    3435  {
    35     0,
    36     1,
    37     2,
    38     3,
    39     4,
    40     5,
    41     6,
    42     7,
    43     8,
    44     9,
    45     10,
    46     11,
    47     12,
    48     13,
    49     14,
    50     15,
    51     16,
    52     17,
    53     18,
    54     19,
    55     20,
    56     21,
    57     22,
    58     23,
    59     24,
    60     25,
    61     26,
    62     27,
    63     28,
    64     29,
    65     30,
    66     31,
    67     32,
    68     33,
    69     34,
    70     35,
    71     36,
    72     37,
    73     38,
    74     39,
    75     40,
    76     41,
    77     42,
    78     43,
    79     44,
    80     45,
    81     46,
    82     47,
    83     48,
    84     49,
    85     50,
    86     51,
    87     52,
    88     53,
    89     54,
    90     55,
    91     56,
    92     57,
    93     58,
    94     59,
    95     60,
    96     61,
    97     62,
    98     63,
    99     64,
    100     65,
    101     66,
    102     67,
    103     68,
    104     69,
    105     70,
    106     71,
    107     72,
    108     73,
    109     74,
    110     75,
    111     76,
    112     77,
    113     78,
    114     79,
    115     80,
    116     81,
    117     82,
    118     83,
    119     84,
    120     85,
    121     86,
    122     87,
    123     88,
    124     89,
    125     90,
    126     91,
    127     92,
    128     93,
    129     94,
    130     95,
    131     96,
    132     97,
    133     98,
    134     99,
    135     100,
    136     101,
    137     102,
    138     103,
    139     104,
    140     105,
    141     106,
    142     107,
    143     108,
    144     109,
    145     110,
    146     111,
    147     112,
    148     113,
    149     114,
    150     115,
    151     116,
    152     117,
    153     118,
    154     119,
    155     120,
    156     121,
    157     122,
    158     123,
    159     124,
    160     125,
    161     126,
    162     127,
    163     128,
    164     129,
    165     130,
    166     131,
    167     132,
    168     133,
    169     134,
    170     135,
    171     136,
    172     137,
    173     138,
    174     139,
    175     140,
    176     141,
    177     142,
    178     143,
    179     144,
    180     145,
    181     146,
    182     147,
    183     148,
    184     149,
    185     150,
    186     151,
    187     152,
    188     153,
    189     154,
    190     155,
    191     156,
    192     157,
    193     158,
    194     159,
    195     160,
    196     161,
    197     162,
    198     163,
    199     164,
    200     165,
    201     166,
    202     167,
    203     168,
    204     169,
    205     170,
    206     171,
    207     172,
    208     173,
    209     174,
    210     175,
    211     176,
    212     177,
    213     178,
    214     179,
    215     180,
    216     181,
    217     182,
    218     183,
    219     184,
    220     185,
    221     186,
    222     187,
    223     188,
    224     189,
    225     190,
    226     191,
    227     192,
    228     193,
    229     194,
    230     195,
    231     196,
    232     197,
    233     198,
    234     199,
    235     200,
    236     201,
    237     202,
    238     203,
    239     204,
    240     205,
    241     206,
    242     207,
    243     208,
    244     209,
    245     210,
    246     211,
    247     212,
    248     213,
    249     214,
    250     215,
    251     216,
    252     217,
    253     218,
    254     219,
    255     220,
    256     221,
    257     222,
    258     223,
    259     224,
    260     225,
    261     226,
    262     227,
    263     228
     36      0,   1,   2,   3,   4,   5,   6,   7,
     37      8,   9,  10,  11,  12,  13,  14,  15,
     38     16,  17,  18,  19,  20,  21,  22,  23,
     39     24,  25,  26,  27,  28,  29,  30,  31,
     40     32,  33,  34,  35,  36,  37,  38,  39,
     41     40,  41,  42,  43,  44,  45,  46,  47,
     42     48,  49,  50,  51,  52,  53,  54,  55,
     43     56,  57,  58,  59,  60,  61,  62,  63,
     44     64,  65,  66,  67,  68,  69,  70,  71,
     45     72,  73,  74,  75,  76,  77,  78,  79,
     46     80,  81,  82,  83,  84,  85,  86,  87,
     47     88,  89,  90,  91,  92,  93,  94,  95,
     48     96,  97,  98,  99, 100, 101, 102, 103,
     49    104, 105, 106, 107, 108, 109, 110, 111,
     50    112, 113, 114, 115, 116, 117, 118, 119,
     51    120, 121, 122, 123, 124, 125, 126, 127,
     52    128, 129, 130, 131, 132, 133, 134, 135,
     53    136, 137, 138, 139, 140, 141, 142, 143,
     54    144, 145, 146, 147, 148, 149, 150, 151,
     55    152, 153, 154, 155, 156, 157, 158, 159,
     56    160, 161, 162, 163, 164, 165, 166, 167,
     57    168, 169, 170, 171, 172, 173, 174, 175,
     58    176, 177, 178, 179, 180, 181, 182, 183,
     59    184, 185, 186, 187, 188, 189, 190, 191,
     60    192, 193, 194, 195, 196, 197, 198, 199,
     61    200, 201, 202, 203, 204, 205, 206, 207,
     62    208, 209, 210, 211, 212, 213, 214, 215,
     63    216, 217, 218, 219, 220, 221, 222, 223,
     64    224, 225, 226, 227, 228
    26465  };
    26566
    26667  static const FT_UShort  cff_expert_charset[166] =
    26768  {
    268     0,
    269     1,
    270     229,
    271     230,
    272     231,
    273     232,
    274     233,
    275     234,
    276     235,
    277     236,
    278     237,
    279     238,
    280     13,
    281     14,
    282     15,
    283     99,
    284     239,
    285     240,
    286     241,
    287     242,
    288     243,
    289     244,
    290     245,
    291     246,
    292     247,
    293     248,
    294     27,
    295     28,
    296     249,
    297     250,
    298     251,
    299     252,
    300     253,
    301     254,
    302     255,
    303     256,
    304     257,
    305     258,
    306     259,
    307     260,
    308     261,
    309     262,
    310     263,
    311     264,
    312     265,
    313     266,
    314     109,
    315     110,
    316     267,
    317     268,
    318     269,
    319     270,
    320     271,
    321     272,
    322     273,
    323     274,
    324     275,
    325     276,
    326     277,
    327     278,
    328     279,
    329     280,
    330     281,
    331     282,
    332     283,
    333     284,
    334     285,
    335     286,
    336     287,
    337     288,
    338     289,
    339     290,
    340     291,
    341     292,
    342     293,
    343     294,
    344     295,
    345     296,
    346     297,
    347     298,
    348     299,
    349     300,
    350     301,
    351     302,
    352     303,
    353     304,
    354     305,
    355     306,
    356     307,
    357     308,
    358     309,
    359     310,
    360     311,
    361     312,
    362     313,
    363     314,
    364     315,
    365     316,
    366     317,
    367     318,
    368     158,
    369     155,
    370     163,
    371     319,
    372     320,
    373     321,
    374     322,
    375     323,
    376     324,
    377     325,
    378     326,
    379     150,
    380     164,
    381     169,
    382     327,
    383     328,
    384     329,
    385     330,
    386     331,
    387     332,
    388     333,
    389     334,
    390     335,
    391     336,
    392     337,
    393     338,
    394     339,
    395     340,
    396     341,
    397     342,
    398     343,
    399     344,
    400     345,
    401     346,
    402     347,
    403     348,
    404     349,
    405     350,
    406     351,
    407     352,
    408     353,
    409     354,
    410     355,
    411     356,
    412     357,
    413     358,
    414     359,
    415     360,
    416     361,
    417     362,
    418     363,
    419     364,
    420     365,
    421     366,
    422     367,
    423     368,
    424     369,
    425     370,
    426     371,
    427     372,
    428     373,
    429     374,
    430     375,
    431     376,
    432     377,
    433     378
     69      0,   1, 229, 230, 231, 232, 233, 234,
     70    235, 236, 237, 238,  13,  14,  15,  99,
     71    239, 240, 241, 242, 243, 244, 245, 246,
     72    247, 248,  27,  28, 249, 250, 251, 252,
     73    253, 254, 255, 256, 257, 258, 259, 260,
     74    261, 262, 263, 264, 265, 266, 109, 110,
     75    267, 268, 269, 270, 271, 272, 273, 274,
     76    275, 276, 277, 278, 279, 280, 281, 282,
     77    283, 284, 285, 286, 287, 288, 289, 290,
     78    291, 292, 293, 294, 295, 296, 297, 298,
     79    299, 300, 301, 302, 303, 304, 305, 306,
     80    307, 308, 309, 310, 311, 312, 313, 314,
     81    315, 316, 317, 318, 158, 155, 163, 319,
     82    320, 321, 322, 323, 324, 325, 326, 150,
     83    164, 169, 327, 328, 329, 330, 331, 332,
     84    333, 334, 335, 336, 337, 338, 339, 340,
     85    341, 342, 343, 344, 345, 346, 347, 348,
     86    349, 350, 351, 352, 353, 354, 355, 356,
     87    357, 358, 359, 360, 361, 362, 363, 364,
     88    365, 366, 367, 368, 369, 370, 371, 372,
     89    373, 374, 375, 376, 377, 378
    43490  };
    43591
    43692  static const FT_UShort  cff_expertsubset_charset[87] =
    43793  {
    438     0,
    439     1,
    440     231,
    441     232,
    442     235,
    443     236,
    444     237,
    445     238,
    446     13,
    447     14,
    448     15,
    449     99,
    450     239,
    451     240,
    452     241,
    453     242,
    454     243,
    455     244,
    456     245,
    457     246,
    458     247,
    459     248,
    460     27,
    461     28,
    462     249,
    463     250,
    464     251,
    465     253,
    466     254,
    467     255,
    468     256,
    469     257,
    470     258,
    471     259,
    472     260,
    473     261,
    474     262,
    475     263,
    476     264,
    477     265,
    478     266,
    479     109,
    480     110,
    481     267,
    482     268,
    483     269,
    484     270,
    485     272,
    486     300,
    487     301,
    488     302,
    489     305,
    490     314,
    491     315,
    492     158,
    493     155,
    494     163,
    495     320,
    496     321,
    497     322,
    498     323,
    499     324,
    500     325,
    501     326,
    502     150,
    503     164,
    504     169,
    505     327,
    506     328,
    507     329,
    508     330,
    509     331,
    510     332,
    511     333,
    512     334,
    513     335,
    514     336,
    515     337,
    516     338,
    517     339,
    518     340,
    519     341,
    520     342,
    521     343,
    522     344,
    523     345,
    524     346
     94      0,   1, 231, 232, 235, 236, 237, 238,
     95     13,  14,  15,  99, 239, 240, 241, 242,
     96    243, 244, 245, 246, 247, 248,  27,  28,
     97    249, 250, 251, 253, 254, 255, 256, 257,
     98    258, 259, 260, 261, 262, 263, 264, 265,
     99    266, 109, 110, 267, 268, 269, 270, 272,
     100    300, 301, 302, 305, 314, 315, 158, 155,
     101    163, 320, 321, 322, 323, 324, 325, 326,
     102    150, 164, 169, 327, 328, 329, 330, 331,
     103    332, 333, 334, 335, 336, 337, 338, 339,
     104    340, 341, 342, 343, 344, 345, 346
    525105  };
    526106
    527107  static const FT_UShort  cff_standard_encoding[256] =
    528108  {
    529     0,
    530     0,
    531     0,
    532     0,
    533     0,
    534     0,
    535     0,
    536     0,
    537     0,
    538     0,
    539     0,
    540     0,
    541     0,
    542     0,
    543     0,
    544     0,
    545     0,
    546     0,
    547     0,
    548     0,
    549     0,
    550     0,
    551     0,
    552     0,
    553     0,
    554     0,
    555     0,
    556     0,
    557     0,
    558     0,
    559     0,
    560     0,
    561     1,
    562     2,
    563     3,
    564     4,
    565     5,
    566     6,
    567     7,
    568     8,
    569     9,
    570     10,
    571     11,
    572     12,
    573     13,
    574     14,
    575     15,
    576     16,
    577     17,
    578     18,
    579     19,
    580     20,
    581     21,
    582     22,
    583     23,
    584     24,
    585     25,
    586     26,
    587     27,
    588     28,
    589     29,
    590     30,
    591     31,
    592     32,
    593     33,
    594     34,
    595     35,
    596     36,
    597     37,
    598     38,
    599     39,
    600     40,
    601     41,
    602     42,
    603     43,
    604     44,
    605     45,
    606     46,
    607     47,
    608     48,
    609     49,
    610     50,
    611     51,
    612     52,
    613     53,
    614     54,
    615     55,
    616     56,
    617     57,
    618     58,
    619     59,
    620     60,
    621     61,
    622     62,
    623     63,
    624     64,
    625     65,
    626     66,
    627     67,
    628     68,
    629     69,
    630     70,
    631     71,
    632     72,
    633     73,
    634     74,
    635     75,
    636     76,
    637     77,
    638     78,
    639     79,
    640     80,
    641     81,
    642     82,
    643     83,
    644     84,
    645     85,
    646     86,
    647     87,
    648     88,
    649     89,
    650     90,
    651     91,
    652     92,
    653     93,
    654     94,
    655     95,
    656     0,
    657     0,
    658     0,
    659     0,
    660     0,
    661     0,
    662     0,
    663     0,
    664     0,
    665     0,
    666     0,
    667     0,
    668     0,
    669     0,
    670     0,
    671     0,
    672     0,
    673     0,
    674     0,
    675     0,
    676     0,
    677     0,
    678     0,
    679     0,
    680     0,
    681     0,
    682     0,
    683     0,
    684     0,
    685     0,
    686     0,
    687     0,
    688     0,
    689     0,
    690     96,
    691     97,
    692     98,
    693     99,
    694     100,
    695     101,
    696     102,
    697     103,
    698     104,
    699     105,
    700     106,
    701     107,
    702     108,
    703     109,
    704     110,
    705     0,
    706     111,
    707     112,
    708     113,
    709     114,
    710     0,
    711     115,
    712     116,
    713     117,
    714     118,
    715     119,
    716     120,
    717     121,
    718     122,
    719     0,
    720     123,
    721     0,
    722     124,
    723     125,
    724     126,
    725     127,
    726     128,
    727     129,
    728     130,
    729     131,
    730     0,
    731     132,
    732     133,
    733     0,
    734     134,
    735     135,
    736     136,
    737     137,
    738     0,
    739     0,
    740     0,
    741     0,
    742     0,
    743     0,
    744     0,
    745     0,
    746     0,
    747     0,
    748     0,
    749     0,
    750     0,
    751     0,
    752     0,
    753     0,
    754     138,
    755     0,
    756     139,
    757     0,
    758     0,
    759     0,
    760     0,
    761     140,
    762     141,
    763     142,
    764     143,
    765     0,
    766     0,
    767     0,
    768     0,
    769     0,
    770     144,
    771     0,
    772     0,
    773     0,
    774     145,
    775     0,
    776     0,
    777     146,
    778     147,
    779     148,
    780     149,
    781     0,
    782     0,
    783     0,
    784     0
     109      0,   0,   0,   0,   0,   0,   0,   0,
     110      0,   0,   0,   0,   0,   0,   0,   0,
     111      0,   0,   0,   0,   0,   0,   0,   0,
     112      0,   0,   0,   0,   0,   0,   0,   0,
     113      1,   2,   3,   4,   5,   6,   7,   8,
     114      9,  10,  11,  12,  13,  14,  15,  16,
     115     17,  18,  19,  20,  21,  22,  23,  24,
     116     25,  26,  27,  28,  29,  30,  31,  32,
     117     33,  34,  35,  36,  37,  38,  39,  40,
     118     41,  42,  43,  44,  45,  46,  47,  48,
     119     49,  50,  51,  52,  53,  54,  55,  56,
     120     57,  58,  59,  60,  61,  62,  63,  64,
     121     65,  66,  67,  68,  69,  70,  71,  72,
     122     73,  74,  75,  76,  77,  78,  79,  80,
     123     81,  82,  83,  84,  85,  86,  87,  88,
     124     89,  90,  91,  92,  93,  94,  95,   0,
     125      0,   0,   0,   0,   0,   0,   0,   0,
     126      0,   0,   0,   0,   0,   0,   0,   0,
     127      0,   0,   0,   0,   0,   0,   0,   0,
     128      0,   0,   0,   0,   0,   0,   0,   0,
     129      0,  96,  97,  98,  99, 100, 101, 102,
     130    103, 104, 105, 106, 107, 108, 109, 110,
     131      0, 111, 112, 113, 114,   0, 115, 116,
     132    117, 118, 119, 120, 121, 122,   0, 123,
     133      0, 124, 125, 126, 127, 128, 129, 130,
     134    131,   0, 132, 133,   0, 134, 135, 136,
     135    137,   0,   0,   0,   0,   0,   0,   0,
     136      0,   0,   0,   0,   0,   0,   0,   0,
     137      0, 138,   0, 139,   0,   0,   0,   0,
     138    140, 141, 142, 143,   0,   0,   0,   0,
     139      0, 144,   0,   0,   0, 145,   0,   0,
     140    146, 147, 148, 149,   0,   0,   0,   0
    785141  };
    786142
    787143  static const FT_UShort  cff_expert_encoding[256] =
    788144  {
    789     0,
    790     0,
    791     0,
    792     0,
    793     0,
    794     0,
    795     0,
    796     0,
    797     0,
    798     0,
    799     0,
    800     0,
    801     0,
    802     0,
    803     0,
    804     0,
    805     0,
    806     0,
    807     0,
    808     0,
    809     0,
    810     0,
    811     0,
    812     0,
    813     0,
    814     0,
    815     0,
    816     0,
    817     0,
    818     0,
    819     0,
    820     0,
    821     1,
    822     229,
    823     230,
    824     0,
    825     231,
    826     232,
    827     233,
    828     234,
    829     235,
    830     236,
    831     237,
    832     238,
    833     13,
    834     14,
    835     15,
    836     99,
    837     239,
    838     240,
    839     241,
    840     242,
    841     243,
    842     244,
    843     245,
    844     246,
    845     247,
    846     248,
    847     27,
    848     28,
    849     249,
    850     250,
    851     251,
    852     252,
    853     0,
    854     253,
    855     254,
    856     255,
    857     256,
    858     257,
    859     0,
    860     0,
    861     0,
    862     258,
    863     0,
    864     0,
    865     259,
    866     260,
    867     261,
    868     262,
    869     0,
    870     0,
    871     263,
    872     264,
    873     265,
    874     0,
    875     266,
    876     109,
    877     110,
    878     267,
    879     268,
    880     269,
    881     0,
    882     270,
    883     271,
    884     272,
    885     273,
    886     274,
    887     275,
    888     276,
    889     277,
    890     278,
    891     279,
    892     280,
    893     281,
    894     282,
    895     283,
    896     284,
    897     285,
    898     286,
    899     287,
    900     288,
    901     289,
    902     290,
    903     291,
    904     292,
    905     293,
    906     294,
    907     295,
    908     296,
    909     297,
    910     298,
    911     299,
    912     300,
    913     301,
    914     302,
    915     303,
    916     0,
    917     0,
    918     0,
    919     0,
    920     0,
    921     0,
    922     0,
    923     0,
    924     0,
    925     0,
    926     0,
    927     0,
    928     0,
    929     0,
    930     0,
    931     0,
    932     0,
    933     0,
    934     0,
    935     0,
    936     0,
    937     0,
    938     0,
    939     0,
    940     0,
    941     0,
    942     0,
    943     0,
    944     0,
    945     0,
    946     0,
    947     0,
    948     0,
    949     0,
    950     304,
    951     305,
    952     306,
    953     0,
    954     0,
    955     307,
    956     308,
    957     309,
    958     310,
    959     311,
    960     0,
    961     312,
    962     0,
    963     0,
    964     312,
    965     0,
    966     0,
    967     314,
    968     315,
    969     0,
    970     0,
    971     316,
    972     317,
    973     318,
    974     0,
    975     0,
    976     0,
    977     158,
    978     155,
    979     163,
    980     319,
    981     320,
    982     321,
    983     322,
    984     323,
    985     324,
    986     325,
    987     0,
    988     0,
    989     326,
    990     150,
    991     164,
    992     169,
    993     327,
    994     328,
    995     329,
    996     330,
    997     331,
    998     332,
    999     333,
    1000     334,
    1001     335,
    1002     336,
    1003     337,
    1004     338,
    1005     339,
    1006     340,
    1007     341,
    1008     342,
    1009     343,
    1010     344,
    1011     345,
    1012     346,
    1013     347,
    1014     348,
    1015     349,
    1016     350,
    1017     351,
    1018     352,
    1019     353,
    1020     354,
    1021     355,
    1022     356,
    1023     357,
    1024     358,
    1025     359,
    1026     360,
    1027     361,
    1028     362,
    1029     363,
    1030     364,
    1031     365,
    1032     366,
    1033     367,
    1034     368,
    1035     369,
    1036     370,
    1037     371,
    1038     372,
    1039     373,
    1040     374,
    1041     375,
    1042     376,
    1043     377,
    1044     378
     145      0,   0,   0,   0,   0,   0,   0,   0,
     146      0,   0,   0,   0,   0,   0,   0,   0,
     147      0,   0,   0,   0,   0,   0,   0,   0,
     148      0,   0,   0,   0,   0,   0,   0,   0,
     149      1, 229, 230,   0, 231, 232, 233, 234,
     150    235, 236, 237, 238,  13,  14,  15,  99,
     151    239, 240, 241, 242, 243, 244, 245, 246,
     152    247, 248,  27,  28, 249, 250, 251, 252,
     153      0, 253, 254, 255, 256, 257,   0,   0,
     154      0, 258,   0,   0, 259, 260, 261, 262,
     155      0,   0, 263, 264, 265,   0, 266, 109,
     156    110, 267, 268, 269,   0, 270, 271, 272,
     157    273, 274, 275, 276, 277, 278, 279, 280,
     158    281, 282, 283, 284, 285, 286, 287, 288,
     159    289, 290, 291, 292, 293, 294, 295, 296,
     160    297, 298, 299, 300, 301, 302, 303,   0,
     161      0,   0,   0,   0,   0,   0,   0,   0,
     162      0,   0,   0,   0,   0,   0,   0,   0,
     163      0,   0,   0,   0,   0,   0,   0,   0,
     164      0,   0,   0,   0,   0,   0,   0,   0,
     165      0, 304, 305, 306,   0,   0, 307, 308,
     166    309, 310, 311,   0, 312,   0,   0, 312,
     167      0,   0, 314, 315,   0,   0, 316, 317,
     168    318,   0,   0,   0, 158, 155, 163, 319,
     169    320, 321, 322, 323, 324, 325,   0,   0,
     170    326, 150, 164, 169, 327, 328, 329, 330,
     171    331, 332, 333, 334, 335, 336, 337, 338,
     172    339, 340, 341, 342, 343, 344, 345, 346,
     173    347, 348, 349, 350, 351, 352, 353, 354,
     174    355, 356, 357, 358, 359, 360, 361, 362,
     175    363, 364, 365, 366, 367, 368, 369, 370,
     176    371, 372, 373, 374, 375, 376, 377, 378
    1045177  };
    1046178#endif
     
    1064196
    1065197
     198  /* read an offset from the index's stream current position */
     199  static FT_ULong
     200  cff_index_read_offset( CFF_Index  idx,
     201                         FT_Error  *errorp )
     202  {
     203    FT_Error   error;
     204    FT_Stream  stream = idx->stream;
     205    FT_Byte    tmp[4];
     206    FT_ULong   result = 0;
     207
     208
     209    if ( !FT_STREAM_READ( tmp, idx->off_size ) )
     210    {
     211      FT_Int  nn;
     212
     213
     214      for ( nn = 0; nn < idx->off_size; nn++ )
     215        result = ( result << 8 ) | tmp[nn];
     216    }
     217
     218    *errorp = error;
     219    return result;
     220  }
     221
     222
    1066223  static FT_Error
    1067   cff_new_index( CFF_Index  idx,
    1068                  FT_Stream  stream,
    1069                  FT_Bool    load )
     224  cff_index_init( CFF_Index  idx,
     225                  FT_Stream  stream,
     226                  FT_Bool    load )
    1070227  {
    1071228    FT_Error   error;
     
    1077234
    1078235    idx->stream = stream;
     236    idx->start  = FT_STREAM_POS();
    1079237    if ( !FT_READ_USHORT( count ) &&
    1080238         count > 0                )
    1081239    {
    1082       FT_Byte*   p;
    1083       FT_Byte    offsize;
    1084       FT_ULong   data_size;
    1085       FT_ULong*  poff;
    1086       FT_Byte*   p_end;
     240      FT_Byte   offsize;
     241      FT_ULong  size;
    1087242
    1088243
     
    1098253      }
    1099254
    1100       idx->stream   = stream;
    1101255      idx->count    = count;
    1102256      idx->off_size = offsize;
    1103       data_size     = (FT_ULong)( count + 1 ) * offsize;
    1104 
    1105       if ( FT_NEW_ARRAY( idx->offsets, count + 1 ) ||
    1106            FT_FRAME_ENTER( data_size )             )
     257      size          = (FT_ULong)( count + 1 ) * offsize;
     258
     259      idx->data_offset = idx->start + 3 + size;
     260
     261      if ( FT_STREAM_SKIP( size - offsize ) )
     262        goto Exit;
     263
     264      size = cff_index_read_offset( idx, &error );
     265      if ( error )
     266        goto Exit;
     267
     268      if ( size == 0 )
     269      {
     270        error = CFF_Err_Invalid_Table;
     271        goto Exit;
     272      }
     273
     274      idx->data_size = --size;
     275
     276      if ( load )
     277      {
     278        /* load the data */
     279        if ( FT_FRAME_EXTRACT( size, idx->bytes ) )
     280          goto Exit;
     281      }
     282      else
     283      {
     284        /* skip the data */
     285        if ( FT_STREAM_SKIP( size ) )
     286          goto Exit;
     287      }
     288    }
     289
     290  Exit:
     291    if ( error )
     292      FT_FREE( idx->offsets );
     293
     294    return error;
     295  }
     296
     297
     298  static void
     299  cff_index_done( CFF_Index  idx )
     300  {
     301    if ( idx->stream )
     302    {
     303      FT_Stream  stream = idx->stream;
     304      FT_Memory  memory = stream->memory;
     305
     306
     307      if ( idx->bytes )
     308        FT_FRAME_RELEASE( idx->bytes );
     309
     310      FT_FREE( idx->offsets );
     311      FT_MEM_ZERO( idx, sizeof ( *idx ) );
     312    }
     313  }
     314
     315
     316  static FT_Error
     317  cff_index_load_offsets( CFF_Index  idx )
     318  {
     319    FT_Error   error  = 0;
     320    FT_Stream  stream = idx->stream;
     321    FT_Memory  memory = stream->memory;
     322
     323
     324    if ( idx->count > 0 && idx->offsets == NULL )
     325    {
     326      FT_Byte    offsize = idx->off_size;
     327      FT_ULong   data_size;
     328      FT_Byte*   p;
     329      FT_Byte*   p_end;
     330      FT_ULong*  poff;
     331
     332
     333      data_size = (FT_ULong)( idx->count + 1 ) * offsize;
     334
     335      if ( FT_NEW_ARRAY( idx->offsets, idx->count + 1 ) ||
     336           FT_STREAM_SEEK( idx->start + 3 )             ||
     337           FT_FRAME_ENTER( data_size )                  )
    1107338        goto Exit;
    1108339
     
    1134365
    1135366      FT_FRAME_EXIT();
    1136 
    1137       idx->data_offset = FT_STREAM_POS();
    1138       data_size        = poff[-1] - 1;
    1139 
    1140       if ( load )
    1141       {
    1142         /* load the data */
    1143         if ( FT_FRAME_EXTRACT( data_size, idx->bytes ) )
    1144           goto Exit;
    1145       }
    1146       else
    1147       {
    1148         /* skip the data */
    1149         if ( FT_STREAM_SKIP( data_size ) )
    1150           goto Exit;
    1151       }
    1152367    }
    1153368
     
    1157372
    1158373    return error;
    1159   }
    1160 
    1161 
    1162   static void
    1163   cff_done_index( CFF_Index  idx )
    1164   {
    1165     if ( idx->stream )
    1166     {
    1167       FT_Stream  stream = idx->stream;
    1168       FT_Memory  memory = stream->memory;
    1169 
    1170 
    1171       if ( idx->bytes )
    1172         FT_FRAME_RELEASE( idx->bytes );
    1173 
    1174       FT_FREE( idx->offsets );
    1175       FT_MEM_ZERO( idx, sizeof ( *idx ) );
    1176     }
    1177374  }
    1178375
     
    1191388    *table = 0;
    1192389
     390    if ( idx->offsets == NULL )
     391    {
     392      error = cff_index_load_offsets( idx );
     393      if ( error )
     394        goto Exit;
     395    }
     396
    1193397    if ( idx->count > 0 && !FT_NEW_ARRAY( t, idx->count + 1 ) )
    1194398    {
     
    1200404          offset = old_offset;
    1201405
     406        /* sanity check for invalid offset tables */
     407        else if ( offset < old_offset || offset - 1 >= idx->data_size )
     408          offset = old_offset;
     409
    1202410        t[n] = idx->bytes + offset - 1;
    1203411
     
    1207415    }
    1208416
     417  Exit:
    1209418    return error;
    1210419  }
     
    1223432    {
    1224433      /* compute start and end offsets */
    1225       FT_ULong  off1, off2 = 0;
    1226 
    1227 
    1228       off1 = idx->offsets[element];
    1229       if ( off1 )
    1230       {
    1231         do
     434      FT_Stream  stream = idx->stream;
     435      FT_ULong   off1, off2 = 0;
     436
     437
     438      /* load offsets from file or the offset table */
     439      if ( !idx->offsets )
     440      {
     441        FT_ULong  pos = element * idx->off_size;
     442
     443
     444        if ( FT_STREAM_SEEK( idx->start + 3 + pos ) )
     445          goto Exit;
     446
     447        off1 = cff_index_read_offset( idx, &error );
     448        if ( error )
     449          goto Exit;
     450
     451        if ( off1 != 0 )
    1232452        {
    1233           element++;
    1234           off2 = idx->offsets[element];
    1235 
    1236         } while ( off2 == 0 && element < idx->count );
    1237 
    1238         if ( !off2 )
    1239           off1 = 0;
     453          do
     454          {
     455            element++;
     456            off2 = cff_index_read_offset( idx, &error );
     457          }
     458          while ( off2 == 0 && element < idx->count );
     459        }
     460      }
     461      else   /* use offsets table */
     462      {
     463        off1 = idx->offsets[element];
     464        if ( off1 )
     465        {
     466          do
     467          {
     468            element++;
     469            off2 = idx->offsets[element];
     470
     471          } while ( off2 == 0 && element < idx->count );
     472        }
    1240473      }
    1241474
     
    1253486        {
    1254487          /* this index is still on disk/file, access it through a frame */
    1255           FT_Stream  stream = idx->stream;
    1256 
    1257 
    1258488          if ( FT_STREAM_SEEK( idx->data_offset + off1 - 1 ) ||
    1259489               FT_FRAME_EXTRACT( off2 - off1, *pbytes )      )
     
    1523753      charset->cids[charset->sids[i]] = (FT_UShort)i;
    1524754
    1525     charset->max_cid = max_cid;
     755    charset->max_cid    = max_cid;
     756    charset->num_glyphs = num_glyphs;
    1526757
    1527758  Exit:
    1528759    return error;
     760  }
     761
     762
     763  FT_LOCAL_DEF( FT_UInt )
     764  cff_charset_cid_to_gindex( CFF_Charset  charset,
     765                             FT_UInt      cid )
     766  {
     767    FT_UInt  result = 0;
     768
     769
     770    if ( cid < charset->max_cid )
     771      result = charset->cids[cid];
     772
     773    return result;
    1529774  }
    1530775
     
    19591204
    19601205          if ( sid )
    1961             gid = charset->cids[sid];
     1206            gid = cff_charset_cid_to_gindex( charset, sid );
    19621207
    19631208          if ( gid != 0 )
     
    20791324        goto Exit;
    20801325
    2081       error = cff_new_index( &font->local_subrs_index, stream, 1 );
     1326      error = cff_index_init( &font->local_subrs_index, stream, 1 );
    20821327      if ( error )
    20831328        goto Exit;
     
    21011346    if ( subfont )
    21021347    {
    2103       cff_done_index( &subfont->local_subrs_index );
     1348      cff_index_done( &subfont->local_subrs_index );
    21041349      FT_FREE( subfont->local_subrs );
    21051350    }
     
    21571402
    21581403    /* read the name, top dict, string and global subrs index */
    2159     if ( FT_SET_ERROR( cff_new_index( &font->name_index,         stream, 0 )) ||
    2160          FT_SET_ERROR( cff_new_index( &font->font_dict_index,    stream, 0 )) ||
    2161          FT_SET_ERROR( cff_new_index( &font->string_index,       stream, 0 )) ||
    2162          FT_SET_ERROR( cff_new_index( &font->global_subrs_index, stream, 1 )) )
     1404    if ( FT_SET_ERROR( cff_index_init( &font->name_index,
     1405                                       stream, 0 ) )              ||
     1406         FT_SET_ERROR( cff_index_init( &font->font_dict_index,
     1407                                       stream, 0 ) )              ||
     1408         FT_SET_ERROR( cff_index_init( &font->string_index,
     1409                                       stream, 0 ) )              ||
     1410         FT_SET_ERROR( cff_index_init( &font->global_subrs_index,
     1411                                       stream, 1 ) )              )
    21631412      goto Exit;
    21641413
     
    21881437      goto Exit;
    21891438
    2190     error = cff_new_index( &font->charstrings_index, stream, 0 );
     1439    error = cff_index_init( &font->charstrings_index, stream, 0 );
    21911440    if ( error )
    21921441      goto Exit;
     
    22051454        goto Exit;
    22061455
    2207       error = cff_new_index( &fd_index, stream, 0 );
     1456      error = cff_index_init( &fd_index, stream, 0 );
    22081457      if ( error )
    22091458        goto Exit;
     
    22411490
    22421491    Fail_CID:
    2243       cff_done_index( &fd_index );
     1492      cff_index_done( &fd_index );
    22441493
    22451494      if ( error )
     
    23111560
    23121561
    2313     cff_done_index( &font->global_subrs_index );
    2314     cff_done_index( &font->string_index );
    2315     cff_done_index( &font->font_dict_index );
    2316     cff_done_index( &font->name_index );
    2317     cff_done_index( &font->charstrings_index );
     1562    cff_index_done( &font->global_subrs_index );
     1563    cff_index_done( &font->string_index );
     1564    cff_index_done( &font->font_dict_index );
     1565    cff_index_done( &font->name_index );
     1566    cff_index_done( &font->charstrings_index );
    23181567
    23191568    /* release font dictionaries, but only if working with */
     
    23351584    CFF_Done_FD_Select( &font->fd_select, font->stream );
    23361585
     1586    if (font->font_info != NULL)
     1587    {
     1588      FT_FREE( font->font_info->version );
     1589      FT_FREE( font->font_info->notice );
     1590      FT_FREE( font->font_info->full_name );
     1591      FT_FREE( font->font_info->family_name );
     1592      FT_FREE( font->font_info->weight );
     1593      FT_FREE( font->font_info );
     1594    }
     1595
    23371596    FT_FREE( font->global_subrs );
    23381597    FT_FREE( font->font_name );
Note: See TracChangeset for help on using the changeset viewer.