Annotation of lucent/sys/src/9/port/latin1.c, revision 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.