ftp.nice.ch/pub/next/text/framemaker/filters/la2mml.tar.gz#/tables.c

This is tables.c in view mode; [Download] [Up]

/* tables.c */

/*
 * Copyright (c) 1991  R. Nigel Horspool.
 * All rights reserved.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/

/* tables of math characters and other funny symbols */

#include <stdio.h>
#include "tables.h"


/* Font families used in the mml version */
char TIMESFAMILY[]	= "<Family Times>";
char SYMBOLFAMILY[]	= "<Family Symbol>";
char COURIERFAMILY[]	= "<Family Courier>";
char HELVETICAFAMILY[]	= "<Family Helvetica>";

/* Abbreviated names for choosing fonts in mml */
char RM[] = "<rm>";
char TT[] = "<tt>";
char SY[] = "<sy>";
char BF[] = "<bf>";
char EM[] = "<em>";
static char eq[] = "<eq>";
static char fn[] = "<fn>";
static char h1[] = "<h1>";
static char h2[] = "<h2>";
static char h3[] = "<h3>";
static char et[] = "<et>";
static char sc[] = "<sc>";
static char tn[] = "<tiny>";
static char hg[] = "<huge>";
static char Hg[] = "<vhuge>";


/* Actions needed to map single characters */
ACTION special_chars[] = {
	{ "\n", "%n" },
	{ "\r", "%n" },
	{ "\f", "%n" },
	{ "&", "%?a%\b\\t" },
	{ "~", "\\x11  " },
	{ "_", "%?m%P<sc>%sL%p%f0" },
	{ "^", "%?m%P<sc>%sH%p%f0" },
	{ "{", "%(D){" },
	{ "}", "%(D)}" },
	{ "$", "%(D)$" },
	{ "[", "[" },
	{ "]", "%(D)]" },
	{ "`", "\\xd4 " },
	{ "'", "\\xd5 " },
	{ NULL, NULL }
};


/* Actions needed to map \x commands, where x is not a letter */
ACTION slash_chars[] = {
	{ "\\>", "%?a%\b\\t%!" },
	{ "\\\\", "%*%o%n%&" },
	{ "\\(", "%(D)\\(" },
	{ "\\)", "%(D)\\)" },
	{ "\\[", "%(D)\\[" },
	{ "\\]", "%(D)\\]" },
	{ "\\ ", " " },
	{ "\\@", " " },
	{ "\\!", "%\b" },
	{ "\\,", "\\x12 " },
	{ "\\:", "\\x13 " },
	{ "\\;", "\\x14 " },
	{ "\\<", "%!" },
	{ "\\+", "%!" },
	{ "\\-", "%!" },

	{ "\\`", "%(A)`" },	/* Accent commands (from table 3.1) */
	{ "\\'", "%(A)'" },
	{ "\\^", "%(A)^" },
	{ "\\\"", "%(A)\"" },
	{ "\\~", "%(A)~" },
	{ "\\=", "%(A)=" },
	{ "\\.", "%(A)." },
	
	{ NULL, NULL }
};


ACTION dollardollar	= { "$$", "%(D)$$" };
ACTION eof		= { "EOF", "%(D)E" };
ACTION dashdash		= { "--", "%fT\\xd0 %f0" };
ACTION dashdashdash	= { "---", "%fT\\xd1 %f0" };
ACTION leftdquote	= { "``", "%fT\\xd2 %f0" };
ACTION rightdquote	= { "''", "%fT\\xd3 %f0" };

ACTION other		= { "", "%b" };

ACTION untranslated	= { "", "%fT%b%f0 " };


/*  Accented characters available in Times family fonts */
ACTION accent_tab[] = {
	{ "A\"", "\\x80 " },		{ "A.", "\\x81 " },
	{ "Cc", "\\x82 " },		{ "E'", "\\x83 " },
	{ "N~", "\\x84 " },		{ "O\"", "\\x85 " },
	{ "U\"", "\\x86 " },		{ "a'", "\\x87 " },
	{ "a`", "\\x88 " },		{ "a^", "\\x89 " },
	{ "a\"", "\\x8a " },		{ "a~", "\\x8b " },
	{ "a.", "\\x8c " },		{ "cc", "\\x8d " },
	{ "e'", "\\x8e " },		{ "e`", "\\x8f " },
	{ "e^", "\\x90 " },		{ "e\"", "\\x91 " },
	{ "i'", "\\x92 " },		{ "i`", "\\x93 " },
	{ "i^", "\\x94 " },		{ "i\"", "\\x95 " },
	{ "n~", "\\x96 " },		{ "o'", "\\x97 " },
	{ "o`", "\\x98 " },		{ "o^", "\\x99 " },
	{ "o\"", "\\x9a " },		{ "o~", "\\x9b " },
	{ "u'", "\\x9c " },		{ "u`", "\\x9d " },
	{ "u^", "\\x9e " },		{ "u\"", "\\x9f " },
	{ "A`", "\\xcb " },		{ "A~", "\\xcc " },
	{ "O~", "\\xcd " },
	{ "y\"", "\\xd8 " },		{ "Y\"", "\\xd9 " },
	{ "A^", "\\xe5 " },		{ "E^", "\\xe6 " },
	{ "A'", "\\xe7 " },		{ "E\"", "\\xe8 " },
	{ "E`", "\\xe9 " },		{ "I'", "\\xea " },
	{ "I^", "\\xeb " },		{ "I\"", "\\xec " },
	{ "I`", "\\xed " },		{ "O'", "\\xee " },
	{ "O^", "\\xef " },
	{ "O`", "\\xf1 " },		{ "U'", "\\xf2 " },
	{ "U^", "\\xf3 " },		{ "U`", "\\xf4 " },
	{ NULL }
};


