📄 farsi.c
字号:
chg_c_toX_orX ();
chg_l_toXor_X ();
if (!p_ri)
inc_cursor();
}
}
arrow_used = TRUE;
stop_arrow();
if (!curwin->w_p_rl && revins)
inc_cursor();
++revins;
p_ri=1;
}
else
{
if (revins)
{
arrow_used = TRUE;
stop_arrow();
revins=0;
tempc = gchar_cursor();
if (curwin->w_p_rl)
{
while ((F_isdigit(gchar_cursor())
|| (gchar_cursor() == F_PERIOD
|| gchar_cursor() == F_PLUS
|| gchar_cursor() == F_MINUS
|| gchar_cursor() == F_MUL
|| gchar_cursor() == F_DIVIDE
|| gchar_cursor() == F_PERCENT
|| gchar_cursor() == F_EQUALS))
&& gchar_cursor()!= NUL)
++curwin->w_cursor.col;
}
else
{
if (curwin->w_cursor.col)
while ((F_isdigit(gchar_cursor())
|| (gchar_cursor() == F_PERIOD
|| gchar_cursor() == F_PLUS
|| gchar_cursor() == F_MINUS
|| gchar_cursor() == F_MUL
|| gchar_cursor() == F_DIVIDE
|| gchar_cursor() == F_PERCENT
|| gchar_cursor() == F_EQUALS))
&& --curwin->w_cursor.col);
if (!F_isdigit(gchar_cursor()))
++curwin->w_cursor.col;
}
}
}
if (!revins)
{
if (curwin->w_p_rl)
p_ri=0;
if (!curwin->w_p_rl)
p_ri=1;
}
if ((c < 0x100) && (isalpha(c) || c == '&' || c == '^' || c == ';' ||
c == '\''|| c == ',' || c == '[' ||
c == ']' || c == '{' || c == '}' ))
chg_r_to_Xor_X_();
tempc = 0;
switch (c)
{
case '`':
case ' ':
case '.':
case '!':
case '"':
case '$':
case '%':
case '^':
case '&':
case '/':
case '(':
case ')':
case '=':
case '\\':
case '?':
case '+':
case '-':
case '_':
case '*':
case ':':
case '#':
case '~':
case '@':
case '<':
case '>':
case '{':
case '}':
case '|':
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case 'B':
case 'E':
case 'F':
case 'H':
case 'I':
case 'K':
case 'L':
case 'M':
case 'O':
case 'P':
case 'Q':
case 'R':
case 'T':
case 'U':
case 'W':
case 'Y':
case NL:
case TAB:
if (p_ri && c == NL && curwin->w_cursor.col)
{
/*
** If the char before the cursor is _X_ or X_ do not change
** the one under the cursor with X type.
*/
dec_cursor();
if (F_isalpha(gchar_cursor()))
{
inc_cursor();
return NL;
}
inc_cursor();
}
if (!p_ri)
if (!curwin->w_cursor.col)
{
switch (c)
{
case '0': return FARSI_0;
case '1': return FARSI_1;
case '2': return FARSI_2;
case '3': return FARSI_3;
case '4': return FARSI_4;
case '5': return FARSI_5;
case '6': return FARSI_6;
case '7': return FARSI_7;
case '8': return FARSI_8;
case '9': return FARSI_9;
case 'B': return F_PSP;
case 'E': return JAZR_N;
case 'F': return ALEF_D_H;
case 'H': return ALEF_A;
case 'I': return TASH;
case 'K': return F_LQUOT;
case 'L': return F_RQUOT;
case 'M': return HAMZE;
case 'O': return '[';
case 'P': return ']';
case 'Q': return OO;
case 'R': return MAD_N;
case 'T': return OW;
case 'U': return MAD;
case 'W': return OW_OW;
case 'Y': return JAZR;
case '`': return F_PCN;
case '!': return F_EXCL;
case '@': return F_COMMA;
case '#': return F_DIVIDE;
case '$': return F_CURRENCY;
case '%': return F_PERCENT;
case '^': return F_MUL;
case '&': return F_BCOMMA;
case '*': return F_STAR;
case '(': return F_LPARENT;
case ')': return F_RPARENT;
case '-': return F_MINUS;
case '_': return F_UNDERLINE;
case '=': return F_EQUALS;
case '+': return F_PLUS;
case '\\': return F_BSLASH;
case '|': return F_PIPE;
case ':': return F_DCOLON;
case '"': return F_SEMICOLON;
case '.': return F_PERIOD;
case '/': return F_SLASH;
case '<': return F_LESS;
case '>': return F_GREATER;
case '?': return F_QUESTION;
case ' ': return F_BLANK;
}
break;
}
if (!p_ri)
dec_cursor();
switch ((tempc = gchar_cursor()))
{
case _BE:
case _PE:
case _TE:
case _SE:
case _JIM:
case _CHE:
case _HE_J:
case _XE:
case _SIN:
case _SHIN:
case _SAD:
case _ZAD:
case _FE:
case _GHAF:
case _KAF:
case _KAF_H:
case _GAF:
case _LAM:
case _MIM:
case _NOON:
case _HE:
case _HE_:
case _TA:
case _ZA:
put_curr_and_l_to_X(toF_TyA(tempc));
break;
case _AYN:
case _AYN_:
if (!p_ri)
if (!curwin->w_cursor.col)
{
put_curr_and_l_to_X(AYN);
break;
}
if (p_ri)
inc_cursor();
else
dec_cursor();
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
tempc = AYN_;
else
tempc = AYN;
if (p_ri)
dec_cursor();
else
inc_cursor();
put_curr_and_l_to_X(tempc);
break;
case _GHAYN:
case _GHAYN_:
if (!p_ri)
if (!curwin->w_cursor.col)
{
put_curr_and_l_to_X(GHAYN);
break;
}
if (p_ri)
inc_cursor();
else
dec_cursor();
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
tempc = GHAYN_;
else
tempc = GHAYN;
if (p_ri)
dec_cursor();
else
inc_cursor();
put_curr_and_l_to_X(tempc);
break;
case _YE:
case _IE:
case _YEE:
if (!p_ri)
if (!curwin->w_cursor.col)
{
put_curr_and_l_to_X((tempc == _YE ? YE :
(tempc == _IE ? IE : YEE)));
break;
}
if (p_ri)
inc_cursor();
else
dec_cursor();
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
tempc = (tempc == _YE ? YE_ :
(tempc == _IE ? IE_ : YEE_));
else
tempc = (tempc == _YE ? YE :
(tempc == _IE ? IE : YEE));
if (p_ri)
dec_cursor();
else
inc_cursor();
put_curr_and_l_to_X(tempc);
break;
}
if (!p_ri)
inc_cursor();
tempc = 0;
switch (c)
{
case '0': return FARSI_0;
case '1': return FARSI_1;
case '2': return FARSI_2;
case '3': return FARSI_3;
case '4': return FARSI_4;
case '5': return FARSI_5;
case '6': return FARSI_6;
case '7': return FARSI_7;
case '8': return FARSI_8;
case '9': return FARSI_9;
case 'B': return F_PSP;
case 'E': return JAZR_N;
case 'F': return ALEF_D_H;
case 'H': return ALEF_A;
case 'I': return TASH;
case 'K': return F_LQUOT;
case 'L': return F_RQUOT;
case 'M': return HAMZE;
case 'O': return '[';
case 'P': return ']';
case 'Q': return OO;
case 'R': return MAD_N;
case 'T': return OW;
case 'U': return MAD;
case 'W': return OW_OW;
case 'Y': return JAZR;
case '`': return F_PCN;
case '!': return F_EXCL;
case '@': return F_COMMA;
case '#': return F_DIVIDE;
case '$': return F_CURRENCY;
case '%': return F_PERCENT;
case '^': return F_MUL;
case '&': return F_BCOMMA;
case '*': return F_STAR;
case '(': return F_LPARENT;
case ')': return F_RPARENT;
case '-': return F_MINUS;
case '_': return F_UNDERLINE;
case '=': return F_EQUALS;
case '+': return F_PLUS;
case '\\': return F_BSLASH;
case '|': return F_PIPE;
case ':': return F_DCOLON;
case '"': return F_SEMICOLON;
case '.': return F_PERIOD;
case '/': return F_SLASH;
case '<': return F_LESS;
case '>': return F_GREATER;
case '?': return F_QUESTION;
case ' ': return F_BLANK;
}
break;
case 'a':
tempc = _SHIN;
break;
case 'A':
tempc = WAW_H;
break;
case 'b':
tempc = ZAL;
break;
case 'c':
tempc = ZE;
break;
case 'C':
tempc = JE;
break;
case 'd':
tempc = _YE;
break;
case 'D':
tempc = _YEE;
break;
case 'e':
tempc = _SE;
break;
case 'f':
tempc = _BE;
break;
case 'g':
tempc = _LAM;
break;
case 'G':
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
{
if (gchar_cursor() == _LAM)
chg_c_toX_orX ();
else
if (p_ri)
chg_c_to_X_or_X ();
}
if (!p_ri)
if (!curwin->w_cursor.col)
return ALEF_U_H;
if (!p_ri)
dec_cursor();
if (gchar_cursor() == _LAM)
{
chg_c_toX_orX ();
chg_l_toXor_X ();
tempc = ALEF_U_H;
}
else
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
{
tempc = ALEF_U_H_;
chg_l_toXor_X ();
}
else
tempc = ALEF_U_H;
if (!p_ri)
inc_cursor();
return tempc;
case 'h':
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
{
if (p_ri)
chg_c_to_X_or_X ();
}
if (!p_ri)
if (!curwin->w_cursor.col)
return ALEF;
if (!p_ri)
dec_cursor();
if (gchar_cursor() == _LAM)
{
chg_l_toXor_X();
del_char(FALSE);
AppendCharToRedobuff(K_BS);
if (!p_ri)
dec_cursor();
tempc = LA;
}
else
{
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
{
tempc = ALEF_;
chg_l_toXor_X ();
}
else
tempc = ALEF;
}
if (!p_ri)
inc_cursor();
return tempc;
case 'i':
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
{
if (!p_ri && !F_is_TyE(tempc))
chg_c_to_X_orX_ ();
if (p_ri)
chg_c_to_X_or_X ();
}
if (!p_ri && !curwin->w_cursor.col)
return _HE;
if (!p_ri)
dec_cursor();
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
tempc = _HE_;
else
tempc = _HE;
if (!p_ri)
inc_cursor();
break;
case 'j':
tempc = _TE;
break;
case 'J':
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
{
if (p_ri)
chg_c_to_X_or_X ();
}
if (!p_ri)
if (!curwin->w_cursor.col)
return TEE;
if (!p_ri)
dec_cursor();
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
{
tempc = TEE_;
chg_l_toXor_X ();
}
else
tempc = TEE;
if (!p_ri)
inc_cursor();
return tempc;
case 'k':
tempc = _NOON;
break;
case 'l':
tempc = _MIM;
break;
case 'm':
tempc = _PE;
break;
case 'n':
case 'N':
tempc = DAL;
break;
case 'o':
tempc = _XE;
break;
case 'p':
tempc = _HE_J;
break;
case 'q':
tempc = _ZAD;
break;
case 'r':
tempc = _GHAF;
break;
case 's':
tempc = _SIN;
break;
case 'S':
tempc = _IE;
break;
case 't':
tempc = _FE;
break;
case 'u':
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
{
if (!p_ri && !F_is_TyE(tempc))
chg_c_to_X_orX_ ();
if (p_ri)
chg_c_to_X_or_X ();
}
if (!p_ri && !curwin->w_cursor.col)
return _AYN;
if (!p_ri)
dec_cursor();
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
tempc = _AYN_;
else
tempc = _AYN;
if (!p_ri)
inc_cursor();
break;
case 'v':
case 'V':
tempc = RE;
break;
case 'w':
tempc = _SAD;
break;
case 'x':
case 'X':
tempc = _TA;
break;
case 'y':
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
{
if (!p_ri && !F_is_TyE(tempc))
chg_c_to_X_orX_ ();
if (p_ri)
chg_c_to_X_or_X ();
}
if (!p_ri && !curwin->w_cursor.col)
return _GHAYN;
if (!p_ri)
dec_cursor();
if (F_is_TyB_TyC_TyD(SRC_EDT, AT_CURSOR))
tempc = _GHAYN_;
else
tempc = _GHAYN;
if (!p_ri)
inc_cursor();
break;
case 'z':
tempc = _ZA;
break;
case 'Z':
tempc = _KAF_H;
break;
case ';':
tempc = _KAF;
break;
case '\'':
tempc = _GAF;
break;
case ',':
tempc = WAW;
break;
case '[':
tempc = _JIM;
break;
case ']':
tempc = _CHE;
break;
}
if ((F_isalpha(tempc) || F_isdigit(tempc)))
{
if (!curwin->w_cursor.col && STRLEN(ml_get_curline()))
{
if (!p_ri && !F_is_TyE(tempc))
chg_c_to_X_orX_ ();
if (p_ri)
chg_c_to_X_or_X ();
}
if (curwin->w_cursor.col)
{
if (!p_ri)
dec_cursor();
if (F_is_TyE(tempc))
chg_l_toXor_X ();
else
chg_l_to_X_orX_ ();
if (!p_ri)
inc_cursor();
}
}
if (tempc)
return tempc;
return c;
}
/*
** Convert a none leading Farsi char into a leading type.
*/
static int
toF_leading(c)
int c;
{
switch (c)
{
case ALEF_: return ALEF;
case ALEF_U_H_: return ALEF_U_H;
case BE: return _BE;
case PE: return _PE;
case TE: return _TE;
case SE: return _SE;
case JIM: return _JIM;
case CHE: return _CHE;
case HE_J: return _HE_J;
case XE: return _XE;
case SIN: return _SIN;
case SHIN: return _SHIN;
case SAD: return _SAD;
case ZAD: return _ZAD;
case AYN:
case AYN_:
case _AYN_: return _AYN;
case GHAYN:
case GHAYN_:
case _GHAYN_: return _GHAYN;
case FE: return _FE;
case GHAF: return _GHAF;
case KAF: return _KAF;
case GAF: return _GAF;
case LAM: return _LAM;
case MIM: return _MIM;
case NOON: return _NOON;
case _HE_:
case F_HE: return _HE;
case YE:
case YE_: return _YE;
case IE_:
case IE: return _IE;
case YEE:
case YEE_: return _YEE;
}
return c;
}
/*
** Convert a given Farsi char into right joining type.
*/
static int
toF_Rjoin(c)
int c;
{
switch (c)
{
case ALEF: return ALEF_;
case ALEF_U_H: return ALEF_U_H_;
case BE: return _BE;
case PE: return _PE;
case TE: return _TE;
case SE: return _SE;
case JIM: return _JIM;
case CHE: return _CHE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -