1 /* GRAPHITE2 LICENSING 2 3 Copyright 2013, 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 29 // numbers are explicitly assigned for future proofing 30 31 namespace graphite2 32 { 33 34 class Error 35 { 36 public: Error()37 Error() : _e(0) {}; 38 operator bool() { return (_e != 0); } error()39 int error() { return _e; } error(int e)40 void error(int e) { _e = e; } test(bool pr,int err)41 bool test(bool pr, int err) { return (_e = int(pr) * err); } 42 43 private: 44 int _e; 45 }; 46 47 enum errcontext { 48 EC_READGLYPHS = 1, // while reading glyphs 49 EC_READSILF = 2, // in Silf table 50 EC_ASILF = 3, // in Silf %d 51 EC_APASS = 4, // in Silf %d, pass %d 52 EC_PASSCCODE = 5, // in pass constraint code for Silf %d, pass %d 53 EC_ARULE = 6, // in Silf %d, pass %d, rule %d 54 EC_ASTARTS = 7, // in Silf %d, pass %d, start state %d 55 EC_ATRANS = 8, // in Silf %d, pass %d, fsm state %d 56 EC_ARULEMAP = 9 // in Silf %d, pass %d, state %d 57 }; 58 59 enum errors { 60 E_OUTOFMEM = 1, // Out of memory 61 E_NOGLYPHS = 2, // There are no glyphs in the font 62 E_BADUPEM = 3, // The units per em for the font is bad (0) 63 E_BADCMAP = 4, // The font does not contain any useful cmaps 64 E_NOSILF = 5, // Missing Silf table 65 E_TOOOLD = 6, // Silf table version is too old 66 E_BADSIZE = 7, // context object has the wrong structural size 67 // Silf Subtable Errors take a Silf subtable number * 256 in the context 68 E_BADMAXGLYPH = 8, // Silf max glyph id is too high 69 E_BADNUMJUSTS = 9, // Number of Silf justification blocks is too high 70 E_BADENDJUSTS = 10, // Silf justification blocks take too much of the Silf table space 71 E_BADCRITFEATURES = 11, // Critical features section in a Silf table is too big 72 E_BADSCRIPTTAGS = 12, // Silf script tags area is too big 73 E_BADAPSEUDO = 13, // The pseudo glyph attribute number is too high 74 E_BADABREAK = 14, // The linebreak glyph attribute number is too high 75 E_BADABIDI = 15, // The bidi glyph attribute number is too high 76 E_BADAMIRROR = 16, // The mirrored glyph attribute number is too high 77 E_BADNUMPASSES = 17, // The number of passes is > 128 78 E_BADPASSESSTART = 18, // The Silf table is too small to hold any passes 79 E_BADPASSBOUND = 19, // The positioning pass number is too low or the substitution pass number is too high 80 E_BADPPASS = 20, // The positioning pass number is too high 81 E_BADSPASS = 21, // the substitution pass number is too high 82 E_BADJPASSBOUND = 22, // the justification pass must be higher than the positioning pass 83 E_BADJPASS = 23, // the justification pass is too high 84 E_BADALIG = 24, // the number of initial ligature component glyph attributes is too high 85 E_BADBPASS = 25, // the bidi pass number is specified and is either too high or too low 86 E_BADNUMPSEUDO = 26, // The number of pseudo glyphs is too high 87 E_BADCLASSSIZE = 27, // The size of the classes block is bad 88 E_TOOMANYLINEAR = 28, // The number of linear classes in the silf table is too high 89 E_CLASSESTOOBIG = 29, // There are too many classes for the space allocated in the Silf subtable 90 E_MISALIGNEDCLASSES = 30, // The class offsets in the class table don't line up with the number of classes 91 E_HIGHCLASSOFFSET = 31, // The class offsets point out of the class table 92 E_BADCLASSOFFSET = 32, // A class offset is less than one following it 93 E_BADCLASSLOOKUPINFO = 33, // The search header info for a non-linear class has wrong values in it 94 // Pass subtable errors. Context has pass number * 65536 95 E_BADPASSSTART = 34, // The start offset for a particular pass is bad 96 E_BADPASSEND = 35, // The end offset for a particular pass is bad 97 E_BADPASSLENGTH = 36, // The length of the pass is too small 98 E_BADNUMTRANS = 37, // The number of transition states in the fsm is bad 99 E_BADNUMSUCCESS = 38, // The number of success states in the fsm is bad 100 E_BADNUMSTATES = 39, // The number of states in the fsm is bad 101 E_NORANGES = 40, // There are no columns in the fsm 102 E_BADRULEMAPLEN = 41, // The size of the success state to rule mapping is bad 103 E_BADCTXTLENBOUNDS = 42, // The precontext maximum is greater than its minimum 104 E_BADCTXTLENS = 43, // The lists of rule lengths or pre context lengths is bad 105 E_BADPASSCCODEPTR = 44, // The pass constraint code position does not align with where the forward reference says it should be 106 E_BADRULECCODEPTR = 45, // The rule constraint code position does not align with where the forward reference says it should be 107 E_BADCCODELEN = 46, // Bad rule/pass constraint code length 108 E_BADACTIONCODEPTR = 47, // The action code position does not align with where the forward reference says it should be 109 E_MUTABLECCODE = 48, // Constraint code edits slots. It shouldn't. 110 E_BADSTATE = 49, // Bad state transition referencing an illegal state 111 E_BADRULEMAPPING = 50, // The structure of the rule mapping is bad 112 E_BADRANGE = 51, // Bad column range structure including a glyph in more than one column 113 E_BADRULENUM = 52, // A reference to a rule is out of range (too high) 114 E_BADACOLLISION = 53, // Bad Silf table collision attribute number (too high) 115 E_BADEMPTYPASS = 54, // Can't have empty passes (no rules) except for collision passes 116 E_BADSILFVERSION = 55, // The Silf table has a bad version (probably too high) 117 E_BADCOLLISIONPASS = 56, // Collision flags set on a non positioning pass 118 E_BADNUMCOLUMNS = 57, // Arbitrarily limit number of columns in fsm 119 // Code errors 120 E_CODEFAILURE = 60, // Base code error. The following subcodes must align with Machine::Code::status_t in Code.h 121 E_CODEALLOC = 61, // Out of memory 122 E_INVALIDOPCODE = 62, // Invalid op code 123 E_UNIMPOPCODE = 63, // Unimplemented op code encountered 124 E_OUTOFRANGECODE = 64, // Code argument out of range 125 E_BADJUMPCODE = 65, // Code jumps past end of op codes 126 E_CODEBADARGS = 66, // Code arguments exhausted 127 E_CODENORETURN = 67, // Missing return type op code at end of code 128 E_CODENESTEDCTXT = 68, // Nested context encountered in code 129 // Compression errors 130 E_BADSCHEME = 69, 131 E_SHRINKERFAILED = 70, 132 }; 133 134 } 135