Re: Industry Thai Cell-Clustering Rules



Hi K.Theppitak,

I'm glad that you are back on the net.
Now, I think, we get everybody in-sync.
So, let's make the change of Thai Pango engine to have Wtt2.0 cell-clustering
and also, adding Mac/Microsoft shaping (tis620-1, tis620-2).

I'm changing/updating Thai pango engine now.
Attached are the Wtt2.0 cell-clustering rules.

Here is how to check if the current character can be combined with the
previous character.

#define ChrType(InpChr)		_TACchclass[(unsigned char)(InpChr)]


static int
IsDisplayTypeChr(PrevInpChr, FollInpChr)
    unsigned char		PrevInpChr;
    unsigned char		FollInpChr;
{
    switch (_TAC_celltype_inputcheck[ChrType(PrevInpChr)]
	[ChrType(FollInpChr)])
    {
		case 'A':
	case 'S':
	case 'R':
	case 'X':
	  return SHOW_NEXT_CELL;

	case 'C':
	  return SHOW_CURR_CELL;
    }
}

Chookij V.


] ---- 8< ----
] 
] 
] On Fri, 3 Nov 2000, Chookij Vanatham wrote:
] 
] > I will change the cell-clustering to be Wtt2.0 cell-clustering
] > standard and of course, will work with K.Theppitak to make sure
] > that all these ideas are not coming from only one person.
] 
] I'm willing to contribute.
] Caveat: I don't have experience in Pango code yet.
] 
] First, what do you have in hand, K.Chookij? I'm sure you have WTT 2.0 spec.
] Do you have spec or some implementation of Mac/Windows adjustment?
] 
#ifdef  SCCS
static char SccsId[] = "@(#)wtt.h 1.1     97/11/05 SMI";
#endif

#ifndef	_WTT_H
#define	_WTT_H

/* Define TACTIS character classes */
#define		CTRL	0
#define		NON	1
#define		CONS	2
#define		LV	3
#define		FV1	4
#define		FV2	5
#define		FV3	6
#define		BV1	7
#define		BV2	8
#define		BD	9
#define		TONE	10
#define		AD1	11
#define		AD2	12
#define		AD3	13
#define		AV1	14
#define		AV2	15
#define		AV3	16

/* Define type of display level of TACTIS character */
#define		NONDISP	0	/* unprintable character */
#define		BASE	1	/* base character */
#define		ABOVE	2	/* above character */
#define		BELOW	3	/* below character */
#define		TOP	4	/* top character */

/* Define wchar version of the name of TIS620.2533 code */
#define		WC_SARA_AM	L'\323'

#endif	/* _WTT_H */
#ifdef  SCCS
static char SccsId[] = "@(#)Wtt.c 1.2     98/06/29 SMI";
#endif

#include <sys/isa_defs.h>
#include "wtt.h"

int _TACchclass[256] = {
	/*	   0,   1,   2,   3,   4,   5,   6,   7,
		   8,   9,   A,   B,   C,   D,   E,   F  */

	/*00*/	CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
		CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
	/*10*/	CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
		CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
	/*20*/	 NON, NON, NON, NON, NON, NON, NON, NON,
		 NON, NON, NON, NON, NON, NON, NON, NON,
	/*30*/	 NON, NON, NON, NON, NON, NON, NON, NON,
		 NON, NON, NON, NON, NON, NON, NON, NON,
	/*40*/	 NON, NON, NON, NON, NON, NON, NON, NON,
		 NON, NON, NON, NON, NON, NON, NON, NON,
	/*50*/	 NON, NON, NON, NON, NON, NON, NON, NON,
		 NON, NON, NON, NON, NON, NON, NON, NON,
	/*60*/	 NON, NON, NON, NON, NON, NON, NON, NON,
		 NON, NON, NON, NON, NON, NON, NON, NON,
	/*70*/	 NON, NON, NON, NON, NON, NON, NON, NON,
		 NON, NON, NON, NON, NON, NON, NON,CTRL,
	/*80*/	CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
		CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
	/*90*/	CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
		CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
	/*A0*/	 NON,CONS,CONS,CONS,CONS,CONS,CONS,CONS,
		CONS,CONS,CONS,CONS,CONS,CONS,CONS,CONS,
	/*B0*/	CONS,CONS,CONS,CONS,CONS,CONS,CONS,CONS,
		CONS,CONS,CONS,CONS,CONS,CONS,CONS,CONS,
	/*C0*/	CONS,CONS,CONS,CONS, FV3,CONS, FV3,CONS,
		CONS,CONS,CONS,CONS,CONS,CONS,CONS, NON,
	/*D0*/	 FV1, AV2, FV1, FV1, AV1, AV3, AV2, AV3,
		 BV1, BV2,  BD, NON, NON, NON, NON, NON,
	/*E0*/	  LV,  LV,  LV,  LV,  LV, FV2, NON, AD2,
		TONE,TONE,TONE,TONE, AD1, AD1, AD3, NON,
	/*F0*/	 NON, NON, NON, NON, NON, NON, NON, NON,
		 NON, NON, NON, NON, NON, NON, NON,CTRL
};

