Blame src/hb-ot-shape-complex-arabic-win1256.hh

Packit Service 5bcba8
/*
Packit Service 5bcba8
 * Copyright © 2014  Google, Inc.
Packit Service 5bcba8
 *
Packit Service 5bcba8
 *  This is part of HarfBuzz, a text shaping library.
Packit Service 5bcba8
 *
Packit Service 5bcba8
 * Permission is hereby granted, without written agreement and without
Packit Service 5bcba8
 * license or royalty fees, to use, copy, modify, and distribute this
Packit Service 5bcba8
 * software and its documentation for any purpose, provided that the
Packit Service 5bcba8
 * above copyright notice and the following two paragraphs appear in
Packit Service 5bcba8
 * all copies of this software.
Packit Service 5bcba8
 *
Packit Service 5bcba8
 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
Packit Service 5bcba8
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
Packit Service 5bcba8
 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
Packit Service 5bcba8
 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
Packit Service 5bcba8
 * DAMAGE.
Packit Service 5bcba8
 *
Packit Service 5bcba8
 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
Packit Service 5bcba8
 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
Packit Service 5bcba8
 * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
Packit Service 5bcba8
 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
Packit Service 5bcba8
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
Packit Service 5bcba8
 *
Packit Service 5bcba8
 * Google Author(s): Behdad Esfahbod
Packit Service 5bcba8
 */
Packit Service 5bcba8
Packit Service 5bcba8
#ifndef HB_OT_SHAPE_COMPLEX_ARABIC_WIN1256_HH
Packit Service 5bcba8
Packit Service 5bcba8
Packit Service 5bcba8
/*
Packit Service 5bcba8
 * The macros in the first part of this file are generic macros that can
Packit Service 5bcba8
 * be used to define the bytes for OpenType table data in code in a
Packit Service 5bcba8
 * readable manner.  We can move the macros to reside with their respective
Packit Service 5bcba8
 * struct types, but since we only use these to define one data table, the
Packit Service 5bcba8
 * Windows-1256 Arabic shaping table in this file, we keep them here.
Packit Service 5bcba8
 */
Packit Service 5bcba8
Packit Service 5bcba8
Packit Service 5bcba8
/* First we measure, then we cut. */
Packit Service 5bcba8
#ifndef OT_MEASURE
Packit Service 5bcba8
#define OT_MEASURE
Packit Service 5bcba8
#define OT_TABLE_START			static const struct TABLE_NAME {
Packit Service 5bcba8
#define OT_TABLE_END			}
Packit Service 5bcba8
#define OT_LABEL_START(Name)		unsigned char Name[
Packit Service 5bcba8
#define OT_LABEL_END			];
Packit Service 5bcba8
#define OT_BYTE(u8)			+1/*byte*/
Packit Service 5bcba8
#define OT_USHORT(u16)			+2/*bytes*/
Packit Service 5bcba8
#else
Packit Service 5bcba8
#undef  OT_MEASURE
Packit Service 5bcba8
#define OT_TABLE_START			TABLE_NAME = {
Packit Service 5bcba8
#define OT_TABLE_END			};
Packit Service 5bcba8
#define OT_LABEL_START(Name)		{
Packit Service 5bcba8
#define OT_LABEL_END			},
Packit Service 5bcba8
#define OT_BYTE(u8)			(u8),
Packit Service 5bcba8
#define OT_USHORT(u16)			(unsigned char)((u16)>>8), (unsigned char)((u16)&0xFFu),
Packit Service 5bcba8
#define OT_COUNT(Name, ItemSize)	((unsigned int) sizeof(((struct TABLE_NAME*)0)->Name) \
Packit Service 5bcba8
					 / (unsigned int)(ItemSize) \
Packit Service 5bcba8
					 /* OT_ASSERT it's divisible (and positive). */)
