#pragma once
/*************************************************

Copyright:

Author:huanglvyou

Date:2021-04-12

Description:日志系统

**************************************************/
#include <string>
#include <map>
#include "SConfig.h"


U_NS_BEGIN_SH_LANGUAGE

enum SHCompileLogLevel
{
	Debug = 0,//无关紧要的信息，例如一些调试信息，请使用此值。
	Info,     //比较重要的信息，例如“编译结束！”等，请使用此值。请不要滥用此值。
	Warning,  //警告信息。
	Error,    //错误信息。
};


enum SHCompileModule
{
	SHEGlobal = 0,          //全局
	SHELanguageData,        //数据层加载
	SHEPreCompile,          //预编译
	SHELexer,               //词法分析
	SHEParser,              //语法分析
	SHESemanticAnalyzer,    //语义分析
	SHETransferTxt,			//标准文件生成
	SHECompiler,           //标准编译
	SHEDefault				//未知模块
};

class SH_CROSS_PLATFORM_API SHCompileLogInfo
{
public:
	SHCompileLogInfo(int LogicNo, SHCompileLogLevel level, const std::string& msg, SHCompileModule module,
		int code, int rowNo, int pos,const std::map<std::string, std::string>& keywords);

	virtual ~SHCompileLogInfo();
	//格式化
	const std::string LogToString();

	SHCompileLogLevel GetLevel() const;                              //日志级别
	int GetCode() const;                                           //错误码
	int GetRowNo() const;                                          //逻辑语句的行号
	int GetPos() const;                                            //错误字符的位置
	SHCompileModule GetModule() const;                               //日志属于哪个模块的
	const std::string& GetMessageInfo() const;                         //日志信息
	std::map<std::string, std::string>& GetKeywords() const; //关键字

	int GetLogicNo() const;  //获取逻辑语句编号

private:
	U_SH_DISABLE_COPY(SHCompileLogInfo)

	class SCompileLogInfoPrivate;
	SCompileLogInfoPrivate* m_private;
};



U_NS_END_SH_LANGUAGE
