[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.41

version 1.40, 2004/03/11 07:40:41 version 1.41, 2004/03/12 02:06:48
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.40 2004/03/11 07:40:41 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 776  char *symbol_name(char *name)
Line 778  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 790  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)

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

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