Packit Service 5bcba8
#define OT_DISTANCE(From,To)		((unsigned int) \
Packit Service 5bcba8
					 ((char*)(&((struct TABLE_NAME*)0)->To) - \
Packit Service 5bcba8
					  (char*)(&((struct TABLE_NAME*)0)->From)) \
Packit Service 5bcba8
					 /* OT_ASSERT it's positive. */)
Packit Service 5bcba8
#endif
Packit Service 5bcba8
Packit Service 5bcba8
Packit Service 5bcba8
#define OT_LABEL(Name) \
Packit Service 5bcba8
	OT_LABEL_END \
Packit Service 5bcba8
	OT_LABEL_START(Name)
Packit Service 5bcba8
Packit Service 5bcba8
/* Whenever we receive an argument that is a list, it will expand to
Packit Service 5bcba8
 * contain commas.  That cannot be passed to another macro because the
Packit Service 5bcba8
 * commas will throw off the preprocessor.  The solution is to wrap
Packit Service 5bcba8
 * the passed-in argument in OT_LIST() before passing to the next macro.
Packit Service 5bcba8
 * Unfortunately this trick requires vararg macros. */
Packit Service 5bcba8
#define OT_LIST(...) __VA_ARGS__
Packit Service 5bcba8
Packit Service 5bcba8
Packit Service 5bcba8
/*
Packit Service 5bcba8
 * Basic Types
Packit Service 5bcba8
 */
Packit Service 5bcba8
Packit Service 5bcba8
#define OT_TAG(a,b,c,d) \
Packit Service 5bcba8
	OT_BYTE(a) OT_BYTE(b) OT_BYTE(c) OT_BYTE(d)
Packit Service 5bcba8
Packit Service 5bcba8
#define OT_OFFSET(From, To) /* Offset from From to To in bytes */ \
Packit Service 5bcba8
	OT_USHORT(OT_DISTANCE(From, To))
Packit Service 5bcba8
Packit Service 5bcba8
#define OT_GLYPHID /* GlyphID */ \
Packit Service 5bcba8
	OT_USHORT
Packit Service 5bcba8
Packit Service 5bcba8
#define OT_UARRAY(Name, Items) \
Packit Service 5bcba8
	OT_LABEL_START(Name) \
