35 #ifndef __TEInputOutputMapping__ 36 #define __TEInputOutputMapping__ 38 #include "IWROptyca.h" 41 #define kHundredPerCent 100 47 TEPosition(int32 ix, int32 in) : index(ix), inner(in) {}
56 TERange(int32 ixa, int32 ina, int32 ixb, int32 inb) :a(ixa, ina), b(ixb, inb) { }
68 this->push_back(range);
72 return (
int) this->size();
76 if (pos >= (
int)this->size())
80 vector<TERange>::iterator it;
88 return &this->front();
107 enum { kLeft, kRight, kLeftMost, kRightMost };
109 virtual void Initialize(IWROptyca* optycaInstance) { ASSERT(
" This function is not available on Harfbuzz!"); }
111 virtual void InputToOutput(int32 characterIndex, int32 &inner, int32 &glyphIndex)
113 glyphIndex = characterIndex;
116 virtual void InputToOutput(int32 characterIndex, int32 &inner, int32 &glyphIndex, bool16 &direction) { glyphIndex = characterIndex; direction = reverse; }
118 virtual void InputToOutputRanges(
TERangeList& ranges) { };
120 virtual void InputToOutputClientEncoding(int32 characterIndex, int32 &inner, int32 &glyphIndex) {
121 glyphIndex = characterIndex;
124 virtual void InputToOutputRangesClientEncoding(
TERangeList& ranges) { ASSERT(
" This function is not available on Harfbuzz!"); }
126 virtual void OutputToInput(int32 glyphIndex, int32 &inner, int32 &characterIndex, int32 startPos = 0)
128 characterIndex = glyphIndex;
131 virtual void OutputToInputRanges(
TERangeList& ranges) {};
133 virtual int32 GetInputCount() {
return 0; }
135 virtual void SetInputCount(
int count) { };
137 virtual int32 GetOutputCount() {
return 0; }
139 virtual void SetOutputCount(
int count) { };
141 virtual void Clear() { };
143 virtual void Reset() { };
145 virtual int MaxExtent(
int len,
int start = 0) {
return len; }
147 virtual int TEReplayLog(
short* t, int32 len, int32 maxLen, int32 startPos) {
return len; }
149 virtual void GetCluster(int32 ix, int32& start,
unsigned char& count)
155 virtual void ToClusterBase(int32& index, int32& inner) {};
157 virtual void RecordReverse(int32 count, int32 start) { reverse = kTrue; };
159 virtual int32 TEReplayLogClientEncoding(int32* t, int32 len, int32 maxLen) {
return len; }
161 virtual bool VisualMove(int32 whichMove, int32& ix, int32& in,
bool& keyboardIsRTL) {
165 virtual void RecordMove(int32 src, int32 dst, int32 count) { };
167 virtual int32 GetSubsSize()
const {
return 0; }
169 virtual int32 GetClustersSize()
const { ASSERT(
" This function is not available on Harfbuzz!");
return 0; }
171 virtual void ResizeClusters(int32 n) { ASSERT(
" This function is not available on Harfbuzz!"); }
173 virtual unsigned short& Clusters(int32 index) { ASSERT(
" This function is not available on Harfbuzz!");
return dummyShort; }
175 virtual unsigned short& GetSubs(int32 index) {
return dummyShort; }
177 virtual int32& UTFMapping(int32 index) {
return dummyInt; }
179 virtual int32 UTFMappingSize() {
return 0; }
181 virtual short GetUndo() {
return 0; }
183 virtual void Resize(int32 n) { };
185 virtual int UTFMappingResize(
int n) {
return 0; }
187 virtual int32 TEExtract(
TEInputOutputMapping& extractedLog, int32 start, int32 count) {
return 0; }
191 virtual int GetMappingType() {
return 2; }
193 void slToTeRangeList(SLRangeList &slRanges,
TERangeList &ranges)
195 for (
int i = 0; i < slRanges.Size(); i++)
197 if (i + 1 > ranges.Size())
202 ranges[i].a.index = slRanges[i].a.index; ranges[i].a.inner = slRanges[i].a.inner; ranges[i].b.index = slRanges[i].b.index; ranges[i].b.inner = slRanges[i].b.inner;
206 void teToSlRangeList(SLRangeList &slRanges,
TERangeList &ranges)
208 for (
int i = 0; i < ranges.Size(); i++)
210 SLRange temp(ranges[i].a.index, ranges[i].a.inner, ranges[i].b.index, ranges[i].b.inner);
211 slRanges.Append(temp);
216 unsigned short dummyShort = 0;
217 bool16 reverse = kFalse;
221 #endif //__TEInputOutputMapping__