Subversion Repositories wimsdev

Rev

Rev 1119 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  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.  
  18.         /* fonts which should have align=middle */
  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.  
  34.         /* These are temporary definitions. */
  35. char *mathfont_dir="mathfonts";
  36.  
  37.   /* tex font size list */
  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) {
  52.         i=evalue(p);
  53.         if(i>=-5 && i<=5) ts+=i;
  54.     }
  55.     if(ts<0) ts=0;
  56.     if(ts>=texsize_no) ts=texsize_no-1;    
  57.     current_tex_size=texsize_list[ts];
  58.     snprintf(buf,sizeof(buf),"%d",current_tex_size);
  59.     setenv("texgif_density",buf,1);
  60. }
  61.  
  62.   /* takes math font image file string */
  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++;
  69.     else if(strncmp(fontname,mathfont_prefix,strlen(mathfont_prefix))==0)
  70.       fontname+=strlen(mathfont_prefix);
  71.     if(strlen(fontname)==1 /* && strchr("xyz",fontname[0])==NULL */) {
  72.         char c=fontname[0];
  73.         if(!isalpha(c)) {
  74.             buf2[0]=c;buf2[1]=0;
  75.         }
  76.         else {
  77.             char *pp;
  78.             if(c=='f') pp="&nbsp;"; else pp="";
  79.             snprintf(buf2,sizeof(buf2),"<i>%c</i>%s",c,pp);
  80.         }
  81.     }
  82.     else {
  83. #ifdef CASE_INSENSITIVE_FS
  84.         char *underscore;
  85.         fix_tex_size(); underscore="";
  86.             {
  87.                 char *p, *p2;
  88.                 for(p=fontname; *p && !isupper(*p); p++);
  89.                 /* verify positionning of capital letter */
  90.                 if(*p && p>fontname && *(p+1)!=0) return NULL;
  91.                 if(p==fontname && (fontname[1]!=*p || strlen(fontname)!=2)) {
  92.                     for(p2=p+1; *p2 && !isupper(*p2); p2++);
  93.                     if(*p2) return NULL;
  94.                 }
  95.                 if(*p) underscore="_";
  96.             }
  97.         snprintf(buf1,sizeof(buf1),"%s/%d/%s%s.gif",
  98.                  mathfont_dir,current_tex_size,fontname,underscore);
  99.         if(*underscore && stat(buf1,&st)!=0)
  100.           snprintf(buf1,sizeof(buf1),"%s/%d/%s.gif",
  101.                    mathfont_dir,current_tex_size,fontname);
  102. #else
  103.         fix_tex_size();
  104.         snprintf(buf1,sizeof(buf1),"%s/%d/%s.gif",
  105.                  mathfont_dir,current_tex_size,fontname);
  106. #endif
  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 align=middle border=0 \
  112. alt=%s>%s",
  113.                    mathalign_sup1,ref_base,buf1,fontname,mathalign_sup2);
  114.         else
  115.           snprintf(buf2,sizeof(buf2),"<img src=%s%s vspace=0 border=0 \
  116. alt=%s>",
  117.                    ref_base,buf1,fontname);
  118.     }
  119.     force_setvar("wims_mathfont_",buf2); return getvar("wims_mathfont_");
  120. }
  121.  
  122.