summaryrefslogtreecommitdiff
path: root/Build/source/libs/icu/icu-4.6/layout/ThaiShaping.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/icu/icu-4.6/layout/ThaiShaping.h')
-rw-r--r--Build/source/libs/icu/icu-4.6/layout/ThaiShaping.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/Build/source/libs/icu/icu-4.6/layout/ThaiShaping.h b/Build/source/libs/icu/icu-4.6/layout/ThaiShaping.h
new file mode 100644
index 00000000000..4c6d6a51f4f
--- /dev/null
+++ b/Build/source/libs/icu/icu-4.6/layout/ThaiShaping.h
@@ -0,0 +1,108 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#ifndef __THAISHAPING_H
+#define __THAISHAPING_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+class ThaiShaping /* not : public UObject because all methods are static */ {
+public:
+
+ enum {
+ // Character classes
+ NON = 0,
+ CON = 1,
+ COA = 2,
+ COD = 3,
+ LVO = 4,
+ FV1 = 5,
+ FV2 = 6,
+ FV3 = 7,
+ BV1 = 8,
+ BV2 = 9,
+ BDI = 10,
+ TON = 11,
+ AD1 = 12,
+ AD2 = 13,
+ AD3 = 14,
+ NIK = 15,
+ AV1 = 16,
+ AV2 = 17,
+ AV3 = 18,
+ classCount = 19,
+
+ // State Transition actions
+ tA = 0,
+ tC = 1,
+ tD = 2,
+ tE = 3,
+ tF = 4,
+ tG = 5,
+ tH = 6,
+ tR = 7,
+ tS = 8
+ };
+
+ struct StateTransition
+ {
+ le_uint8 nextState;
+ le_uint8 action;
+
+ le_uint8 getNextState() { return nextState; };
+ le_uint8 getAction() { return action; };
+ };
+
+ static le_int32 compose(const LEUnicode *input, le_int32 offset, le_int32 charCount, le_uint8 glyphSet,
+ LEUnicode errorChar, LEUnicode *output, LEGlyphStorage &glyphStorage);
+
+private:
+ // forbid instantiation
+ ThaiShaping();
+
+ static const le_uint8 classTable[];
+ static const StateTransition thaiStateTable[][classCount];
+
+ inline static StateTransition getTransition(le_uint8 state, le_uint8 currClass);
+
+ static le_uint8 doTransition(StateTransition transition, LEUnicode currChar, le_int32 inputIndex, le_uint8 glyphSet,
+ LEUnicode errorChar, LEUnicode *outputBuffer, LEGlyphStorage &glyphStorage, le_int32 &outputIndex);
+
+ static le_uint8 getNextState(LEUnicode ch, le_uint8 state, le_int32 inputIndex, le_uint8 glyphSet, LEUnicode errorChar,
+ le_uint8 &charClass, LEUnicode *output, LEGlyphStorage &glyphStorage, le_int32 &outputIndex);
+
+ static le_bool isLegalHere(LEUnicode ch, le_uint8 prevState);
+ static le_uint8 getCharClass(LEUnicode ch);
+
+ static LEUnicode noDescenderCOD(LEUnicode cod, le_uint8 glyphSet);
+ static LEUnicode leftAboveVowel(LEUnicode vowel, le_uint8 glyphSet);
+ static LEUnicode lowerBelowVowel(LEUnicode vowel, le_uint8 glyphSet);
+ static LEUnicode lowerRightTone(LEUnicode tone, le_uint8 glyphSet);
+ static LEUnicode lowerLeftTone(LEUnicode tone, le_uint8 glyphSet);
+ static LEUnicode upperLeftTone(LEUnicode tone, le_uint8 glyphSet);
+
+};
+
+inline ThaiShaping::StateTransition ThaiShaping::getTransition(le_uint8 state, le_uint8 currClass)
+{
+ return thaiStateTable[state][currClass];
+}
+
+U_NAMESPACE_END
+#endif
+
+