xref: /plan9/sys/src/cmd/eqn/tuning.c (revision 14f51593fd82e19ba95969a8c07ff71131015979)
13e12c5d1SDavid du Colombier #include "e.h"
23e12c5d1SDavid du Colombier 
33e12c5d1SDavid du Colombier /*
43e12c5d1SDavid du Colombier 
53e12c5d1SDavid du Colombier This file contains parameter values for many of the
63e12c5d1SDavid du Colombier tuning parameters in eqn.  Names are defined words.
73e12c5d1SDavid du Colombier 
83e12c5d1SDavid du Colombier Strings are plugged in verbatim.
93e12c5d1SDavid du Colombier Floats are usually in ems.
103e12c5d1SDavid du Colombier 
113e12c5d1SDavid du Colombier */
123e12c5d1SDavid du Colombier 
133e12c5d1SDavid du Colombier /* In main.c: */
143e12c5d1SDavid du Colombier 
153e12c5d1SDavid du Colombier double	BeforeSub = 1.2;	/* line space before a subscript */
163e12c5d1SDavid du Colombier double	AfterSub  = 0.2;	/* line space after a subscript */
173e12c5d1SDavid du Colombier 
183e12c5d1SDavid du Colombier /* diacrit.c: */
193e12c5d1SDavid du Colombier 
203e12c5d1SDavid du Colombier double	Dvshift	= 0.25;		/* vertical shift for diacriticals on tall letters */
213e12c5d1SDavid du Colombier double	Dhshift = 0.025;	/* horizontal shift for tall letters */
223e12c5d1SDavid du Colombier double	Dh2shift = 0.05;	/* horizontal shift for small letters */
233e12c5d1SDavid du Colombier double	Dheight	= 0.25;		/* increment to height for diacriticals */
243e12c5d1SDavid du Colombier double	Barv	= 0.68;		/* vertical shift for bar */
253e12c5d1SDavid du Colombier double	Barh	= 0.05;		/* 1/2 horizontal shrink for bar */
263e12c5d1SDavid du Colombier double	Ubarv	= 0.1;		/* shift underbar up this much ems */
273e12c5d1SDavid du Colombier double	Ubarh	= 0.05;		/* 1/2 horizontal shrink for underbar */
283e12c5d1SDavid du Colombier 
293e12c5d1SDavid du Colombier /* Also:
303e12c5d1SDavid du Colombier 	Vec, Dyad, Hat, Tilde, Dot, Dotdot, Utilde */
313e12c5d1SDavid du Colombier 
323e12c5d1SDavid du Colombier /* eqnbox.c: */
333e12c5d1SDavid du Colombier 
343e12c5d1SDavid du Colombier char	*IRspace = "\\^";	/* space between italic & roman boxes */
353e12c5d1SDavid du Colombier 
363e12c5d1SDavid du Colombier /* fat.c: */
373e12c5d1SDavid du Colombier 
383e12c5d1SDavid du Colombier double	Fatshift = 0.05;	/* fattening shifts by Fatshift ems */
393e12c5d1SDavid du Colombier 
403e12c5d1SDavid du Colombier /* funny.c: */
413e12c5d1SDavid du Colombier 
423e12c5d1SDavid du Colombier int	Funnyps	= 5;		/* point size change (== 5 above) */
433e12c5d1SDavid du Colombier double	Funnyht = 0.2;		/* height correction */
443e12c5d1SDavid du Colombier double	Funnybase = 0.3;	/* base correction */
453e12c5d1SDavid du Colombier 
463e12c5d1SDavid du Colombier /* integral.c: */
473e12c5d1SDavid du Colombier 
483e12c5d1SDavid du Colombier int	Intps	= 4;		/* point size change for integral (== 4 above) */
493e12c5d1SDavid du Colombier double	Intht	= 1.15;		/* ht of integral in ems */
503e12c5d1SDavid du Colombier double	Intbase	= 0.3;		/* base in ems */
513e12c5d1SDavid du Colombier double	Int1h	= 0.4;		/* lower limit left */
523e12c5d1SDavid du Colombier double	Int1v	= 0.2;		/* lower limit down */
533e12c5d1SDavid du Colombier double	Int2h	= 0.05;		/* upper limit right was 8 */
543e12c5d1SDavid du Colombier double	Int2v	= 0.1;		/* upper limit up */
553e12c5d1SDavid du Colombier 
563e12c5d1SDavid du Colombier /* matrix.c: */
573e12c5d1SDavid du Colombier 
583e12c5d1SDavid du Colombier char	*Matspace = "\\ \\ ";	/* space between matrix columns */
593e12c5d1SDavid du Colombier 
603e12c5d1SDavid du Colombier /* over.c: */
613e12c5d1SDavid du Colombier 
623e12c5d1SDavid du Colombier double	Overgap	= 0.3;		/* gap between num and denom */
633e12c5d1SDavid du Colombier double	Overwid	= 0.5;		/* extra width of box */
643e12c5d1SDavid du Colombier double	Overline = 0.1;		/* extra length of fraction bar */
653e12c5d1SDavid du Colombier 
663e12c5d1SDavid du Colombier /* paren.c* */
673e12c5d1SDavid du Colombier 
683e12c5d1SDavid du Colombier double	Parenbase = 0.4;	/* shift of base for even count */
693e12c5d1SDavid du Colombier double	Parenshift = 0.13;	/* how much to shift parens down in left ... */
703e12c5d1SDavid du Colombier 				/* ignored unless postscript */
713e12c5d1SDavid du Colombier double	Parenheight = 0.3;	/* extra height above builtups */
723e12c5d1SDavid du Colombier 
733e12c5d1SDavid du Colombier /* pile.c: */
743e12c5d1SDavid du Colombier 
753e12c5d1SDavid du Colombier double	Pilegap	= 0.4;		/* gap between pile elems */
763e12c5d1SDavid du Colombier double	Pilebase = 0.5;		/* shift base of even # of piled elems */
773e12c5d1SDavid du Colombier 
783e12c5d1SDavid du Colombier /* shift.c: */
793e12c5d1SDavid du Colombier 
803e12c5d1SDavid du Colombier double	Subbase	= 0.2;		/* subscript base belowe main base */
813e12c5d1SDavid du Colombier double	Supshift = 0.4;		/* superscript .4 up main box */
823e12c5d1SDavid du Colombier char	*Sub1space = "\\|";	/* italic sub roman space */
833e12c5d1SDavid du Colombier char	*Sup1space = "\\|";	/* italic sup roman space */
843e12c5d1SDavid du Colombier char	*Sub2space = "\\^";	/* space after subscripted thing */
853e12c5d1SDavid du Colombier char	*SS1space = "\\^";	/* space before sub in x sub i sup j */
863e12c5d1SDavid du Colombier char	*SS2space = "\\^";	/* space before sup */
873e12c5d1SDavid du Colombier 
883e12c5d1SDavid du Colombier /* sqrt.c: */
893e12c5d1SDavid du Colombier 	/* sqrt is hard!  punt for now. */
903e12c5d1SDavid du Colombier 	/* part of the problem is that every typesetter does it differently */
913e12c5d1SDavid du Colombier 	/* and we have several typesetters to run. */
923e12c5d1SDavid du Colombier 
933e12c5d1SDavid du Colombier /* text.c: */
943e12c5d1SDavid du Colombier 	/* ought to be done by a table */
953e12c5d1SDavid du Colombier 
963e12c5d1SDavid du Colombier struct tune {
973e12c5d1SDavid du Colombier 	char	*name;
983e12c5d1SDavid du Colombier 	char	*cval;
993e12c5d1SDavid du Colombier } tune[]	={
1003e12c5d1SDavid du Colombier   /* diacrit.c */
1013e12c5d1SDavid du Colombier 	"vec_def",	"\\f1\\v'-.5m'\\s-3\\(->\\s0\\v'.5m'\\fP",	/* was \s-2 & .45m */
1023e12c5d1SDavid du Colombier 	"dyad_def",	"\\f1\\v'-.5m'\\s-3\\z\\(<-\\|\\(->\\s0\\v'.5m'\\fP",
1033e12c5d1SDavid du Colombier 	"hat_def",	"\\f1\\v'-.05m'\\s+1^\\s0\\v'.05m'\\fP",	/* was .1 */
1043e12c5d1SDavid du Colombier 	"tilde_def",	"\\f1\\v'-.05m'\\s+1~\\s0\\v'.05m'\\fP",
1053e12c5d1SDavid du Colombier 	"dot_def",	"\\f1\\v'-.67m'.\\v'.67m'\\fP",
1063e12c5d1SDavid du Colombier 	"dotdot_def",	"\\f1\\v'-.67m'..\\v'.67m'\\fP",
1073e12c5d1SDavid du Colombier 	"utilde_def",	"\\f1\\v'1.0m'\\s+2~\\s-2\\v'-1.0m'\\fP",
1083e12c5d1SDavid du Colombier   /* funny.c */
1093e12c5d1SDavid du Colombier 	"sum_def",	"\\|\\v'.3m'\\s+5\\(*S\\s-5\\v'-.3m'\\|",
1103e12c5d1SDavid du Colombier 	"union_def",	"\\|\\v'.3m'\\s+5\\(cu\\s-5\\v'-.3m'\\|",
1113e12c5d1SDavid du Colombier 	"inter_def",	"\\|\\v'.3m'\\s+5\\(ca\\s-5\\v'-.3m'\\|",
1123e12c5d1SDavid du Colombier 	"prod_def",	"\\|\\v'.3m'\\s+5\\(*P\\s-5\\v'-.3m'\\|",
1133e12c5d1SDavid du Colombier   /* integral.c */
1143e12c5d1SDavid du Colombier 	"int_def",	"\\v'.1m'\\s+4\\(is\\s-4\\v'-.1m'",
1153e12c5d1SDavid du Colombier 	0, 0
1163e12c5d1SDavid du Colombier };
1173e12c5d1SDavid du Colombier 
1183e12c5d1SDavid du Colombier tbl	*ftunetbl[TBLSIZE];	/* user-defined names */
1193e12c5d1SDavid du Colombier 
1203e12c5d1SDavid du Colombier char *ftunes[] ={	/* this table intentionally left small */
1213e12c5d1SDavid du Colombier 	"Subbase",
1223e12c5d1SDavid du Colombier 	"Supshift",
1233e12c5d1SDavid du Colombier 	0
1243e12c5d1SDavid du Colombier };
1253e12c5d1SDavid du Colombier 
init_tune(void)1263e12c5d1SDavid du Colombier void init_tune(void)
1273e12c5d1SDavid du Colombier {
1283e12c5d1SDavid du Colombier 	int i;
1293e12c5d1SDavid du Colombier 
1303e12c5d1SDavid du Colombier 	for (i = 0; tune[i].name != NULL; i++)
1313e12c5d1SDavid du Colombier 		install(deftbl, tune[i].name, tune[i].cval, 0);
1323e12c5d1SDavid du Colombier 	for (i = 0; ftunes[i] != NULL; i++)
1333e12c5d1SDavid du Colombier 		install(ftunetbl, ftunes[i], (char *) 0, 0);
1343e12c5d1SDavid du Colombier }
1353e12c5d1SDavid du Colombier 
1363e12c5d1SDavid du Colombier #define eq(s, t) (strcmp(s,t) == 0)
1373e12c5d1SDavid du Colombier 
ftune(char * s,char * t)1383e12c5d1SDavid du Colombier void ftune(char *s, char *t)	/* brute force for now */
1393e12c5d1SDavid du Colombier {
140*14f51593SDavid du Colombier 	double dummy;
1413e12c5d1SDavid du Colombier 	double f = atof(t);
1423e12c5d1SDavid du Colombier 	double *target;
1433e12c5d1SDavid du Colombier 
1443e12c5d1SDavid du Colombier 	while (*t == ' ' || *t == '\t')
1453e12c5d1SDavid du Colombier 		t++;
1463e12c5d1SDavid du Colombier 	if (eq(s, "Subbase"))
1473e12c5d1SDavid du Colombier 		target = &Subbase;
1483e12c5d1SDavid du Colombier 	else if (eq(s, "Supshift"))
1493e12c5d1SDavid du Colombier 		target = &Supshift;
150*14f51593SDavid du Colombier 	else
151*14f51593SDavid du Colombier 		target = &dummy;
1523e12c5d1SDavid du Colombier 	if (t[0] == '+' || t[0] == '-')
1533e12c5d1SDavid du Colombier 		*target += f;
1543e12c5d1SDavid du Colombier 	else
1553e12c5d1SDavid du Colombier 		*target = f;
1563e12c5d1SDavid du Colombier }
157