unit uengShaderFileHelper; {$mode objfpc}{$H+} {$I uengShaderFile.inc} interface uses uengShaderPart, uengShaderFileParser; function IsValidIdentifier(const aIdent: String): Boolean; function CheckEndToken(const aArgs: TengParseArgs; const aShaderPart: TengShaderPart): String; implementation uses sysutils, uengShaderFileConstants, uengShaderFileTypes; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function IsValidIdentifier(const aIdent: String): Boolean; var i, len: Integer; begin len := Length(aIdent); result := false; for i := 1 to len do if not (aIdent[i] in VALID_IDENT_CHARS) then exit; result := true; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function CheckEndToken(const aArgs: TengParseArgs; const aShaderPart: TengShaderPart): String; var oldLine, oldCol: Integer; param: TengTokenParameterList; begin param := TengTokenParameterList.Create(''); try oldLine := aArgs.Line; oldCol := aArgs.Col; if not aArgs.ExtractToken(param) then raise EengUnexpectedToken.Create(TOKEN_NONE, TOKEN_END, oldLine, oldCol, aShaderPart.Filename); if (param[0].Name <> TOKEN_END) then raise EengUnexpectedToken.Create(param[0].Name, TOKEN_END, oldLine, oldCol, aShaderPart.Filename); if (param.Count <> 1) then raise EengInvalidParamterCount.Create(TOKEN_END, 1, oldLine, oldCol, aShaderPart.Filename); result := ''; finally FreeAndNil(param); end; end; end.