Annotation of lucent/sys/src/9/port/latin1.c, revision 1.1.1.1

1.1       root        1: #include <u.h>
                      2: 
                      3: /*
                      4:  * The code makes two assumptions: strlen(ld) is 1 or 2; latintab[i].ld can be a
                      5:  * prefix of latintab[j].ld only when j<i.
                      6:  */
                      7: struct cvlist
                      8: {
                      9:        char    *ld;            /* must be seen before using this conversion */
                     10:        char    *si;            /* options for last input characters */
                     11:        Rune    *so;            /* the corresponding Rune for each si entry */
                     12: } latintab[] = {
                     13:        " ",  " i",             L"␣ı",
                     14:        "!~", "-=~",            L"≄≇≉",
                     15:        "!",  "!<=>?bmp",       L"¡≮≠≯‽⊄∉⊅",
                     16:        "\"*","IUiu",           L"ΪΫϊϋ",
                     17:        "\"", "AEIOUY\"aeiouy", L"ÄËÏÖÜŸ¨äëïöüÿ",
                     18:        "$*", "fhk",            L"ϕϑϰ",
                     19:        "$",  "BEFHILMoRVaefglpv",      L"ℬℰℱℋℐℒℳℴℛƲɑℯƒℊℓ℘ʋ",
                     20:        "'\"","Uu",             L"Ǘǘ",
                     21:        "'",  "'ACEILNORSUYZacegilnorsuyz",
                     22:                                L"´ÁĆÉÍĹŃÓŔŚÚÝŹáćéģíĺńóŕśúýź",
                     23:        "*",  "*ABCDEFGHIKLMNOPQRSTUWXYZabcdefghiklmnopqrstuwxyz",
                     24:                L"∗ΑΒΞΔΕΦΓΘΙΚΛΜΝΟΠΨΡΣΤΥΩΧΗΖαβξδεφγθικλμνοπψρστυωχηζ",
                     25:        "+",  "-O",             L"±⊕",
                     26:        ",",  ",ACEGIKLNORSTUacegiklnorstu",
                     27:                                L"¸ĄÇĘĢĮĶĻŅǪŖŞŢŲąçęģįķļņǫŗşţų",
                     28:        "-*", "l",              L"ƛ",
                     29:        "-",  "+-2:>DGHILOTZbdghiltuz~",
                     30:                                L"∓­ƻ÷→ÐǤĦƗŁ⊖ŦƵƀðǥℏɨłŧʉƶ≂",
                     31:        ".",  ".CEGILOZceglz",  L"·ĊĖĠİĿ⊙Żċėġŀż",
                     32:        "/",  "Oo",             L"Øø",
                     33:        "1",  "234568",         L"½⅓¼⅕⅙⅛",
                     34:        "2",  "-35",            L"ƻ⅔⅖",
                     35:        "3",  "458",            L"¾⅗⅜",
                     36:        "4",  "5",              L"⅘",
                     37:        "5",  "68",             L"⅚⅝",
                     38:        "7",  "8",              L"⅞",
                     39:        ":",  "-=",             L"÷≔",
                     40:        "<!", "=~",             L"≨⋦",
                     41:        "<",  "-<=>~",          L"←«≤≶≲",
                     42:        "=",  ":<=>OV",         L"≕⋜≡⋝⊜⇒",
                     43:        ">!", "=~",             L"≩⋧",
                     44:        ">",  "<=>~",           L"≷≥»≳",
                     45:        "?",  "!?",             L"‽¿",
                     46:        "@@",  "'EKSTYZekstyz", L"ьЕКСТЫЗекстыз",
                     47:        "@'",  "'",     L"ъ",
                     48:        "@C",  "Hh",    L"ЧЧ",
                     49:        "@E",  "Hh",    L"ЭЭ",
                     50:        "@K",  "Hh",    L"ХХ",
                     51:        "@S",  "CHch",  L"ЩШЩШ",
                     52:        "@T",  "Ss",    L"ЦЦ",
                     53:        "@Y",  "AEOUaeou",      L"ЯЕЁЮЯЕЁЮ",
                     54:        "@Z",  "Hh",    L"ЖЖ",
                     55:        "@c",  "h",     L"ч",
                     56:        "@e",  "h",     L"э",
                     57:        "@k",  "h",     L"х",
                     58:        "@s",  "ch",    L"щш",
                     59:        "@t",  "s",     L"ц",
                     60:        "@y",  "aeou",  L"яеёю",
                     61:        "@z",  "h",     L"ж",
                     62:        "@",  "ABDFGIJLMNOPRUVXabdfgijlmnopruvx",
                     63:                                L"АБДФГИЙЛМНОПРУВХабдфгийлмнопрувх",
                     64:        "A",  "E",              L"Æ",
                     65:        "C",  "ACU",            L"⋂ℂ⋃",
                     66:        "Dv", "Zz",             L"DŽDž",
                     67:        "D",  "-e",             L"Ð∆",
                     68:        "G",  "-",              L"Ǥ",
                     69:        "H",  "-H",             L"Ħℍ",
                     70:        "I",  "-J",             L"ƗIJ",
                     71:        "L",  "&-Jj|",          L"⋀ŁLJLj⋁",
                     72:        "N",  "JNj",            L"NJℕNj",
                     73:        "O",  "*+-./=EIcoprx",  L"⊛⊕⊖⊙⊘⊜ŒƢ©⊚℗®⊗",
                     74:        "P",  "P",              L"ℙ",
                     75:        "Q",  "Q",              L"ℚ",
                     76:        "R",  "R",              L"ℝ",
                     77:        "S",  "S",              L"§",
                     78:        "T",  "-u",             L"Ŧ⊨",
                     79:        "V",  "=",              L"⇐",
                     80:        "Y",  "R",              L"Ʀ",
                     81:        "Z",  "-Z",             L"Ƶℤ",
                     82:        "^",  "ACEGHIJOSUWYaceghijosuwy",
                     83:                                L"ÂĈÊĜĤÎĴÔŜÛŴŶâĉêĝĥîĵôŝûŵŷ",
                     84:        "_\"","AUau",           L"ǞǕǟǖ",
                     85:        "_.", "Aa",             L"Ǡǡ",
                     86:        "_,", "Oo",             L"Ǭǭ",
                     87:        "_",  "_AEIOUaeiou",    L"¯ĀĒĪŌŪāēīōū",
                     88:        "`\"","Uu",             L"Ǜǜ",
                     89:        "`",  "AEIOUaeiou",     L"ÀÈÌÒÙàèìòù",
                     90:        "a",  "ben",            L"↔æ∠",
                     91:        "b",  "()+-0123456789=bknpqru",
                     92:                                L"₍₎₊₋₀₁₂₃₄₅₆₇₈₉₌♝♚♞♟♛♜•",
                     93:        "c",  "$Oagu",          L"¢©∩≅∪",
                     94:        "dv", "z",              L"dž",
                     95:        "d",  "-adegz",         L"ð↓‡°†ʣ",
                     96:        "e",  "ls",             L"⋯∅",
                     97:        "f",  "a",              L"∀",
                     98:        "g",  "$-r",            L"¤ǥ∇",
                     99:        "h",  "-v",             L"ℏƕ",
                    100:        "i",  "-bfjps",         L"ɨ⊆∞ij⊇∫",
                    101:        "l",  "\"$&'-jz|",      L"“£∧‘łlj⋄∨",
                    102:        "m",  "iou",            L"µ∈×",
                    103:        "n",  "jo",             L"nj¬",
                    104:        "o",  "AOUaeiu",        L"Å⊚Ůåœƣů",
                    105:        "p",  "Odgrt",          L"℗∂¶∏∝",
                    106:        "r",  "\"'O",           L"”’®",
                    107:        "s",  "()+-0123456789=abnoprstu",
                    108:                                L"⁽⁾⁺⁻⁰¹²³⁴⁵⁶⁷⁸⁹⁼ª⊂ⁿº⊃√ß∍∑",
                    109:        "t",  "-efmsu",         L"ŧ∃∴™ς⊢",
                    110:        "u",  "-AEGIOUaegiou",  L"ʉĂĔĞĬŎŬ↑ĕğĭŏŭ",
                    111:        "v\"","Uu",             L"Ǚǚ",
                    112:        "v",  "ACDEGIKLNORSTUZacdegijklnorstuz",
                    113:                                L"ǍČĎĚǦǏǨĽŇǑŘŠŤǓŽǎčďěǧǐǰǩľňǒřšťǔž",
                    114:        "w",  "bknpqr",         L"♗♔♘♙♕♖",
                    115:        "x",  "O",              L"⊗",
                    116:        "y",  "$",              L"¥",
                    117:        "z",  "-",              L"ƶ",
                    118:        "|",  "Pp|",            L"Þþ¦",
                    119:        "~!", "=",              L"≆",
                    120:        "~",  "-=AINOUainou~",  L"≃≅ÃĨÑÕŨãĩñõũ≈",
                    121:        0,      0,              0
                    122: };
                    123: 
                    124: /*
                    125:  * Given 5 characters k[0]..k[4], find the rune or return -1 for failure.
                    126:  */
                    127: long
                    128: unicode(uchar *k)
                    129: {
                    130:        long i, c;
                    131: 
                    132:        k++;    /* skip 'X' */
                    133:        c = 0;
                    134:        for(i=0; i<4; i++,k++){
                    135:                c <<= 4;
                    136:                if('0'<=*k && *k<='9')
                    137:                        c += *k-'0';
                    138:                else if('a'<=*k && *k<='f')
                    139:                        c += 10 + *k-'a';
                    140:                else if('A'<=*k && *k<='F')
                    141:                        c += 10 + *k-'A';
                    142:                else
                    143:                        return -1;
                    144:        }
                    145:        return c;
                    146: }
                    147: 
                    148: /*
                    149:  * Given n characters k[0]..k[n-1], find the corresponding rune or return -1 for
                    150:  * failure, or something < -1 if n is too small.  In the latter case, the result
                    151:  * is minus the required n.
                    152:  */
                    153: long
                    154: latin1(uchar *k, int n)
                    155: {
                    156:        struct cvlist *l;
                    157:        int c;
                    158:        char* p;
                    159: 
                    160:        if(k[0] == 'X')
                    161:                if(n>=5)
                    162:                        return unicode(k);
                    163:                else
                    164:                        return -5;
                    165:        for(l=latintab; l->ld!=0; l++)
                    166:                if(k[0] == l->ld[0]){
                    167:                        if(n == 1)
                    168:                                return -2;
                    169:                        if(l->ld[1] == 0)
                    170:                                c = k[1];
                    171:                        else if(l->ld[1] != k[1])
                    172:                                continue;
                    173:                        else if(n == 2)
                    174:                                return -3;
                    175:                        else
                    176:                                c = k[2];
                    177:                        for(p=l->si; *p!=0; p++)
                    178:                                if(*p == c)
                    179:                                        return l->so[p - l->si];
                    180:                        return -1;
                    181:                }
                    182:        return -1;
                    183: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.