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

📄 minibidi.c

📁 大名鼎鼎的远程登录软件putty的Symbian版源码
💻 C
📖 第 1 页 / 共 3 页
字号:
		{		    j++;		}		if(types[j] == L)		{		    while(i<j)		    {			types[i] = L;			i++;		    }		}	    }else if((types[i-1] == R)  ||		     (types[i-1] == EN) ||		     (types[i-1] == AN))		{		    j=i;		    while(j<(count-1) && types[j] == ON)		    {			j++;		    }		    if((types[j] == R)  ||		       (types[j] == EN) ||		       (types[j] == AN))		    {			while(i<j)			{			    types[i] = R;			    i++;			}		    }		}	}    }    if(types[count-1] == ON)    {	if(types[count-2] == R || types[count-2] == EN || types[count-2] == AN)	    types[count-1] = R;	else if(types[count-2] == L)	    types[count-1] = L;    }    /* Rule (N2)     * N2. Any remaining neutrals take the embedding direction.     */    for(i=0; i<count; i++)    {	if(types[i] == ON)	{	    if((levels[i] % 2) == 0)		types[i] = L;	    else		types[i] = R;	}    }    /* Rule (I1)     * I1. For all characters with an even (left-to-right) embedding     * direction, those of type R go up one level and those of type AN or     * EN go up two levels.     */    for(i=0; i<count; i++)    {	if((levels[i] % 2) == 0)	{	    if(types[i] == R)		levels[i] += 1;	    else if(types[i] == AN || types[i] == EN)		levels[i] += 2;	}    }    /* Rule (I2)     * I2. For all characters with an odd (right-to-left) embedding direction,     * those of type L, EN or AN go up one level.     */    for(i=0; i<count; i++)    {	if((levels[i] % 2) == 1)	{	    if(types[i] == L || types[i] == EN || types[i] == AN)		levels[i] += 1;	}    }    /* Rule (L1)     * L1. On each line, reset the embedding level of the following characters     * to the paragraph embedding level:     *		(1)segment separators, (2)paragraph separators,     *           (3)any sequence of whitespace characters preceding     *           a segment separator or paragraph separator,     *           (4)and any sequence of white space characters     *           at the end of the line.     * The types of characters used here are the original types, not those     * modified by the previous phase.     */    j=count-1;    while(j>0 && (getType(line[j].wc) == WS))    {	j--;    }    if(j < (count-1))    {	for(j++; j<count; j++)	    levels[j] = paragraphLevel;    }    for(i=0; i<count; i++)    {	tempType = getType(line[i].wc);	if(tempType == WS)	{	    j=i;	    while(j<count && (getType(line[j].wc) == WS))	    {		j++;	    }	    if(getType(line[j].wc) == B || getType(line[j].wc) == S)	    {		for(j--; j>=i ; j--)		{		    levels[j] = paragraphLevel;		}	    }	}else if(tempType == B || tempType == S)		levels[i] = paragraphLevel;    }    /* Rule (L4) NOT IMPLEMENTED     * L4. A character that possesses the mirrored property as specified by     * Section 4.7, Mirrored, must be depicted by a mirrored glyph if the     * resolved directionality of that character is R.     */    /* Note: this is implemented before L2 for efficiency */    for(i=0; i<count; i++)	if((levels[i] % 2) == 1)	    doMirror(&line[i].wc);    /* Rule (L2)     * L2. From the highest level found in the text to the lowest odd level on     * each line, including intermediate levels not actually present in the     * text, reverse any contiguous sequence of characters that are at that     * level or higher     */    /* we flip the character string and leave the level array */    imax = 0;    i=0;    tempType = levels[0];    while(i < count)    {	if(levels[i] > tempType)	{	    tempType = levels[i];	    imax=i;	}	i++;    }    /* maximum level in tempType, its index in imax. */    while(tempType > 0)		/* loop from highest level to the least odd, */    {				/* which i assume is 1 */	flipThisRun(line, levels, tempType, count);	tempType--;    }    /* Rule (L3) NOT IMPLEMENTED     * L3. Combining marks applied to a right-to-left base character will at     * this point precede their base character. If the rendering engine     * expects them to follow the base characters in the final display     * process, then the ordering of the marks and the base character must     * be reversed.     */    free(types);    free(levels);    return R;}/* * Bad, Horrible funtion * takes a pointer to a character that is checked for * having a mirror glyph. */void doMirror(wchar_t* ch){    if((*ch & 0xFF00) == 0)    {	switch(*ch)	{	  case 0x0028:	    *ch = 0x0029;	    break;	  case 0x0029:	    *ch = 0x0028;	    break;	  case 0x003C:	    *ch = 0x003E;	    break;	  case 0x003E:	    *ch = 0x003C;	    break;	  case 0x005B:	    *ch = 0x005D;	    break;	  case 0x005D:	    *ch = 0x005B;	    break;	  case 0x007B:	    *ch = 0x007D;	    break;	  case 0x007D:	    *ch = 0x007B;	    break;	  case 0x00AB:	    *ch = 0x00BB;	    break;	  case 0x00BB:	    *ch = 0x00AB;	    break;	}    }    else if((*ch & 0xFF00) == 0x2000)    {	switch(*ch)	{	  case 0x2039:	    *ch = 0x203A;	    break;	  case 0x203A:	    *ch = 0x2039;	    break;	  case 0x2045:	    *ch = 0x2046;	    break;	  case 0x2046:	    *ch = 0x2045;	    break;	  case 0x207D:	    *ch = 0x207E;	    break;	  case 0x207E:	    *ch = 0x207D;	    break;	  case 0x208D:	    *ch = 0x208E;	    break;	  case 0x208E:	    *ch = 0x208D;	    break;	}    }    else if((*ch & 0xFF00) == 0x2200)    {	switch(*ch)	{	  case 0x2208:	    *ch = 0x220B;	    break;	  case 0x2209:	    *ch = 0x220C;	    break;	  case 0x220A:	    *ch = 0x220D;	    break;	  case 0x220B:	    *ch = 0x2208;	    break;	  case 0x220C:	    *ch = 0x2209;	    break;	  case 0x220D:	    *ch = 0x220A;	    break;	  case 0x2215:	    *ch = 0x29F5;	    break;	  case 0x223C:	    *ch = 0x223D;	    break;	  case 0x223D:	    *ch = 0x223C;	    break;	  case 0x2243:	    *ch = 0x22CD;	    break;	  case 0x2252:	    *ch = 0x2253;	    break;	  case 0x2253:	    *ch = 0x2252;	    break;	  case 0x2254:	    *ch = 0x2255;	    break;	  case 0x2255:	    *ch = 0x2254;	    break;	  case 0x2264:	    *ch = 0x2265;	    break;	  case 0x2265:	    *ch = 0x2264;	    break;	  case 0x2266:	    *ch = 0x2267;	    break;	  case 0x2267:	    *ch = 0x2266;	    break;	  case 0x2268:	    *ch = 0x2269;	    break;	  case 0x2269:	    *ch = 0x2268;	    break;	  case 0x226A:	    *ch = 0x226B;	    break;	  case 0x226B:	    *ch = 0x226A;	    break;	  case 0x226E:	    *ch = 0x226F;	    break;	  case 0x226F:	    *ch = 0x226E;	    break;	  case 0x2270:	    *ch = 0x2271;	    break;	  case 0x2271:	    *ch = 0x2270;	    break;	  case 0x2272:	    *ch = 0x2273;	    break;	  case 0x2273:	    *ch = 0x2272;	    break;	  case 0x2274:	    *ch = 0x2275;	    break;	  case 0x2275:	    *ch = 0x2274;	    break;	  case 0x2276:	    *ch = 0x2277;	    break;	  case 0x2277:	    *ch = 0x2276;	    break;	  case 0x2278:	    *ch = 0x2279;	    break;	  case 0x2279:	    *ch = 0x2278;	    break;	  case 0x227A:	    *ch = 0x227B;	    break;	  case 0x227B:	    *ch = 0x227A;	    break;	  case 0x227C:	    *ch = 0x227D;	    break;	  case 0x227D:	    *ch = 0x227C;	    break;	  case 0x227E:	    *ch = 0x227F;	    break;	  case 0x227F:	    *ch = 0x227E;	    break;	  case 0x2280:	    *ch = 0x2281;	    break;	  case 0x2281:	    *ch = 0x2280;	    break;	  case 0x2282:	    *ch = 0x2283;	    break;	  case 0x2283:	    *ch = 0x2282;	    break;	  case 0x2284:	    *ch = 0x2285;	    break;	  case 0x2285:	    *ch = 0x2284;	    break;	  case 0x2286:	    *ch = 0x2287;	    break;	  case 0x2287:	    *ch = 0x2286;	    break;	  case 0x2288:	    *ch = 0x2289;	    break;	  case 0x2289:	    *ch = 0x2288;	    break;	  case 0x228A:	    *ch = 0x228B;	    break;	  case 0x228B:	    *ch = 0x228A;	    break;	  case 0x228F:	    *ch = 0x2290;	    break;	  case 0x2290:	    *ch = 0x228F;	    break;	  case 0x2291:	    *ch = 0x2292;	    break;	  case 0x2292:	    *ch = 0x2291;	    break;	  case 0x2298:	    *ch = 0x29B8;	    break;	  case 0x22A2:	    *ch = 0x22A3;	    break;	  case 0x22A3:	    *ch = 0x22A2;	    break;	  case 0x22A6:	    *ch = 0x2ADE;	    break;	  case 0x22A8:	    *ch = 0x2AE4;	    break;	  case 0x22A9:	    *ch = 0x2AE3;	    break;	  case 0x22AB:	    *ch = 0x2AE5;	    break;	  case 0x22B0:	    *ch = 0x22B1;	    break;	  case 0x22B1:	    *ch = 0x22B0;	    break;	  case 0x22B2:	    *ch = 0x22B3;	    break;	  case 0x22B3:	    *ch = 0x22B2;	    break;	  case 0x22B4:	    *ch = 0x22B5;	    break;	  case 0x22B5:	    *ch = 0x22B4;	    break;	  case 0x22B6:	    *ch = 0x22B7;	    break;	  case 0x22B7:	    *ch = 0x22B6;	    break;	  case 0x22C9:	    *ch = 0x22CA;	    break;	  case 0x22CA:	    *ch = 0x22C9;	    break;	  case 0x22CB:	    *ch = 0x22CC;	    break;	  case 0x22CC:	    *ch = 0x22CB;	    break;	  case 0x22CD:	    *ch = 0x2243;	    break;	  case 0x22D0:	    *ch = 0x22D1;	    break;	  case 0x22D1:	    *ch = 0x22D0;	    break;	  case 0x22D6:	    *ch = 0x22D7;	    break;	  case 0x22D7:	    *ch = 0x22D6;	    break;	  case 0x22D8:	    *ch = 0x22D9;	    break;	  case 0x22D9:	    *ch = 0x22D8;	    break;	  case 0x22DA:	    *ch = 0x22DB;	    break;	  case 0x22DB:	    *ch = 0x22DA;	    break;	  case 0x22DC:	    *ch = 0x22DD;	    break;	  case 0x22DD:	    *ch = 0x22DC;	    break;	  case 0x22DE:	    *ch = 0x22DF;	    break;	  case 0x22DF:	    *ch = 0x22DE;	    break;	  case 0x22E0:	    *ch = 0x22E1;	    break;	  case 0x22E1:	    *ch = 0x22E0;	    break;	  case 0x22E2:	    *ch = 0x22E3;	    break;	  case 0x22E3:	    *ch = 0x22E2;	    break;	  case 0x22E4:	    *ch = 0x22E5;	    break;	  case 0x22E5:	    *ch = 0x22E4;	    break;	  case 0x22E6:	    *ch = 0x22E7;	    break;	  case 0x22E7:	    *ch = 0x22E6;	    break;	  case 0x22E8:	    *ch = 0x22E9;	    break;	  case 0x22E9:	    *ch = 0x22E8;	    break;	  case 0x22EA:	    *ch = 0x22EB;	    break;	  case 0x22EB:	    *ch = 0x22EA;	    break;	  case 0x22EC:	    *ch = 0x22ED;	    break;	  case 0x22ED:	    *ch = 0x22EC;	    break;	  case 0x22F0:	    *ch = 0x22F1;	    break;	  case 0x22F1:	    *ch = 0x22F0;	    break;	  case 0x22F2:	    *ch = 0x22FA;	    break;	  case 0x22F3:	    *ch = 0x22FB;	    break;	  case 0x22F4:	    *ch = 0x22FC;	    break;	  case 0x22F6:	    *ch = 0x22FD;	    break;	  case 0x22F7:	    *ch = 0x22FE;	    break;	  case 0x22FA:	    *ch = 0x22F2;	    break;	  case 0x22FB:	    *ch = 0x22F3;	    break;	  case 0x22FC:	    *ch = 0x22F4;	    break;	  case 0x22FD:	    *ch = 0x22F6;	    break;	  case 0x22FE:	    *ch = 0x22F7;	    break;	}    }else if((*ch & 0xFF00) == 0x2300)

⌨️ 快捷键说明

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