| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 2 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
| 3 * | 3 * |
| 4 * This is part of HarfBuzz, an OpenType Layout engine library. | 4 * This is part of HarfBuzz, an OpenType Layout engine library. |
| 5 * | 5 * |
| 6 * Permission is hereby granted, without written agreement and without | 6 * Permission is hereby granted, without written agreement and without |
| 7 * license or royalty fees, to use, copy, modify, and distribute this | 7 * license or royalty fees, to use, copy, modify, and distribute this |
| 8 * software and its documentation for any purpose, provided that the | 8 * software and its documentation for any purpose, provided that the |
| 9 * above copyright notice and the following two paragraphs appear in | 9 * above copyright notice and the following two paragraphs appear in |
| 10 * all copies of this software. | 10 * all copies of this software. |
| (...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 426 // set the glyph attributes heuristically. Assumes a 1 to 1 relationship between
chars and glyphs | 426 // set the glyph attributes heuristically. Assumes a 1 to 1 relationship between
chars and glyphs |
| 427 // and no reordering. | 427 // and no reordering. |
| 428 // also computes logClusters heuristically | 428 // also computes logClusters heuristically |
| 429 void HB_HeuristicSetGlyphAttributes(HB_ShaperItem *item) | 429 void HB_HeuristicSetGlyphAttributes(HB_ShaperItem *item) |
| 430 { | 430 { |
| 431 const HB_UChar16 *uc = item->string + item->item.pos; | 431 const HB_UChar16 *uc = item->string + item->item.pos; |
| 432 hb_uint32 length = item->item.length; | 432 hb_uint32 length = item->item.length; |
| 433 | 433 |
| 434 // ### zeroWidth and justification are missing here!!!!! | 434 // ### zeroWidth and justification are missing here!!!!! |
| 435 | 435 |
| 436 assert(item->num_glyphs <= length); | 436 assert(length <= item->num_glyphs); |
| 437 | 437 |
| 438 // qDebug("QScriptEngine::heuristicSetGlyphAttributes, num_glyphs=%d", item-
>num_glyphs); | 438 // qDebug("QScriptEngine::heuristicSetGlyphAttributes, num_glyphs=%d", item-
>num_glyphs); |
| 439 HB_GlyphAttributes *attributes = item->attributes; | 439 HB_GlyphAttributes *attributes = item->attributes; |
| 440 unsigned short *logClusters = item->log_clusters; | 440 unsigned short *logClusters = item->log_clusters; |
| 441 | 441 |
| 442 hb_uint32 glyph_pos = 0; | 442 hb_uint32 glyph_pos = 0; |
| 443 hb_uint32 i; | 443 hb_uint32 i; |
| 444 for (i = 0; i < length; i++) { | 444 for (i = 0; i < length; i++) { |
| 445 if (HB_IsHighSurrogate(uc[i]) && i < length - 1 | 445 if (HB_IsHighSurrogate(uc[i]) && i < length - 1 |
| 446 && HB_IsLowSurrogate(uc[i + 1])) { | 446 && HB_IsLowSurrogate(uc[i + 1])) { |
| 447 logClusters[i] = glyph_pos; | 447 logClusters[i] = glyph_pos; |
| 448 logClusters[++i] = glyph_pos; | 448 logClusters[++i] = glyph_pos; |
| 449 } else { | 449 } else { |
| 450 logClusters[i] = glyph_pos; | 450 logClusters[i] = glyph_pos; |
| 451 } | 451 } |
| 452 ++glyph_pos; | 452 ++glyph_pos; |
| 453 } | 453 } |
| 454 assert(glyph_pos == item->num_glyphs); | |
| 455 | 454 |
| 456 // first char in a run is never (treated as) a mark | 455 // first char in a run is never (treated as) a mark |
| 457 int cStart = 0; | 456 int cStart = 0; |
| 458 const bool symbolFont = item->face->isSymbolFont; | 457 const bool symbolFont = item->face->isSymbolFont; |
| 459 attributes[0].mark = false; | 458 attributes[0].mark = false; |
| 460 attributes[0].clusterStart = true; | 459 attributes[0].clusterStart = true; |
| 461 attributes[0].dontPrint = (!symbolFont && uc[0] == 0x00ad) || HB_IsControlCh
ar(uc[0]); | 460 attributes[0].dontPrint = (!symbolFont && uc[0] == 0x00ad) || HB_IsControlCh
ar(uc[0]); |
| 462 | 461 |
| 463 int pos = 0; | 462 int pos = 0; |
| 464 HB_CharCategory lastCat; | 463 HB_CharCategory lastCat; |
| (...skipping 838 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1303 if (shaper_item->num_glyphs < shaper_item->item.length) { | 1302 if (shaper_item->num_glyphs < shaper_item->item.length) { |
| 1304 shaper_item->num_glyphs = shaper_item->item.length; | 1303 shaper_item->num_glyphs = shaper_item->item.length; |
| 1305 return false; | 1304 return false; |
| 1306 } | 1305 } |
| 1307 assert(shaper_item->item.script < HB_ScriptCount); | 1306 assert(shaper_item->item.script < HB_ScriptCount); |
| 1308 result = HB_ScriptEngines[shaper_item->item.script].shape(shaper_item); | 1307 result = HB_ScriptEngines[shaper_item->item.script].shape(shaper_item); |
| 1309 shaper_item->glyphIndicesPresent = false; | 1308 shaper_item->glyphIndicesPresent = false; |
| 1310 return result; | 1309 return result; |
| 1311 } | 1310 } |
| 1312 | 1311 |
| OLD | NEW |