Rev 8155 | Rev 8185 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
10 | reyssat | 1 | /* Copyright (C) 1998-2003 XIAO, Gang of Universite de Nice - Sophia Antipolis |
2 | * |
||
3 | * This program is free software; you can redistribute it and/or modify |
||
4 | * it under the terms of the GNU General Public License as published by |
||
5 | * the Free Software Foundation; either version 2 of the License, or |
||
6 | * (at your option) any later version. |
||
7 | * |
||
8 | * This program is distributed in the hope that it will be useful, |
||
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
11 | * GNU General Public License for more details. |
||
12 | * |
||
13 | * You should have received a copy of the GNU General Public License |
||
14 | * along with this program; if not, write to the Free Software |
||
15 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
||
16 | */ |
||
17 | |||
7673 | bpr | 18 | /* fonts which should have align=middle */ |
10 | reyssat | 19 | char *middle_fonts=",y,beta,eta,mu,phi,rho,varphi,psi,\ |
20 | le,leq,ge,geq,pm,ne,neq,\ |
||
21 | subseteq,supseteq,wp,\ |
||
22 | int,oint,Vert,\ |
||
23 | QQ,\ |
||
24 | eufQ,eufz,\ |
||
25 | leftpar2,leftpar3,leftpar4,leftpar5,leftpar6,\ |
||
26 | leftpar7,leftpar8,leftpar9,leftpar10,leftpar11,leftpar12,\ |
||
27 | rightpar2,rightpar3,rightpar4,rightpar5,rightpar6,\ |
||
28 | rightpar7,rightpar8,rightpar9,rightpar10,rightpar11,rightpar12,\ |
||
29 | leftbrace2,leftbrace3,leftbrace4,leftbrace5,leftbrace6,\ |
||
30 | leftbrace7,leftbrace8,leftbrace9,leftbrace10,leftbrace11,leftbrace12,\ |
||
31 | rightbrace2,rightbrace3,rightbrace4,rightbrace5,rightbrace6,\ |
||
32 | rightbrace7,rightbrace8,rightbrace9,rightbrace10,rightbrace11,rightbrace12,"; |
||
33 | |||
7673 | bpr | 34 | /* These are temporary definitions. */ |
10 | reyssat | 35 | char *mathfont_dir="mathfonts"; |
36 | |||
8155 | bpr | 37 | /* tex font size list */ |
10 | reyssat | 38 | int texsize_list[]={63,69,76,83,91,100,109,120,131,144,158,173}; |
39 | int texbasesize=6; /* defaults to 109 */ |
||
40 | int usertexsize=-1; /* non-negative if defined */ |
||
41 | #define texsize_no (sizeof(texsize_list)/sizeof(texsize_list[0])) |
||
42 | |||
43 | int current_tex_size; |
||
44 | |||
45 | void fix_tex_size(void) |
||
46 | { |
||
47 | char buf[64],*p; int i,ts; |
||
48 | ts=texbasesize; |
||
49 | if(usertexsize>=0) ts=usertexsize+1; |
||
50 | if(getwimstexsize) p=getvar("wims_texsize"); else p=NULL; |
||
51 | if(p!=NULL && *p!=0) { |
||
7673 | bpr | 52 | i=evalue(p); |
53 | if(i>=-5 && i<=5) ts+=i; |
||
10 | reyssat | 54 | } |
55 | if(ts<0) ts=0; |
||
7673 | bpr | 56 | if(ts>=texsize_no) ts=texsize_no-1; |
10 | reyssat | 57 | current_tex_size=texsize_list[ts]; |
58 | snprintf(buf,sizeof(buf),"%d",current_tex_size); |
||
59 | setenv("texgif_density",buf,1); |
||
60 | } |
||
61 | |||
8155 | bpr | 62 | /* takes math font image file string */ |
10 | reyssat | 63 | char *mathfont(char *fontname) |
64 | { |
||
65 | char buf1[MAX_LINELEN+1],buf2[MAX_LINELEN+1]; |
||
66 | struct stat st; |
||
67 | |||
68 | if(fontname[0]=='\\') fontname++; |
||
7673 | bpr | 69 | else if(strncmp(fontname,mathfont_prefix,strlen(mathfont_prefix))==0) |
10 | reyssat | 70 | fontname+=strlen(mathfont_prefix); |
71 | if(strlen(fontname)==1 /* && strchr("xyz",fontname[0])==NULL */) { |
||
7673 | bpr | 72 | char c=fontname[0]; |
73 | if(!isalpha(c)) { // c is not a letter |
||
74 | buf2[0]=c;buf2[1]=0; |
||
75 | } |
||
76 | else { |
||
77 | // case of variable xyz in particular |
||
78 | char *pp; |
||
79 | if(c=='f') pp=" "; else pp=""; |
||
80 | snprintf(buf2,sizeof(buf2),"<i>%c</i>%s",c,pp); |
||
5523 | bpr | 81 | //FIXME-> should we arrive here in mathml case ??? |
7673 | bpr | 82 | } |
10 | reyssat | 83 | } |
5461 | bpr | 84 | else {/* interpret font with at least two caracters as \RR \calB - only outside of math environment |
85 | not useful in mathml*/ |
||
7673 | bpr | 86 | char *underscore; |
87 | fix_tex_size(); underscore=""; |
||
88 | { |
||
89 | char *p, *p2; |
||
90 | for(p=fontname; *p && !isupper(*p); p++); |
||
91 | /* verify positionning of capital letter */ |
||
92 | if(*p && p>fontname && *(p+1)!=0) return NULL; |
||
93 | if(p==fontname && (fontname[1]!=*p || strlen(fontname)!=2)) { |
||
94 | for(p2=p+1; *p2 && !isupper(*p2); p2++); |
||
95 | if(*p2) return NULL; |
||
96 | } |
||
97 | if(*p) underscore="_"; |
||
98 | } |
||
99 | snprintf(buf1,sizeof(buf1),"%s/%d/%s%s.gif", |
||
100 | mathfont_dir,current_tex_size,fontname,underscore); |
||
101 | if(*underscore && stat(buf1,&st)!=0) |
||
102 | snprintf(buf1,sizeof(buf1),"%s/%d/%s.gif", |
||
103 | mathfont_dir,current_tex_size,fontname); |
||
8179 | bpr | 104 | |
7673 | bpr | 105 | if(stat(buf1,&st)!=0) return NULL; |
106 | snprintf(buf2,sizeof(buf2),",%s,",fontname); |
||
107 | if(strstr(middle_fonts,buf2)!=NULL) |
||
108 | snprintf(buf2,sizeof(buf2), |
||
109 | "%s<img src=\"%s%s\" style=\"vertical-align: middle; border:none\" \ |
||
6214 | bpr | 110 | alt=\"%s\" />%s", |
7673 | bpr | 111 | mathalign_sup1,ref_base,buf1,fontname,mathalign_sup2); |
112 | else |
||
113 | snprintf(buf2,sizeof(buf2),"<img src=\"%s%s\" style=\"margin:0px; border:none\" \ |
||
6214 | bpr | 114 | alt=\"%s\" />", |
7673 | bpr | 115 | ref_base,buf1,fontname); |
10 | reyssat | 116 | } |
117 | force_setvar("wims_mathfont_",buf2); return getvar("wims_mathfont_"); |
||
118 | } |
||
119 |