/* Table for Thai Cell Manipulation */
char _TAC_celltype_inputcheck[17][17] = {
	/* Cn */ /*	 0,  1,  2,  3,  4,  5,  6,  7,
			 8,  9,  A,  B,  C,  D,  E,  F	    */
	/* Cn-1 00 */	'X', 'A', 'A', 'A', 'A', 'A', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
	     /* 10 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
	     /* 20 */	'X', 'A', 'A', 'A', 'A', 'S', 'A', 'C',
			'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C',
	     /*	30 */	'X', 'S', 'A', 'S', 'S', 'S', 'S', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
	     /* 40 */	'X', 'S', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
	     /* 50 */	'X', 'A', 'A', 'A', 'A', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
	     /* 60 */	'X', 'A', 'A', 'A', 'S', 'A', 'S', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
	     /* 70 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'C', 'C', 'R', 'R', 'R', 'R', 'R',
	     /* 80 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'C', 'R', 'R', 'R', 'R', 'R', 'R',
	     /* 90 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
	     /* A0 */	'X', 'A', 'A', 'A', 'A', 'A', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
	     /* B0 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
	     /* C0 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
	     /* D0 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
	     /* E0 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'C', 'C', 'R', 'R', 'R', 'R', 'R',
	     /* F0 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'C', 'R', 'R', 'R', 'R', 'R', 'R',
			'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'C', 'R', 'C', 'R', 'R', 'R', 'R'
};


char _TAC_cellShptype_inputcheck[28][28] = {
	/* Cn */ /*	 0,  1,  2,  3,  4,  5,  6,  7,
			 8,  9,  A,  B,  C,  D,  E,  F	    */
	/* Cn-1 00 */	'X', 'A', 'A', 'A', 'A', 'A', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* 10 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* 20 */	'X', 'A', 'A', 'A', 'A', 'S', 'A', 'C',
			'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C',
			'A', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C',
			'C', 'C',
	     /*	30 */	'X', 'S', 'A', 'S', 'S', 'S', 'S', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* 40 */	'X', 'S', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* 50 */	'X', 'A', 'A', 'A', 'A', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* 60 */	'X', 'A', 'A', 'A', 'S', 'A', 'S', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* 70 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'C', 'C', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'C', 'C', 'R', 'R', 'R',
			'R', 'R',
	     /* 80 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'C', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'C', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* 90 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* A0 */	'X', 'A', 'A', 'A', 'A', 'A', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* B0 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* C0 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* D0 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* E0 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'C', 'C', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'C', 'C', 'R', 'R', 'R',
			'R', 'R',
	     /* F0 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'C', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'C', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* F1 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'C', 'R', 'C', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'C', 'R', 'C', 'R', 'R',
			'R', 'R',
	     /* F2 */	'X', 'A', 'A', 'A', 'A', 'S', 'A', 'C',
			'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C',
			'A', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C',
			'C', 'C',
	     /* F3 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'C', 'C', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'C', 'C', 'R', 'R', 'R',
			'R', 'R',
	     /* F4 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'C', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'C', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* F5 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* F6 */	'X', 'A', 'A', 'A', 'A', 'A', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* F7 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* F8 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* F9 */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* FA */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'C', 'C', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'C', 'C', 'R', 'R', 'R',
			'R', 'R',
	     /* FB */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'C', 'R', 'R', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'C', 'R', 'R', 'R', 'R',
			'R', 'R',
	     /* FC */	'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R',
			'R', 'R', 'C', 'R', 'C', 'R', 'R', 'R', 'R',
			'A', 'R', 'R', 'R', 'C', 'R', 'C', 'R', 'R',
			'R', 'R'
};



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]