ACTION commands[] = {

    /* Math mode commands with no arguments */

	/* Table 3.3 of the LaTeX book */
	{"\\alpha", "%fS\\x61 %f0"},	{"\\beta", "%fS\\x62 %f0"},
	{"\\gamma", "%fS\\x67 %f0"},	{"\\delta", "%fS\\x64 %f0"},
	{"\\epsilon", "%fS\\x65 %f0"},	{"\\varepsilon", "%fS\\x65 %f0"},
	{"\\zeta", "%fS\\x7a %f0"},	{"\\eta", "%fS\\x68 %f0"},
	{"\\theta", "%fS\\x71 %f0"},	{"\\vartheta", "%fS\\x4a %f0"},
	{"\\iota", "%fS\\x69 %f0"},	{"\\kappa", "%fS\\x6b %f0"},
	{"\\lambda", "%fS\\x6c %f0"},	{"\\mu", "%fS\\x6d %f0"},
	{"\\nu", "%fS\\x6e %f0"},	{"\\xi", "%fS\\x78 %f0"},
	{"\\pi", "%fS\\x70 %f0"},	{"\\varpi", "%fS\\x70 %f0"},
	{"\\rho", "%fS\\x72 %f0"},	{"\\varrho", "%fS\\x72 %f0"},
	{"\\sigma", "%fS\\x73 %f0"},	{"\\varsigma", "%fS\\x56 %f0"},
	{"\\tau", "%fS\\x74 %f0"},	{"\\upsilon", "%fS\\x75 %f0"},
	{"\\phi", "%fS\\x66 %f0"},	{"\\varphi", "%fS\\x6a %f0"},
	{"\\chi", "%fS\\x63 %f0"},	{"\\psi", "%fS\\x79 %f0"},
	{"\\omega", "%fS\\x77 %f0"},	{"\\Gamma", "%fS\\x47 %f0"},
	{"\\Delta", "%fS\\x44 %f0"},	{"\\Theta", "%fS\\x4a %f0"},
	{"\\Lambda", "%fS\\x4c %f0"},	{"\\Xi", "%fS\\x58 %f0"},
	{"\\Pi", "%fS\\x50 %f0"},	{"\\Sigma", "%fS\\x53 %f0"},
	{"\\Upsilon", "%fS\\x55 %f0"},	{"\\Phi", "%fS\\x46 %f0"},
	{"\\Psi", "%fS\\x59 %f0"},	{"\\Omega", "%fS\\x57 %f0"},

	/* Table 3.4 */
	{"\\pm", "%fS\\xb1 %f0"},	{"\\times", "%fS\\xb4 %f0"},
	{"\\div", "%fS\\xb8 %f0"},	{"\\ast", "%fS\\x2a %f0"},
	{"\\star", "%fS\\x2a %f0"},	{"\\bullet", "%fS\\xb7 %f0"},
	{"\\cdot", "%fS\\d7 %f0"},	{"\\cap", "%fS\\xc7 %f0"},
	{"\\cup", "%fS\\xc8 %f0"},
	{"\\sqcap", "%fS\\xd9 %f0"},	{"\\vee", "%fS\\xda %f0"},
	{"\\diamond", "%fS\\xe0 %f0"},	{"\\oplus", "%fS\\xc5 %f0"},
	{"\\otimes", "%fS\\xc4 %f0"},	{"\\dagger", "%fT\\xa0 %f0"},
	{"\\ddagger", "%fT\\xe0 %f0"},

	/* No translations for these characters/commands
	{"\\mp", NULL},			{"\\circ", NULL},
	{"\\uplus", NULL},		{"\\wedge", NULL},
	{"\\setminus", NULL},		{"\\wr", NULL},
	{"\\bigtriangleup", NULL},	{"\\bigtriangledown", NULL},
	{"\\triangleleft", NULL},	{"\\triangleright", NULL},
	{"\\lhd", NULL},		{"\\rhd", NULL},
	{"\\unlhd", NULL},		{"\\unrhd", NULL},
	{"\\ominus", NULL},		{"\\oslash", NULL},
	{"\\odot", NULL},		{"\\bigcirc", NULL},
	{"\\amalg", NULL},
	*/

	/* Table 3.5 */
	{"\\leq", "%fS\\xa3 %f0"},	{"\\subset", "%fS\\xcc %f0"},
	{"\\subseteq", "%fS\\xcd %f0"},	{"\\sqsubset", "%fS\\xcc %f0"},
	{"\\sqsubseteq", "%fS\\xcd %f0"},{"\\in", "%fS\\xce %f0"},
	{"\\geq", "%fS\\xb3 %f0"},	{"\\supset", "%fS\\xc9 %f0"},
	{"\\supseteq", "%fS\\xca %f0"},	{"\\sqsupset", "%fS\\xc9 %f0"},
	{"\\sqsupseteq", "%fS\\xca %f0"},{"\\ni", "%fS\\x27 %f0"},
	{"\\approx", "%fS\\xbb %f0"},	{"\\cong", "%fS\\x40 %f0"},
	{"\\neq", "%fS\\xb9 %f0"},	{"\\propto", "%fS\\xb5 %f0"},

	/* No translations for these characters/commands
	{"\\prec", NULL},		{"\\preceq", NULL},
	{"\\ll", NULL},			{"\\vdash", NULL},
	{"\\succ", NULL},		{"\\succeq", NULL},
	{"\\gg", NULL},			{"\\dashv", NULL},
	{"\\equiv", NULL},		{"\\sim", NULL},
	{"\\simeq", NULL},		{"\\asymp", NULL},
	{"\\doteq", NULL},		{"\\models", NULL},
	{"\\perp", NULL},		{"\\mid", NULL},
	{"\\parallel", NULL},		{"\\bowtie", NULL},
	{"\\Join", NULL},		{"\\smile", NULL},
	{"\\frown", NULL},
	*/

	/* Table 3.6 -- we map some different sizes to same character */
	{"\\leftarrow", "%fS\\xac %f0"},
	{"\\Leftarrow", "%fS\\xdc %f0"},
	{"\\longleftarrow", "%fS\\xac %f0"},
	{"\\Longleftarrow", "%fS\\xdc %f0"},
	{"\\rightarrow", "%fS\\xae %f0"},
	{"\\Rightarrow", "%fS\\xde %f0"},
	{"\\longrightarrow", "%fS\\xae %f0"},
	{"\\Longrightarrow", "%fS\\xde %f0"},
	{"\\leftrightarrow", "%fS\\xab %f0"},
	{"\\Leftrightarrow", "%fS\\xdb %f0"},
	{"\\longleftrightarrow", "%fS\\xab %f0"},
	{"\\Longleftrightarrow", "%fS\\xdb %f0"},
	{"\\uparrow", "%fS\\xad %f0"},
	{"\\Uparrow", "%fS\\xdd %f0"},
	{"\\downarrow", "%fS\\xaf %f0"},
	{"\\Downarrow", "%fS\\xdf %f0"},

	/* No translations for these characters/commands
	{"\\mapsto", NULL},		{"\\hookleftarrow", NULL},
	{"\\leftharpoonup", NULL},	{"\\leftharpoondown", NULL},
	{"\\rightleftharpoons", NULL},
	{"\\longmapsto", NULL},
	{"\\hookrightarrow", NULL},	{"\\rightharpoonup", NULL},
	{"\\rightharpoondown", NULL},	{"\\leadsto", NULL},
	{"\\updownarrow", NULL},	{"\\Updownarrow", NULL},
	{"\\nearrow", NULL},		{"\\searrow", NULL},
	{"\\swarrow", NULL},		{"\\nwarrow", NULL},
	*/

	/* Table 3.7 */
	{"\\aleph", "%fS\\xc0 %f0"},	{"\\imath", "%fT\\xf5 %f0"},
	{"\\Re", "%fS\\xc2 %f0"},	{"\\Im", "%fS\\xc1 %f0"},
	{"\\emptyset", "%fS\\xc6 %f0"},	{"\\nabla", "%fS\\xd1 %f0"},
	{"\\bot", "%fS\\x5e %f0"},	{"\\angle", "%fS\\xd0 %f0"},
	{"\\forall", "%fS\\x22 %f0"},	{"\\exists", "%fS\\x24 %f0"},
	{"\\neg", "%fS\\xd8 %f0"},	{"\\backslash", "%fT\\%f0"},
	{"\\partial", "%fS\\xb6 %f0"},	{"\\infty", "%fS\\xa5 %f0"},
	{"\\Diamond", "%fS\\xe0 %f0"},	{"\\clubsuit", "%fS\\xa7 %f0"},
	{"\\diamondsuit", "%fS\\xa8 %f0"},{"\\heartsuit", "%fS\\xa9 %f0"},
	{"\\spadesuit", "%fS\\xaa %f0"},	{"\\jmath", "%fT%=pj%@%f0"},

	/* No translations for these characters/commands
	{"\\hbar", NULL},
	{"\\ell", NULL},		{"\\wp", NULL},
	{"\\mho", NULL},		{"\\prime", NULL},
	{"\\surd", NULL},		{"\\top", NULL},
	{"\\flat", NULL},		{"\\natural", NULL},
	{"\\sharp", NULL},		{"\\Box", NULL},
	{"\\triangle", NULL},
	*/

	/* Table 3.8 */
	{"\\sum", "%fS\\xe5 %f0"},	{"\\prod", "%fS\\xd5  %f0"},
	{"\\int", "%fS\\xf2 %f0"},

	/* No translations for these characters/commands
	{"\\coprod", NULL},
	{"\\oint", NULL},		{"\\bigcap", NULL},
	{"\\bigcup", NULL},		{"\\bigsqcup", NULL},
	{"\\bigvee", NULL},		{"\\bigwedge", NULL},
	{"\\bigodot", NULL},		{"\\bigotimes", NULL},
	{"\\bigoplus", NULL},		{"\\biguplus", NULL},
	*/

	/* Table 3.9 */
	{"\\arccos", "%fT%=parccos%@%f0"},	{"\\arcsin", "%fT%=parcsin%@%f0"},
	{"\\arctan", "%fT%=parctan%@%f0"},	{"\\arg", "%fT%=parg%@%f0"},
	{"\\cos", "%fT%=pcos%@%f0"},		{"\\cosh", "%fT%=pcosh%@%f0"},
	{"\\cot", "%fT%=pcot%@%f0"},		{"\\coth", "%fT%=pcoth%@%f0"},
	{"\\gcd", "%fT%=pgcd%@%f0"},		{"\\ln", "%fT%=pln%@%f0"},
	{"\\log", "%fT%=plog%@%f0"},		{"\\max", "%fT%=pmax%@%f0"},
	{"\\min", "%fT%=pmin%@%f0"},
	{"\\sec", "%fT%=psec%@%f0"},		{"\\sin", "%fT%=psin%@%f0"},
	{"\\sinh", "%fT%=psinh%@%f0"},		{"\\sup", "%fT%=psup%@%f0"},
	{"\\tan", "%fT%=ptan%@%f0"},		{"\\tanh", "%fT%=ptanh%@%f0"},

	/* No translations for these characters/commands
	{"\\csc", NULL},		{"\\deg", NULL},
	{"\\det", NULL},		{"\\dim", NULL},
	{"\\exp", NULL},		{"\\hom", NULL},
	{"\\inf", NULL},		{"\\ker", NULL},
	{"\\lg", NULL},			{"\\lim", NULL},
	{"\\liminf", NULL},		{"\\limsup", NULL},
	{"\\Pr", NULL},
	*/

	/* Table 3.10 */

	/* No translations for these characters/commands
	{"\\lfloor", NULL},		{"\\lceil", NULL},
	{"\\langle", NULL},		{"\\rfloor", NULL},
	{"\\rceil", NULL},		{"\\rangle", NULL},
	*/

	/* Miscellaneous */
	
	{"\\ldots", "..."},		{"\\bmod", "%fI mod %f0"},
	{"\\left", ""},			{"\\right", ""},

	/* No translations for these characters/commands
	{"\\nonumber", NULL},		{"\\cdots", NULL},
	{"\\vdots", NULL},		{"\\ddots", NULL},
	{"\\bmod", NULL},		{"\\cal", NULL},
	{"\\displaystyle", NULL},	{"\\textstyle", NULL},
	{"\\scriptstyle", NULL},	{"\\scriptscriptstyle", NULL},
	*/

    /* Math commands with one argument */

	/* Table 3.11 */

	/* No translations for these characters/commands
	{"\\hat", NULL},		{"\\check", NULL},
	{"\\breve", NULL},		{"\\acute", NULL},
	{"\\grave", NULL},		{"\\tilde", NULL},
	{"\\bar", NULL},		{"\\vec", NULL},
	{"\\dot", NULL},		{"\\ddot", NULL},
	*/

	/* Miscellaneous */
	{"\\sqrt", "%fS\\xd6 %f0"},
	{ "\\underline", "%sU%p%sP" },
	{"\\pmod", " %fT(%=pmod%@ %p)%f0 "},
	{"\\lefteqn", "%p" },

	/* No translations for these characters/commands
	{"\\overline", NULL},
	{"\\overbrace", NULL},		{"\\underbrace", NULL},
	{"\\widehat", NULL},		{"\\widetilde", NULL},
	*/

    /* Math mode commands with two arguments */

	/* No translations for these characters/commands
	{"\\frac", NULL},		{"\\stackrel", NULL},
	*/


    /* Other commands ... */

	/* No translations for these characters/commands
	{"\\boldmath", NULL},		{"\\unboldmath", NULL},
	*/
	
    /* Accent command in tabbing environment */

	{ "\a", "%(A)?" },

	/* Table 3.1 -- more accent commands */

	{ "\\u", "%(A)u" },		{ "\\v", "%(A)v" },
	{ "\\H", "%(A)H" },		{ "\\t", "%(A)t" },
	{ "\\c", "%(A)c" },		{ "\\d", "%(A)d" },
	{ "\\b", "%(A)b" },

	/* Table 3.2 */

	{ "\\oe", "%fT\\xcf %f0" },	{ "\\OE", "%fT\\xce %f0" },
	{ "\\ae", "%fT\\xbe %f0" },	{ "\\AE", "%fT\\xae %f0" },
	{ "\\o",  "%fT\\xbf %f0" },	{ "\\O",  "%fT\xaf %f0" },
	{ "\\aa", "%fT\\x8c %f0" },	{ "\\AA", "%fT\\x81 %f0" },
	{ "\\ss", "%fT\\xa7 %f0" },

	/* No translations for these characters/commands
	{"\\l", NULL},			{"\\L", NULL},
	*/

	{ "\\addcontentsline", "%p%p%p" },
	{ "\\address", "%(E)<*address>" },
	{ "\\addtocontents", "%p%p" },
	{ "\\addtocounter", "%x%x" },
	{ "\\addvspace", "%x" },
	{ "\\alph", "%x"},
	{ "\\Alph", "%x"},
	{ "\\appendix", "% " },
	{ "\\arabic", "%x"},
	{ "\\author", "%(E)<*author>" },
	{ "\\begin", "%(E)" },
	{ "\\bf", "% %fB" },	
	{ "\\bibitem", "%<HangIndent>%o[%p]\\t% " },
	{ "\\bibliography", "%x" },
	{ "\\bigskip", "%n%n% " },
	{ "\\cal", "" },
	{ "\\caption", "%o%(C)" },
	{ "\\cc", "%n%p%n" },
	{ "\\chapter", "%o%<Chapter>%p%<FirstBody>" },
	{ "\\chapter*", "%<Chapter*>%p%<FirstBody>" },
	{ "\\cite", "%o%fT%=p[%p]%f0%@" },
	{ "\\clearpage", "%n%n% " },
	{ "\\cleardoublepage", "%n%n% " },
	{ "\\cline", "%x" },
	{ "\\closing", "%(E)<*closing>" },
	{ "\\copyright", "%fT\xa9 %f0" },
	{ "\\dag", "%fT\\xa0 %f0" },
	{ "\\date", "%-%n%p%n%+" },
	{ "\\ddag", "%fT\\xe0 %f0" },
	{ "\\def", "%(F)\\def" },
	{ "\\documentstyle", "%+%o%x" },
	{ "\\em", "% %fI" },
	{ "\\encl", "%n%p%n" },
	{ "\\end", "%(D)e" },
	{ "\\fbox", "%=p%fT%p%f0%@" },
	{ "\\fnsymbol", "%x"},
	{ "\\footnote", "%o %fT%=p[Footnote: %p]%f0%@ " },
	{ "\\footnotemark", "%o" },
	{ "\\footnotesize", "%P<fn>" },
	{ "\\footnotetext", "%o %fT%=p[Footnote: %p]%f0%@ " },
	{ "\\framebox", "%o%o%fT%=p%p%f0%@" },
	{ "\\frenchspacing", "% " },
	{ "\\fussy", "% " },
	{ "\\hbox", "%=p%fT%p%f0%@" },
	{ "\\hline", "" },
	{ "\\hspace", "%*%x " }, 
	{ "\\huge", "%P<hg>"},
	{ "\\Huge", "%P<Hg>"},
	{ "\\hyphenation", "%x" },
	{ "\\include", "%(R)c" },
	{ "\\indent", "% \\t" },
	{ "\\input", "%(R)p" },
	{ "\\it", "% %fI" },	
	{ "\\item", "%(I)%n" },
	{ "\\kill", "%X%!% " },
	{ "\\label", "%x" },
	{ "\\large", "%P<h3>"},
	{ "\\Large", "%P<h2>"},
	{ "\\LARGE", "%P<h1>"},
	{ "\\LaTeX", "%fTL%sHA%sNT%sLE%sNX%f0" },
	{ "\\linebreak", "%o" },
	{ "\\linethickness", "%x" },
	{ "\\makebox", "%o%o%fT%=p%p%f0%@" },
	{ "\\maketitle", "%I1%n%I2%n% " },
	{ "\\marginpar", "%o%<Extract>%p%n%T" },
	{ "\\markboth", "%x%x" },
	{ "\\markright", "%x" },
	{ "\\mbox", "%=p%fT%p%f0%@" },
	{ "\\medskip", "%n%n% " },
	{ "\\minipage", "%o%x%fT%=p%p%f0%@" },
	{ "\\mit", "" },
	{ "\\multicolumn", "%x%x%p" },
	{ "\\newcommand", "%?p%z%o%(N)1" },
	{ "\\newcounter", "%x%o" },
	{ "\\newenvironment", "%z%o%(N)2" },
	{ "\\newfont", "%x%x" },
	{ "\\newline", "%n% " },
	{ "\\newpage", "%n%n% " },
	{ "\\newsavebox", "%x" },
	{ "\\nocite", "% " },
	{ "\\nofrenchspacing", "% " },
	{ "\\noindent", "% " },
	{ "\\nolinebreak", "%o" },
	{ "\\nopagebreak", "%o" },
	{ "\\normalsize", "%P<rm>" },
	{ "\\opening",
	"%I1%n%n%<FlushR><SpaceBefore 12pt>%#%n%I3%n%<FirstBody><SpaceBefore 24pt>%p%n%T" },
	{ "\\onecolumn", "%n%n% " },
	{ "\\P", "%fT\\xa6 " },
	{ "\\pagebreak", "%o%n%<FirstBody><ColumnTop Yes>\\x11 %n" },
	{ "\\pagenumbering", "%x" },
	{ "\\pageref", " %fT%=p[Pageref: %p]%f0%@" },
	{ "\\pagestyle", "%x" },
	{ "\\par", "%n%n" },
	{ "\\paragraph", "%o%<4Heading>%p%<FirstBody>" },
	{ "\\paragraph*", "%<4Heading*>%p%<FirstBody>" },
	{ "\\parbox", "%o%x%fT%=p%p%f0%@" },
	{ "\\part", "\n\n%o%<Part>%p%<FirstBody>" },
	{ "\\part*", "\n\n%<Part*>%p%<FirstBody>" },
	{ "\\poptabs", "%!% " },
	{ "\\pounds", "%fT\\xa3 %f0" },
	{ "\\protect", "" },
	{ "\\ps", "%n" },
	{ "\\pushtabs", "%!% " },
	{ "\\raisebox", "%x%o%o%=p%p%@" },
	{ "\\ref", " %fT%=p[Ref: %p]%f0%@ " },
	{ "\\refstepcounter", "%x"},
	{ "\\renewcommand", "%?p%x%o%(N)1" },
	{ "\\renewenvironment", "%x%o%(N)2" },
	{ "\\rm", "% %fT" },	
	{ "\\roman", "%x"},
	{ "\\Roman", "%x"},
	{ "\\S", "%fT\\xa4 %f0" },
	{ "\\samepage", "% " },
	{ "\\savebox", "%x%o%o%x" },
	{ "\\sbox", "%x%x" },
	{ "\\sc", "% %fV" },		/* small caps is hard to simulate */	
	{ "\\scriptsize", "%P<sc>"},
	{ "\\section", "%o%<1Heading>%p%<FirstBody>" },
	{ "\\section*", "%<1Heading*>%p%<FirstBody>" },
	{ "\\setcounter", "%x%x" },
	{ "\\sf", "% %fV" },
	{ "\\signature", "%(E)<*signature>" },
	{ "\\sl", "% %fA" },
	{ "\\sloppy", "% " },
	{ "\\small", "%P<fn>" },
	{ "\\smallskip", "%n%n% " },
	{ "\\stepcounter", "%x"},
	{ "\\subparagraph", "%o%<5Heading>%p%<FirstBody>" },
	{ "\\subparagraph*", "%<5Heading*>%p%<FirstBody>" },
	{ "\\subsection", "%o%<2Heading>%p%<FirstBody>" },
	{ "\\subsection*", "%<2Heading*>%p%<FirstBody>" },
	{ "\\subsubsection", "%o%<3Heading>%p%<FirstBody>" },
	{ "\\subsubsection*", "%<3Heading*>%p%<FirstBody>" },
	{ "\\TeX", "%fTT%sLE%sNX%f0" },
	{ "\\thanks", "%- %fT%=p[Footnote: %p]%f0%@ %+" },
	{ "\\thicklines", "% " },
	{ "\\thinlines", "% " },
	{ "\\thispagestyle", "%x" },
	{ "\\tiny", "%P<tn>" },
	{ "\\title", "%(E)<*title>" },
	{ "\\tt", "% %fC" },	
	{ "\\twocolumn", "%o%n%n" },
	{ "\\typein", "%o%x" },
	{ "\\typeout", "%x" },
	{ "\\value", "%x"},
	{ "\\verb", "%(V)" },
	{ "\\vspace", "%*%(S)" },
	
	{ NULL, NULL }	/* final terminator value */
};


