diff options
author | Andy Cedilnik <andy.cedilnik@kitware.com> | 2005-06-08 14:41:05 (GMT) |
---|---|---|
committer | Andy Cedilnik <andy.cedilnik@kitware.com> | 2005-06-08 14:41:05 (GMT) |
commit | 2f42e93427902a8afa28ee3fe796768242452fbc (patch) | |
tree | 570a2107528e0157ee3083d3513701a7bf4da3a3 /Source/cmCommandArgumentParserHelper.h | |
parent | 894fa6a8c7404ce324dd8b9ff3de0cab48f20db2 (diff) | |
download | CMake-2f42e93427902a8afa28ee3fe796768242452fbc.zip CMake-2f42e93427902a8afa28ee3fe796768242452fbc.tar.gz CMake-2f42e93427902a8afa28ee3fe796768242452fbc.tar.bz2 |
ENH: Initial import (not working yet)
Diffstat (limited to 'Source/cmCommandArgumentParserHelper.h')
-rw-r--r-- | Source/cmCommandArgumentParserHelper.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/Source/cmCommandArgumentParserHelper.h b/Source/cmCommandArgumentParserHelper.h new file mode 100644 index 0000000..36a9f04 --- /dev/null +++ b/Source/cmCommandArgumentParserHelper.h @@ -0,0 +1,112 @@ +/*========================================================================= + + Program: CMake - Cross-Platform Makefile Generator + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. + See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef cmCommandArgumentParserHelper_h +#define cmCommandArgumentParserHelper_h + +#include "cmStandardIncludes.h" + +#define YYSTYPE cmCommandArgumentParserHelper::ParserType +#define YYSTYPE_IS_DECLARED +#define YY_EXTRA_TYPE cmCommandArgumentParserHelper* +#define YY_DECL int cmCommandArgument_yylex(YYSTYPE* yylvalp, yyscan_t yyscanner) + +/** \class cmCommandArgumentParserHelper + * \brief Helper class for parsing java source files + * + * Finds dependencies for java file and list of outputs + */ + +class cmMakefile; + +class cmCommandArgumentParserHelper +{ +public: + typedef struct { + char* str; + } ParserType; + + cmCommandArgumentParserHelper(); + ~cmCommandArgumentParserHelper(); + + int ParseString(const char* str, int verb); + int ParseFile(const char* file); + + // For the lexer: + void AllocateParserType(cmCommandArgumentParserHelper::ParserType* pt, + const char* str, int len = 0); + + int LexInput(char* buf, int maxlen); + void Error(const char* str); + + // For yacc + void AddClassFound(const char* sclass); + void PrepareElement(ParserType* opt); + void DeallocateParserType(char** pt); + void CheckEmpty(int line, int cnt, ParserType* pt); + void StartClass(const char* cls); + void EndClass(); + void AddPackagesImport(const char* sclass); + void SetCurrentCombine(const char* cmb) { this->CurrentCombine = cmb; } + const char* GetCurrentCombine() { return this->CurrentCombine.c_str(); } + void UpdateCombine(const char* str1, const char* str2); + void Append(const char* str); + char* CombineUnions(const char* in1, const char* in2); + + char* ExpandSpecialVariable(const char* key, const char* var); + char* ExpandVariable(const char* var); + void SetResult(const char* value); + + void SetMakefile(const cmMakefile* mf); + + std::string& GetResult() { return m_Result; } + + void SetLineFile(long line, const char* file); + void SetEscapeQuotes(bool b) { m_EscapeQuotes = b; } + +private: + cmStdString::size_type InputBufferPos; + cmStdString InputBuffer; + std::vector<char> OutputBuffer; + int CurrentLine; + int UnionsAvailable; + int Verbose; + + std::vector<char*> Allocates; + std::string CurrentCombine; + + void PrintClasses(); + + void Print(const char* place, const char* str); + void SafePrintMissing(const char* str, int line, int cnt); + + char* AddString(const char* str); + + void CleanupParser(); + + std::set<char*> m_Variables; + char m_EmptyVariable[1]; + const cmMakefile* m_Makefile; + std::string m_Result; + std::string m_FileName; + long m_FileLine; + + bool m_EscapeQuotes; +}; + +#endif + + |