Error.h 7.4 KB

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