if ( uc[pos].row() == 0x0e ) {  unsigned char col = uc[pos].cell(); if ( col == 0x31 || col == 0x34 || col == 0x35 || col == 0x36 || col == 0x37 || col == 0x47 || col == 0x4c || col == 0x4d || col == 0x4e ) { cmb = QChar::Combining_AboveRight;
if ( uc[pos].row() == 0x0e ) {  unsigned char col = uc[pos].cell();  if ( col == 0x31 || col == 0x34 || col == 0x35 || col == 0x36 || col == 0x37 || col == 0x47 || col == 0x48 || col == 0x49 || col == 0x4a || col == 0x4b || col == 0x4c || col == 0x4d || col == 0x4e ) { cmb = QChar::Combining_AboveRight; } else if ( col == 0x38 || col == 0x39 || col == 0x3a ) { cmb = QChar::Combining_Below;
static void heuristicSetGlyphAttributes( const QString &string, int from, int len,					 QTextEngine *engine, QScriptItem *si ){    // ### zeroWidth and justification are missing here!!!!!    if ( si->num_glyphs != len )	qWarning("QScriptEngine::heuristicSetGlyphAttributes: char length and num glyphs disagree" );//     qDebug("QScriptEngine::heuristicSetGlyphAttributes, num_glyphs=%d", num_glyphs);    GlyphAttributes *glyphAttributes = engine->glyphAttributes( si );    unsigned short *logClusters = engine->logClusters( si );    advance_t *advances = engine->advances( si );    // honour the logClusters array if it exists.    const QChar *uc = string.unicode() + from;    for ( int i = 0; i < si->num_glyphs; i++ )	logClusters[i] = i;    int pos = 1;    // first char in a run is never (treated as) a mark    int cStart = 0;    glyphAttributes[0].mark = FALSE;    glyphAttributes[0].clusterStart = TRUE;    while ( pos < len ) {	if ( ::category( uc[pos] ) != QChar::Mark_NonSpacing ) {	    glyphAttributes[pos].mark = FALSE;	    glyphAttributes[pos].clusterStart = TRUE;	    glyphAttributes[pos].combiningClass = 0;	    cStart = pos;	} else {	    int cmb = combiningClass( uc[pos] );	    if ( cmb == 0 ) {		// Fix 0 combining classes		if ( uc[pos].row() == 0x0e ) {		    // thai or lao		    unsigned char col = uc[pos].cell();		    if ( col == 0x31 ||			 col == 0x34 ||			 col == 0x35 ||			 col == 0x36 ||			 col == 0x37 ||			 col == 0x47 ||			 col == 0x4c ||			 col == 0x4d ||			 col == 0x4e ) {			cmb = QChar::Combining_AboveRight;		    } else if ( col == 0xb1 ||				col == 0xb4 ||				col == 0xb5 ||				col == 0xb6 ||				col == 0xb7 ||				col == 0xbb ||				col == 0xcc ||				col == 0xcd ) {			cmb = QChar::Combining_Above;		    } else if ( col == 0xbc ) {			cmb = QChar::Combining_Below;		    }		}	    }	    glyphAttributes[pos].mark = TRUE;	    glyphAttributes[pos].clusterStart = FALSE;	    glyphAttributes[pos].combiningClass = cmb;	    // 		qDebug("found a mark at position %d", pos );	    logClusters[pos] = cStart;	    advances[pos] = 0;	    si->hasPositioning = TRUE;	}	pos++;    }}