unit uengShaderPartMessage; {$mode objfpc}{$H+} {$I uengShaderFile.inc} interface uses Classes, SysUtils, uengShaderPart, uengShaderCodePart, uengShaderFileParser, uengShaderFileTypes, uengShaderGeneratorArgs; type //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TengShaderPartInfo = class(TengShaderCodePart) private fMessage: String; { Code Loading & Storage } protected fLogLevel: TengShaderPartLogLevel; function GetText: String; override; function ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String; override; { Code Generation } public procedure GenerateCodeIntern(const aArgs: TengShaderGeneratorArgs); override; { General } public property Message: String read fMessage; constructor Create(const aParent: TengShaderPart); override; { Class Methods } public class function GetTokenName: String; override; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TengShaderPartWarning = class(TengShaderPartInfo) { General } public constructor Create(const aParent: TengShaderPart); override; { Class Methods } public class function GetTokenName: String; override; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TengShaderPartError = class(TengShaderPartInfo) { General } public constructor Create(const aParent: TengShaderPart); override; { Class Methods } public class function GetTokenName: String; override; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// EengShaderPartThrow = class(EengShaderPart); TengShaderPartThrow = class(TengShaderPartInfo) { General } public constructor Create(const aParent: TengShaderPart); override; { Class Methods } public class function GetTokenName: String; override; end; implementation uses uengShaderFileConstants; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TengShaderPartInfo///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function TengShaderPartInfo.GetText: String; begin result := TOKEN_CHAR_BEGIN + GetTokenName + ' ' + TOKEN_CHAR_QUOTE + fMessage + TOKEN_CHAR_QUOTE + TOKEN_CHAR_END; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function TengShaderPartInfo.ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String; begin if (aParams[0].Name <> GetTokenName) then with aParams[0] do raise EengInvalidToken.Create(ClassName, Name, Line, Col, Filename, self); if (aParams.Count <> 2) then raise EengInvalidParamterCount.Create(GetTokenName, 2, self); fMessage := aParams[1].Name; result := inherited ParseIntern(aArgs, aParams); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TengShaderPartInfo.GenerateCodeIntern(const aArgs: TengShaderGeneratorArgs); begin inherited GenerateCodeIntern(aArgs); if (fLogLevel = llThrow) then raise EengShaderPartThrow.Create(fMessage, self) else LogMsg(fLogLevel, fMessage); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// constructor TengShaderPartInfo.Create(const aParent: TengShaderPart); begin inherited Create(aParent); fLogLevel := llInfo; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// class function TengShaderPartInfo.GetTokenName: String; begin result := TOKEN_INFO; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// constructor TengShaderPartWarning.Create(const aParent: TengShaderPart); begin inherited Create(aParent); fLogLevel := llWarning; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TengShaderPartWarning///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// class function TengShaderPartWarning.GetTokenName: String; begin result := TOKEN_WARNING; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// constructor TengShaderPartError.Create(const aParent: TengShaderPart); begin inherited Create(aParent); fLogLevel := llError; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TengShaderPartError/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// class function TengShaderPartError.GetTokenName: String; begin result := TOKEN_ERROR; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// constructor TengShaderPartThrow.Create(const aParent: TengShaderPart); begin inherited Create(aParent); fLogLevel := llThrow; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TengShaderPartThrow/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// class function TengShaderPartThrow.GetTokenName: String; begin result := TOKEN_THROW; end; end.