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#include "sfntly/tag.h" 1830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/port/endian.h" 1930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// Use a macro instead of GenerateTag() because gcc 4.4.3 creates static 2130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// initializers in that case. 2230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#define TAG(a, b, c, d) ((a << 24) | (b << 16) | (c << 8) | d); 2330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunnamespace sfntly { 2530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::ttcf = TAG('t', 't', 'c', 'f'); 2730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::cmap = TAG('c', 'm', 'a', 'p'); 2830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::head = TAG('h', 'e', 'a', 'd'); 2930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::hhea = TAG('h', 'h', 'e', 'a'); 3030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::hmtx = TAG('h', 'm', 't', 'x'); 3130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::maxp = TAG('m', 'a', 'x', 'p'); 3230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::name = TAG('n', 'a', 'm', 'e'); 3330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::OS_2 = TAG('O', 'S', '/', '2'); 3430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::post = TAG('p', 'o', 's', 't'); 3530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::cvt = TAG('c', 'v', 't', ' '); 3630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::fpgm = TAG('f', 'p', 'g', 'm'); 3730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::glyf = TAG('g', 'l', 'y', 'f'); 3830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::loca = TAG('l', 'o', 'c', 'a'); 3930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::prep = TAG('p', 'r', 'e', 'p'); 4030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::CFF = TAG('C', 'F', 'F', ' '); 4130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::VORG = TAG('V', 'O', 'R', 'G'); 4230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::EBDT = TAG('E', 'B', 'D', 'T'); 4330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::EBLC = TAG('E', 'B', 'L', 'C'); 4430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::EBSC = TAG('E', 'B', 'S', 'C'); 4530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::BASE = TAG('B', 'A', 'S', 'E'); 4630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::GDEF = TAG('G', 'D', 'E', 'F'); 4730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::GPOS = TAG('G', 'P', 'O', 'S'); 4830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::GSUB = TAG('G', 'S', 'U', 'B'); 4930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::JSTF = TAG('J', 'S', 'T', 'F'); 5030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::DSIG = TAG('D', 'S', 'I', 'G'); 5130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::gasp = TAG('g', 'a', 's', 'p'); 5230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::hdmx = TAG('h', 'd', 'm', 'x'); 5330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::kern = TAG('k', 'e', 'r', 'n'); 5430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::LTSH = TAG('L', 'T', 'S', 'H'); 5530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::PCLT = TAG('P', 'C', 'L', 'T'); 5630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::VDMX = TAG('V', 'D', 'M', 'X'); 5730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::vhea = TAG('v', 'h', 'e', 'a'); 5830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::vmtx = TAG('v', 'm', 't', 'x'); 5930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::bsln = TAG('b', 's', 'l', 'n'); 6030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::feat = TAG('f', 'e', 'a', 't'); 6130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::lcar = TAG('l', 'c', 'a', 'r'); 6230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::morx = TAG('m', 'o', 'r', 'x'); 6330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::opbd = TAG('o', 'p', 'b', 'd'); 6430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::prop = TAG('p', 'r', 'o', 'p'); 6530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::Feat = TAG('F', 'e', 'a', 't'); 6630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::Glat = TAG('G', 'l', 'a', 't'); 6730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::Gloc = TAG('G', 'l', 'o', 'c'); 6830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::Sile = TAG('S', 'i', 'l', 'e'); 6930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::Silf = TAG('S', 'i', 'l', 'f'); 7030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::bhed = TAG('b', 'h', 'e', 'd'); 7130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::bdat = TAG('b', 'd', 'a', 't'); 7230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t Tag::bloc = TAG('b', 'l', 'o', 'c'); 7330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 7430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t CFF_TABLE_ORDERING[] = { 7530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::head, 7630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::hhea, 7730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::maxp, 7830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::OS_2, 7930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::name, 8030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::cmap, 8130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::post, 8230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::CFF }; 8330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst size_t CFF_TABLE_ORDERING_SIZE = 8430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun sizeof(CFF_TABLE_ORDERING) / sizeof(int32_t); 8530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 8630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t TRUE_TYPE_TABLE_ORDERING[] = { 8730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::head, 8830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::hhea, 8930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::maxp, 9030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::OS_2, 9130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::hmtx, 9230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::LTSH, 9330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::VDMX, 9430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::hdmx, 9530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::cmap, 9630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::fpgm, 9730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::prep, 9830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::cvt, 9930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::loca, 10030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::glyf, 10130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::kern, 10230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::name, 10330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::post, 10430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::gasp, 10530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::PCLT, 10630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Tag::DSIG }; 10730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst size_t TRUE_TYPE_TABLE_ORDERING_SIZE = 10830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun sizeof(TRUE_TYPE_TABLE_ORDERING) / sizeof(int32_t); 10930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 11030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} // namespace sfntly 111