28 int nRunPos0 =
maRuns[ nIndex-2 ];
29 int nRunPos1 =
maRuns[ nIndex-1 ];
30 if( ((nCharPos +
int(bRTL)) == nRunPos1) && ((nRunPos0 > nRunPos1) == bRTL) )
33 maRuns[ nIndex-1 ] = nCharPos +
int(!bRTL);
37 if( (nRunPos0 <= nCharPos) && (nCharPos < nRunPos1) )
39 if( (nRunPos1 <= nCharPos) && (nCharPos < nRunPos0) )
44 maRuns.push_back( nCharPos + (bRTL ? 1 : 0) );
45 maRuns.push_back( nCharPos + (bRTL ? 0 : 1) );
50 if( nCharPos0 == nCharPos1 )
54 if( bRTL == (nCharPos0 < nCharPos1) )
56 int nTemp = nCharPos0;
57 nCharPos0 = nCharPos1;
68 maRuns.push_back( nCharPos0 );
69 maRuns.push_back( nCharPos1 );
79 if( nMinCharPos > nEndCharPos )
81 int nTemp = nMinCharPos;
82 nMinCharPos = nEndCharPos;
86 if( nCharPos < nMinCharPos )
88 if( nCharPos >= nEndCharPos )
102 for (
size_t i = 0;
i <
maRuns.size();
i+=2)
126 *bRightToLeft = (nRunPos0 > nRunPos1);
131 *nCharPos = nRunPos0;
140 if( *nCharPos == nRunPos1 )
146 *bRightToLeft = (nRunPos0 > nRunPos1);
147 *nCharPos = nRunPos0;
165 *bRightToLeft = (nRunPos1 < nRunPos0) ;
168 *nMinRunPos = nRunPos0;
169 *nEndRunPos = nRunPos1;
173 *nMinRunPos = nRunPos1;
174 *nEndRunPos = nRunPos0;
const wchar_t *typedef int(__stdcall *DllNativeUnregProc)(int
std::vector< int > maRuns
void AddPos(int nCharPos, bool bRTL)
bool PosIsInRun(int nCharPos) const
bool GetNextPos(int *nCharPos, bool *bRTL)
bool GetRun(int *nMinRunPos, int *nEndRunPos, bool *bRTL) const
void AddRun(int nMinRunPos, int nEndRunPos, bool bRTL)
bool PosIsInAnyRun(int nCharPos) const