| Index: third_party/harfbuzz/src/harfbuzz-hebrew.c
|
| diff --git a/third_party/harfbuzz/src/harfbuzz-hebrew.c b/third_party/harfbuzz/src/harfbuzz-hebrew.c
|
| deleted file mode 100644
|
| index d2664deefafdf06f097876f9280d333c21fd1e0d..0000000000000000000000000000000000000000
|
| --- a/third_party/harfbuzz/src/harfbuzz-hebrew.c
|
| +++ /dev/null
|
| @@ -1,189 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
|
| - *
|
| - * This is part of HarfBuzz, an OpenType Layout engine library.
|
| - *
|
| - * Permission is hereby granted, without written agreement and without
|
| - * license or royalty fees, to use, copy, modify, and distribute this
|
| - * software and its documentation for any purpose, provided that the
|
| - * above copyright notice and the following two paragraphs appear in
|
| - * all copies of this software.
|
| - *
|
| - * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
|
| - * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
|
| - * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
|
| - * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
| - * DAMAGE.
|
| - *
|
| - * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
|
| - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
| - * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
|
| - * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
|
| - * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
| - */
|
| -
|
| -#include "harfbuzz-shaper.h"
|
| -#include "harfbuzz-shaper-private.h"
|
| -#include <assert.h>
|
| -
|
| -/*
|
| -// Uniscribe also defines dlig for Hebrew, but we leave this out for now, as it's mostly
|
| -// ligatures one does not want in modern Hebrew (as lam-alef ligatures).
|
| -*/
|
| -#ifndef NO_OPENTYPE
|
| -static const HB_OpenTypeFeature hebrew_features[] = {
|
| - { HB_MAKE_TAG('c', 'c', 'm', 'p'), CcmpProperty },
|
| - {0, 0}
|
| -};
|
| -#endif
|
| -
|
| -/* Hebrew shaping. In the non opentype case we try to use the
|
| - presentation forms specified for Hebrew. Especially for the
|
| - ligatures with Dagesh this gives much better results than we could
|
| - achieve manually.
|
| -*/
|
| -HB_Bool HB_HebrewShape(HB_ShaperItem *shaper_item)
|
| -{
|
| - enum {
|
| - Dagesh = 0x5bc,
|
| - ShinDot = 0x5c1,
|
| - SinDot = 0x5c2,
|
| - Patah = 0x5b7,
|
| - Qamats = 0x5b8,
|
| - Holam = 0x5b9,
|
| - Rafe = 0x5bf
|
| - };
|
| -
|
| - assert(shaper_item->item.script == HB_Script_Hebrew);
|
| -
|
| - HB_HeuristicSetGlyphAttributes(shaper_item);
|
| -
|
| -#ifndef NO_OPENTYPE
|
| - if (HB_SelectScript(shaper_item, hebrew_features)) {
|
| -
|
| - const int availableGlyphs = shaper_item->num_glyphs;
|
| - if (!HB_ConvertStringToGlyphIndices(shaper_item))
|
| - return FALSE;
|
| -
|
| -
|
| - HB_OpenTypeShape(shaper_item, /*properties*/0);
|
| - return HB_OpenTypePosition(shaper_item, availableGlyphs, /*doLogClusters*/TRUE);
|
| - }
|
| -#endif
|
| -
|
| - {
|
| - const HB_UChar16 *uc = shaper_item->string + shaper_item->item.pos;
|
| - unsigned short *logClusters = shaper_item->log_clusters;
|
| - HB_GlyphAttributes *attributes = shaper_item->attributes;
|
| -
|
| - HB_Bool haveGlyphs;
|
| - int slen = 1;
|
| - int cluster_start = 0;
|
| - hb_uint32 i;
|
| -
|
| - HB_STACKARRAY(HB_UChar16, shapedChars, 2 * shaper_item->item.length);
|
| - *shapedChars = *uc;
|
| - logClusters[0] = 0;
|
| -
|
| - for (i = 1; i < shaper_item->item.length; ++i) {
|
| - hb_uint16 base = shapedChars[cluster_start];
|
| - hb_uint16 shaped = 0;
|
| - HB_Bool invalid = FALSE;
|
| - if (uc[i] == Dagesh) {
|
| - if (base >= 0x5d0
|
| - && base <= 0x5ea
|
| - && base != 0x5d7
|
| - && base != 0x5dd
|
| - && base != 0x5df
|
| - && base != 0x5e2
|
| - && base != 0x5e5) {
|
| - shaped = base - 0x5d0 + 0xfb30;
|
| - } else if (base == 0xfb2a || base == 0xfb2b /* Shin with Shin or Sin dot */) {
|
| - shaped = base + 2;
|
| - } else {
|
| - invalid = TRUE;
|
| - }
|
| - } else if (uc[i] == ShinDot) {
|
| - if (base == 0x05e9)
|
| - shaped = 0xfb2a;
|
| - else if (base == 0xfb49)
|
| - shaped = 0xfb2c;
|
| - else
|
| - invalid = TRUE;
|
| - } else if (uc[i] == SinDot) {
|
| - if (base == 0x05e9)
|
| - shaped = 0xfb2b;
|
| - else if (base == 0xfb49)
|
| - shaped = 0xfb2d;
|
| - else
|
| - invalid = TRUE;
|
| - } else if (uc[i] == Patah) {
|
| - if (base == 0x5d0)
|
| - shaped = 0xfb2e;
|
| - } else if (uc[i] == Qamats) {
|
| - if (base == 0x5d0)
|
| - shaped = 0xfb2f;
|
| - } else if (uc[i] == Holam) {
|
| - if (base == 0x5d5)
|
| - shaped = 0xfb4b;
|
| - } else if (uc[i] == Rafe) {
|
| - if (base == 0x5d1)
|
| - shaped = 0xfb4c;
|
| - else if (base == 0x5db)
|
| - shaped = 0xfb4d;
|
| - else if (base == 0x5e4)
|
| - shaped = 0xfb4e;
|
| - }
|
| -
|
| - if (invalid) {
|
| - shapedChars[slen] = 0x25cc;
|
| - attributes[slen].clusterStart = TRUE;
|
| - attributes[slen].mark = FALSE;
|
| - attributes[slen].combiningClass = 0;
|
| - cluster_start = slen;
|
| - ++slen;
|
| - }
|
| - if (shaped) {
|
| - if (shaper_item->font->klass->canRender(shaper_item->font, (HB_UChar16 *)&shaped, 1)) {
|
| - shapedChars[cluster_start] = shaped;
|
| - } else
|
| - shaped = 0;
|
| - }
|
| - if (!shaped) {
|
| - HB_CharCategory category;
|
| - int cmb;
|
| - shapedChars[slen] = uc[i];
|
| - HB_GetUnicodeCharProperties(uc[i], &category, &cmb);
|
| - if (category != HB_Mark_NonSpacing) {
|
| - attributes[slen].clusterStart = TRUE;
|
| - attributes[slen].mark = FALSE;
|
| - attributes[slen].combiningClass = 0;
|
| - attributes[slen].dontPrint = HB_IsControlChar(uc[i]);
|
| - cluster_start = slen;
|
| - } else {
|
| - attributes[slen].clusterStart = FALSE;
|
| - attributes[slen].mark = TRUE;
|
| - attributes[slen].combiningClass = cmb;
|
| - }
|
| - ++slen;
|
| - }
|
| - logClusters[i] = cluster_start;
|
| - }
|
| -
|
| - haveGlyphs = shaper_item->font->klass
|
| - ->convertStringToGlyphIndices(shaper_item->font,
|
| - shapedChars, slen,
|
| - shaper_item->glyphs, &shaper_item->num_glyphs,
|
| - shaper_item->item.bidiLevel % 2);
|
| -
|
| - HB_FREE_STACKARRAY(shapedChars);
|
| -
|
| - if (!haveGlyphs)
|
| - return FALSE;
|
| -
|
| - HB_HeuristicPosition(shaper_item);
|
| - }
|
| -
|
| - return TRUE;
|
| -}
|
| -
|
|
|