dvander@591: /** ds@653: * vim: set ts=4 : dvander@591: * =============================================================== dvander@591: * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. dvander@591: * =============================================================== dvander@591: * dvander@591: * This file is not open source and may not be copied without explicit dvander@591: * written permission of AlliedModders LLC. This file may not be redistributed dvander@591: * in whole or significant part. dvander@591: * For information, see LICENSE.txt or http://www.sourcemod.net/license.php dvander@591: * dvander@591: * Version: $Id$ dvander@591: */ dvander@591: dvander@591: #ifndef _INCLUDE_SOURCEMOD_TEXTPARSERS_H_ dvander@591: #define _INCLUDE_SOURCEMOD_TEXTPARSERS_H_ dvander@591: dvander@591: #include dvander@591: #include "sm_globals.h" dvander@591: dvander@591: using namespace SourceMod; dvander@591: dvander@591: inline unsigned int _GetUTF8CharBytes(const char *stream) dvander@591: { dvander@591: unsigned char c = *(unsigned char *)stream; dvander@591: if (c & (1<<7)) dvander@591: { dvander@591: if (c & (1<<5)) dvander@591: { dvander@591: if (c & (1<<4)) dvander@591: { dvander@591: return 4; dvander@591: } dvander@591: return 3; dvander@591: } dvander@591: return 2; dvander@591: } dvander@591: return 1; dvander@591: } dvander@591: dvander@631: bool IsWhitespace(const char *stream); dvander@631: dvander@591: /** dvander@591: * @param void * IN: Stream pointer dvander@591: * @param char * IN/OUT: Stream buffer dvander@591: * @param size_t IN: Maximum size of buffer dvander@591: * @param unsigned int * OUT: Number of bytes read (0 = end of stream) dvander@591: * @return True on success, false on failure dvander@591: */ dvander@591: typedef bool (*STREAMREADER)(void *, char *, size_t, unsigned int *); dvander@591: dvander@616: class TextParsers : dvander@591: public ITextParsers, dvander@591: public SMGlobalClass dvander@591: { dvander@591: public: dvander@616: TextParsers(); dvander@591: public: //SMGlobalClass dvander@591: void OnSourceModAllInitialized(); dvander@591: public: dvander@591: bool ParseFile_INI(const char *file, dvander@591: ITextListener_INI *ini_listener, dvander@591: unsigned int *line, dvander@591: unsigned int *col); dvander@591: dvander@591: SMCParseError ParseFile_SMC(const char *file, dvander@591: ITextListener_SMC *smc_listener, dvander@591: unsigned int *line, dvander@591: unsigned int *col); dvander@591: dvander@591: unsigned int GetUTF8CharBytes(const char *stream); dvander@591: dvander@591: const char *GetSMCErrorString(SMCParseError err); dvander@591: private: dvander@591: SMCParseError ParseString_SMC(const char *stream, dvander@591: ITextListener_SMC *smc, dvander@591: unsigned int *line, dvander@591: unsigned int *col); dvander@591: SMCParseError ParseStream_SMC(void *stream, dvander@591: STREAMREADER srdr, dvander@591: ITextListener_SMC *smc, dvander@591: unsigned int *line, dvander@591: unsigned int *col); dvander@591: dvander@591: }; dvander@591: dvander@616: extern TextParsers g_TextParser; dvander@591: dvander@591: #endif //_INCLUDE_SOURCEMOD_TEXTPARSERS_H_