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