/*    Copyright (C) 1998-2003 XIAO, Gang of Universite de Nice - Sophia Antipolis
 
 *
 
 *  This program is free software; you can redistribute it and/or modify
 
 *  it under the terms of the GNU General Public License as published by
 
 *  the Free Software Foundation; either version 2 of the License, or
 
 *  (at your option) any later version.
 
 *
 
 *  This program is distributed in the hope that it will be useful,
 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
 *  GNU General Public License for more details.
 
 *
 
 *  You should have received a copy of the GNU General Public License
 
 *  along with this program; if not, write to the Free Software
 
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 */
 
 
 
        /* fonts which should have align=middle */
 
char *middle_fonts=",y,beta,eta,mu,phi,rho,varphi,psi,\
 
le,leq,ge,geq,pm,ne,neq,\
 
subseteq,supseteq,wp,\
 
int,oint,Vert,\
 
QQ,\
 
eufQ,eufz,\
 
leftpar2,leftpar3,leftpar4,leftpar5,leftpar6,\
 
leftpar7,leftpar8,leftpar9,leftpar10,leftpar11,leftpar12,\
 
rightpar2,rightpar3,rightpar4,rightpar5,rightpar6,\
 
rightpar7,rightpar8,rightpar9,rightpar10,rightpar11,rightpar12,\
 
leftbrace2,leftbrace3,leftbrace4,leftbrace5,leftbrace6,\
 
leftbrace7,leftbrace8,leftbrace9,leftbrace10,leftbrace11,leftbrace12,\
 
rightbrace2,rightbrace3,rightbrace4,rightbrace5,rightbrace6,\
 
rightbrace7,rightbrace8,rightbrace9,rightbrace10,rightbrace11,rightbrace12,";
 
 
 
        /* These are temporary definitions. */
 
char *mathfont_dir="mathfonts";
 
 
 
  /* tex font size list */
 
int texsize_list[]={63,69,76,83,91,100,109,120,131,144,158,173};
 
int texbasesize=6; /* defaults to 109 */
 
int usertexsize=-1; /* non-negative if defined */
 
#define texsize_no (sizeof(texsize_list)/sizeof(texsize_list[0]))
 
 
 
int current_tex_size;
 
 
 
void fix_tex_size(void)
 
{
 
    char buf[64],*p; int i,ts;
 
    ts=texbasesize;
 
    if(usertexsize>=0) ts=usertexsize+1;
 
    if(getwimstexsize) p=getvar("wims_texsize"); else p=NULL;
 
    if(p!=NULL && *p!=0) {
 
        i=evalue(p);
 
        if(i>=-5 && i<=5) ts+=i;
 
    }
 
    if(ts<0) ts=0;
 
    if(ts>=texsize_no) ts=texsize_no-1;    
 
    current_tex_size=texsize_list[ts];
 
    snprintf(buf
,sizeof(buf
),"%d",current_tex_size
);  
    setenv("texgif_density",buf,1);
 
}
 
 
 
  /* takes math font image file string */
 
char *mathfont(char *fontname)
 
{
 
    char buf1[MAX_LINELEN+1],buf2[MAX_LINELEN+1];
 
    struct stat st;
 
 
 
    if(fontname[0]=='\\') fontname++;
 
    else if(strncmp(fontname
,mathfont_prefix
,strlen(mathfont_prefix
))==0)   
      fontname
+=strlen(mathfont_prefix
); 
    if(strlen(fontname
)==1 /* && strchr("xyz",fontname[0])==NULL */) {  
        char c=fontname[0];
 
        if(!isalpha(c
)) { // c is not a letter  
            buf2[0]=c;buf2[1]=0;
 
        }
 
        else {
 
        // case of variable xyz in particular
 
            char *pp;
 
            if(c=='f') pp=" "; else pp="";
 
            snprintf(buf2
,sizeof(buf2
),"<i>%c</i>%s",c
,pp
);   
//FIXME-> should we arrive here in mathml case ???
 
        }
 
    }
 
    else {/* interpret font with at least two caracters as \RR \calB - only outside of math environment
 
    not useful in mathml*/
 
#ifdef CASE_INSENSITIVE_FS
 
        char *underscore;
 
        fix_tex_size(); underscore="";
 
            {
 
                char *p, *p2;
 
                for(p
=fontname
; *p 
&& !isupper(*p
); p
++);  
                /* verify positionning of capital letter */
 
                if(*p && p>fontname && *(p+1)!=0) return NULL;
 
                if(p
==fontname 
&& (fontname
[1]!=*p 
|| strlen(fontname
)!=2)) {  
                    for(p2
=p
+1; *p2 
&& !isupper(*p2
); p2
++);  
                    if(*p2) return NULL;
 
                }
 
                if(*p) underscore="_";
 
            }
 
        snprintf(buf1
,sizeof(buf1
),"%s/%d/%s%s.gif",  
                 mathfont_dir,current_tex_size,fontname,underscore);
 
        if(*underscore && stat(buf1,&st)!=0)
 
          snprintf(buf1
,sizeof(buf1
),"%s/%d/%s.gif",  
                   mathfont_dir,current_tex_size,fontname);
 
#else
 
        fix_tex_size();
 
        snprintf(buf1
,sizeof(buf1
),"%s/%d/%s.gif",  
                 mathfont_dir,current_tex_size,fontname);
 
#endif
 
        if(stat(buf1,&st)!=0) return NULL;
 
        snprintf(buf2
,sizeof(buf2
),",%s,",fontname
);  
        if(strstr(middle_fonts
,buf2
)!=NULL
)   
                   "%s<img src=\"%s%s\" style=\"vertical-align: middle; border:none\" \
 
alt=\"%s\" />%s",
 
                   mathalign_sup1,ref_base,buf1,fontname,mathalign_sup2);
 
        else
 
          snprintf(buf2
,sizeof(buf2
),"<img src=\"%s%s\" style=\"margin:0px; border:none\" \  
alt=\"%s\" />",
 
                   ref_base,buf1,fontname);
 
    }
 
    force_setvar("wims_mathfont_",buf2); return getvar("wims_mathfont_");
 
}