mirror of
https://github.com/reactos/CMake.git
synced 2024-12-13 14:27:23 +00:00
daa0f6f98d
Teach the CMake language parser to recognize Lua-style "long bracket" arguments. These start with two '[' separated by zero or more '=' characters e.g. "[[" or "[=[" or "[==[". They end with two ']' separated by the same number of '=' as the opening bracket. There is no nesting of brackets of the same level (number of '='). No escapes, variable expansion, or other processing is performed on the content between such brackets so they always represent exactly one argument. Also teach CMake to parse and ignore "long comment" syntax. A long comment starts with "#" immediately followed by an opening long bracket. It ends at the matching close long bracket. Teach the RunCMake.Syntax test to cover long bracket and long comment cases.
76 lines
2.3 KiB
C
76 lines
2.3 KiB
C
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
|
|
|
|
Distributed under the OSI-approved BSD License (the "License");
|
|
see accompanying file Copyright.txt for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
See the License for more information.
|
|
============================================================================*/
|
|
#ifndef cmListFileLexer_h
|
|
#define cmListFileLexer_h
|
|
|
|
typedef enum cmListFileLexer_Type_e
|
|
{
|
|
cmListFileLexer_Token_None,
|
|
cmListFileLexer_Token_Space,
|
|
cmListFileLexer_Token_Newline,
|
|
cmListFileLexer_Token_Identifier,
|
|
cmListFileLexer_Token_ParenLeft,
|
|
cmListFileLexer_Token_ParenRight,
|
|
cmListFileLexer_Token_ArgumentUnquoted,
|
|
cmListFileLexer_Token_ArgumentQuoted,
|
|
cmListFileLexer_Token_ArgumentBracket,
|
|
cmListFileLexer_Token_CommentBracket,
|
|
cmListFileLexer_Token_BadCharacter,
|
|
cmListFileLexer_Token_BadBracket,
|
|
cmListFileLexer_Token_BadString
|
|
} cmListFileLexer_Type;
|
|
|
|
typedef struct cmListFileLexer_Token_s cmListFileLexer_Token;
|
|
struct cmListFileLexer_Token_s
|
|
{
|
|
cmListFileLexer_Type type;
|
|
char* text;
|
|
int length;
|
|
int line;
|
|
int column;
|
|
};
|
|
|
|
enum cmListFileLexer_BOM_e
|
|
{
|
|
cmListFileLexer_BOM_None,
|
|
cmListFileLexer_BOM_UTF8,
|
|
cmListFileLexer_BOM_UTF16BE,
|
|
cmListFileLexer_BOM_UTF16LE,
|
|
cmListFileLexer_BOM_UTF32BE,
|
|
cmListFileLexer_BOM_UTF32LE
|
|
};
|
|
typedef enum cmListFileLexer_BOM_e cmListFileLexer_BOM;
|
|
|
|
typedef struct cmListFileLexer_s cmListFileLexer;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
cmListFileLexer* cmListFileLexer_New();
|
|
int cmListFileLexer_SetFileName(cmListFileLexer*, const char*,
|
|
cmListFileLexer_BOM* bom);
|
|
int cmListFileLexer_SetString(cmListFileLexer*, const char*);
|
|
cmListFileLexer_Token* cmListFileLexer_Scan(cmListFileLexer*);
|
|
long cmListFileLexer_GetCurrentLine(cmListFileLexer*);
|
|
long cmListFileLexer_GetCurrentColumn(cmListFileLexer*);
|
|
const char* cmListFileLexer_GetTypeAsString(cmListFileLexer*,
|
|
cmListFileLexer_Type);
|
|
void cmListFileLexer_Delete(cmListFileLexer*);
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif
|