/* $Id$ */
/*
* Copyright (c) 2009 Kristaps Dzonsons <kristaps@bsd.lv>
*
* 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, -1)
CHAR("0", " ", 1, 8194)
CHAR(" ", " ", 1, 8194)
CHAR("~", ascii_nbrsp, 1, 160)
CHAR("%", "", 0, -1)
CHAR("&", "", 0, -1)
CHAR("^", "", 0, -1)
CHAR("|", "", 0, -1)
CHAR("}", "", 0, -1)
/* 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, 10216) /* FIXME: 60 */
CHAR("ra", ">", 1, 10217) /* FIXME: 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