tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TtfTypes.h (10847B)


      1 /*  GRAPHITE2 LICENSING
      2 
      3    Copyright 2010, SIL International
      4    All rights reserved.
      5 
      6    This library is free software; you can redistribute it and/or modify
      7    it under the terms of the GNU Lesser General Public License as published
      8    by the Free Software Foundation; either version 2.1 of License, or
      9    (at your option) any later version.
     10 
     11    This program is distributed in the hope that it will be useful,
     12    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     14    Lesser General Public License for more details.
     15 
     16    You should also have received a copy of the GNU Lesser General Public
     17    License along with this library in the file named "LICENSE".
     18    If not, write to the Free Software Foundation, 51 Franklin Street,
     19    Suite 500, Boston, MA 02110-1335, USA or visit their web page on the
     20    internet at http://www.fsf.org/licenses/lgpl.html.
     21 
     22 Alternatively, the contents of this file may be used under the terms of the
     23 Mozilla Public License (http://mozilla.org/MPL) or the GNU General Public
     24 License, as published by the Free Software Foundation, either version 2
     25 of the License or (at your option) any later version.
     26 */
     27 #pragma once
     28 /*--------------------------------------------------------------------*//*:Ignore this sentence.
     29 
     30 File: TtfTypes.h
     31 Responsibility: Tim Eves
     32 Last reviewed: Not yet.
     33 
     34 Description:
     35 Provides types required to represent the TTF basic types.
     36 -------------------------------------------------------------------------------*//*:End Ignore*/
     37 
     38 
     39 //**********************************************************************************************
     40 //  Include files
     41 //**********************************************************************************************
     42 namespace graphite2
     43 {
     44 namespace TtfUtil
     45 {
     46 //**********************************************************************************************
     47 //  Forward declarations
     48 //**********************************************************************************************
     49 
     50 
     51 //**********************************************************************************************
     52 //  Type declarations
     53 //**********************************************************************************************
     54 typedef unsigned char   uint8;
     55 typedef uint8           byte;
     56 typedef signed char     int8;
     57 typedef unsigned short  uint16;
     58 typedef short           int16;
     59 typedef unsigned int    uint32;
     60 typedef int             int32;
     61 
     62 typedef int16   short_frac;
     63 typedef int32   fixed;
     64 typedef int16   fword;
     65 typedef uint16  ufword;
     66 typedef int16   f2dot14;
     67 typedef uint32  long_date_time[2];
     68 
     69 //**********************************************************************************************
     70 //  Constants and enum types
     71 //**********************************************************************************************/
     72 enum
     73 {
     74    OneFix = 1<<16
     75 };
     76 
     77 //**********************************************************************************************
     78 //  Table declarations
     79 //**********************************************************************************************
     80 namespace Sfnt
     81 {
     82 #pragma pack(push,1) // We need this or the structure members aren't aligned
     83                        // correctly.  Fortunately this form of pragma is supposed
     84                        // to be recognised by VS C++ too (at least according to
     85                        // MSDN).
     86 
     87    struct OffsetSubTable
     88    {
     89        uint32  scaler_type;
     90        uint16  num_tables,
     91            search_range,
     92            entry_selector,
     93            range_shift;
     94        struct Entry
     95        {
     96            uint32  tag,
     97                checksum,
     98                offset,
     99                length;
    100        } table_directory[1];
    101 
    102        enum ScalerType
    103        {
    104            TrueTypeMac = 0x74727565U,
    105            TrueTypeWin = 0x00010000U,
    106            Type1   = 0x74797031U
    107        };
    108    };
    109 
    110 
    111 
    112 
    113    struct CharacterCodeMap
    114    {
    115        uint16  version,
    116            num_subtables;
    117        struct
    118        {
    119            uint16  platform_id,
    120                platform_specific_id;
    121            uint32  offset;
    122        } encoding[1];
    123    };
    124 
    125    struct CmapSubTable
    126    {
    127        uint16  format,
    128            length,
    129            language;
    130    };
    131 
    132    struct CmapSubTableFormat4 : CmapSubTable
    133    {
    134        uint16  seg_count_x2,
    135            search_range,
    136            entry_selector,
    137            range_shift,
    138            end_code[1];
    139        // There are arrarys after this which need their
    140        // start positions calculated since end_code is
    141        // seg_count uint16s long.
    142    };
    143 
    144    struct CmapSubTableFormat12
    145    {
    146        fixed   format;
    147        uint32  length,
    148            language,
    149            num_groups;
    150        struct
    151        {
    152            uint32  start_char_code,
    153                end_char_code,
    154                start_glyph_id;
    155        } group[1];
    156    };
    157 
    158 
    159 
    160    struct FontHeader
    161    {
    162        fixed   version,
    163            font_revision;
    164        uint32  check_sum_adjustment,
    165            magic_number;
    166        uint16  flags,
    167            units_per_em;
    168        long_date_time  created,
    169                modified;
    170        fword   x_min,
    171            y_min,
    172            x_max,
    173            y_max;
    174        uint16  mac_style,
    175            lowest_rec_ppem;
    176        int16   font_direction_hint,
    177            index_to_loc_format,
    178            glyph_data_format;
    179        enum
    180        {
    181            MagicNumber = 0x5F0F3CF5,
    182            GlypDataFormat = 0
    183        };
    184        enum {ShortIndexLocFormat, LongIndexLocFormat};
    185    };
    186 
    187 
    188 
    189 
    190    struct PostScriptGlyphName
    191    {
    192        fixed   format,
    193            italic_angle;
    194        fword   underline_position,
    195            underline_thickness;
    196        uint32  is_fixed_pitch,
    197            min_mem_type42,
    198            max_mem_type42,
    199            min_mem_type1,
    200            max_mem_type1;
    201        enum
    202        {
    203            Format1  = 0x10000,
    204            Format2  = 0x20000,
    205            Format25 = 0x28000,
    206            Format3  = 0x30000,
    207            Format4  = 0x40000
    208        };
    209    };
    210 
    211    struct PostScriptGlyphName2 : PostScriptGlyphName
    212    {
    213        uint16  number_of_glyphs,
    214            glyph_name_index[1];
    215    };
    216 
    217    struct PostScriptGlyphName25 : PostScriptGlyphName
    218    {
    219        uint16  number_of_glyphs;
    220        int8    offset[1];
    221    };
    222 
    223    struct PostScriptGlyphName3 : PostScriptGlyphName {};
    224 
    225    struct PostScriptGlyphName4 : PostScriptGlyphName
    226    {
    227        uint16 glyph_to_char_map[1];
    228    };
    229 
    230 
    231    struct HorizontalHeader
    232    {
    233        fixed   version;
    234        fword   ascent,
    235            descent,
    236            line_gap;
    237        ufword  advance_width_max;
    238        fword   min_left_side_bearing,
    239            max_left_side_bearing,
    240            x_max_element;
    241        int16   caret_slope_rise,
    242            caret_slope_run;
    243        fword   caret_offset;
    244        int16   reserved[4],
    245            metric_data_format;
    246        uint16  num_long_hor_metrics;
    247    };
    248 
    249    struct MaximumProfile
    250    {
    251        fixed   version;
    252        uint16  num_glyphs,
    253            max_points,
    254            max_contours,
    255            max_component_points,
    256            max_component_contours,
    257            max_zones,
    258            max_twilight_points,
    259            max_storage,
    260            max_function_defs,
    261            max_instruction_defs,
    262            max_stack_elements,
    263            max_size_of_instructions,
    264            max_component_elements,
    265            max_component_depth;
    266    };
    267 
    268 
    269    typedef byte    Panose[10];
    270 
    271    struct Compatibility0
    272    {
    273        uint16  version;
    274        int16   x_avg_char_width;
    275        uint16  weight_class,
    276            width_class;
    277        int16   fs_type,
    278            y_subscript_x_size,
    279            y_subscript_y_size,
    280            y_subscript_x_offset,
    281            y_subscript_y_offset,
    282            y_superscript_x_size,
    283            y_superscript_y_size,
    284            y_superscript_x_offset,
    285            y_superscript_y_offset,
    286            y_strikeout_size,
    287            y_strikeout_position,
    288            family_class;
    289        Panose  panose;
    290        uint32  unicode_range[4];
    291        int8    ach_vend_id[4];
    292        uint16  fs_selection,
    293            fs_first_char_index,
    294            fs_last_char_index, // Acording to Apple's spec this is where v0 should end
    295            typo_ascender,
    296            typo_descender,
    297            type_linegap,
    298            win_ascent,
    299            win_descent;
    300 
    301        enum
    302        {
    303            Italic    =0x01,
    304            Underscore=0x02,
    305            Negative  =0x04,
    306            Outlined  =0x08,
    307            StrikeOut =0x10,
    308            Bold      =0x20
    309        };
    310    };
    311 
    312    struct Compatibility1 : Compatibility0
    313    {
    314        uint32  codepage_range[2];
    315    };
    316 
    317    struct Compatibility2 : Compatibility1
    318    {
    319            int16   x_height,
    320                cap_height;
    321            uint16  default_char,
    322                break_char,
    323                max_context;
    324    };
    325 
    326    struct Compatibility3 : Compatibility2 {};
    327 
    328    typedef Compatibility3  Compatibility;
    329 
    330 
    331    struct NameRecord
    332    {
    333        uint16  platform_id,
    334            platform_specific_id,
    335            language_id,
    336            name_id,
    337            length,
    338            offset;
    339        enum    {Unicode, Mactintosh, Reserved, Microsoft};
    340        enum
    341        {
    342            Copyright, Family, Subfamily, UniqueSubfamily,
    343            Fullname, Version, PostScript
    344        };
    345    };
    346 
    347    struct LangTagRecord
    348    {
    349        uint16 length,
    350            offset;
    351    };
    352 
    353    struct FontNames
    354    {
    355        uint16  format,
    356            count,
    357            string_offset;
    358        NameRecord name_record[1];
    359    };
    360 
    361 
    362    struct HorizontalMetric
    363    {
    364        uint16  advance_width;
    365        int16   left_side_bearing;
    366    };
    367 
    368 
    369    struct Glyph
    370    {
    371        int16   number_of_contours;
    372        fword   x_min,
    373            y_min,
    374            x_max,
    375            y_max;
    376    };
    377 
    378    struct SimpleGlyph : Glyph
    379    {
    380        uint16  end_pts_of_contours[1];
    381        enum
    382        {
    383            OnCurve = 0x01,
    384            XShort  = 0x02,
    385            YShort  = 0x04,
    386            Repeat  = 0x08,
    387            XIsSame = 0x10,
    388            XIsPos  = 0x10,
    389            YIsSame = 0x20,
    390            YIsPos  = 0x20
    391        };
    392    };
    393 
    394    struct CompoundGlyph : Glyph
    395    {
    396        uint16  flags,
    397            glyph_index;
    398        enum
    399        {
    400            Arg1Arg2Words   = 0x01,
    401            ArgsAreXYValues = 0x02,
    402            RoundXYToGrid   = 0x04,
    403            HaveScale       = 0x08,
    404            MoreComponents  = 0x20,
    405            HaveXAndYScale  = 0x40,
    406            HaveTwoByTwo    = 0x80,
    407            HaveInstructions = 0x100,
    408            UseMyMetrics    = 0x200,
    409            OverlapCompund  = 0x400,
    410            ScaledOffset    = 0x800,
    411            UnscaledOffset  = 0x1000
    412        };
    413    };
    414 
    415 #pragma pack(pop)
    416 } // end of namespace Sfnt
    417 
    418 } // end of namespace TtfUtil
    419 } // end of namespace graphite2