Home | History | Annotate | Download | only in layout
      1 /*
      2  ****************************************************************************** *
      3  *
      4  *   Copyright (C) 1999-2003, International Business Machines
      5  *   Corporation and others.  All Rights Reserved.
      6  *
      7  ****************************************************************************** *
      8  *   file name:  cmaps.h
      9  *
     10  *   created on: ??/??/2001
     11  *   created by: Eric R. Mader
     12  */
     13 
     14 #ifndef __CMAPS_H
     15 #define __CMAPS_H
     16 
     17 #include "layout/LETypes.h"
     18 #include "sfnt.h"
     19 
     20 class CMAPMapper
     21 {
     22 public:
     23     virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const = 0;
     24 
     25     virtual ~CMAPMapper();
     26 
     27     static CMAPMapper *createUnicodeMapper(const CMAPTable *cmap);
     28 
     29 protected:
     30     CMAPMapper(const CMAPTable *cmap);
     31 
     32     CMAPMapper() {};
     33 
     34 private:
     35     const CMAPTable *fcmap;
     36 };
     37 
     38 class CMAPFormat4Mapper : public CMAPMapper
     39 {
     40 public:
     41     CMAPFormat4Mapper(const CMAPTable *cmap, const CMAPFormat4Encoding *header);
     42 
     43     virtual ~CMAPFormat4Mapper();
     44 
     45     virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const;
     46 
     47 protected:
     48     CMAPFormat4Mapper() {};
     49 
     50 private:
     51     le_uint16        fEntrySelector;
     52     le_uint16        fRangeShift;
     53     const le_uint16 *fEndCodes;
     54     const le_uint16 *fStartCodes;
     55     const le_uint16 *fIdDelta;
     56     const le_uint16 *fIdRangeOffset;
     57 };
     58 
     59 class CMAPGroupMapper : public CMAPMapper
     60 {
     61 public:
     62     CMAPGroupMapper(const CMAPTable *cmap, const CMAPGroup *groups, le_uint32 nGroups);
     63 
     64     virtual ~CMAPGroupMapper();
     65 
     66     virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const;
     67 
     68 protected:
     69     CMAPGroupMapper() {};
     70 
     71 private:
     72     le_int32 fPower;
     73     le_int32 fRangeOffset;
     74     const CMAPGroup *fGroups;
     75 };
     76 
     77 inline CMAPMapper::CMAPMapper(const CMAPTable *cmap)
     78     : fcmap(cmap)
     79 {
     80     // nothing else to do
     81 }
     82 
     83 inline CMAPMapper::~CMAPMapper()
     84 {
     85     LE_DELETE_ARRAY(fcmap);
     86 }
     87 
     88 #endif
     89 
     90