You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

165 lines
7.0 KiB

  1. unit uengShaderPartMessage;
  2. {$mode objfpc}{$H+}
  3. {$I uengShaderFile.inc}
  4. interface
  5. uses
  6. Classes, SysUtils,
  7. uengShaderPart, uengShaderCodePart, uengShaderFileParser, uengShaderFileTypes, uengShaderGeneratorArgs;
  8. type
  9. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  10. TengShaderPartInfo = class(TengShaderCodePart)
  11. private
  12. fMessage: String;
  13. { Code Loading & Storage }
  14. protected
  15. fLogLevel: TengShaderPartLogLevel;
  16. function GetText: String; override;
  17. function ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String; override;
  18. { Code Generation }
  19. public
  20. procedure GenerateCodeIntern(const aArgs: TengShaderGeneratorArgs); override;
  21. { General }
  22. public
  23. property Message: String read fMessage;
  24. constructor Create(const aParent: TengShaderPart); override;
  25. { Class Methods }
  26. public
  27. class function GetTokenName: String; override;
  28. end;
  29. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  30. TengShaderPartWarning = class(TengShaderPartInfo)
  31. { General }
  32. public
  33. constructor Create(const aParent: TengShaderPart); override;
  34. { Class Methods }
  35. public
  36. class function GetTokenName: String; override;
  37. end;
  38. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  39. TengShaderPartError = class(TengShaderPartInfo)
  40. { General }
  41. public
  42. constructor Create(const aParent: TengShaderPart); override;
  43. { Class Methods }
  44. public
  45. class function GetTokenName: String; override;
  46. end;
  47. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  48. EengShaderPartThrow = class(EengShaderPart);
  49. TengShaderPartThrow = class(TengShaderPartInfo)
  50. { General }
  51. public
  52. constructor Create(const aParent: TengShaderPart); override;
  53. { Class Methods }
  54. public
  55. class function GetTokenName: String; override;
  56. end;
  57. implementation
  58. uses
  59. uengShaderFileConstants;
  60. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  61. //TengShaderPartInfo/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  62. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  63. function TengShaderPartInfo.GetText: String;
  64. begin
  65. result := TOKEN_CHAR_BEGIN + GetTokenName + ' ' + TOKEN_CHAR_QUOTE + fMessage + TOKEN_CHAR_QUOTE + TOKEN_CHAR_END;
  66. end;
  67. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  68. function TengShaderPartInfo.ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String;
  69. begin
  70. if (aParams[0].Name <> GetTokenName) then with aParams[0] do
  71. raise EengInvalidToken.Create(ClassName, Name, Line, Col, Filename, self);
  72. if (aParams.Count <> 2) then
  73. raise EengInvalidParamterCount.Create(GetTokenName, 2, self);
  74. fMessage := aParams[1].Name;
  75. result := inherited ParseIntern(aArgs, aParams);
  76. end;
  77. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  78. procedure TengShaderPartInfo.GenerateCodeIntern(const aArgs: TengShaderGeneratorArgs);
  79. begin
  80. inherited GenerateCodeIntern(aArgs);
  81. if (fLogLevel = llThrow)
  82. then raise EengShaderPartThrow.Create(fMessage, self)
  83. else LogMsg(fLogLevel, fMessage);
  84. end;
  85. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  86. constructor TengShaderPartInfo.Create(const aParent: TengShaderPart);
  87. begin
  88. inherited Create(aParent);
  89. fLogLevel := llInfo;
  90. end;
  91. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  92. class function TengShaderPartInfo.GetTokenName: String;
  93. begin
  94. result := TOKEN_INFO;
  95. end;
  96. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  97. constructor TengShaderPartWarning.Create(const aParent: TengShaderPart);
  98. begin
  99. inherited Create(aParent);
  100. fLogLevel := llWarning;
  101. end;
  102. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  103. //TengShaderPartWarning/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  104. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  105. class function TengShaderPartWarning.GetTokenName: String;
  106. begin
  107. result := TOKEN_WARNING;
  108. end;
  109. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  110. constructor TengShaderPartError.Create(const aParent: TengShaderPart);
  111. begin
  112. inherited Create(aParent);
  113. fLogLevel := llError;
  114. end;
  115. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  116. //TengShaderPartError///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  117. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  118. class function TengShaderPartError.GetTokenName: String;
  119. begin
  120. result := TOKEN_ERROR;
  121. end;
  122. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  123. constructor TengShaderPartThrow.Create(const aParent: TengShaderPart);
  124. begin
  125. inherited Create(aParent);
  126. fLogLevel := llThrow;
  127. end;
  128. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  129. //TengShaderPartThrow///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  130. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  131. class function TengShaderPartThrow.GetTokenName: String;
  132. begin
  133. result := TOKEN_THROW;
  134. end;
  135. end.