bool DictConv::parseLine(char* buf, char* word_buf, std::string& syls) { /* ignore the empty lines and comment lines */ if (*buf == '\n' || *buf == '#') return false; char* p = (char*)skipSpace(buf); char* t = (char*)skipNonSpace(p); while (p < t) *word_buf++ = *p++; *word_buf = 0; p = (char*)skipSpace(p); t = (char*)skipNonSpace(p); if (*t) *t++ = 0; p = (char*)skipSpace(t); t = (char*)skipNonSpace(p); if (*t) *t++ = 0; syls.assign(p); return true; }
static void scanSource( char *fname ) { char *mask_id; char *ok; char *t; char *p; char *s; char c; int begin_found; unsigned ic_idx; file = fname; line = 0; begin_found = 0; mask_id = NULL; for(;;) { ok = fgets( buff, sizeof(buff), src_c ); if( ok == NULL ) break; ++line; if( begin_found ) { t = strstr( buff, "// ICMASK END" ); if( t != NULL ) { begin_found = 0; continue; } p = skipSpace( buff ); if( memcmp( p, "case", 4 ) == 0 ) { p = skipNonSpace( p ); p = skipSpace( p ); if( memcmp( p, "IC_", 3 ) == 0 ) { ic_idx = whatICAmI( p ); addName( icMaskTable, ic_idx, mask_id ); } } } else { t = strstr( buff, "// ICMASK BEGIN" ); if( t != NULL ) { p = skipNonSpace( t ); p = skipSpace( p ); p = skipNonSpace( p ); p = skipSpace( p ); p = skipNonSpace( p ); p = skipSpace( p ); s = p; p = skipMacroName( p ); c = *p; *p = '\0'; mask_id = strdup( s ); *p = c; begin_found = 1; } } } if( begin_found ) { fail( "// ICMASK BEGIN found without matching // ICMASK END\n" ); } }
static void do_msgsym( char *p ) { MSGSYM *msg; int i; size_t len; ++messageCounter; flags.have_msg = 1; p = skipNonSpace( sym, p ); len = strlen( sym ); msg = malloc( sizeof( *msg ) + len ); msg->next = *currMSGSYM; *currMSGSYM = msg; currMSGSYM = &(msg->next); msg->sortedByName[0] = NULL; msg->sortedByName[1] = NULL; msg->fname = fname; msg->line = line; msg->grpIndex = messageIndex; msg->index = groupIndex + messageIndex; ++messageIndex; msg->level = 0; msg->style = 0; msg->mtype = MSG_TYPE_ERROR; for( i = LANG_MIN; i < LANG_MAX; ++i ) { msg->lang_txt[i] = NULL; } msg->words = NULL; strcpy( msg->name, sym ); if( addToSorted( msg ) != NULL ) { error( "message name has been used before '%s'\n", sym ); } msg->grp = currGroup; }
static void splitIntoWords( void ) { MSGSYM *m; WORD *w; WORDREF *r; WORDREF **a; char *p; for( m = messageSyms; m != NULL; m = m->next ) { p = m->lang_txt[LANG_English]; a = &(m->words); for(;;) { if( p[0] && isspace( p[0] ) && isspace( p[1] ) ) { errorLocn( m->fname, m->line, "MSGSYM %s text has too many blanks '%s'\n", m->name, p ); } p = skipSpace( p ); if( *p == '\0' ) break; p = skipNonSpace( word, p ); w = addWord( m ); r = malloc( sizeof( *r ) ); r->word = w; r->next = NULL; *a = r; a = &(r->next); } } }
static void processIC_H( char *fname ) { char *p; char *ok; char *ic_start; unsigned ic_idx; file = fname; line = 0; ic_idx = NO_IDX; for(;;) { ok = fgets( buff, sizeof(buff), ic_h ); if( ok == NULL ) break; ++line; p = skipSpace( buff ); if( memcmp( p, "//", 2 ) == 0 ) { continue; } ic_start = strstr( p, "IC(" ); if( ic_start != NULL ) { p = skipNonSpace( ic_start ); p = skipSpace( p ); ic_idx = whatICAmI( p ); continue; } if( ic_idx != NO_IDX ) { if( buff[0] == '#' ) { addName( icPreProcTable, ic_idx, buff ); } } } }
static void do_msggrp( char *p ) { MSGGROUP *grp; MSGGROUP *cur; MSGGROUP **end; size_t len; int saw_dup; ++groupCounter; if( flags.grouped ) { error( "missing :emsggroup\n" ); }else{ if( flags.have_msg ) { error( ":msgsym not enclosed in :msggrp\n" ); } } flags.grouped = 1; p = skipNonSpace( group, p ); len = strlen( group ); if( !flags.gen_gpick && len != 2 ) { error( ":msggroup code '%s' not two characters\n", group ); switch( len ) { case 0 : group[0] = ' '; // drops thru case 1 : group[1] = ' '; // drops thru default : group[2] = '\0'; } len = 2; } grp = malloc( sizeof( *grp ) +len ); grp->next = NULL; strcpy( grp->name, group ); messageIndex=0; grp->msgIndex = messageCounter; grp->num = groupIndex; //set with default strncpy( grp->prefix, group, 2 ); //default grp->prefix[2] = '\0'; currGroup = grp; end = &allGroups; saw_dup = 0; for( ; ; ) { cur = *end; if( 0 == cur ) { *end = grp; break; } else { if( (strcmp( cur->name, group ) == 0) && ! saw_dup ) { error( "msggroup code '%s' same as previous code\n", group ); saw_dup = 1; } } end = &cur->next; } }
bool parseLine(char* buf, char* word_buf, unsigned& id, std::set<TSyllableInfo>& pyset) { pyset.clear(); /* ignore the empty lines and comment lines */ if (*buf == '\n' || *buf == '#') return 0; char* p = (char*)skipSpace(buf); char* t = (char*)skipNonSpace(p); while (p < t) *word_buf++ = *p++; *word_buf = 0; p = (char*)skipSpace(p); t = (char*)skipNonSpace(p); if (*t) *t++ = 0; id = atoi(p); p = (char*)skipSpace(t); while (*p) { const char* s = p; t = (char*)skipNonSpace(p); if (*t) *t++ = 0; while ((*p >= 'a' && *p <= 'z') || (*p == '\'')) ++p; if ((p > s) && ((*p == 0) || (*p == ':'))) { int cost = 0; if (*p == ':') { *p++ = 0; cost = atoi(p); } pyset.insert(TSyllableInfo(s, cost)); } p = (char*)skipSpace(t); } return pyset.size() > 0; }
bool DictConv::parseLine(char* buf, char* word_buf, unsigned& id) { /* ignore the empty lines and comment lines */ if (*buf == '\n' || *buf == '#') return false; char* p = (char*)skipSpace(buf); char* t = (char*)skipNonSpace(p); while (p < t) *word_buf++ = *p++; *word_buf = 0; p = (char*)skipSpace(p); t = (char*)skipNonSpace(p); if (*t) *t++ = 0; id = atoi(p); return true; }
static void do_msggrpstr( char *p ) { MSGGROUP *grp; size_t len; grp = currGroup; p = skipNonSpace( group, p ); len = strlen( group ); if( len > 2 ) { error( ":msggrpstr value '%s' is too long\n", group ); len = 2; } if( grp != NULL ){ strncpy( grp->prefix, group, 2 ); //default grp->prefix[2] = '\0'; } }
static tag_id getId( char *p, char **update_p ) { char *s; char **tc; s = skipNonSpace( tag, p ); *update_p = skipSpace( s ); if( s[-1] != '.' ) { error( "tag missing '.': %s\n", tag ); return( TAG_MAX ); } for( tc = tagNames; *tc; ++tc ) { if( stricmp( tag, *tc ) == 0 ) { return( tc - tagNames ); } } error( "unknown tag: %s\n", tag ); return( TAG_MAX ); }
static void addICMasks( unsigned ic ) { char *p; char *s; char c; p = buff; p = skipNonSpace( p ); for(;;) { p = skipSpace( p ); if( *p == '\0' ) break; s = p; while( *p && ( isalnum( *p ) || *p == '_' ) ) { ++p; } c = *p; *p = '\0'; addName( icMaskTable, ic, s ); *p = c; } }