summaryrefslogtreecommitdiff
path: root/Source/cmCommandArgumentParserHelper.h
diff options
context:
space:
mode:
authorAndy Cedilnik <andy.cedilnik@kitware.com>2005-06-08 10:41:05 -0400
committerAndy Cedilnik <andy.cedilnik@kitware.com>2005-06-08 10:41:05 -0400
commit2f42e93427902a8afa28ee3fe796768242452fbc (patch)
tree570a2107528e0157ee3083d3513701a7bf4da3a3 /Source/cmCommandArgumentParserHelper.h
parent894fa6a8c7404ce324dd8b9ff3de0cab48f20db2 (diff)
downloadcmake-2f42e93427902a8afa28ee3fe796768242452fbc.tar.gz
ENH: Initial import (not working yet)
Diffstat (limited to 'Source/cmCommandArgumentParserHelper.h')
-rw-r--r--Source/cmCommandArgumentParserHelper.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/Source/cmCommandArgumentParserHelper.h b/Source/cmCommandArgumentParserHelper.h
new file mode 100644
index 0000000000..36a9f04c74
--- /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
+
+