src/share/native/sun/font/layout/IndicReordering.cpp

Print this page




1079                tmpAuxData = glyphStorage.getAuxData(checkMatraPosition,success);
1080                if ( checkMatraPosition >= count || ( (tmpAuxData ^ baseConsonantData) & LE_GLYPH_GROUP_MASK)) {
1081                    checkMatraDone = true;
1082                    continue;
1083                }
1084                if ( (tmpAuxData & matraMask) &&
1085                     (((tmpAuxData & markPositionMask) == aboveBasePosition) ||
1086                       ((tmpAuxData & markPositionMask) == postBasePosition))) {
1087                    targetPosition = checkMatraPosition;
1088                }
1089                checkMatraPosition++;
1090             }
1091 
1092             glyphStorage.moveGlyph(i,targetPosition,repositionedGlyphMask);
1093         }
1094     }
1095 }
1096 
1097 
1098 le_int32 IndicReordering::v2process(const LEUnicode *chars, le_int32 charCount, le_int32 scriptCode,
1099                                   LEUnicode *outChars, LEGlyphStorage &glyphStorage)
1100 {
1101     const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);




1102 
1103     DynamicProperties dynProps[INDIC_BLOCK_SIZE];
1104     IndicReordering::getDynamicProperties(dynProps,classTable);
1105 
1106     IndicReorderingOutput output(outChars, glyphStorage, NULL);
1107     le_int32 i, firstConsonant, baseConsonant, secondConsonant, inv_count = 0, beginSyllable = 0;
1108     //le_bool lastInWord = FALSE;
1109 
1110     while (beginSyllable < charCount) {
1111         le_int32 nextSyllable = findSyllable(classTable, chars, beginSyllable, charCount);
1112 
1113         output.reset();
1114 
1115                 // Find the First Consonant
1116                 for ( firstConsonant = beginSyllable ; firstConsonant < nextSyllable ; firstConsonant++ ) {
1117                          if ( classTable->isConsonant(chars[firstConsonant]) ) {
1118                                         break;
1119                                 }
1120                 }
1121 




1079                tmpAuxData = glyphStorage.getAuxData(checkMatraPosition,success);
1080                if ( checkMatraPosition >= count || ( (tmpAuxData ^ baseConsonantData) & LE_GLYPH_GROUP_MASK)) {
1081                    checkMatraDone = true;
1082                    continue;
1083                }
1084                if ( (tmpAuxData & matraMask) &&
1085                     (((tmpAuxData & markPositionMask) == aboveBasePosition) ||
1086                       ((tmpAuxData & markPositionMask) == postBasePosition))) {
1087                    targetPosition = checkMatraPosition;
1088                }
1089                checkMatraPosition++;
1090             }
1091 
1092             glyphStorage.moveGlyph(i,targetPosition,repositionedGlyphMask);
1093         }
1094     }
1095 }
1096 
1097 
1098 le_int32 IndicReordering::v2process(const LEUnicode *chars, le_int32 charCount, le_int32 scriptCode,
1099                                   LEUnicode *outChars, LEGlyphStorage &glyphStorage, LEErrorCode& success)
1100 {
1101     const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
1102     if (classTable == NULL) {
1103         success = LE_MEMORY_ALLOCATION_ERROR;
1104         return 0;
1105     }
1106 
1107     DynamicProperties dynProps[INDIC_BLOCK_SIZE];
1108     IndicReordering::getDynamicProperties(dynProps,classTable);
1109 
1110     IndicReorderingOutput output(outChars, glyphStorage, NULL);
1111     le_int32 i, firstConsonant, baseConsonant, secondConsonant, inv_count = 0, beginSyllable = 0;
1112     //le_bool lastInWord = FALSE;
1113 
1114     while (beginSyllable < charCount) {
1115         le_int32 nextSyllable = findSyllable(classTable, chars, beginSyllable, charCount);
1116 
1117         output.reset();
1118 
1119                 // Find the First Consonant
1120                 for ( firstConsonant = beginSyllable ; firstConsonant < nextSyllable ; firstConsonant++ ) {
1121                          if ( classTable->isConsonant(chars[firstConsonant]) ) {
1122                                         break;
1123                                 }
1124                 }
1125