⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 minibidi.h

📁 大名鼎鼎的远程登录软件putty的Symbian版源码
💻 H
📖 第 1 页 / 共 2 页
字号:
/************************************************************************ * $Id: minibidi.h,v 1.1.2.1 2004/12/29 11:32:15 pekangas Exp $ * * ------------ * Description: * ------------ * This is an implemention of Unicode's Bidirectional Algorithm * (known as UAX #9). * *   http://www.unicode.org/reports/tr9/ *  * Author: Ahmad Khalifa * * ----------------- * Revision Details:    (Updated by Revision Control System) * ----------------- *  $Date: 2004/12/29 11:32:15 $ *  $Author: pekangas $ *  $Revision: 1.1.2.1 $ *  $Source: /cygdrive/c/home/pekangas/.cvsroot/s2putty/putty/minibidi.h,v $ * * (www.arabeyes.org - under MIT license) * ************************************************************************//* * TODO: * ===== * - work almost finished * - Shaping Table to be expanded to include the whole range. * - Ligature handling */#include <stdlib.h>	/* definition of wchar_t*/#define LMASK	0x3F	/* Embedding Level mask */#define OMASK	0xC0	/* Override mask */#define OISL	0x80	/* Override is L */#define OISR	0x40	/* Override is R *//* Shaping Helpers */#define STYPE(xh) (((xh >= SHAPE_FIRST) && (xh <= SHAPE_LAST)) ? \shapetypes[xh-SHAPE_FIRST].type : SU) /*))*/#define SISOLATED(xh) (shapetypes[xh-SHAPE_FIRST].form_b)#define SFINAL(xh) xh+1#define SINITIAL(xh) xh+2#define SMEDIAL(ch) ch+3typedef struct bidi_char {    wchar_t origwc, wc;    unsigned short index;} bidi_char;/* function declarations */void flipThisRun(bidi_char *from, unsigned char* level, int max, int count);int findIndexOfRun(unsigned char* level , int start, int count, int tlevel);unsigned char getType(wchar_t ch);unsigned char setOverrideBits(unsigned char level, unsigned char override);unsigned char getPreviousLevel(unsigned char* level, int from);unsigned char leastGreaterOdd(unsigned char x);unsigned char leastGreaterEven(unsigned char x);unsigned char getRLE(wchar_t ch);int do_shape(bidi_char *line, bidi_char *to, int count);int do_bidi(bidi_char *line, int count);void doMirror(wchar_t* ch);/* character types */enum{   L,   LRE,   LRO,   R,   AL,   RLE,   RLO,   PDF,   EN,   ES,   ET,   AN,   CS,   NSM,   BN,   B,   S,   WS,   ON,};/* Shaping Types */enum{	SL, /* Left-Joining, doesnt exist in U+0600 - U+06FF */	SR, /* Right-Joining, ie has Isolated, Final */	SD, /* Dual-Joining, ie has Isolated, Final, Initial, Medial */	SU, /* Non-Joining */	SC  /* Join-Causing, like U+0640 (TATWEEL) */};typedef struct{	char type;	wchar_t form_b;} shape_node;/* Kept near the actual table, for verification. */#define SHAPE_FIRST 0x621#define SHAPE_LAST 0x64Aconst shape_node shapetypes[] = {/* index, Typ, Iso, Ligature Index*//* 621 */ {SU, 0xFE80},/* 622 */ {SR, 0xFE81},/* 623 */ {SR, 0xFE83},/* 624 */ {SR, 0xFE85},/* 625 */ {SR, 0xFE87},/* 626 */ {SD, 0xFE89},/* 627 */ {SR, 0xFE8D},/* 628 */ {SD, 0xFE8F},/* 629 */ {SR, 0xFE93},/* 62A */ {SD, 0xFE95},/* 62B */ {SD, 0xFE99},/* 62C */ {SD, 0xFE9D},/* 62D */ {SD, 0xFEA1},/* 62E */ {SD, 0xFEA5},/* 62F */ {SR, 0xFEA9},/* 630 */ {SR, 0xFEAB},/* 631 */ {SR, 0xFEAD},/* 632 */ {SR, 0xFEAF},/* 633 */ {SD, 0xFEB1},/* 634 */ {SD, 0xFEB5},/* 635 */ {SD, 0xFEB9},/* 636 */ {SD, 0xFEBD},/* 637 */ {SD, 0xFEC1},/* 638 */ {SD, 0xFEC5},/* 639 */ {SD, 0xFEC9},/* 63A */ {SD, 0xFECD},/* 63B */ {SU, 0x0},/* 63C */ {SU, 0x0},/* 63D */ {SU, 0x0},/* 63E */ {SU, 0x0},/* 63F */ {SU, 0x0},/* 640 */ {SC, 0x0},/* 641 */ {SD, 0xFED1},/* 642 */ {SD, 0xFED5},/* 643 */ {SD, 0xFED9},/* 644 */ {SD, 0xFEDD},/* 645 */ {SD, 0xFEE1},/* 646 */ {SD, 0xFEE5},/* 647 */ {SD, 0xFEE9},/* 648 */ {SR, 0xFEED},/* 649 */ {SR, 0xFEEF}, /* SD *//* 64A */ {SD, 0xFEF1},};/* * This describes the data byte and its frequency   */typedef struct{   unsigned char f;   unsigned char d;}RLENode;/* This is an array of RLENodes, which is the * Compressed unicode types table */const unsigned char RLE_table[] ={   0x09, 0x10, 0x01, 0x0F, 0x01, 0x10, 0x01, 0x11,   0x01, 0x0F, 0x01, 0x0E, 0x0E, 0x0F, 0x03, 0x10,   0x01, 0x11, 0x01, 0x12, 0x02, 0x0A, 0x03, 0x12,   0x05, 0x0A, 0x01, 0x0C, 0x01, 0x0A, 0x01, 0x0C,   0x01, 0x09, 0x01, 0x08, 0x0A, 0x0C, 0x01, 0x12,   0x06, 0x00, 0x1A, 0x12, 0x06, 0x00, 0x1A, 0x12,   0x04, 0x0E, 0x06, 0x0F, 0x01, 0x0E, 0x1A, 0x0C,   0x01, 0x12, 0x01, 0x0A, 0x04, 0x12, 0x04, 0x00,   0x01, 0x12, 0x05, 0x0A, 0x02, 0x08, 0x02, 0x12,   0x01, 0x00, 0x01, 0x12, 0x03, 0x08, 0x01, 0x00,   0x01, 0x12, 0x05, 0x00, 0x17, 0x12, 0x01, 0x00,   0x1F, 0x12, 0x01, 0x00, 0xFF, 0x00, 0x2A, 0x12,   0x01, 0x00, 0x12, 0x12, 0x1C, 0x00, 0x5E, 0x12,   0x02, 0x00, 0x09, 0x12, 0x02, 0x00, 0x07, 0x12,   0x0E, 0x00, 0x02, 0x12, 0x0E, 0x00, 0x05, 0x12,   0x09, 0x00, 0x01, 0x12, 0x11, 0x0D, 0x50, 0x12,   0x10, 0x0D, 0x10, 0x12, 0x0A, 0x00, 0x01, 0x12,   0x0B, 0x00, 0x01, 0x12, 0x01, 0x00, 0x03, 0x12,   0x01, 0x00, 0x01, 0x12, 0x01, 0x00, 0x14, 0x12,   0x01, 0x00, 0x2C, 0x12, 0x01, 0x00, 0x26, 0x12,   0x0A, 0x00, 0x83, 0x0D, 0x04, 0x12, 0x01, 0x0D,   0x02, 0x00, 0x45, 0x12, 0x01, 0x00, 0x26, 0x12,   0x02, 0x00, 0x02, 0x12, 0x06, 0x00, 0x10, 0x12,   0x21, 0x00, 0x26, 0x12, 0x02, 0x00, 0x07, 0x12,   0x01, 0x00, 0x27, 0x12, 0x01, 0x00, 0x01, 0x12,   0x07, 0x0D, 0x11, 0x12, 0x01, 0x0D, 0x17, 0x12,   0x01, 0x0D, 0x03, 0x03, 0x01, 0x0D, 0x01, 0x03,   0x01, 0x0D, 0x02, 0x03, 0x01, 0x0D, 0x01, 0x12,   0x0B, 0x03, 0x1B, 0x12, 0x05, 0x03, 0x05, 0x12,   0x17, 0x0C, 0x01, 0x12, 0x0E, 0x04, 0x01, 0x12,   0x03, 0x04, 0x01, 0x12, 0x01, 0x04, 0x1A, 0x12,   0x05, 0x04, 0x0B, 0x0D, 0x0B, 0x12, 0x0A, 0x0B,   0x0A, 0x0A, 0x01, 0x0B, 0x02, 0x04, 0x03, 0x0D,   0x01, 0x04, 0x65, 0x0D, 0x07, 0x04, 0x01, 0x0D,   0x07, 0x04, 0x02, 0x0D, 0x02, 0x12, 0x01, 0x0D,   0x04, 0x12, 0x02, 0x08, 0x0A, 0x04, 0x05, 0x12,   0x01, 0x04, 0x0E, 0x12, 0x01, 0x0E, 0x01, 0x04,   0x01, 0x0D, 0x01, 0x04, 0x1B, 0x12, 0x03, 0x0D,   0x1B, 0x12, 0x35, 0x04, 0x26, 0x0D, 0x0B, 0x04,   0x01, 0x12, 0xFF, 0x12, 0x50, 0x0D, 0x02, 0x00,   0x01, 0x12, 0x01, 0x00, 0x35, 0x12, 0x02, 0x0D,   0x01, 0x00, 0x04, 0x0D, 0x08, 0x00, 0x04, 0x0D,   0x01, 0x12, 0x02, 0x00, 0x01, 0x0D, 0x04, 0x12,   0x03, 0x00, 0x0A, 0x0D, 0x02, 0x00, 0x0D, 0x12,   0x10, 0x0D, 0x01, 0x00, 0x02, 0x12, 0x01, 0x00,   0x08, 0x12, 0x02, 0x00, 0x02, 0x12, 0x02, 0x00,   0x16, 0x12, 0x01, 0x00, 0x07, 0x12, 0x01, 0x00,   0x01, 0x12, 0x03, 0x00, 0x04, 0x12, 0x02, 0x0D,   0x01, 0x12, 0x01, 0x00, 0x03, 0x0D, 0x04, 0x12,   0x02, 0x00, 0x02, 0x12, 0x02, 0x00, 0x02, 0x0D,   0x01, 0x12, 0x09, 0x00, 0x01, 0x12, 0x04, 0x00,   0x02, 0x12, 0x01, 0x00, 0x03, 0x0D, 0x02, 0x12,   0x02, 0x00, 0x0C, 0x0A, 0x02, 0x00, 0x07, 0x12,   0x07, 0x0D, 0x01, 0x12, 0x02, 0x00, 0x06, 0x12,   0x04, 0x00, 0x02, 0x12, 0x02, 0x00, 0x16, 0x12,   0x01, 0x00, 0x07, 0x12, 0x01, 0x00, 0x02, 0x12,   0x01, 0x00, 0x02, 0x12, 0x01, 0x00, 0x02, 0x12,   0x02, 0x0D, 0x01, 0x12, 0x01, 0x00, 0x03, 0x0D,   0x02, 0x12, 0x04, 0x0D, 0x02, 0x12, 0x02, 0x0D,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -