Subversion Repositories wimsdev

Rev

Rev 8185 | Rev 14535 | 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
{
12240 bpr 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) {
54
    i=evalue(p);
55
    if(i>=-5 && i<=5) ts+=i;
56
  }
57
  if(ts<0) ts=0;
58
  if(ts>=texsize_no) ts=texsize_no-1;
59
  current_tex_size=texsize_list[ts];
60
  snprintf(buf,sizeof(buf),"%d",current_tex_size);
61
  setenv("texgif_density",buf,1);
10 reyssat 62
}
63
 
8155 bpr 64
/* takes math font image file string */
10 reyssat 65
char *mathfont(char *fontname)
66
{
12240 bpr 67
  char buf1[MAX_LINELEN+1],buf2[MAX_LINELEN+1];
68
  struct stat st;
10 reyssat 69
 
12240 bpr 70
  if(fontname[0]=='\\') fontname++;
71
  else if(strncmp(fontname,mathfont_prefix,strlen(mathfont_prefix))==0)
72
    fontname+=strlen(mathfont_prefix);
73
  if(strlen(fontname)==1 /* && strchr("xyz",fontname[0])==NULL */) {
74
    char c=fontname[0];
75
    if(!isalpha(c)) { // c is not a letter
76
      buf2[0]=c;buf2[1]=0;
77
   }
78
   else {
7673 bpr 79
// case of variable xyz in particular
12240 bpr 80
    char *pp;
81
    if(c=='f') pp="&nbsp;"; else pp="";
82
    snprintf(buf2,sizeof(buf2),"<i>%c</i>%s",c,pp);
5523 bpr 83
//FIXME-> should we arrive here in mathml case ???
10 reyssat 84
    }
12240 bpr 85
  }
86
  else {/* interpret font with at least two caracters as \RR \calB - only outside of math environment
5461 bpr 87
    not useful in mathml*/
12240 bpr 88
    char *underscore;
89
    fix_tex_size(); underscore="";
90
    {
91
      char *p, *p2;
92
      for(p=fontname; *p && !isupper(*p); p++);
7673 bpr 93
/* verify positionning of capital letter */
12240 bpr 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",
7673 bpr 102
           mathfont_dir,current_tex_size,fontname,underscore);
12240 bpr 103
    if(*underscore && stat(buf1,&st)!=0)
104
      snprintf(buf1,sizeof(buf1),"%s/%d/%s.gif",
7673 bpr 105
             mathfont_dir,current_tex_size,fontname);
8179 bpr 106
 
12240 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),
7673 bpr 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);
12240 bpr 114
    else
7673 bpr 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);
12240 bpr 118
  }
119
  force_setvar("wims_mathfont_",buf2); return getvar("wims_mathfont_");
10 reyssat 120
}