[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.40 and 1.43

version 1.40, 2004/03/11 07:40:41 version 1.43, 2004/03/15 06:44:50
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.39 2004/03/11 04:52:17 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/strobj.c,v 1.42 2004/03/12 02:15:23 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 156  static struct {
Line 156  static struct {
 char *conv_rule(char *name)  char *conv_rule(char *name)
 {  {
         char *body,*r;          char *body,*r;
           int len;
   
         if ( convfunc )          if ( convfunc )
                 name = call_convfunc(name);                  name = call_convfunc(name);
         if ( conv_flag & CONV_DMODE ) {          if ( conv_flag & CONV_TABLE ) {
                 if ( *name == 'd' ) {                  r = symbol_name(name);
                         body = conv_flag&CONV_SUBS?conv_subs(name+1):symbol_name(name+1);                  if ( r ) return r;
                         if ( !body ) {          }
                                 r = MALLOC_ATOMIC((strlen(PARTIAL)+1)*sizeof(char));          if ( (conv_flag & CONV_DMODE) && *name == 'd' ) {
                                 strcpy(r,PARTIAL);                  body = conv_rule(name+1);
                         } else {                  r = MALLOC_ATOMIC((strlen(PARTIAL)+strlen(body)+5)*sizeof(char));
                                 r = MALLOC_ATOMIC((strlen(PARTIAL)+strlen(body)+5)                  if ( !body || !(len=strlen(body)) )
                                         *sizeof(char));                          strcpy(r,PARTIAL);
                                 sprintf(r,strlen(body)==1?"{%s}_%s":"{%s}_{%s}",PARTIAL,body);                  else if ( len == 1 )
                         }                          sprintf(r,"%s_%s",PARTIAL,body);
                         return r;                  else
                 } else                          sprintf(r,"%s_{%s}",PARTIAL,body);
                         return conv_flag&CONV_SUBS?conv_subs(name):symbol_name(name);                  return r;
         } else          } else
                 return conv_flag&CONV_SUBS?conv_subs(name):symbol_name(name);                  return conv_subs(name);
 }  }
   
 int _is_delimiter(char c)  int _is_delimiter(char c)
Line 192  int _is_alpha(char c)
Line 193  int _is_alpha(char c)
 char *conv_subs(char *name)  char *conv_subs(char *name)
 {  {
         int i,j,k,len,clen,slen,start,level;          int i,j,k,len,clen,slen,start,level;
         char *buf,*head,*r,*h,*brace;          char *buf,*head,*r,*h,*brace,*buf_conv;
         char **subs;          char **subs;
   
         len = strlen(name);          if ( !name || !(len=strlen(name)) ) return "";
         if ( !len ) return 0;          if ( !(conv_flag&CONV_SUBS) ) return name;
         subs = (char **)ALLOCA(len*sizeof(char* ));          subs = (char **)ALLOCA(len*sizeof(char* ));
         for ( i = 0, j = 0, start = i; ; j++ ) {          for ( i = 0, j = 0, start = i; ; j++ ) {
                 while ( (i < len) && _is_delimiter(name[i]) ) i++;                  while ( (i < len) && _is_delimiter(name[i]) ) i++;
Line 228  char *conv_subs(char *name)
Line 229  char *conv_subs(char *name)
                         slen = i-start;                          slen = i-start;
                         buf = (char *)ALLOCA((slen+1)*sizeof(char));                          buf = (char *)ALLOCA((slen+1)*sizeof(char));
                         strncpy(buf,name+start,slen); buf[slen] = 0;                          strncpy(buf,name+start,slen); buf[slen] = 0;
                         subs[j] = symbol_name(buf);                          buf_conv = symbol_name(buf);
                           subs[j] = buf_conv?buf_conv:buf;
                 }                  }
         }          }
         for ( k = 0, clen = 0; k < j; k++ ) clen += strlen(subs[k]);          for ( k = 0, clen = 0; k < j; k++ ) clen += strlen(subs[k]);
Line 334  int register_conv_rule(Obj arg)
Line 336  int register_conv_rule(Obj arg)
   
 int register_conv_func(Obj arg)  int register_conv_func(Obj arg)
 {  {
         if ( OID(arg) == O_P && (int)(VR((P)arg))->attr == V_SR ) {          if ( !arg ) {
                   convfunc = 0;
                   return 1;
           } else if ( OID(arg) == O_P && (int)(VR((P)arg))->attr == V_SR ) {
                 convfunc = (FUNC)(VR((P)arg)->priv);                  convfunc = (FUNC)(VR((P)arg)->priv);
                 /* f must be a function which takes single argument */                  /* f must be a function which takes single argument */
                 return 1;                  return 1;
Line 408  void Pquotetotex_env(NODE arg,Obj *rp)
Line 413  void Pquotetotex_env(NODE arg,Obj *rp)
                 *rp = (Obj)l;                  *rp = (Obj)l;
         } else if ( ac == 1 && !ARG0(arg) ) {          } else if ( ac == 1 && !ARG0(arg) ) {
                 /* set to default */                  /* set to default */
                 for ( i = 0; qtot_env[i].name; i++ )                  for ( i = 0; qtot_env[i].name; i++ ) {
                           (qtot_env[i].reg)(0);
                         qtot_env[i].value = 0;                          qtot_env[i].value = 0;
                   }
                 *rp = 0;                  *rp = 0;
         } else if ( ac == 1 || ac == 2 ) {          } else if ( ac == 1 || ac == 2 ) {
                 asir_assert(ARG0(arg),O_STR,"quotetotex_env");                  asir_assert(ARG0(arg),O_STR,"quotetotex_env");
Line 776  char *symbol_name(char *name)
Line 783  char *symbol_name(char *name)
 {  {
         int i;          int i;
   
           if ( !name || strlen(name) == 0 )
                   return "";
         if ( !(conv_flag & CONV_TABLE) )          if ( !(conv_flag & CONV_TABLE) )
                 return name;                  return name;
   
Line 786  char *symbol_name(char *name)
Line 795  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;          return 0;
 }  }
   
 void fnodetotex_tb(FNODE f,TB tb)  void fnodetotex_tb(FNODE f,TB tb)
Line 1082  void fnodetotex_tb(FNODE f,TB tb)
Line 1091  void fnodetotex_tb(FNODE f,TB tb)
                 case I_FORMULA:                  case I_FORMULA:
                         obj = (Obj)FA0(f);                          obj = (Obj)FA0(f);
                         if ( !obj )                          if ( !obj )
                                 opname = "0";                                  write_tb("0",tb);
                         else if ( OID(obj) == O_N && NID(obj) == N_C ) {                          else if ( OID(obj) == O_N && NID(obj) == N_C ) {
                                 cplx = (C)obj;                                  cplx = (C)obj;
                                 write_tb("(",tb);                                  write_tb("(",tb);

Legend:
Removed from v.1.40  
changed lines
  Added in v.1.43

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