/** * Read and init the vector of the words to ignore * @return the vector containing the words to ignore */ std::vector<std::string> read_words_ignore(){ std::vector<std::string> words_ignore; words_ignore.reserve(kMaxWordsIgnore); std::string line; line.reserve(kMaxLengthWordIgnore); // Read from input until EOF or separator field while ( std::getline(std::cin, line) && !check_separator(line) ){ // Move the string read into the vector words_ignore.push_back( std::move(line) ); // Reset the space allocation for the line string line.reserve(kMaxLengthWordIgnore); } return words_ignore; }
/* readbuffer * Reads in the input file and stores all strings in the * section between "#ifdef SCPACK" and "#else" in a buffer. * Only text that is between double quotes is added to the * buffer; the \" escape code is handled. Multiple strings * on one line are handled. */ unsigned readbuffer(FILE *input, unsigned char *buffer) { char str[256]; unsigned buffersize; int i,linenr; linenr=0; buffersize=0; rewind(input); while (!feof(input)) { while (fgets(str,sizeof str,input)!=NULL) { linenr++; check_tablename(str); check_separator(str); if (strmatch(str,START_TOKEN,NULL)) break; } /* while */ if (!strmatch(str,START_TOKEN,NULL)) return buffersize; /* no (more) section found, quit */ while (fgets(str,sizeof str,input)!=NULL) { linenr++; check_if(str,linenr); if (check_tablename(str)) printf("Error: table name definition should not be in SCPACK section (line %d)\n", linenr); check_separator(str); if (strmatch(str,"#else",NULL)) break; /* done */ /* add to the buffer only what is between double quotes */ i=0; do { while (str[i]!='\0' && str[i]!='"') i++; if (str[i]=='"') { /* we are in a string */ i++; while (str[i]!='\0' && str[i]!='"') { /* handle escape sequences */ if (str[i]=='\\') { i++; switch (str[i]) { case 'a': /* alarm */ buffer[buffersize++]='\a'; i++; break; case 'b': /* backspace */ buffer[buffersize++]='\b'; i++; break; case 'f': /* form feed */ buffer[buffersize++]='\f'; i++; break; case 'n': /* newline */ buffer[buffersize++]='\n'; i++; break; case 'r': /* carriage return */ buffer[buffersize++]='\n'; i++; break; case 't': /* tab */ buffer[buffersize++]='\t'; i++; break; case '\'': buffer[buffersize++]='\''; i++; break; case '"': buffer[buffersize++]='"'; i++; break; default: // ??? octal character code escapes and hexadecimal escapes // not supported printf("Unknown escape sequence '\\%c' on line %d\n", str[i], linenr); } /* switch */ } else { buffer[buffersize++]=str[i++]; } /* if */ } /* while */ if (str[i]=='"') { buffer[buffersize++]='\0'; /* terminate each string */ i++; } else { printf("Error: unterminated string on line %d\n",linenr); } /* if */ } /* if */ } while (str[i]!='\0'); } /* while - in SCPACK section */ /* put in another '\0' to terminate the section */ buffer[buffersize++]='\0'; } /* while - !feof(input) */ return buffersize; }