_file_ply::_file_ply() { _element_token_table Element1; const char* Text_tokens[]={"ply","format","ascii","element","vertex","face","end_header","zzzzzzzz",""}; for (int i=0;i<_tokens(NUMBER);i++) { Element1.Text=Text_tokens[i]; Element1.Token=(_tokens) i; Token_table.push_back(Element1); } Debug=false; Buffer[0]='\0'; Num_lines=0; }
int _file_ply::next_token() { char *p1,*p2; char Aux_token[100]; int Num_char; do { if (strlen(Buffer)==0) { if (read_line()==-1) return(-1); while (Buffer[0]=='#') if (read_line()==-1) return(-1); } p1=Buffer; while ((*p1==' ' || *p1=='\t') && *p1!='\n') p1++; p2=p1; while (*p2!=' ' && *p2!='\t' && *p2!='\n') p2++; Num_char=p2-p1; if (Num_char>99) { error("number of characters for token is too long\n"); return(-1); } if (Num_char!=0) { strncpy(Aux_token,p1,Num_char); Aux_token[Num_char]='\0'; } if (*p2=='\n') Buffer[0]='\0'; else strcpy(Buffer,p2); } while (Num_char==0); if (!is_number(Aux_token)) { //printf("es un numero %s\n",Aux_token); Yylval.Real=atof(Aux_token); return((int)_tokens(NUMBER)); } else { //printf("es texto %s\n",Aux_token); Yylval.Text=Aux_token; return(search_token(Aux_token)); } }
int _file_ply::next_token() { char Aux_token[100]; char *Aux_token1; int Num_char=0; do{ if (strlen(Buffer)==0){ // leer una linea si no se ha leido antes if (read_line()==-1) return(-1); // si es un comentario lee la siguiente while (Buffer[0]=='#') if (read_line()==-1) return(-1); } Aux_token1= strtok(Buffer," \t\n"); if (Aux_token1!=NULL){ strcpy(Aux_token,Aux_token1); Num_char=strlen(Aux_token); strcpy(Buffer,Buffer+Num_char+1); } else{// por si hay delimitadores al final de una linea Num_char=0; Buffer[0]=0; } } while (Num_char==0); if (!is_number(Aux_token)) { //printf("es un numero %s\n",Aux_token); Yylval.Real=atof(Aux_token); return((int)_tokens(NUMBER)); } else { //printf("es texto %s\n",Aux_token); Yylval.Text=Aux_token; return(search_token(Aux_token)); } }