int TCOD_lex_get_space(TCOD_lex_t *lex) { char c; while ( 1 ) { while ( (c = *lex->pos) <= ' ') { if (c=='\n') TCOD_lex_get_new_line(lex); else if (c == 0) return TCOD_LEX_EOF; // end of file else lex->pos++; } if ( lex->simpleCmt && strncmp(lex->pos, lex->simpleCmt, strlen(lex->simpleCmt)) == 0 ) { while ( *lex->pos != '\0' && *lex->pos != '\n' ) lex->pos++; TCOD_lex_get_new_line(lex); continue; } if ( lex->cmtStart && lex->cmtStop && strncmp(lex->pos, lex->cmtStart, strlen(lex->cmtStart)) == 0 ) { int isJavadoc=( lex->javadocCmtStart && strncmp(lex->pos, lex->javadocCmtStart, strlen(lex->javadocCmtStart)) == 0 ); int cmtLevel=1; char *javadocStart = NULL; if ( isJavadoc ) { javadocStart=lex->pos+strlen(lex->javadocCmtStart); while ( isspace(*javadocStart) ) javadocStart++; } lex->pos++; do { if ( *lex->pos == '\n' ) { TCOD_lex_get_new_line(lex); } else lex->pos++; if ( *lex->pos == '\0' ) return TCOD_LEX_EOF; if ( (lex->flags & TCOD_LEX_FLAG_NESTING_COMMENT) && strncmp(lex->pos-1, lex->cmtStart, strlen(lex->cmtStart)) == 0) cmtLevel++; if ( strncmp(lex->pos-1, lex->cmtStop, strlen(lex->cmtStop)) == 0) cmtLevel--; } while ( cmtLevel > 0 ); lex->pos++; if ( isJavadoc ) { char *src, *dst; char *end = lex->pos - strlen(lex->cmtStop); while ( isspace(*end) && end > javadocStart ) end --; src = javadocStart; dst = lex->last_javadoc_comment; while ( src < end ) { // skip heading spaces while ( src < end && isspace(*src) && *src != '\n') src ++; // copy comment line while ( src < end && *src != '\n' ) *dst++ = *src++; if ( *src == '\n' ) *dst++ = *src++; } // remove trailing spaces while ( dst > lex->last_javadoc_comment && isspace (*(dst-1)) ) dst --; *dst = '\0'; lex->javadoc_read=false; } continue; } break; } return TCOD_LEX_UNKNOWN; }
int TCOD_lex_get_space(TCOD_lex_t *lex) { char c; char *startPos=NULL; while ( 1 ) { while ( (c = *lex->pos) <= ' ') { if (c=='\n') TCOD_lex_get_new_line(lex); else if (c == 0) return TCOD_LEX_EOF; /* end of file */ else lex->pos++; } if ( lex->simpleCmt && strncmp(lex->pos, lex->simpleCmt, strlen(lex->simpleCmt)) == 0 ) { if ( ! startPos ) startPos = lex->pos; while ( *lex->pos != '\0' && *lex->pos != '\n' ) lex->pos++; TCOD_lex_get_new_line(lex); continue; } if ( lex->cmtStart && lex->cmtStop && strncmp(lex->pos, lex->cmtStart, strlen(lex->cmtStart)) == 0 ) { int isJavadoc=( lex->javadocCmtStart && strncmp(lex->pos, lex->javadocCmtStart, strlen(lex->javadocCmtStart)) == 0 ); int cmtLevel=1; char *javadocStart = NULL; if ( ! startPos ) startPos = lex->pos; if ( isJavadoc ) { javadocStart=lex->pos+strlen(lex->javadocCmtStart); while ( isspace(*javadocStart) ) javadocStart++; } lex->pos++; do { if ( *lex->pos == '\n' ) { TCOD_lex_get_new_line(lex); } else lex->pos++; if ( *lex->pos == '\0' ) return TCOD_LEX_EOF; if ( (lex->flags & TCOD_LEX_FLAG_NESTING_COMMENT) && strncmp(lex->pos-1, lex->cmtStart, strlen(lex->cmtStart)) == 0) cmtLevel++; if ( strncmp(lex->pos-1, lex->cmtStop, strlen(lex->cmtStop)) == 0) cmtLevel--; } while ( cmtLevel > 0 ); lex->pos++; if ( isJavadoc ) { char *src, *dst; char *end = lex->pos - strlen(lex->cmtStop); while ( isspace(*end) && end > javadocStart ) end --; src = javadocStart; dst = lex->last_javadoc_comment; while ( src < end ) { /* skip heading spaces */ while ( src < end && isspace(*src) && *src != '\n') src ++; /* copy comment line */ while ( src < end && *src != '\n' ) *dst++ = *src++; if ( *src == '\n' ) *dst++ = *src++; } /* remove trailing spaces */ while ( dst > lex->last_javadoc_comment && isspace (*(dst-1)) ) dst --; *dst = '\0'; lex->javadoc_read=false; } continue; } break; } if ( (lex->flags & TCOD_LEX_FLAG_TOKENIZE_COMMENTS) && startPos && lex->pos > startPos ) { int len = lex->pos - startPos; allocate_tok(lex, len+1); strncpy(lex->tok,startPos,len); lex->tok[len]=0; lex->token_type = TCOD_LEX_COMMENT; lex->token_idx = -1; return TCOD_LEX_COMMENT; } return TCOD_LEX_UNKNOWN; }