Rev 8179 | Rev 12240 | 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 | |||
8185 | bpr | 18 | #include "wims.h" |
19 | |||
7673 | bpr | 20 | /* fonts which should have align=middle */ |
10 | reyssat | 21 | char *middle_fonts=",y,beta,eta,mu,phi,rho,varphi,psi,\ |
22 | le,leq,ge,geq,pm,ne,neq,\ |
||
23 | subseteq,supseteq,wp,\ |
||
24 | int,oint,Vert,\ |
||
25 | QQ,\ |
||
26 | eufQ,eufz,\ |
||
27 | leftpar2,leftpar3,leftpar4,leftpar5,leftpar6,\ |
||
28 | leftpar7,leftpar8,leftpar9,leftpar10,leftpar11,leftpar12,\ |
||
29 | rightpar2,rightpar3,rightpar4,rightpar5,rightpar6,\ |
||
30 | rightpar7,rightpar8,rightpar9,rightpar10,rightpar11,rightpar12,\ |
||
31 | leftbrace2,leftbrace3,leftbrace4,leftbrace5,leftbrace6,\ |
||
32 | leftbrace7,leftbrace8,leftbrace9,leftbrace10,leftbrace11,leftbrace12,\ |
||
33 | rightbrace2,rightbrace3,rightbrace4,rightbrace5,rightbrace6,\ |
||
34 | rightbrace7,rightbrace8,rightbrace9,rightbrace10,rightbrace11,rightbrace12,"; |
||
35 | |||
7673 | bpr | 36 | /* These are temporary definitions. */ |
10 | reyssat | 37 | char *mathfont_dir="mathfonts"; |
38 | |||
8155 | bpr | 39 | /* tex font size list */ |
10 | reyssat | 40 | int texsize_list[]={63,69,76,83,91,100,109,120,131,144,158,173}; |
41 | int texbasesize=6; /* defaults to 109 */ |
||
42 | int usertexsize=-1; /* non-negative if defined */ |
||
43 | #define texsize_no (sizeof(texsize_list)/sizeof(texsize_list[0])) |
||
44 | |||
45 | int current_tex_size; |
||
46 | |||
47 | void fix_tex_size(void) |
||
48 | { |
||
49 | char buf[64],*p; int i,ts; |
||
50 | ts=texbasesize; |
||
51 | if(usertexsize>=0) ts=usertexsize+1; |
||
52 | if(getwimstexsize) p=getvar("wims_texsize"); else p=NULL; |
||
53 | if(p!=NULL && *p!=0) { |
||
7673 | bpr | 54 | i=evalue(p); |
55 | if(i>=-5 && i<=5) ts+=i; |
||
10 | reyssat | 56 | } |
57 | if(ts<0) ts=0; |
||
7673 | bpr | 58 | if(ts>=texsize_no) ts=texsize_no-1; |
10 | reyssat | 59 | current_tex_size=texsize_list[ts]; |
60 | snprintf(buf,sizeof(buf),"%d",current_tex_size); |
||
61 | setenv("texgif_density",buf,1); |
||
62 | } |
||
63 | |||
8155 | bpr | 64 | /* takes math font image file string */ |
10 | reyssat | 65 | char *mathfont(char *fontname) |
66 | { |
||
67 | char buf1[MAX_LINELEN+1],buf2[MAX_LINELEN+1]; |
||
68 | struct stat st; |
||
69 | |||
70 | if(fontname[0]=='\\') fontname++; |
||
7673 | bpr | 71 | else if(strncmp(fontname,mathfont_prefix,strlen(mathfont_prefix))==0) |
10 | reyssat | 72 | fontname+=strlen(mathfont_prefix); |
73 | if(strlen(fontname)==1 /* && strchr("xyz",fontname[0])==NULL */) { |
||
7673 | bpr | 74 | char c=fontname[0]; |
75 | if(!isalpha(c)) { // c is not a letter |
||
76 | buf2[0]=c;buf2[1]=0; |
||
77 | } |
||
78 | else { |
||
79 | // case of variable xyz in particular |
||
80 | char *pp; |
||
81 | if(c=='f') pp=" "; else pp=""; |
||
82 | snprintf(buf2,sizeof(buf2),"<i>%c</i>%s",c,pp); |
||
5523 | bpr | 83 | //FIXME-> should we arrive here in mathml case ??? |
7673 | bpr | 84 | } |
10 | reyssat | 85 | } |
5461 | bpr | 86 | else {/* interpret font with at least two caracters as \RR \calB - only outside of math environment |
87 | not useful in mathml*/ |
||
7673 | bpr | 88 | char *underscore; |
89 | fix_tex_size(); underscore=""; |
||
90 | { |
||
91 | char *p, *p2; |
||
92 | for(p=fontname; *p && !isupper(*p); p++); |
||
93 | /* verify positionning of capital letter */ |
||
94 | if(*p && p>fontname && *(p+1)!=0) return NULL; |
||
95 | if(p==fontname && (fontname[1]!=*p || strlen(fontname)!=2)) { |
||
96 | for(p2=p+1; *p2 && !isupper(*p2); p2++); |
||
97 | if(*p2) return NULL; |
||
98 | } |
||
99 | if(*p) underscore="_"; |
||
100 | } |
||
101 | snprintf(buf1,sizeof(buf1),"%s/%d/%s%s.gif", |
||
102 | mathfont_dir,current_tex_size,fontname,underscore); |
||
103 | if(*underscore && stat(buf1,&st)!=0) |
||
104 | snprintf(buf1,sizeof(buf1),"%s/%d/%s.gif", |
||
105 | mathfont_dir,current_tex_size,fontname); |
||
8179 | bpr | 106 | |
7673 | bpr | 107 | if(stat(buf1,&st)!=0) return NULL; |
108 | snprintf(buf2,sizeof(buf2),",%s,",fontname); |
||
109 | if(strstr(middle_fonts,buf2)!=NULL) |
||
110 | snprintf(buf2,sizeof(buf2), |
||
111 | "%s<img src=\"%s%s\" style=\"vertical-align: middle; border:none\" \ |
||
6214 | bpr | 112 | alt=\"%s\" />%s", |
7673 | bpr | 113 | mathalign_sup1,ref_base,buf1,fontname,mathalign_sup2); |
114 | else |
||
115 | snprintf(buf2,sizeof(buf2),"<img src=\"%s%s\" style=\"margin:0px; border:none\" \ |
||
6214 | bpr | 116 | alt=\"%s\" />", |
7673 | bpr | 117 | ref_base,buf1,fontname); |
10 | reyssat | 118 | } |
119 | force_setvar("wims_mathfont_",buf2); return getvar("wims_mathfont_"); |
||
120 | } |
||
121 |