|
- unit uengShaderPartText;
-
- {$mode objfpc}{$H+}
- {$I uengShaderFile.inc}
-
- interface
-
- uses
- Classes, SysUtils,
- uengShaderCodePart, uengShaderFileParser, uengShaderGeneratorArgs;
-
- type
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TengShaderPartText = class(TengShaderCodePart)
- { Code Loading & Storage }
- private
- fText: String;
- function GetIsEmpty: Boolean;
- protected
- 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 Text: String read fText;
- property IsEmpty: Boolean read GetIsEmpty;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TengShaderPartLineBreak = class(TengShaderCodePart)
- { Code Loading & Storage }
- protected
- function GetText: String; override;
- function ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String; override;
-
- { Code Generation }
- public
- procedure GenerateCodeIntern(const aArgs: TengShaderGeneratorArgs); override;
-
- { Class Methods }
- public
- class function GetTokenName: String; override;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TengShaderPartCommandEnd = class(TengShaderCodePart)
- { Code Loading & Storage }
- private
- fToken: String;
- protected
- function GetText: String; override;
- function ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String; override;
-
- { Code Generation }
- public
- procedure GenerateCodeIntern(const aArgs: TengShaderGeneratorArgs); override;
-
- { Class Methods }
- public
- class function CheckToken(const aToken: String): Boolean; override;
- end;
-
- implementation
-
- uses
- uengShaderFileConstants, uengShaderFileTypes;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TengShaderPartText////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TengShaderPartText.GetIsEmpty: Boolean;
- begin
- result := (fText = '');
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TengShaderPartText.GetText: String;
- begin
- result := fText;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TengShaderPartText.ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String;
- begin
- fText := '';
- result := '';
- while not aArgs.EndOfLine do begin
- if aArgs.GetTokenPreview(self, result) then begin
- exit;
- end else if (aArgs.CurrentChar in COMMAND_END_TOKENS) then begin
- result := aArgs.CurrentChar;
- exit;
- end else begin
- fText := fText + aArgs.CurrentChar;
- aArgs.NextCol;
- end;
- end;
- result := TOKEN_LINE_BREAK;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TengShaderPartText.GenerateCodeIntern(const aArgs: TengShaderGeneratorArgs);
- begin
- aArgs.AddText(fText);
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TengShaderPartLineBreak///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TengShaderPartLineBreak.GetText: String;
- begin
- result := TOKEN_LINE_BREAK;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TengShaderPartLineBreak.ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String;
- begin
- if not aArgs.EndOfLine then
- raise EengInvalidToken.Create(ClassName, '[LineBreak]', self);
- aArgs.NextLine;
- result := '';
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TengShaderPartLineBreak.GenerateCodeIntern(const aArgs: TengShaderGeneratorArgs);
- begin
- aArgs.AddLineBreak;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- class function TengShaderPartLineBreak.GetTokenName: String;
- begin
- result := TOKEN_LINE_BREAK;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TengShaderPartCommandEnd//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TengShaderPartCommandEnd.GetText: String;
- begin
- result := fToken;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TengShaderPartCommandEnd.ParseIntern(const aArgs: TengParseArgs; const aParams: TengTokenParameterList): String;
- begin
- result := '';
- fToken := aArgs.CurrentChar;
- aArgs.NextCol;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TengShaderPartCommandEnd.GenerateCodeIntern(const aArgs: TengShaderGeneratorArgs);
- begin
- aArgs.AddCommandEnd(fToken);
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- class function TengShaderPartCommandEnd.CheckToken(const aToken: String): Boolean;
- var
- s: String;
- begin
- result := true;
- for s in COMMAND_END_TOKENS do
- if (s = aToken) then
- exit;
- result := false;
- end;
-
- end.
|