Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

107 wiersze
4.5 KiB

  1. unit uengShaderPartKeyValuePair;
  2. {$mode objfpc}{$H+}
  3. {$I uengShaderFile.inc}
  4. interface
  5. uses
  6. Classes, SysUtils, variants,
  7. uengShaderPart, uengShaderFileParser;
  8. type
  9. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  10. TengShaderPartKeyValuePair = class(TengShaderPart)
  11. { Code Loading & Storage }
  12. private
  13. fName: String;
  14. fValue: Variant;
  15. fValueName: String;
  16. protected
  17. function GetText: String; override;
  18. function ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String; override;
  19. { General }
  20. public
  21. property Name: String read fName;
  22. property Value: Variant read fValue;
  23. property ValueName: String read fValueName;
  24. end;
  25. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  26. TengShaderPartProperty = class(TengShaderPartKeyValuePair)
  27. { Class Methods }
  28. public
  29. class function GetTokenName: String; override;
  30. end;
  31. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  32. TengShaderPartDefine = class(TengShaderPartKeyValuePair)
  33. { Class Methods }
  34. public
  35. class function GetTokenName: String; override;
  36. end;
  37. implementation
  38. uses
  39. uengShaderFileConstants, uengShaderFileTypes, uengShaderFileHelper;
  40. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  41. //TengShaderPartKeyValuePair////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  42. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  43. function TengShaderPartKeyValuePair.GetText: String;
  44. begin
  45. result := TOKEN_CHAR_BEGIN + GetTokenName + ' ' + fName;
  46. if (fValueName <> '') then
  47. result := result + ' ' + fValueName
  48. else if (fValue <> Unassigned) then
  49. result := result + TOKEN_CHAR_QUOTE + String(fValue) + TOKEN_CHAR_QUOTE;
  50. result := result + TOKEN_CHAR_END;
  51. end;
  52. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  53. function TengShaderPartKeyValuePair.ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String;
  54. begin
  55. if (aParams[0].Name <> GetTokenName) then with aParams[0] do
  56. raise EengInvalidToken.Create(ClassName, GetTokenName, Line, Col, Filename);
  57. if (aParams.Count < 2) or (aParams.Count > 3) then
  58. raise EengInvalidParamterCount.Create(GetTokenName, 2, 3, Line, Col, Filename);
  59. result := '';
  60. fName := aParams[1].Name;
  61. if not IsValidIdentifier(fName) then with aParams[1] do
  62. raise EengInvalidIdentifier.Create(fName, Line, Col, Filename);
  63. if (aParams.Count >= 3) then
  64. if aParams[2].Quoted then begin
  65. fValue := aParams[2].Name;
  66. fValueName := '';
  67. end else begin
  68. fValue := Unassigned;
  69. fValueName := aParams[2].Name;
  70. end
  71. else begin
  72. fValue := Unassigned;
  73. fValueName := '';
  74. end;
  75. end;
  76. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  77. //TengShaderPartProperty////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  78. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  79. class function TengShaderPartProperty.GetTokenName: String;
  80. begin
  81. result := TOKEN_PROPERTY;
  82. end;
  83. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  84. //TengShaderPartDefine//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  85. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  86. class function TengShaderPartDefine.GetTokenName: String;
  87. begin
  88. result := TOKEN_DEFINE;
  89. end;
  90. end.