[BACK]Return to strobj.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / builtin

Diff for /OpenXM_contrib2/asir2000/builtin/strobj.c between version 1.18 and 1.19

version 1.18, 2004/03/04 06:29:47 version 1.19, 2004/03/04 08:02:36
Line 45 
Line 45 
  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,   * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.   * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
  *   *
  * $OpenXM: OpenXM_contrib2/asir2000/builtin/strobj.c,v 1.17 2004/03/04 05:16:42 noro Exp $   * $OpenXM$
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 113  void write_tb(char *s,TB tb)
Line 113  void write_tb(char *s,TB tb)
 int register_symbol_table(Obj arg);  int register_symbol_table(Obj arg);
 int register_conv_rule(Obj arg);  int register_conv_rule(Obj arg);
 static struct TeXSymbol *user_texsymbol;  static struct TeXSymbol *user_texsymbol;
   static char *(*conv_rule)(char *);
   
 static struct {  static struct {
         char *name;          char *name;
Line 124  static struct {
Line 125  static struct {
         {0,0,0},          {0,0,0},
 };  };
   
   char *conv_rule_d(char *name)
   {
           char *p,*h,*t,*u;
           int l;
   
           if ( *name == 'd' ) {
                   h = "\\partial";
                   if ( isdigit(name[1]) ) {
                           t = conv_rule_d(name+1);
                           /* 3 : _{} */
                           l = strlen(h)+strlen(t)+3;
                           u = (char *)MALLOC_ATOMIC(l+1);
                           sprintf(u,"%s_{%s}",h,t);
                   } else {
                           /* XXX */
                           t = conv_rule_d(name+2);
                           /* 6 : _{ _{ }} */
                           l = strlen(h)+strlen(t)+6;
                           u = (char *)MALLOC_ATOMIC(l+1);
                           sprintf(u,"%s_{%c_{%s}}",h,name[1],t);
                   }
                   return u;
           } else if ( p = strchr(name,'_') ) {
                   l = p-name;
                   h = (char *)ALLOCA(l+1);
                   strncpy(h,name,l);
                   h[l] = 0;
                   h = conv_rule_d(h);
                   t = conv_rule_d(p+1);
                   /* 3 : _{} */
                   l = strlen(h)+strlen(t)+3;
                   u = (char *)MALLOC_ATOMIC(l+1);
                   sprintf(u,"%s_{%s}",h,t);
                   return u;
           } else
                   return name;
   }
   
 int register_symbol_table(Obj arg)  int register_symbol_table(Obj arg)
 {  {
         NODE n,t;          NODE n,t;
Line 162  int register_symbol_table(Obj arg)
Line 201  int register_symbol_table(Obj arg)
   
 int register_conv_rule(Obj arg)  int register_conv_rule(Obj arg)
 {  {
           if ( INT(arg) ) {
                   switch ( QTOS((Q)arg) ) {
                           case 0:
                                   conv_rule = 0;
                                   return 1;
                                   break;
                           case 1:
                                   conv_rule = conv_rule_d;
                                   return 1;
                                   break;
                           default:
                                   return 0;
                                   break;
                   }
           } else return 0;
 }  }
   
 void Pquotetotex_setenv(NODE arg,Obj *rp)  void Pquotetotex_setenv(NODE arg,Obj *rp)
Line 551  char *symbol_name(char *name)
Line 605  char *symbol_name(char *name)
         for ( i = 0; texsymbol[i].text; i++ )          for ( i = 0; texsymbol[i].text; i++ )
                 if ( !strcmp(texsymbol[i].text,name) )                  if ( !strcmp(texsymbol[i].text,name) )
                         return texsymbol[i].symbol;                          return texsymbol[i].symbol;
         return name;          if ( conv_rule )
                   return (*conv_rule)(name);
           else
                   return name;
 }  }
   
 void fnodetotex_tb(FNODE f,TB tb)  void fnodetotex_tb(FNODE f,TB tb)

Legend:
Removed from v.1.18  
changed lines
  Added in v.1.19

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>