/* $Id$ */ /* * Copyright (c) 2009 Kristaps Dzonsons * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* * The ASCII translation tables. STRING corresponds to predefined * strings (cf. mdoc_samples.7 and tmac/mdoc/doc-nroff). CHAR * corresponds to special characters (cf. groff_char.7). BOTH contains * sequences that are equivalent in both STRING and CHAR. * * Either way, the left-hand side corresponds to the input sequence (\x, * \(xx, \*(xx and so on) whose length is listed second element. The * right-hand side is what's produced by the front-end, with the fourth * element being its length. * * XXX - C-escape strings! * XXX - update LINES_MAX if adding more! */ /* Non-breaking, non-collapsing space uses unit separator. */ static const char ascii_nbrsp[2] = { ASCII_NBRSP, 0 }; CHAR_TBL_START /* Spacing. */ CHAR("c", "", 0, 0) CHAR("0", " ", 1, 8194) CHAR(" ", ascii_nbrsp, 1, 160) CHAR("~", ascii_nbrsp, 1, 160) CHAR("%", "", 0, 0) CHAR("&", "", 0, 0) CHAR("^", "", 0, 0) CHAR("|", "", 0, 0) CHAR("}", "", 0, 0) /* Accents. */ CHAR("a\"", "\"", 1, 779) CHAR("a-", "-", 1, 175) CHAR("a.", ".", 1, 729) CHAR("a^", "^", 1, 770) BOTH("\'", "\'", 1, 769) BOTH("aa", "\'", 1, 769) BOTH("ga", "`", 1, 768) BOTH("`", "`", 1, 768) CHAR("ab", "`", 1, 774) CHAR("ac", ",", 1, 807) CHAR("ad", "\"", 1, 776) CHAR("ah", "v", 1, 711) CHAR("ao", "o", 1, 730) CHAR("a~", "~", 1, 771) CHAR("ho", ",", 1, 808) CHAR("ha", "^", 1, 94) CHAR("ti", "~", 1, 126) /* Quotes. */ CHAR("Bq", ",,", 2, 8222) CHAR("bq", ",", 1, 8218) BOTH("lq", "``", 2, 8220) BOTH("rq", "\'\'", 2, 8221) CHAR("oq", "`", 1, 8216) CHAR("cq", "\'", 1, 8217) CHAR("aq", "\'", 1, 39) CHAR("dq", "\"", 1, 34) CHAR("Fo", "<<", 2, 171) CHAR("Fc", ">>", 2, 187) CHAR("fo", "<", 1, 8249) CHAR("fc", ">", 1, 8250) /* Brackets. */ CHAR("lB", "[", 1, 91) CHAR("rB", "]", 1, 93) CHAR("lC", "{", 1, 123) CHAR("rC", "}", 1, 125) CHAR("la", "<", 1, 60) CHAR("ra", ">", 1, 62) CHAR("bv", "|", 1, 9130) CHAR("braceex", "|", 1, 9130) CHAR("bracketlefttp", "|", 1, 9121) CHAR("bracketleftbp", "|", 1, 9123) CHAR("bracketleftex", "|", 1, 9122) CHAR("bracketrighttp", "|", 1, 9124) CHAR("bracketrightbp", "|", 1, 9126) CHAR("bracketrightex", "|", 1, 9125) CHAR("lt", ",-", 2, 9127) CHAR("bracelefttp", ",-", 2, 9127) CHAR("lk", "{", 1, 9128) CHAR("braceleftmid", "{", 1, 9128) CHAR("lb", ",-", 2, 9129) CHAR("braceleftbp", "`-", 2, 9129) CHAR("braceleftex", "|", 1, 9130) CHAR("rt", "-.", 2, 9131) CHAR("bracerighttp", "-.", 2, 9131) CHAR("rk", "}", 1, 9132) CHAR("bracerightmid", "}", 1, 9132) CHAR("rb", "-\'", 2, 9133) CHAR("bracerightbp", "-\'", 2, 9133) CHAR("bracerightex", "|", 1, 9130) CHAR("parenlefttp", "/", 1, 9115) CHAR("parenleftbp", "\\", 1, 9117) CHAR("parenleftex", "|", 1, 9116) CHAR("parenrighttp", "\\", 1, 9118) CHAR("parenrightbp", "/", 1, 9120) CHAR("parenrightex", "|", 1, 9119) /* Greek characters. */ CHAR("*A", "A", 1, 913) CHAR("*B", "B", 1, 914) CHAR("*G", "|", 1, 915) CHAR("*D", "/\\", 2, 916) CHAR("*E", "E", 1, 917) CHAR("*Z", "Z", 1, 918) CHAR("*Y", "H", 1, 919) CHAR("*H", "O", 1, 920) CHAR("*I", "I", 1, 921) CHAR("*K", "K", 1, 922) CHAR("*L", "/\\", 2, 923) CHAR("*M", "M", 1, 924) CHAR("*N", "N", 1, 925) CHAR("*C", "H", 1, 926) CHAR("*O", "O", 1, 927) CHAR("*P", "TT", 2, 928) CHAR("*R", "P", 1, 929) CHAR("*S", ">", 1, 931) CHAR("*T", "T", 1, 932) CHAR("*U", "Y", 1, 933) CHAR("*F", "O_", 1, 934) CHAR("*X", "X", 1, 935) CHAR("*Q", "Y", 1, 936) CHAR("*W", "O", 1, 937) CHAR("*a", "a", 1, 945) CHAR("*b", "B", 1, 946) CHAR("*g", "y", 1, 947) CHAR("*d", "d", 1, 948) CHAR("*e", "e", 1, 949) CHAR("*z", "C", 1, 950) CHAR("*y", "n", 1, 951) CHAR("*h", "0", 1, 952) CHAR("*i", "i", 1, 953) CHAR("*k", "k", 1, 954) CHAR("*l", "\\", 1, 955) CHAR("*m", "u", 1, 956) CHAR("*n", "v", 1, 957) CHAR("*c", "E", 1, 958) CHAR("*o", "o", 1, 959) CHAR("*p", "n", 1, 960) CHAR("*r", "p", 1, 961) CHAR("*s", "o", 1, 963) CHAR("*t", "t", 1, 964) CHAR("*u", "u", 1, 965) CHAR("*f", "o", 1, 981) CHAR("*x", "x", 1, 967) CHAR("*q", "u", 1, 968) CHAR("*w", "w", 1, 969) CHAR("+h", "0", 1, 977) CHAR("+f", "o", 1, 966) CHAR("+p", "w", 1, 982) CHAR("+e", "e", 1, 1013) CHAR("ts", "s", 1, 962) /* Accented letters. */ CHAR(",C", "C", 1, 199) CHAR(",c", "c", 1, 231) CHAR("/L", "L", 1, 321) CHAR("/O", "O", 1, 216) CHAR("/l", "l", 1, 322) CHAR("/o", "o", 1, 248) CHAR("oA", "A", 1, 197) CHAR("oa", "a", 1, 229) CHAR(":A", "A", 1, 196) CHAR(":E", "E", 1, 203) CHAR(":I", "I", 1, 207) CHAR(":O", "O", 1, 214) CHAR(":U", "U", 1, 220) CHAR(":a", "a", 1, 228) CHAR(":e", "e", 1, 235) CHAR(":i", "i", 1, 239) CHAR(":o", "o", 1, 245) CHAR(":u", "u", 1, 252) CHAR(":y", "y", 1, 255) CHAR("\'A", "A", 1, 193) CHAR("\'E", "E", 1, 201) CHAR("\'I", "I", 1, 205) CHAR("\'O", "O", 1, 211) CHAR("\'U", "U", 1, 218) CHAR("\'a", "a", 1, 225) CHAR("\'e", "e", 1, 233) CHAR("\'i", "i", 1, 237) CHAR("\'o", "o", 1, 243) CHAR("\'u", "u", 1, 250) CHAR("^A", "A", 1, 194) CHAR("^E", "E", 1, 202) CHAR("^I", "I", 1, 206) CHAR("^O", "O", 1, 212) CHAR("^U", "U", 1, 219) CHAR("^a", "a", 1, 226) CHAR("^e", "e", 1, 234) CHAR("^i", "i", 1, 238) CHAR("^o", "o", 1, 244) CHAR("^u", "u", 1, 251) CHAR("`A", "A", 1, 192) CHAR("`E", "E", 1, 200) CHAR("`I", "I", 1, 204) CHAR("`O", "O", 1, 210) CHAR("`U", "U", 1, 217) CHAR("`a", "a", 1, 224) CHAR("`e", "e", 1, 232) CHAR("`i", "i", 1, 236) CHAR("`o", "o", 1, 242) CHAR("`u", "u", 1, 249) CHAR("~A", "A", 1, 195) CHAR("~N", "N", 1, 209) CHAR("~O", "O", 1, 213) CHAR("~a", "a", 1, 227) CHAR("~n", "n", 1, 241) CHAR("~o", "o", 1, 245) /* Arrows and lines. */ CHAR("<-", "<-", 2, 8592) CHAR("->", "->", 2, 8594) CHAR("<>", "<>", 2, 8596) CHAR("da", "v", 1, 8595) BOTH("ua", "^", 1, 8593) BOTH("va", "^v", 2, 8597) CHAR("lA", "<=", 2, 8656) CHAR("rA", "=>", 2, 8658) CHAR("hA", "<=>", 3, 8660) CHAR("dA", "v", 1, 8659) CHAR("uA", "^", 1, 8657) CHAR("vA", "^=v", 3, 8661) /* Logic. */ CHAR("AN", "^", 1, 8743) CHAR("OR", "v", 1, 8744) CHAR("no", "~", 1, 172) CHAR("tno", "~", 1, 172) CHAR("te", "3", 1, 8707) CHAR("fa", "V", 1, 8704) CHAR("st", "-)", 2, 8715) CHAR("tf", ".:.", 3, 8756) CHAR("3d", ".:.", 3, 8756) CHAR("or", "|", 1, 124) /* Mathematicals. */ CHAR("pl", "+", 1, 43) CHAR("mi", "-", 1, 8722) CHAR("-", "-", 1, 45) CHAR("-+", "-+", 2, 8723) CHAR("+-", "+-", 2, 177) CHAR("t+-", "+-", 2, 177) CHAR("pc", ".", 1, 183) CHAR("md", ".", 1, 8901) CHAR("mu", "x", 1, 215) CHAR("tmu", "x", 1, 215) CHAR("c*", "x", 1, 8855) CHAR("c+", "+", 1, 8853) CHAR("di", "-:-", 3, 247) CHAR("tdi", "-:-", 3, 247) CHAR("f/", "/", 1, 8260) CHAR("**", "*", 1, 8727) BOTH("<=", "<=", 2, 8804) BOTH(">=", ">=", 2, 8805) CHAR("<<", "<<", 2, 8810) CHAR(">>", ">>", 2, 8811) CHAR("eq", "=", 1, 61) CHAR("!=", "!=", 2, 8800) CHAR("==", "==", 2, 8801) CHAR("ne", "!==", 3, 8802) CHAR("=~", "=~", 2, 8773) CHAR("-~", "-~", 2, 8771) CHAR("ap", "~", 1, 8764) CHAR("~~", "~~", 2, 8776) CHAR("~=", "~=", 2, 8780) CHAR("pt", "oc", 2, 8733) CHAR("es", "{}", 2, 8709) CHAR("mo", "E", 1, 8712) CHAR("nm", "!E", 2, 8713) CHAR("sb", "(=", 2, 8834) CHAR("nb", "(!=", 3, 8836) CHAR("sp", "=)", 2, 8835) CHAR("nc", "!=)", 3, 8837) CHAR("ib", "(=", 2, 8838) CHAR("ip", "=)", 2, 8839) CHAR("ca", "(^)", 3, 8745) CHAR("cu", "U", 1, 8746) CHAR("/_", "/_", 2, 8736) CHAR("pp", "_|_", 3, 8869) CHAR("is", "I", 1, 8747) CHAR("integral", "I", 1, 8747) CHAR("sum", "E", 1, 8721) CHAR("product", "TT", 2, 8719) CHAR("coproduct", "U", 1, 8720) CHAR("gr", "V", 1, 8711) CHAR("sr", "\\/", 2, 8730) CHAR("sqrt", "\\/", 2, 8730) CHAR("lc", "|~", 2, 8968) CHAR("rc", "~|", 2, 8969) CHAR("lf", "|_", 2, 8970) CHAR("rf", "_|", 2, 8971) CHAR("if", "oo", 2, 8734) CHAR("Ah", "N", 1, 8501) CHAR("Im", "I", 1, 8465) CHAR("Re", "R", 1, 8476) CHAR("pd", "a", 1, 8706) CHAR("-h", "/h", 2, 8463) /* Ligatures. */ CHAR("ff", "ff", 2, 64256) CHAR("fi", "fi", 2, 64257) CHAR("fl", "fl", 2, 64258) CHAR("Fi", "ffi", 3, 64259) CHAR("Fl", "ffl", 3, 64260) BOTH("AE", "AE", 2, 198) BOTH("ae", "ae", 2, 230) CHAR("OE", "OE", 2, 338) CHAR("oe", "oe", 2, 339) CHAR("ss", "ss", 2, 223) CHAR("IJ", "IJ", 2, 306) CHAR("ij", "ij", 2, 307) /* Special letters. */ CHAR("-D", "D", 1, 208) CHAR("Sd", "o", 1, 240) CHAR("TP", "b", 1, 222) CHAR("Tp", "b", 1, 254) CHAR(".i", "i", 1, 305) CHAR(".j", "j", 1, 567) /* Currency. */ CHAR("Do", "$", 1, 36) CHAR("ct", "c", 1, 162) CHAR("Eu", "EUR", 3, 8364) CHAR("eu", "EUR", 3, 8364) CHAR("Ye", "Y", 1, 165) CHAR("Po", "L", 1, 163) CHAR("Cs", "x", 1, 164) CHAR("Fn", "f", 1, 402) /* pod2man holdovers. */ STRING("--", "--", 2, 8212) STRING("PI", "pi", 2, 960) STRING("L\"", "``", 2, 8220) STRING("R\"", "\'\'", 2, 8221) STRING("C+", "C++", 3, 0) STRING("C`", "`", 1, 8216) STRING("C\'", "\'", 1, 8217) STRING("Aq", "\'", 1, 39) STRING("^", "^", 1, 94) STRING(",", ",", 1, 44) STRING("~", "~", 1, 126) STRING("/", "/", 1, 47) STRING(":", "\"", 1, 776) STRING("8", "B", 1, 946) STRING("o", "o", 1, 176) STRING("D-", "D", 1, 208) STRING("d-", "o", 1, 240) STRING("Th", "b", 1, 222) STRING("th", "b", 1, 254) /* Old style. */ STRING("Am", "&", 1, 38) STRING("Ba", "|", 1, 124) STRING("Ge", ">=", 2, 8805) STRING("Gt", ">", 1, 62) STRING("If", "infinity", 8, 0) STRING("Le", "<=", 2, 8804) STRING("Lq", "``", 2, 8220) STRING("Lt", "<", 1, 60) STRING("Na", "NaN", 3, 0) STRING("Ne", "!=", 2, 8800) STRING("Pi", "pi", 2, 960) STRING("Pm", "+-", 2, 177) STRING("R", "(R)", 3, 174) STRING("Rq", "\'\'", 2, 8221) STRING("Tm", "tm", 2, 8482) STRING("left-bracket", "[", 1, 91) STRING("left-parenthesis", "(", 1, 40) STRING("left-singlequote", "`", 1, 8216) STRING("lp", "(", 1, 40) STRING("q", "\"", 1, 34) STRING("quote-left", "`", 1, 8216) STRING("quote-right", "\'", 1, 8217) STRING("right-bracket", "]", 1, 93) STRING("right-parenthesis", ")", 1, 41) STRING("right-singlequote", "\'", 1, 8217) STRING("rp", ")", 1, 41) /* Lines. */ CHAR("ba", "|", 1, 124) CHAR("br", "|", 1, 9474) CHAR("ul", "_", 1, 95) CHAR("rl", "-", 1, 8254) CHAR("bb", "|", 1, 166) CHAR("sl", "/", 1, 47) CHAR("rs", "\\", 1, 92) /* Text markers. */ CHAR("ci", "o", 1, 9675) CHAR("bu", "o", 1, 8226) CHAR("dd", "=", 1, 8225) CHAR("dg", "-", 1, 8224) CHAR("lz", "<>", 2, 9674) CHAR("sq", "[]", 2, 9633) CHAR("ps", "9|", 2, 182) CHAR("sc", "S", 1, 167) CHAR("lh", "<=", 2, 9756) CHAR("rh", "=>", 2, 9758) CHAR("at", "@", 1, 64) CHAR("sh", "#", 1, 35) CHAR("CR", "_|", 2, 8629) CHAR("OK", "\\/", 2, 10003) /* Legal symbols. */ CHAR("co", "(C)", 3, 169) CHAR("rg", "(R)", 3, 174) CHAR("tm", "tm", 2, 8482) /* Punctuation. */ CHAR(".", ".", 1, 46) CHAR("r!", "i", 1, 161) CHAR("r?", "c", 1, 191) CHAR("em", "--", 2, 8212) CHAR("en", "-", 1, 8211) CHAR("hy", "-", 1, 8208) CHAR("e", "\\", 1, 92) /* Units. */ CHAR("de", "o", 1, 176) CHAR("%0", "%o", 2, 8240) CHAR("fm", "\'", 1, 8242) CHAR("sd", "\"", 1, 8243) CHAR("mc", "mu", 2, 181) CHAR_TBL_END