130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/* 230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Copyright 2011 Google Inc. All Rights Reserved. 330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Licensed under the Apache License, Version 2.0 (the "License"); 530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * you may not use this file except in compliance with the License. 630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * You may obtain a copy of the License at 730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * http://www.apache.org/licenses/LICENSE-2.0 930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 1030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Unless required by applicable law or agreed to in writing, software 1130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * distributed under the License is distributed on an "AS IS" BASIS, 1230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * See the License for the specific language governing permissions and 1430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * limitations under the License. 1530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun */ 1630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 1730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifndef SFNTLY_CPP_SRC_SFNTLY_TAG_H_ 1830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#define SFNTLY_CPP_SRC_SFNTLY_TAG_H_ 1930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <cstddef> 2130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/port/type.h" 2330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunnamespace sfntly { 2530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// Font identification tags used for tables, features, etc. 2730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// Tag names are consistent with the OpenType and sfnt specs. 2830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunstruct Tag { 2930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t ttcf; 3030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Table Type Tags 3230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // required tables 3330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t cmap; 3430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t head; 3530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t hhea; 3630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t hmtx; 3730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t maxp; 3830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t name; 3930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t OS_2; 4030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t post; 4130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 4230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // TrueType outline tables 4330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t cvt; 4430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t fpgm; 4530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t glyf; 4630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t loca; 4730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t prep; 4830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 4930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // PostScript outline tables 5030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t CFF; 5130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t VORG; 5230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 5330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // opentype bitmap glyph outlines 5430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t EBDT; 5530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t EBLC; 5630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t EBSC; 5730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 5830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // advanced typographic features 5930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t BASE; 6030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t GDEF; 6130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t GPOS; 6230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t GSUB; 6330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t JSTF; 6430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 6530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // other 6630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t DSIG; 6730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t gasp; 6830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t hdmx; 6930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t kern; 7030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t LTSH; 7130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t PCLT; 7230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t VDMX; 7330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t vhea; 7430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t vmtx; 7530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 7630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // AAT tables 7730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t bsln; 7830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t feat; 7930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t lcar; 8030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t morx; 8130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t opbd; 8230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t prop; 8330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 8430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Graphite tables 8530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t Feat; 8630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t Glat; 8730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t Gloc; 8830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t Sile; 8930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t Silf; 9030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 9130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // truetype bitmap font tables 9230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t bhed; 9330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t bdat; 9430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t bloc; 9530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}; 9630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 9730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// Create integer tag value for human readable tag name. 9830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Guruninline int32_t GenerateTag(int32_t a, int32_t b, int32_t c, int32_t d) { 9930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return (a << 24) | (b << 16) | (c << 8) | d; 10030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 10130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 10230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// Translate tag to human readable string. 10330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// The Caller must delete[] the returned value. 10430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Guruninline char* TagToString(int32_t tag) { 10530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun char *name = new char[5]; 10630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun name[0] = static_cast<char>((tag & 0xff000000) >> 24); 10730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun name[1] = static_cast<char>((tag & 0x00ff0000) >> 16); 10830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun name[2] = static_cast<char>((tag & 0x0000ff00) >> 8); 10930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun name[3] = static_cast<char>(tag & 0x000000ff); 11030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun name[4] = 0; 11130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return name; 11230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 11330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 11430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// Note: For Java, these two orderings are in Font class. Moved here to avoid 11530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// VC++ bug of not populating correct values. 11630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunextern const int32_t CFF_TABLE_ORDERING[]; 11730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunextern const size_t CFF_TABLE_ORDERING_SIZE; 11830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunextern const int32_t TRUE_TYPE_TABLE_ORDERING[]; 11930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunextern const size_t TRUE_TYPE_TABLE_ORDERING_SIZE; 12030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 12130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} // namespace sfntly 12230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 12330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif // SFNTLY_CPP_SRC_SFNTLY_TAG_H_ 124