ENV bad_env = { "?", "%T", "%n", "<Body>", ' ', 'H', PARA };



/* List of all environments described in Appendix C of LaTeX Manual */
ENV environments[] = {
	{ "abstract", "%<Center><SpaceBefore 20pt>%fBAbstract%n%T",
			"%n", "<Abstract>", 'N', 'H', PARA },
	{ "*address", "%-%D1%T", "%n%D0%+", "<FlushR>", 'N', 'P', PARA },
	{ "array", "%o%x%T", "%n", "<Equation>", ' ', 'P', MATHARRAY },
	{ "*author", "%-%D2%T", "%n%D0%+", "<Author>", 'N', 'P', PARA },
	{ "center", "%T", "%n", "<Center>",  'N', 'P', PARA },
	{ "*closing", "%n%T", "\n\n\n\n%T%I2%n", "<FlushL>", 'N', 'P', PARA },
	{ "description", "%T", "%n", "<CBlockIndent>", 'N', 'H', PARA },
	{ "displaymath", "%T", "%n", "<Equation>", ' ', 'P', MATH },
	{ "document", "%-%T", "%n%I9%+", "<Body>", 'N', 'H', PARA },
	{ "enumerate",  "%T", "%n", "<CStep>", 'N', 'H', PARA },
	{ "equation", "%T", "%n", "<Equation>", ' ', 'P', MATH },
	{ "eqnarray", "%T", "%n", "<Equation>", ' ', 'P', MATHARRAY },
	{ "eqnarray*", "%T", "%n", "<Equation>", ' ', 'P', MATHARRAY },
	{ "figure", "%o%n%D+9<SpaceBefore 36pt>\\x11 %n",
			"%n%D0", "<FirstBody>", ' ', 'P', PARA },
	{ "figure*", "%o%n%D+9<SpaceBefore 36pt>\\x11 %n",
			"%n%D0", "<FirstBody>", ' ', 'P', PARA },
	{ "flushleft", "%T", "%n", "<FlushL>", 'N', 'P', PARA },
	{ "flushright", "%T", "%n", "<FlushR>", 'N', 'P', PARA },
	{ "itemize", "%T", "%n", "<CBullet>", 'N', 'H', PARA },
	{ "letter", "%(E)<*letter>", "%n", "<FirstBody>", 'N', 'P', PARA },
	{ "*letter", "%D3%T%p%D0%T", "%n%n", "<FlushL>", 'N', 'P', PARA },
	{ "list", "%x%x%T", "%n", "<CBlockIndent>", 'N', 'H', PARA },
	{ "math", "", "", NULL, ' ', 'P', MATH },
	{ "picture", "%n\n<AFrame <BRect 0 0 6\" 1\">>\n%+",
			"%n%-", NULL, ' ', 'P', PARA },
	{ "quotation", "%T", "%n", "<Extract>", 'N', 'H', PARA },
	{ "quote", "%T", "%n", "<Extract>", 'N', 'H', PARA },
	{ "*signature", "%-%D2%T<SpaceBefore 72pt>", "%n%D0%+",
			"<FlushL>", ' ', 'P', PARA },
	{ "sloppypar", "%T", "%n", "<FlushL>", 'N', 'H', PARA },
	{ "tabbing", "%T", "%n", "<ETable>", ' ', 'P', TABLE },
	{ "table", "%o%D+9<SpaceBefore 36pt>\\x11 %n",
			"%n%D0", "<FirstBody>", ' ', 'P', PARA },
	{ "table*", "%oD+9<SpaceBefore 36pt>\\x11 %n",
			"%n%D0", "<FirstBody>", ' ', 'P', PARA },
	{ "tabular", "%o%x%T", "%n", "<ETable>", ' ', 'P', TABLE },
	{ "tabular*", "%x%o%o%x%T", "%n", "<ETable>", ' ', 'P', TABLE },
	{ "thebibliography", "%x%<1Heading*>\nReferences%<FirstBody>",
		"%n", "<Body>", 'N', 'H', TABLE },
	{ "theindex", "%+", "%-", NULL, 'N', 'P', PARA },
	{ "*title", "%-%D1%T", "%n%D0%+", "<Title>", ' ', 'H', PARA },
	{ "titlepage", "%T", "%n", "<Body>", 'N', 'H', PARA },
	{ "trivlist", "%T", "%n", "<CBlockIndent>", 'N', 'H', PARA },
	{ "verbatim", "%T", "%n", "<Code>", 'P', 'P', VERBATIM },
	{ "verbatim*", "%T", "%n", "<Code>", 'P', 'P', VERBATIM },
	{ "verse", "%T", "%n", "<Extract>", 'P', 'P', PARA },
	
    	{ NULL, NULL, NULL, NULL, ' ', ' ', UNKNOWN }	/* final terminator value */
};