Packit Service 5bcba8
	OT_USHORT(OT_COUNT(Name##Data, 2)) \
Packit Service 5bcba8
	OT_LABEL(Name##Data) \
Packit Service 5bcba8
	Items \
Packit Service 5bcba8
	OT_LABEL_END
Packit Service 5bcba8
Packit Service 5bcba8
#define OT_UHEADLESSARRAY(Name, Items) \
Packit Service 5bcba8
	OT_LABEL_START(Name) \
Packit Service 5bcba8
	OT_USHORT(OT_COUNT(Name##Data, 2) + 1) \
Packit Service 5bcba8
	OT_LABEL(Name##Data) \
Packit Service 5bcba8
	Items \
Packit Service 5bcba8
	OT_LABEL_END
Packit Service 5bcba8
Packit Service 5bcba8
Packit Service 5bcba8
/*
Packit Service 5bcba8
 * Common Types
Packit Service 5bcba8
 */
Packit Service 5bcba8
Packit Service 5bcba8
#define OT_LOOKUP_FLAG_IGNORE_MARKS	0x08u
Packit Service 5bcba8
Packit Service 5bcba8
#define OT_LOOKUP(Name, LookupType, LookupFlag, SubLookupOffsets) \
Packit Service 5bcba8
	OT_LABEL_START(Name) \
Packit Service 5bcba8
	OT_USHORT(LookupType) \
Packit Service 5bcba8
	OT_USHORT(LookupFlag) \
Packit Service 5bcba8
	OT_LABEL_END \
Packit Service 5bcba8
	OT_UARRAY(Name##SubLookupOffsetsArray, OT_LIST(SubLookupOffsets))
Packit Service 5bcba8
Packit Service 5bcba8
#define OT_SUBLOOKUP(Name, SubFormat, Items) \
Packit Service 5bcba8
	OT_LABEL_START(Name) \
Packit Service 5bcba8
	OT_USHORT(SubFormat) \
Packit Service 5bcba8
	Items
Packit Service 5bcba8
Packit Service 5bcba8
#define OT_COVERAGE1(Name, Items) \
Packit Service 5bcba8
	OT_LABEL_START(Name) \
Packit Service 5bcba8
	OT_USHORT(1) \
Packit Service 5bcba8
	OT_LABEL_END \
Packit Service 5bcba8
	OT_UARRAY(Name##Glyphs, OT_LIST(Items))
Packit Service 5bcba8
Packit Service 5bcba8
Packit Service 5bcba8
/*
Packit Service 5bcba8
 * GSUB
Packit Service 5bcba8
 */
Packit Service 5bcba8
Packit Service 5bcba8
#define OT_LOOKUP_TYPE_SUBST_SINGLE	1u
Packit Service 5bcba8
#define OT_LOOKUP_TYPE_SUBST_LIGATURE	4u
Packit Service 5bcba8
Packit Service 5bcba8
#define OT_SUBLOOKUP_SINGLE_SUBST_FORMAT2(Name, FromGlyphs, ToGlyphs) \
Packit Service 5bcba8
	OT_SUBLOOKUP(Name, 2, \
Packit Service 5bcba8
		OT_OFFSET(Name, Name##Coverage) \
Packit Service 5bcba8
		OT_LABEL_END \
Packit Service 5bcba8
		OT_UARRAY(Name##Substitute, OT_LIST(ToGlyphs)) \
Packit Service 5bcba8
	) \
Packit Service 5bcba8
	OT_COVERAGE1(Name##Coverage, OT_LIST(FromGlyphs)) \
Packit Service 5bcba8
	/* ASSERT_STATIC_EXPR_ZERO (len(FromGlyphs) == len(ToGlyphs)) */
Packit Service 5bcba8
Packit Service 5bcba8
#define OT_SUBLOOKUP_LIGATURE_SUBST_FORMAT1(Name, FirstGlyphs, LigatureSetOffsets) \
Packit Service 5bcba8
	OT_SUBLOOKUP(Name, 1, \
Packit Service 5bcba8
		OT_OFFSET(Name, Name##Coverage) \
Packit Service 5bcba8
		OT_LABEL_END \
Packit Service 5bcba8
		OT_UARRAY(Name##LigatureSetOffsetsArray, OT_LIST(LigatureSetOffsets)) \
Packit Service 5bcba8
	) \
Packit Service 5bcba8
	OT_COVERAGE1(Name##Coverage, OT_LIST(FirstGlyphs)) \
Packit Service 5bcba8
	/* ASSERT_STATIC_EXPR_ZERO (len(FirstGlyphs) == len(LigatureSetOffsets)) */
Packit Service 5bcba8
Packit Service 5bcba8
#define OT_LIGATURE_SET(Name, LigatureSetOffsets) \
Packit Service 5bcba8
	OT_UARRAY(Name, OT_LIST(LigatureSetOffsets))
Packit Service 5bcba8
Packit Service 5bcba8
#define OT_LIGATURE(Name, Components, LigGlyph) \
Packit Service 5bcba8
	OT_LABEL_START(Name) \
Packit Service 5bcba8
	LigGlyph \
Packit Service 5bcba8
	OT_LABEL_END \
Packit Service 5bcba8
	OT_UHEADLESSARRAY(Name##ComponentsArray, OT_LIST(Components))
Packit Service 5bcba8
Packit Service 5bcba8
/*
Packit Service 5bcba8
 *
Packit Service 5bcba8
 * Start of Windows-1256 shaping table.
Packit Service 5bcba8
 *
Packit Service 5bcba8
 */
Packit Service 5bcba8
Packit Service 5bcba8
/* Table name. */
Packit Service 5bcba8
#define TABLE_NAME arabic_win1256_gsub_lookups
Packit Service 5bcba8
Packit Service 5bcba8
/* Table manifest. */
Packit Service 5bcba8
#define MANIFEST(Items) \
Packit Service 5bcba8
	OT_LABEL_START(manifest) \
Packit Service 5bcba8
	OT_USHORT(OT_COUNT(manifestData, 6)) \
Packit Service 5bcba8
	OT_LABEL(manifestData) \
Packit Service 5bcba8
	Items \
Packit Service 5bcba8
	OT_LABEL_END
Packit Service 5bcba8
Packit Service 5bcba8
#define MANIFEST_LOOKUP(Tag, Name) \
Packit Service 5bcba8
	Tag \
Packit Service 5bcba8
	OT_OFFSET(manifest, Name)
Packit Service 5bcba8
Packit Service 5bcba8
/* Shorthand. */
Packit Service 5bcba8
#define G	OT_GLYPHID
Packit Service 5bcba8
Packit Service 5bcba8
/*
Packit Service 5bcba8
 * Table Start
Packit Service 5bcba8
 */
Packit Service 5bcba8
OT_TABLE_START
Packit Service 5bcba8
Packit Service 5bcba8
Packit Service 5bcba8
/*
Packit Service 5bcba8
 * Manifest
Packit Service 5bcba8
 */
Packit Service 5bcba8
MANIFEST(
Packit Service 5bcba8
	MANIFEST_LOOKUP(OT_TAG('r','l','i','g'), rligLookup)
Packit Service 5bcba8
	MANIFEST_LOOKUP(OT_TAG('i','n','i','t'), initLookup)
Packit Service 5bcba8
	MANIFEST_LOOKUP(OT_TAG('m','e','d','i'), mediLookup)
Packit Service 5bcba8
	MANIFEST_LOOKUP(OT_TAG('f','i','n','a'), finaLookup)
Packit Service 5bcba8
	MANIFEST_LOOKUP(OT_TAG('r','l','i','g'), rligMarksLookup)
Packit Service 5bcba8
)
Packit Service 5bcba8
Packit Service 5bcba8
/*
Packit Service 5bcba8
 * Lookups
Packit Service 5bcba8
 */
Packit Service 5bcba8
OT_LOOKUP(initLookup, OT_LOOKUP_TYPE_SUBST_SINGLE, OT_LOOKUP_FLAG_IGNORE_MARKS,
Packit Service 5bcba8
	OT_OFFSET(initLookup, initmediSubLookup)
Packit Service 5bcba8
	OT_OFFSET(initLookup, initSubLookup)
Packit Service 5bcba8
)
Packit Service 5bcba8
OT_LOOKUP(mediLookup, OT_LOOKUP_TYPE_SUBST_SINGLE, OT_LOOKUP_FLAG_IGNORE_MARKS,
Packit Service 5bcba8
	OT_OFFSET(mediLookup, initmediSubLookup)
Packit Service 5bcba8
	OT_OFFSET(mediLookup, mediSubLookup)
Packit Service 5bcba8
	OT_OFFSET(mediLookup, medifinaLamAlefSubLookup)
Packit Service 5bcba8
)
Packit Service 5bcba8
OT_LOOKUP(finaLookup, OT_LOOKUP_TYPE_SUBST_SINGLE, OT_LOOKUP_FLAG_IGNORE_MARKS,
Packit Service 5bcba8
	OT_OFFSET(finaLookup, finaSubLookup)
Packit Service 5bcba8
	/* We don't need this one currently as the sequence inherits masks
Packit Service 5bcba8
	 * from the first item.  Just in case we change that in the future
Packit Service 5bcba8
	 * to be smart about Arabic masks when ligating... */
Packit Service 5bcba8
	OT_OFFSET(finaLookup, medifinaLamAlefSubLookup)
Packit Service 5bcba8
)
Packit Service 5bcba8
OT_LOOKUP(rligLookup, OT_LOOKUP_TYPE_SUBST_LIGATURE, OT_LOOKUP_FLAG_IGNORE_MARKS,
Packit Service 5bcba8
	OT_OFFSET(rligLookup, lamAlefLigaturesSubLookup)
Packit Service 5bcba8
)
Packit Service 5bcba8
OT_LOOKUP(rligMarksLookup, OT_LOOKUP_TYPE_SUBST_LIGATURE, 0,
Packit Service 5bcba8
	OT_OFFSET(rligMarksLookup, shaddaLigaturesSubLookup)
Packit Service 5bcba8
)
Packit Service 5bcba8
Packit Service 5bcba8
/*
Packit Service 5bcba8
 * init/medi/fina forms
Packit Service 5bcba8
 */
Packit Service 5bcba8
OT_SUBLOOKUP_SINGLE_SUBST_FORMAT2(initmediSubLookup,
Packit Service 5bcba8
	G(198)	G(200)	G(201)	G(202)	G(203)	G(204)	G(205)	G(206)	G(211)
Packit Service 5bcba8
	G(212)	G(213)	G(214)	G(223)	G(225)	G(227)	G(228)	G(236)	G(237),
Packit Service 5bcba8
	G(162)	G(4)	G(5)	G(5)	G(6)	G(7)	G(9)	G(11)	G(13)
Packit Service 5bcba8
	G(14)	G(15)	G(26)	G(140)	G(141)	G(142)	G(143)	G(154)	G(154)
Packit Service 5bcba8
)
Packit Service 5bcba8
OT_SUBLOOKUP_SINGLE_SUBST_FORMAT2(initSubLookup,
Packit Service 5bcba8
	G(218)	G(219)	G(221)	G(222)	G(229),
Packit Service 5bcba8
	G(27)	G(30)	G(128)	G(131)	G(144)
Packit Service 5bcba8
)
Packit Service 5bcba8
OT_SUBLOOKUP_SINGLE_SUBST_FORMAT2(mediSubLookup,
Packit Service 5bcba8
	G(218)	G(219)	G(221)	G(222)	G(229),
Packit Service 5bcba8
	G(28)	G(31)	G(129)	G(138)	G(149)
Packit Service 5bcba8
)
Packit Service 5bcba8
OT_SUBLOOKUP_SINGLE_SUBST_FORMAT2(finaSubLookup,
Packit Service 5bcba8
	G(194)	G(195)	G(197)	G(198)	G(199)	G(201)	G(204)	G(205)	G(206)
Packit Service 5bcba8
	G(218)	G(219)	G(229)	G(236)	G(237),
Packit Service 5bcba8
	G(2)	G(1)	G(3)	G(181)	G(0)	G(159)	G(8)	G(10)	G(12)
Packit Service 5bcba8
	G(29)	G(127)	G(152) G(160)	G(156)
Packit Service 5bcba8
)
Packit Service 5bcba8
OT_SUBLOOKUP_SINGLE_SUBST_FORMAT2(medifinaLamAlefSubLookup,
Packit Service 5bcba8
	G(165)	G(178)	G(180)	G(252),
Packit Service 5bcba8
	G(170)	G(179)	G(185)	G(255)
Packit Service 5bcba8
)
Packit Service 5bcba8
Packit Service 5bcba8
/*
Packit Service 5bcba8
 * Lam+Alef ligatures
Packit Service 5bcba8
 */
Packit Service 5bcba8
OT_SUBLOOKUP_LIGATURE_SUBST_FORMAT1(lamAlefLigaturesSubLookup,
Packit Service 5bcba8
	G(225),
Packit Service 5bcba8
	OT_OFFSET(lamAlefLigaturesSubLookup, lamLigatureSet)
Packit Service 5bcba8
)
Packit Service 5bcba8
OT_LIGATURE_SET(lamLigatureSet,
Packit Service 5bcba8
	OT_OFFSET(lamLigatureSet, lamInitLigature1)
Packit Service 5bcba8
	OT_OFFSET(lamLigatureSet, lamInitLigature2)
Packit Service 5bcba8
	OT_OFFSET(lamLigatureSet, lamInitLigature3)
Packit Service 5bcba8
	OT_OFFSET(lamLigatureSet, lamInitLigature4)
Packit Service 5bcba8
)
Packit Service 5bcba8
OT_LIGATURE(lamInitLigature1, G(199), G(165))
Packit Service 5bcba8
OT_LIGATURE(lamInitLigature2, G(195), G(178))
Packit Service 5bcba8
OT_LIGATURE(lamInitLigature3, G(194), G(180))
Packit Service 5bcba8
OT_LIGATURE(lamInitLigature4, G(197), G(252))
Packit Service 5bcba8
Packit Service 5bcba8
/*
Packit Service 5bcba8
 * Shadda ligatures
Packit Service 5bcba8
 */
Packit Service 5bcba8
OT_SUBLOOKUP_LIGATURE_SUBST_FORMAT1(shaddaLigaturesSubLookup,
Packit Service 5bcba8
	G(248),
Packit Service 5bcba8
	OT_OFFSET(shaddaLigaturesSubLookup, shaddaLigatureSet)
Packit Service 5bcba8
)
Packit Service 5bcba8
OT_LIGATURE_SET(shaddaLigatureSet,
Packit Service 5bcba8
	OT_OFFSET(shaddaLigatureSet, shaddaLigature1)
Packit Service 5bcba8
	OT_OFFSET(shaddaLigatureSet, shaddaLigature2)
Packit Service 5bcba8
	OT_OFFSET(shaddaLigatureSet, shaddaLigature3)
Packit Service 5bcba8
)
Packit Service 5bcba8
OT_LIGATURE(shaddaLigature1, G(243), G(172))
Packit Service 5bcba8
OT_LIGATURE(shaddaLigature2, G(245), G(173))
Packit Service 5bcba8
OT_LIGATURE(shaddaLigature3, G(246), G(175))
Packit Service 5bcba8
Packit Service 5bcba8
/*
Packit Service 5bcba8
 * Table end
Packit Service 5bcba8
 */
Packit Service 5bcba8
OT_TABLE_END
Packit Service 5bcba8
Packit Service 5bcba8
Packit Service 5bcba8
/*
Packit Service 5bcba8
 * Clean up
Packit Service 5bcba8
 */
Packit Service 5bcba8
#undef OT_TABLE_START
Packit Service 5bcba8
#undef OT_TABLE_END
Packit Service 5bcba8
#undef OT_LABEL_START
Packit Service 5bcba8
#undef OT_LABEL_END
Packit Service 5bcba8
#undef OT_BYTE
Packit Service 5bcba8
#undef OT_USHORT
Packit Service 5bcba8
#undef OT_DISTANCE
Packit Service 5bcba8
#undef OT_COUNT
Packit Service 5bcba8
Packit Service 5bcba8
/*
Packit Service 5bcba8
 * Include a second time to get the table data...
Packit Service 5bcba8
 */
Packit Service 5bcba8
#if 0
Packit Service 5bcba8
#include "hb-private.hh" /* Make check-includes.sh happy. */
Packit Service 5bcba8
#endif
Packit Service 5bcba8
#ifdef OT_MEASURE
Packit Service 5bcba8
#include "hb-ot-shape-complex-arabic-win1256.hh"
Packit Service 5bcba8
#endif
Packit Service 5bcba8
Packit Service 5bcba8
#define HB_OT_SHAPE_COMPLEX_ARABIC_WIN1256_HH
Packit Service 5bcba8
#endif /* HB_OT_SHAPE_COMPLEX_ARABIC_WIN1256_HH */