#pragma once #include #include #include #include #include "BasicFixed.h" using namespace std; struct INCLUDEFILEINFO{ char **ppFileNames; int FilesNum; int LineOfFile[MAX_LEN]; }; class Text{ protected: char *buffer; int length; public: Text(){ buffer = (char *)calloc( 1, 1 ); length = 0; } ~Text(){ free( buffer ); } bool ReadFile( const string &filePath ); static bool IsBlank( char c ) { if( c == ' ' || c == '\t' ) { return true; } return false; } static void Text::SlideString(char *buffer, int slide){ char *temp; temp=(char *)malloc(lstrlen(buffer)+1); lstrcpy(temp,buffer); lstrcpy(buffer+slide,temp); free(temp); } }; class BasicSource : public Text { static const string generateDirectiveName; void Realloc( int newLength ){ buffer = (char *)realloc( buffer, newLength + 255 ); length = newLength; extern char *basbuf; basbuf = buffer + 2; } void IncludeFiles(); void ChangeReturnLineChar(); void RemoveComments(); bool ReadFile_InIncludeDirective( const string &filePath ); void DirectiveIncludeOrRequire(); void RemoveReturnLineUnderbar(); public: BasicSource(){} ~BasicSource(){} char *GetBuffer(){ return buffer+2; } int GetLength(){ return length-2; } void SetBuffer( const char *buffer ); bool ReadFile( const string &filePath ); bool Generate( const string &genName, const char *buffer ); void Addition( const char *buffer ); void operator = ( const BasicSource &source ){ Realloc( source.length ); lstrcpy( buffer, source.buffer ); } static bool IsCommandDelimitation( char c ){ if( c == '\n' || c == ':' || c == '\0' ){ return true; } return false; } static int JumpStringInPare(const char *buffer,int pos){ int PareNum; for(PareNum=1;;pos++){ if(buffer[pos]=='\"'){ for(pos++;;pos++){ if(buffer[pos]=='\"') break; } continue; } else if(buffer[pos]=='(') PareNum++; else if(buffer[pos]==')'){ PareNum--; if(PareNum==0) return pos; } else if(buffer[pos]=='\0') break; } return 0; } static int JumpStringInBracket(const char *buffer,int pos){ int PareNum; for(PareNum=1;;pos++){ if(buffer[pos]=='\"'){ for(pos++;;pos++){ if(buffer[pos]=='\"') break; } continue; } else if(buffer[pos]=='[') PareNum++; else if(buffer[pos]==']'){ PareNum--; if(PareNum==0) return pos; } else if(buffer[pos]=='\0') break; } return 0; } };