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