[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Groff-commit] groff/src/preproc/eqn lex.cpp
From: |
Eric S. Raymond |
Subject: |
[Groff-commit] groff/src/preproc/eqn lex.cpp |
Date: |
Sat, 03 Feb 2007 05:32:52 +0000 |
CVSROOT: /sources/groff
Module name: groff
Changes by: Eric S. Raymond <esr> 07/02/03 05:32:52
Modified files:
src/preproc/eqn: lex.cpp
Log message:
The -TMathML option for eqn.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/groff/src/preproc/eqn/lex.cpp?cvsroot=groff&r1=1.3&r2=1.4
Patches:
Index: lex.cpp
===================================================================
RCS file: /sources/groff/groff/src/preproc/eqn/lex.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- lex.cpp 16 Jun 2005 09:47:49 -0000 1.3
+++ lex.cpp 3 Feb 2007 05:32:51 -0000 1.4
@@ -120,10 +120,12 @@
{ "special", SPECIAL },
};
-static struct {
+struct builtin_def {
const char *name;
const char *def;
-} def_table[] = {
+};
+
+static struct builtin_def common_defs[] = {
{ "ALPHA", "\\(*A" },
{ "BETA", "\\(*B" },
{ "CHI", "\\(*X" },
@@ -215,11 +217,6 @@
{ "and", "{roman \"and\"}" },
{ "if", "{roman \"if\"}" },
{ "for", "{roman \"for\"}" },
- { "sum", "{type \"operator\" vcenter size +5 \\(*S}" },
- { "prod", "{type \"operator\" vcenter size +5 \\(*P}" },
- { "int", "{type \"operator\" vcenter size +8 \\(is}" },
- { "union", "{type \"operator\" vcenter size +5 \\(cu}" },
- { "inter", "{type \"operator\" vcenter size +5 \\(ca}" },
{ "times", "type \"binary\" \\(mu" },
{ "ldots", "type \"inner\" { . . . }" },
{ "inf", "\\(if" },
@@ -228,34 +225,58 @@
{ "half", "{1 smallover 2}" },
{ "hat_def", "roman \"^\"" },
{ "hat", "accent { hat_def }" },
- { "dot_def", "back 15 \"\\v'-52M'.\\v'52M'\"" },
- { "dot", "accent { dot_def }" },
- { "dotdot_def", "back 25 \"\\v'-52M'..\\v'52M'\"" },
- { "dotdot", "accent { dotdot_def }" },
{ "tilde_def", "\"~\"" },
{ "tilde", "accent { tilde_def }" },
- { "utilde_def", "\"\\v'75M'~\\v'-75M'\"" },
- { "utilde", "uaccent { utilde_def }" },
- { "vec_def", "up 52 size -5 \\(->" },
- { "vec", "accent { vec_def }" },
- { "dyad_def", "up 52 size -5 {\\(<- back 60 \\(->}" },
- { "dyad", "accent { dyad_def }" },
{ "==", "type \"relation\" \\(==" },
{ "!=", "type \"relation\" \\(!=" },
{ "+-", "type \"binary\" \\(+-" },
{ "->", "type \"relation\" \\(->" },
{ "<-", "type \"relation\" \\(<-" },
- { "<<", "{ < back 20 < }" },
- { ">>", "{ > back 20 > }" },
- { "...", "type \"inner\" vcenter { . . . }" },
+ { "<<", "type \"relation\" \\(<<" },
+ { ">>", "type \"relation\" \\(>>" },
{ "prime", "'" },
{ "approx", "type \"relation\" \"\\(~=\"" },
{ "grad", "\\(gr" },
{ "del", "\\(gr" },
- { "cdot", "type \"binary\" vcenter ." },
+ { "cdot", "type \"binary\" \\(md" },
{ "dollar", "$" },
};
+/* composite definitions that require troff size and motion operators */
+static struct builtin_def troff_defs[] = {
+ { "sum", "{type \"operator\" vcenter size +5 \\(*S}" },
+ { "prod", "{type \"operator\" vcenter size +5 \\(*P}" },
+ { "int", "{type \"operator\" vcenter size +8 \\(is}" },
+ { "union", "{type \"operator\" vcenter size +5 \\(cu}" },
+ { "inter", "{type \"operator\" vcenter size +5 \\(ca}" },
+ { "dot_def", "up 52 back 15 \".\"" },
+ { "dot", "accent { dot_def }" },
+ { "dotdot_def", "up 52 back 25 \"..\"" },
+ { "dotdot", "accent { dotdot_def }" },
+ { "utilde_def", "down 75 \"~\"" },
+ { "utilde", "uaccent { utilde_def }" },
+ { "vec_def", "up 52 size -5 \\(->" },
+ { "vec", "accent { vec_def }" },
+ { "dyad_def", "up 52 size -5 { \\(<> }" },
+ { "dyad", "accent { dyad_def }" },
+ { "...", "type \"inner\" vcenter { . . . }" },
+};
+
+/* equivalent definitions for MathML mode */
+static struct builtin_def mathml_defs[] = {
+ { "sum", "{type \"operator\" size big \\(*S}" },
+ { "prod", "{type \"operator\" size big \\(*P}" },
+ { "int", "{type \"operator\" size big \\(is}" },
+ { "union", "{type \"operator\" size big \\(cu}" },
+ { "inter", "{type \"operator\" size big \\(ca}" },
+ { "dot", "accent { \".\" }" },
+ { "dotdot", "accent { \"..\" }" },
+ { "utilde", "uaccent { \"~\" }" },
+ { "vec", "accent { \\(-> }" },
+ { "dyad", "accent { \\(<> }" },
+ { "...", "type \"inner\" { . . . }" },
+};
+
void init_table(const char *device)
{
unsigned int i;
@@ -265,12 +286,29 @@
def->tok = token_table[i].token;
macro_table.define(token_table[i].name, def);
}
- for (i = 0; i < sizeof(def_table)/sizeof(def_table[0]); i++) {
+ for (i = 0; i < sizeof(common_defs)/sizeof(common_defs[0]); i++) {
definition *def = new definition[1];
def->is_macro = 1;
- def->contents = strsave(def_table[i].def);
+ def->contents = strsave(common_defs[i].def);
def->is_simple = 1;
- macro_table.define(def_table[i].name, def);
+ macro_table.define(common_defs[i].name, def);
+ }
+ if (output_format == troff) {
+ for (i = 0; i < sizeof(troff_defs)/sizeof(troff_defs[0]); i++) {
+ definition *def = new definition[1];
+ def->is_macro = 1;
+ def->contents = strsave(troff_defs[i].def);
+ def->is_simple = 1;
+ macro_table.define(troff_defs[i].name, def);
+ }
+ } else if (output_format == mathml) {
+ for (i = 0; i < sizeof(mathml_defs)/sizeof(mathml_defs[0]); i++) {
+ definition *def = new definition[1];
+ def->is_macro = 1;
+ def->contents = strsave(mathml_defs[i].def);
+ def->is_simple = 1;
+ macro_table.define(mathml_defs[i].name, def);
+ }
}
definition *def = new definition[1];
def->is_macro = 1;
- [Groff-commit] groff/src/preproc/eqn lex.cpp,
Eric S. Raymond <=