static char ALLTABS[] = "0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5";
static char MANYTABS[] = "1.0 2.0 3.0 4.0 5.0 6.0 7.0";


static char L[] = "Left";
static char LR[] = "LeftRight";
static char C[] = "Center";
static char R[] = "Right";

/* Definitions of all the paragraph tags that *might* get defined in the
   mml translation.  Normally, only those that are used get defined.	*/
PARAFORMAT paratable[] = {
    { "<Abstract>",	RM, L,	0.8, 0.8, 0.8, 2,  6, 10, TRUE, NULL, NULL },
    { "<Author>",	h3, C,	0.5, 0.5, 0.5, 4,  0,  0, FALSE, NULL, NULL },
    { "<Body>",		RM, LR,	  0, 0.5,   0, 2, 12,  6, TRUE, NULL, NULL },
    { "<Bullet>",	RM, LR,	0.2,   0,   0, 2,  6,  0, TRUE, "\\xa5 \\t", "0.2" },
    { "<CBlockIndent>",	RM, LR,	0.5, 0.5,   0, 2,  4,  0, TRUE, NULL, NULL },
    { "<CBullet>",	RM, LR,	0.2, 0.2,   0, 2,  4,  0, TRUE, NULL, NULL },
    { "<Center>",	RM, C,	  0,   0,   0, 2,  0,  0, FALSE, NULL, NULL },
    { "<Chapter>",	h1, L,	2.0, 0.5, 0.5, 6,  0, 18, FALSE, "C:CHAPTER +:\\t", "2.0" },
    { "<Chapter*>",	h1, L,	0.5, 0.5, 0.5, 6,  0, 18, FALSE, NULL, NULL },
    { "<Code>",		TT, L,	  0,   0,   0, 2,  0,  0, FALSE, NULL, ALLTABS },
    { "<CStep>",	RM, LR,	0.2, 0.2,   0, 2,  4,  0, TRUE, NULL, NULL },
    { "<Equation>",	eq, C,	  0,   0,   0, 0, 10,  6, FALSE, NULL, NULL },
    { "<ETable>",	et, L,	  0,   0,   0, 2,  4,  4, FALSE, NULL, MANYTABS },
    { "<Extract>",	RM, LR, 0.8, 0.8, 0.8, 2,  6,  0, TRUE, NULL, NULL },
    { "<Figure>",	BF, C,	  0,   0,   0, 2,  8,  4, FALSE, "F:Figure +  ", NULL },
    { "<FirstBody>",	RM, LR,	  0,   0,   0, 2,  6,  6, TRUE, NULL, NULL },
    { "<FlushL>",	RM, L,	  0,   0,   0, 2,  0,  0, FALSE, NULL, NULL },
    { "<FlushR>",	RM, R,	  0, 0.5,   0, 2,  0,  0, FALSE, NULL, NULL },
    { "<HangIndent>",	RM, LR,	0.5,   0,   0, 2,  6,  0, TRUE, NULL, "0.5" },
    { "<1Heading>",	h1, L,	0.3,   0,   0, 6, 12, 10, FALSE, "H:+\\t", "0.3" },
    { "<1Heading*>",	h1, L,	  0,   0,   0, 6, 12, 10, FALSE, NULL, NULL },
    { "<2Heading>",	h2, L,	0.4,   0,   0, 2, 12,  8, FALSE, "H:<n\\>.+\\t", "0.4" },
    { "<2Heading*>",	h2, L,	  0,   0,   0, 2, 12,  8, FALSE, NULL, NULL },
    { "<3Heading>",	h3, L,	0.5,   0,   0, 2, 12,  2, FALSE,
			"H:<n\\>.<n\\>.+\\t", "0.5" },
    { "<3Heading*>",	h3, L,	  0,   0,   0, 2, 12,  2, FALSE, NULL, NULL },
    { "<4Heading>",	h3, L,	0.6,   0,   0, 2, 12,  2, FALSE,
			"H:<n\\>.<n\\>.<n\\>.+\\t", "0.6" },
    { "<4Heading*>",	h3, L,	  0,   0,   0, 2, 12,  2, FALSE, NULL, NULL },
    { "<5Heading>",	h3, L,	0.6,   0,   0, 2, 12,  2, FALSE,
			"H:<n\\>.<n\\>.<n\\>.<n\\>.+\\t", "0.7" },
    { "<5Heading*>",	h3, L,	  0,   0,   0, 2, 12,  2, FALSE, NULL, NULL },
    { "<Part>",		h1, C,	1.0,   0,   0, 6,  0, 18, FALSE, "P:PART +\\t", "1.0" },
    { "<Part*>",	h1, C,	  0,   0,   0, 6,  0, 18, FALSE, NULL, NULL },
    { "<1Step>",	RM, LR,	0.2,   0,   0, 2,  6,  0, TRUE, "S:1.\\t", "0.2" },
    { "<Step>",		RM, LR,	0.2,   0,   0, 2,  6,  0, TRUE, "S:+.\\t", "0.2" },
    { "<Title>",	h1, C,	1.0, 1.0, 1.0, 6,  0, 18, FALSE, NULL, NULL },
    { "<Table>",	BF, C,	  0,   0,   0, 2,  8,  4, FALSE, "T:Table +  ", NULL },
    { NULL }	/* terminator record */
};


/* Tables of all the font macros that *might* get defined in the mml
   output.  Normally, only those that are used get defined.  */
CHARFORMAT chfmttable[] = {
    { RM, TIMESFAMILY,	10,	PLAIN },
    { BF, TIMESFAMILY,	10,	BOLD },
    { TT, COURIERFAMILY,10,	PLAIN },
    { EM, TIMESFAMILY,	10,	ITALIC },
    { SY, SYMBOLFAMILY,	10,	PLAIN },
    { h1, TIMESFAMILY,	18,	BOLD },
    { h2, TIMESFAMILY,	14,	BOLD },
    { h3, TIMESFAMILY,	12,	BOLD },
    { et, TIMESFAMILY,	10,	PLAIN },
    { eq, TIMESFAMILY,	10,	PLAIN },
    { fn, TIMESFAMILY,	 9,	PLAIN },	/* small & footnote size */
    { sc, TIMESFAMILY,	 8,	PLAIN },	/* sub/super-script size */
    { tn, TIMESFAMILY,	 6,	PLAIN },	/* tiny size */
    { hg, TIMESFAMILY,	20,	PLAIN },	/* huge size */
    { Hg, TIMESFAMILY,	24,	PLAIN },	/* Huge size */
    { NULL }
};

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.