imp_javascript.pas
来自「Delphi脚本控件」· PAS 代码 · 共 2,672 行 · 第 1/5 页
PAS
2,672 行
D := ToNumber(Params[0].AsVariant);
if (D >= -1) and (D <= 1) then
result.AsVariant := Math.ArcCos(D)
else
result.AsVariant := NaN;
end;
end;
procedure _Math_asin(MethodBody: TPAXMethodBody);
var
D: Double;
begin
with MethodBody do
if ParamCount > 0 then
begin
D := ToNumber(Params[0].AsVariant);
if (D >= -1) and (D <= 1) then
result.AsVariant := Math.ArcSin(D)
else
result.AsVariant := NaN;
end;
end;
procedure _Math_atan(MethodBody: TPAXMethodBody);
var
D: Double;
begin
with MethodBody do
if ParamCount > 0 then
begin
D := ToNumber(Params[0].AsVariant);
if (D >= -1) and (D <= 1) then
result.AsVariant := ArcTan(D)
else
result.AsVariant := NaN;
end;
end;
procedure _Math_atan2(MethodBody: TPAXMethodBody);
var
A, B: Double;
begin
with MethodBody do
if ParamCount > 0 then
begin
A := ToNumber(Params[0].AsVariant);
B := ToNumber(Params[1].AsVariant);
if (A = NaN) or (B = NaN) then
result.AsVariant := NaN
else
result.AsVariant := Math.arctan2(A,B);
end;
end;
procedure _Math_ceil(MethodBody: TPAXMethodBody);
var
D: Double;
begin
with MethodBody do
if ParamCount > 0 then
begin
D := ToNumber(Params[0].AsVariant);
if D = NaN then
result.AsVariant := NaN
else
result.AsVariant := Ceil(D);
end;
end;
procedure _Math_cos(MethodBody: TPAXMethodBody);
var
D: Double;
begin
with MethodBody do
if ParamCount > 0 then
begin
D := ToNumber(Params[0].AsVariant);
if D = NaN then
result.AsVariant := NaN
else
result.AsVariant := Cos(D);
end;
end;
procedure _Math_exp(MethodBody: TPAXMethodBody);
var
D: Double;
begin
with MethodBody do
if ParamCount > 0 then
begin
D := ToNumber(Params[0].AsVariant);
if D = NaN then
result.AsVariant := NaN
else
result.AsVariant := Exp(D);
end;
end;
procedure _Math_floor(MethodBody: TPAXMethodBody);
var
D: Double;
begin
with MethodBody do
if ParamCount > 0 then
begin
D := ToNumber(Params[0].AsVariant);
if D = NaN then
result.AsVariant := NaN
else
result.AsVariant := Floor(D);
end;
end;
procedure _Math_log(MethodBody: TPAXMethodBody);
var
D: Double;
begin
with MethodBody do
if ParamCount > 0 then
begin
D := ToNumber(Params[0].AsVariant);
if D = NaN then
result.AsVariant := NaN
else
result.AsVariant := Ln(D);
end;
end;
procedure _Math_max(MethodBody: TPAXMethodBody);
var
D, M: Double;
I: Integer;
begin
with MethodBody do
begin
M := NEGATIVE_INFINITY;
for I:=0 to ParamCount - 1 do
begin
D := ToNumber(Params[I].AsVariant);
if D > M then
M := D;
end;
result.AsVariant := M;
end;
end;
procedure _Math_min(MethodBody: TPAXMethodBody);
var
D, M: Double;
I: Integer;
begin
with MethodBody do
begin
M := POSITIVE_INFINITY;
for I:=0 to ParamCount - 1 do
begin
D := ToNumber(Params[I].AsVariant);
if D < M then
M := D;
end;
result.AsVariant := M;
end;
end;
procedure _Math_pow(MethodBody: TPAXMethodBody);
var
A, B: Double;
begin
with MethodBody do
if ParamCount > 0 then
begin
A := ToNumber(Params[0].AsVariant);
B := ToNumber(Params[1].AsVariant);
if (A = NaN) or (B = NaN) then
result.AsVariant := NaN
else
result.AsVariant := Math.power(A,B);
end;
end;
procedure _Math_random(MethodBody: TPAXMethodBody);
begin
with MethodBody do
result.AsVariant := Random(10000)/10000;
end;
procedure _Math_round(MethodBody: TPAXMethodBody);
var
D: Double;
I: Integer;
begin
with MethodBody do
if ParamCount > 0 then
begin
D := ToNumber(Params[0].AsVariant);
if D = NaN then
result.AsVariant := NaN
else
begin
I := round(D);
D := I;
result.AsVariant := D;
end;
end;
end;
procedure _Math_sin(MethodBody: TPAXMethodBody);
var
D: Double;
begin
with MethodBody do
if ParamCount > 0 then
begin
D := ToNumber(Params[0].AsVariant);
if D = NaN then
result.AsVariant := NaN
else
result.AsVariant := Sin(D);
end;
end;
procedure _Math_sqrt(MethodBody: TPAXMethodBody);
var
D: Double;
begin
with MethodBody do
if ParamCount > 0 then
begin
D := ToNumber(Params[0].AsVariant);
if D = NaN then
result.AsVariant := NaN
else
result.AsVariant := Sqrt(D);
end;
end;
procedure _Math_tan(MethodBody: TPAXMethodBody);
var
D: Double;
begin
with MethodBody do
if ParamCount > 0 then
begin
D := ToNumber(Params[0].AsVariant);
if D = NaN then
result.AsVariant := NaN
else
result.AsVariant := Tan(D);
end;
end;
/////////////// FUNCTION //////////////////////////////////
procedure _Function_New(MethodBody: TPAXMethodBody);
var
SO: TPAXJavaScriptObject;
ClassRec: TPAXClassRec;
FormalParameters, FunctionBody, FunctionDecl: String;
I: Integer;
P: TPAXParser;
V: Variant;
begin
with MethodBody do
begin
if ParamCount >= 2 then
begin
FunctionBody := ToString(Params[ParamCount - 1].AsVariant);
FormalParameters := '';
for I:=0 to ParamCount - 2 do
FormalParameters := FormalParameters + ToString(Params[I].AsVariant);
FunctionDecl := 'function _Function(' + FormalParameters + ') {'
+ FunctionBody + '}';
P := TPAXBaseScripter(Scripter).ParserList.FindParser('paxJavaScript');
if P = nil then
Exit;
V := Eval(FunctionDecl, Scripter, P);
Self := VariantToScriptObject(V);
end
else
begin
ClassRec := TPAXBaseScripter(Scripter).ClassList.FunctionClassRec;
SO := TPAXJavaScriptFunctionObject.Create(ClassRec);
Self := SO;
end;
end;
end;
/////////////// STRING ////////////////////////////////////
function TPAXJavaScriptStringObject.Match(R: RegExp): TPaxJavaScriptArrayObject;
var
S: String;
PaxArray: TPaxArray;
I, L: Integer;
begin
S := ToStr(Scripter, DefaultValue);
PaxArray := R.Exec(S);
if PaxArray <> nil then
begin
L := PaxArray.HighBound(1);
result := TPAXJavaScriptArrayObject.Create(ClassRec.GetClassList.ArrayClassRec);
result.Length := L - 1;
for I:=0 to L - 1 do
result[I] := PaxArray.Get([I]);
PaxArray.Free;
result.SetProperty(CreateNameIndex('index', Scripter), R.RegExpr.MatchPos[0]);
end
else
result := TPAXJavaScriptArrayObject.Create(ClassRec.GetClassList.ArrayClassRec);
end;
function TPAXJavaScriptStringObject.Replace(R: RegExp; const ReplaceStr: String): String;
var
S: String;
begin
S := ToStr(Scripter, DefaultValue);
result := R.Replace(S, ReplaceStr);
end;
procedure _String_GetProperty(M: TPAXMethodBody);
var
SO: TPAXJavaScriptObject;
begin
with M do
begin
SO := TPAXJavaScriptObject(Self);
if Name = 'length' then
result.AsInteger := Length(ToString(SO.DefaultValue))
else
result.AsVariant := SO.GetProperty(CreateNameIndex(Name, Scripter));
end;
end;
procedure _String_PutProperty(M: TPAXMethodBody);
var
SO: TPAXJavaScriptObject;
begin
with M do
begin
SO := TPAXJavaScriptObject(Self);
SO.SetProperty(CreateNameIndex(Name, Scripter), Params[0].AsVariant);
end;
end;
procedure _String_New(MethodBody: TPAXMethodBody);
var
SO: TPAXJavaScriptStringObject;
ClassRec: TPAXClassRec;
R: Variant;
begin
with MethodBody do
begin
ClassRec := TPAXBaseScripter(Scripter).ClassList.StringClassRec;
SO := TPAXJavaScriptStringObject.Create(ClassRec);
case ParamCount of
1: R := ToString(Params[0].AsVariant);
else
R := '';
end;
SO.fDefaultValue := R;
Self := SO;
Result.AsVariant := R;
end;
end;
procedure _String_anchor(MethodBody: TPAXMethodBody);
begin
with MethodBody do
begin
if ParamCount > 0 then
Name := ToString(Params[0].AsVariant)
else
Name := 'undefined';
result.AsVariant := '<A NAME="' + Name + '">' + ToString(DefaultValue) + '</A>';
end;
end;
procedure _String_big(MethodBody: TPAXMethodBody);
begin
with MethodBody do
result.AsVariant := '<BIG>' + ToString(DefaultValue) + '</BIG>';
end;
procedure _String_blink(MethodBody: TPAXMethodBody);
begin
with MethodBody do
result.AsVariant := '<BLINK>' + ToString(DefaultValue) + '</BLINK>';
end;
procedure _String_bold(MethodBody: TPAXMethodBody);
begin
with MethodBody do
result.AsVariant := '<B>' + ToString(DefaultValue) + '</B>';
end;
procedure _String_charAt(MethodBody: TPAXMethodBody);
var
S: String;
I: Integer;
begin
with MethodBody do
begin
S := ToString(DefaultValue);
if ParamCount > 0 then
I := ToInt32(Params[0].AsVariant)
else
begin
result.AsVariant := '';
Exit;
end;
if (I >= 0) and (I <= Length(S) - 1) then
result.AsVariant := S[I + 1]
else
result.AsVariant := '';
end;
end;
procedure _String_charCodeAt(MethodBody: TPAXMethodBody);
var
S: String;
I: Integer;
begin
with MethodBody do
begin
S := ToString(DefaultValue);
if ParamCount > 0 then
I := ToInt32(Params[0].AsVariant)
else
begin
result.AsVariant := -1;
Exit;
end;
if (I >= 0) and (I <= Length(S) - 1) then
result.AsVariant := ord(S[I + 1])
else
result.AsVariant := -1;
end;
end;
procedure _String_concat(MethodBody: TPAXMethodBody);
var
S: String;
I: Integer;
begin
with MethodBody do
begin
S := ToString(DefaultValue);
for I:=0 to ParamCount - 1 do
S := S + ToString(Params[I].AsVariant);
result.AsVariant := S;
end;
end;
procedure _String_fixed(MethodBody: TPAXMethodBody);
begin
with MethodBody do
result.AsVariant := '<TT>' + ToString(DefaultValue) + '</TT>';
end;
procedure _String_fontcolor(MethodBody: TPAXMethodBody);
begin
with MethodBody do
begin
if ParamCount > 0 then
Name := ToString(Params[0].AsVariant)
else
Name := 'undefined';
result.AsVariant := '<FONT COLOR="' + Name + '">' + ToString(DefaultValue) + '</FONT>';
end;
end;
procedure _String_fontsize(MethodBody: TPAXMethodBody);
begin
with MethodBody do
begin
if ParamCount > 0 then
Name := ToString(Params[0].AsVariant)
else
Name := 'undefined';
result.AsVariant := '<FONT SIZE="' + Name + '">' + ToString(DefaultValue) + '</FONT>';
end;
end;
procedure _String_fromCharCode(MethodBody: TPAXMethodBody);
var
S: String;
I: Integer;
B: Byte;
begin
with MethodBody do
begin
S := '';
for I:=0 to ParamCount - 1 do
begin
B := ToInt32(Params[I].AsVariant);
S := S + Chr(B);
end;
result.AsVariant := S;
end;
end;
procedure _String_indexOf(MethodBody: TPAXMethodBody);
var
S, P: String;
I, J, L: Integer;
begin
with MethodBody do
begin
result.AsVariant := Integer(-1);
L := ParamCount;
if L = 0 then
Exit;
S := ToString(DefaultValue);
P := ToString(Params[0].AsVariant);
if L > 1 then
J := ToInt32(Params[1].AsVariant)
else
J := 1;
if J <= 0 then
J := 1;
L := Length(P);
for I:=J to Length(S) - L + 1 do
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?