package html import ( "context" "github.com/MontFerret/ferret/pkg/runtime/core" "github.com/MontFerret/ferret/pkg/runtime/values" "github.com/MontFerret/ferret/pkg/stdlib/html/driver" "github.com/MontFerret/ferret/pkg/stdlib/html/driver/static" ) func Document(ctx context.Context, inputs ...core.Value) (core.Value, error) { url, dynamic, err := documentArgs(inputs) if err != nil { return values.None, err } var drv driver.Driver if !dynamic { drv, err = driver.FromContext(ctx, driver.Static) } else { drv, err = driver.FromContext(ctx, driver.Dynamic) } if err != nil { return values.None, err } return drv.GetDocument(ctx, url.String()) } func DocumentParse(ctx context.Context, inputs ...core.Value) (core.Value, error) { arg1 := values.EmptyString if len(inputs) == 0 { return arg1, core.Error(core.ErrMissedArgument, "document string") } a1 := inputs[0] if a1.Type() != core.StringType { return arg1, core.Error(core.TypeError(a1.Type(), core.StringType), "arg 1") } drv, err := driver.FromContext(ctx, driver.Static) if err != nil { return values.None, err } return drv.(*static.Driver).ParseDocument(ctx, arg1.String()) } func documentArgs(inputs []core.Value) (values.String, values.Boolean, error) { arg1 := values.EmptyString arg2 := values.False if len(inputs) == 0 { return arg1, arg2, core.Error(core.ErrMissedArgument, "element and useJs") } a1 := inputs[0] if a1.Type() != core.StringType { return arg1, arg2, core.Error(core.TypeError(a1.Type(), core.StringType), "arg 1") } arg1 = a1.(values.String) if len(inputs) == 2 { a2 := inputs[1] if a2.Type() != core.BooleanType { return arg1, arg2, core.Error(core.TypeError(a2.Type(), core.BooleanType), "arg 2") } arg2 = a2.(values.Boolean) } return arg1, arg2, nil }