macros

package
v0.6.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 20, 2021 License: GPL-3.0 Imports: 12 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var COMPACT = false

Functions

func ActivateCheckTypeHeader

func ActivateCheckTypeHeader()

func ActivateWebAssemblyEnvHeader

func ActivateWebAssemblyEnvHeader()

func ActivateWebGLProgramHeader

func ActivateWebGLProgramHeader()

func CallIsCallMacro

func CallIsCallMacro(call *js.Call) bool

func IsCallMacro

func IsCallMacro(name string) bool

func IsClassMacro

func IsClassMacro(gname string, name string) bool

func IsClassMacroGroup

func IsClassMacroGroup(gname string) bool

func IsConstructorMacro

func IsConstructorMacro(name string) bool

func IsStatementMacro

func IsStatementMacro(name string) bool

func MemberIsClassMacro

func MemberIsClassMacro(m *js.Member) bool

func NewBigIntCall

func NewBigIntCall(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewBlobFromInstance

func NewBlobFromInstance(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewBlobToInstance

func NewBlobToInstance(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewCallMacro

func NewCallMacro(name string, args []js.Expression,
	ctx context.Context) (js.Expression, error)

func NewCallMacroFromCall

func NewCallMacroFromCall(call *js.Call,
	ctx context.Context) (js.Expression, error)

func NewCastCall

func NewCastCall(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewClassMacro

func NewClassMacro(gname string, name string, args []js.Expression,
	ctx context.Context) (js.Expression, error)

func NewClassMacroFromMember

func NewClassMacroFromMember(m *js.Member, args []js.Expression,
	ctx context.Context) (js.Expression, error)

func NewConstIfUndefined

func NewConstIfUndefined(args []js.Expression, ctx context.Context) (js.Statement, error)

func NewConstructorMacro

func NewConstructorMacro(name string, args []js.Expression,
	ctx context.Context) (js.Expression, error)

func NewConstructorMacroFromCall

func NewConstructorMacroFromCall(call *js.Call,
	ctx context.Context) (js.Expression, error)

func NewDegToRad

func NewDegToRad(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewIsUndefined

func NewIsUndefined(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewMathAdvanceWidth

func NewMathAdvanceWidth(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewMathBoundingBox

func NewMathBoundingBox(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewMathSymbolToCodePoint

func NewMathSymbolToCodePoint(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewObjectFromInstance

func NewObjectFromInstance(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewObjectToInstance

func NewObjectToInstance(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewParseTime

func NewParseTime(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewRPCClient

func NewRPCClient(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewRPCServer

func NewRPCServer(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewRadToDeg

func NewRadToDeg(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewSharedWorkerPost

func NewSharedWorkerPost(args []js.Expression,
	ctx context.Context) (js.Expression, error)

func NewStatementMacro

func NewStatementMacro(name string, args []js.Expression, ctx context.Context) (js.Statement, error)

func NewSyntaxTreeInfo

func NewSyntaxTreeInfo(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewURLCurrent

func NewURLCurrent(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewWebAssemblyExec

func NewWebAssemblyExec(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewWebGLProgram

func NewWebGLProgram(args []js.Expression, ctx context.Context) (js.Expression, error)

func NewXMLHttpRequestPost

func NewXMLHttpRequestPost(args []js.Expression, ctx context.Context) (js.Expression, error)

func RegisterActivateMacroHeadersCallback

func RegisterActivateMacroHeadersCallback() bool

func RegisterTranspileWebGLShaders

func RegisterTranspileWebGLShaders(fn TranspileWebGLShadersFunc) bool

func ResolveHeaderActivity

func ResolveHeaderActivity(h Header, ctx context.Context)

func UniqueHeaderNames

func UniqueHeaderNames(h Header, ns js.Namespace) error

func WriteHeaders

func WriteHeaders() string

Types

type BigIntCall

type BigIntCall struct {
	Macro
}

func (*BigIntCall) Dump

func (m *BigIntCall) Dump(indent string) string

func (*BigIntCall) EvalExpression

func (m *BigIntCall) EvalExpression() (values.Value, error)

func (*BigIntCall) WriteExpression

func (m *BigIntCall) WriteExpression() string

type BlobFromInstance

type BlobFromInstance struct {
	Macro
}

func (*BlobFromInstance) Dump

func (m *BlobFromInstance) Dump(indent string) string

func (*BlobFromInstance) EvalExpression

func (m *BlobFromInstance) EvalExpression() (values.Value, error)

func (*BlobFromInstance) ResolveExpressionActivity

func (m *BlobFromInstance) ResolveExpressionActivity(usage js.Usage) error

func (*BlobFromInstance) UniqueExpressionNames

func (m *BlobFromInstance) UniqueExpressionNames(ns js.Namespace) error

func (*BlobFromInstance) WriteExpression

func (m *BlobFromInstance) WriteExpression() string

type BlobFromInstanceHeader

type BlobFromInstanceHeader struct {
	HeaderData
}

func (*BlobFromInstanceHeader) Dependencies

func (h *BlobFromInstanceHeader) Dependencies() []Header

func (*BlobFromInstanceHeader) Write

func (h *BlobFromInstanceHeader) Write() string

type BlobToInstance

type BlobToInstance struct {
	ToInstance
}

func (*BlobToInstance) Dump

func (m *BlobToInstance) Dump(indent string) string

func (*BlobToInstance) EvalExpression

func (m *BlobToInstance) EvalExpression() (values.Value, error)

func (*BlobToInstance) ResolveExpressionActivity

func (m *BlobToInstance) ResolveExpressionActivity(usage js.Usage) error

func (*BlobToInstance) UniqueExpressionNames

func (m *BlobToInstance) UniqueExpressionNames(ns js.Namespace) error

func (*BlobToInstance) WriteExpression

func (m *BlobToInstance) WriteExpression() string

type BlobToInstanceHeader

type BlobToInstanceHeader struct {
	HeaderData
}

func (*BlobToInstanceHeader) Dependencies

func (h *BlobToInstanceHeader) Dependencies() []Header

func (*BlobToInstanceHeader) Write

func (h *BlobToInstanceHeader) Write() string

type CastCall

type CastCall struct {
	Macro
	// contains filtered or unexported fields
}

func (*CastCall) Dump

func (m *CastCall) Dump(indent string) string

func (*CastCall) EvalExpression

func (m *CastCall) EvalExpression() (values.Value, error)

func (*CastCall) ResolveExpressionNames

func (m *CastCall) ResolveExpressionNames(scope js.Scope) error

func (*CastCall) WriteExpression

func (m *CastCall) WriteExpression() string

type CheckTypeHeader

type CheckTypeHeader struct {
	HeaderData
}

func (*CheckTypeHeader) Dependencies

func (h *CheckTypeHeader) Dependencies() []Header

func (*CheckTypeHeader) Write

func (h *CheckTypeHeader) Write() string

type ConstIfUndefined

type ConstIfUndefined struct {
	Macro
	// contains filtered or unexported fields
}

type is taken from rhs

func (*ConstIfUndefined) AddStatement

func (m *ConstIfUndefined) AddStatement(st js.Statement)

func (*ConstIfUndefined) Dump

func (m *ConstIfUndefined) Dump(indent string) string

func (*ConstIfUndefined) EvalStatement

func (m *ConstIfUndefined) EvalStatement() error

func (*ConstIfUndefined) GetVariable

func (m *ConstIfUndefined) GetVariable() js.Variable

func (*ConstIfUndefined) HoistNames

func (m *ConstIfUndefined) HoistNames(scope js.Scope) error

func (*ConstIfUndefined) Name

func (m *ConstIfUndefined) Name() string

func (*ConstIfUndefined) ResolveStatementActivity

func (m *ConstIfUndefined) ResolveStatementActivity(usage js.Usage) error

func (*ConstIfUndefined) ResolveStatementNames

func (m *ConstIfUndefined) ResolveStatementNames(scope js.Scope) error

func (*ConstIfUndefined) UniqueStatementNames

func (m *ConstIfUndefined) UniqueStatementNames(ns js.Namespace) error

func (*ConstIfUndefined) UniversalStatementNames

func (m *ConstIfUndefined) UniversalStatementNames(ns js.Namespace) error

func (*ConstIfUndefined) WriteStatement

func (m *ConstIfUndefined) WriteStatement(usage js.Usage, indent string, nl string, tab string) string

type Convert

type Convert struct {
	Macro
	// contains filtered or unexported fields
}

func (*Convert) EvalExpression

func (m *Convert) EvalExpression() (values.Value, error)

func (*Convert) WriteExpression

func (m *Convert) WriteExpression() string

type DegToRad

type DegToRad struct {
	Convert
}

func (*DegToRad) Dump

func (m *DegToRad) Dump(indent string) string
type Header interface {
	Dependencies() []Header

	Name() string
	GetVariable() js.Variable
	SetVariable(v js.Variable)

	UniqueNames(ns js.Namespace) error

	Write() string
}

type HeaderBuilder

type HeaderBuilder struct {
	// contains filtered or unexported fields
}

func NewHeaderBuilder

func NewHeaderBuilder() *HeaderBuilder

func (*HeaderBuilder) String

func (b *HeaderBuilder) String() string

type HeaderData

type HeaderData struct {
	// contains filtered or unexported fields
}

func (*HeaderData) GetVariable

func (h *HeaderData) GetVariable() js.Variable

func (*HeaderData) Name

func (h *HeaderData) Name() string

func (*HeaderData) SetVariable

func (h *HeaderData) SetVariable(v js.Variable)

func (*HeaderData) UniqueNames

func (h *HeaderData) UniqueNames(ns js.Namespace) error

type IsUndefined

type IsUndefined struct {
	Macro
	// contains filtered or unexported fields
}

func (*IsUndefined) Dump

func (m *IsUndefined) Dump(indent string) string

func (*IsUndefined) EvalExpression

func (m *IsUndefined) EvalExpression() (values.Value, error)

func (*IsUndefined) ResolveExpressionActivity

func (m *IsUndefined) ResolveExpressionActivity(usage js.Usage) error

func (*IsUndefined) ResolveExpressionNames

func (m *IsUndefined) ResolveExpressionNames(scope js.Scope) error

func (*IsUndefined) UniqueExpressionNames

func (m *IsUndefined) UniqueExpressionNames(ns js.Namespace) error

func (*IsUndefined) UniversalExpressionNames

func (m *IsUndefined) UniversalExpressionNames(ns js.Namespace) error

func (*IsUndefined) WriteExpression

func (m *IsUndefined) WriteExpression() string

type Macro

type Macro struct {
	// contains filtered or unexported fields
}

func (*Macro) Context

func (m *Macro) Context() context.Context

func (*Macro) ResolveExpressionActivity

func (m *Macro) ResolveExpressionActivity(usage js.Usage) error

func (*Macro) ResolveExpressionNames

func (m *Macro) ResolveExpressionNames(scope js.Scope) error

func (*Macro) UniqueExpressionNames

func (m *Macro) UniqueExpressionNames(ns js.Namespace) error

func (*Macro) UniversalExpressionNames

func (m *Macro) UniversalExpressionNames(ns js.Namespace) error

func (*Macro) Walk

func (m *Macro) Walk(fn js.WalkFunc) error

TODO: implement for each specific macro

type MacroConstructor

type MacroConstructor func([]js.Expression, context.Context) (js.Expression, error)

type MacroGroup

type MacroGroup struct {
	// contains filtered or unexported fields
}

type MathAdvanceWidth

type MathAdvanceWidth struct {
	Macro
}

func (*MathAdvanceWidth) Dump

func (m *MathAdvanceWidth) Dump(indent string) string

func (*MathAdvanceWidth) EvalExpression

func (m *MathAdvanceWidth) EvalExpression() (values.Value, error)

func (*MathAdvanceWidth) ResolveExpressionActivity

func (m *MathAdvanceWidth) ResolveExpressionActivity(usage js.Usage) error

func (*MathAdvanceWidth) WriteExpression

func (m *MathAdvanceWidth) WriteExpression() string

type MathBoundingBox

type MathBoundingBox struct {
	Macro
}

func (*MathBoundingBox) Dump

func (m *MathBoundingBox) Dump(indent string) string

func (*MathBoundingBox) EvalExpression

func (m *MathBoundingBox) EvalExpression() (values.Value, error)

func (*MathBoundingBox) ResolveExpressionActivity

func (m *MathBoundingBox) ResolveExpressionActivity(usage js.Usage) error

func (*MathBoundingBox) WriteExpression

func (m *MathBoundingBox) WriteExpression() string

type MathFontHeader

type MathFontHeader struct {
	HeaderData
}

func (*MathFontHeader) Dependencies

func (h *MathFontHeader) Dependencies() []Header

func (*MathFontHeader) Write

func (h *MathFontHeader) Write() string

TODO: a complete functional parser should be here

type MathSymbolToCodePoint

type MathSymbolToCodePoint struct {
	Macro
}

func (*MathSymbolToCodePoint) Dump

func (m *MathSymbolToCodePoint) Dump(indent string) string

func (*MathSymbolToCodePoint) EvalExpression

func (m *MathSymbolToCodePoint) EvalExpression() (values.Value, error)

func (*MathSymbolToCodePoint) ResolveExpressionActivity

func (m *MathSymbolToCodePoint) ResolveExpressionActivity(usage js.Usage) error

func (*MathSymbolToCodePoint) WriteExpression

func (m *MathSymbolToCodePoint) WriteExpression() string

type ObjectFromInstance

type ObjectFromInstance struct {
	Macro
}

func (*ObjectFromInstance) Dump

func (m *ObjectFromInstance) Dump(indent string) string

func (*ObjectFromInstance) EvalExpression

func (m *ObjectFromInstance) EvalExpression() (values.Value, error)

func (*ObjectFromInstance) ResolveExpressionActivity

func (m *ObjectFromInstance) ResolveExpressionActivity(usage js.Usage) error

func (*ObjectFromInstance) UniqueExpressionNames

func (m *ObjectFromInstance) UniqueExpressionNames(ns js.Namespace) error

func (*ObjectFromInstance) WriteExpression

func (m *ObjectFromInstance) WriteExpression() string

type ObjectFromInstanceHeader

type ObjectFromInstanceHeader struct {
	HeaderData
}

func (*ObjectFromInstanceHeader) Dependencies

func (h *ObjectFromInstanceHeader) Dependencies() []Header

func (*ObjectFromInstanceHeader) Write

func (h *ObjectFromInstanceHeader) Write() string

type ObjectToInstance

type ObjectToInstance struct {
	ToInstance
}

func (*ObjectToInstance) Dump

func (m *ObjectToInstance) Dump(indent string) string

func (*ObjectToInstance) EvalExpression

func (m *ObjectToInstance) EvalExpression() (values.Value, error)

func (*ObjectToInstance) ResolveExpressionActivity

func (m *ObjectToInstance) ResolveExpressionActivity(usage js.Usage) error

func (*ObjectToInstance) UniqueExpressionNames

func (m *ObjectToInstance) UniqueExpressionNames(ns js.Namespace) error

func (*ObjectToInstance) WriteExpression

func (m *ObjectToInstance) WriteExpression() string

type ObjectToInstanceHeader

type ObjectToInstanceHeader struct {
	HeaderData
}

func (*ObjectToInstanceHeader) Dependencies

func (h *ObjectToInstanceHeader) Dependencies() []Header

func (*ObjectToInstanceHeader) Write

func (h *ObjectToInstanceHeader) Write() string

combine with __checkType__ for server-side use

type PostMacro

type PostMacro struct {
	ToInstance
}

type RPCClient

type RPCClient struct {
	RPCMacro
}

func (*RPCClient) Dump

func (m *RPCClient) Dump(indent string) string

func (*RPCClient) EvalExpression

func (m *RPCClient) EvalExpression() (values.Value, error)

func (*RPCClient) ResolveExpressionActivity

func (m *RPCClient) ResolveExpressionActivity(usage js.Usage) error

func (*RPCClient) UniqueExpressionNames

func (m *RPCClient) UniqueExpressionNames(ns js.Namespace) error

func (*RPCClient) WriteExpression

func (m *RPCClient) WriteExpression() string

type RPCClientHeader

type RPCClientHeader struct {
	HeaderData
}

func (*RPCClientHeader) Dependencies

func (h *RPCClientHeader) Dependencies() []Header

func (*RPCClientHeader) Write

func (h *RPCClientHeader) Write() string

type RPCContextHeader

type RPCContextHeader struct {
	HeaderData
}

func (*RPCContextHeader) Dependencies

func (h *RPCContextHeader) Dependencies() []Header

func (*RPCContextHeader) Write

func (h *RPCContextHeader) Write() string

type RPCMacro

type RPCMacro struct {
	ToInstance
}

func (*RPCMacro) ResolveExpressionActivity

func (m *RPCMacro) ResolveExpressionActivity(usage js.Usage) error

type RPCServer

type RPCServer struct {
	RPCMacro
}

func (*RPCServer) Dump

func (m *RPCServer) Dump(indent string) string

func (*RPCServer) EvalExpression

func (m *RPCServer) EvalExpression() (values.Value, error)

func (*RPCServer) ResolveExpressionActivity

func (m *RPCServer) ResolveExpressionActivity(usage js.Usage) error

func (*RPCServer) UniqueExpressionNames

func (m *RPCServer) UniqueExpressionNames(ns js.Namespace) error

func (*RPCServer) WriteExpression

func (m *RPCServer) WriteExpression() string

type RPCServerHeader

type RPCServerHeader struct {
	HeaderData
}

func (*RPCServerHeader) Dependencies

func (h *RPCServerHeader) Dependencies() []Header

func (*RPCServerHeader) Write

func (h *RPCServerHeader) Write() string

type RadToDeg

type RadToDeg struct {
	Convert
}

func (*RadToDeg) Dump

func (m *RadToDeg) Dump(indent string) string

type SearchIndexHeader

type SearchIndexHeader struct {
	HeaderData
}

func (*SearchIndexHeader) Dependencies

func (h *SearchIndexHeader) Dependencies() []Header

func (*SearchIndexHeader) Write

func (h *SearchIndexHeader) Write() string

type SharedWorkerPost

type SharedWorkerPost struct {
	PostMacro
}

func (*SharedWorkerPost) Dump

func (m *SharedWorkerPost) Dump(indent string) string

func (*SharedWorkerPost) EvalExpression

func (m *SharedWorkerPost) EvalExpression() (values.Value, error)

func (*SharedWorkerPost) ResolveExpressionActivity

func (m *SharedWorkerPost) ResolveExpressionActivity(usage js.Usage) error

func (*SharedWorkerPost) UniqueExpressionNames

func (m *SharedWorkerPost) UniqueExpressionNames(ns js.Namespace) error

func (*SharedWorkerPost) WriteExpression

func (m *SharedWorkerPost) WriteExpression() string

type SharedWorkerPostHeader

type SharedWorkerPostHeader struct {
	HeaderData
}

func (*SharedWorkerPostHeader) Dependencies

func (h *SharedWorkerPostHeader) Dependencies() []Header

func (*SharedWorkerPostHeader) Write

func (h *SharedWorkerPostHeader) Write() string

type StatementMacroConstructor

type StatementMacroConstructor func([]js.Expression, context.Context) (js.Statement, error)

type SyntaxTreeInfo

type SyntaxTreeInfo struct {
	Macro
	// contains filtered or unexported fields
}

func (*SyntaxTreeInfo) Dump

func (m *SyntaxTreeInfo) Dump(indent string) string

func (*SyntaxTreeInfo) EvalExpression

func (m *SyntaxTreeInfo) EvalExpression() (values.Value, error)

func (*SyntaxTreeInfo) ResolveExpressionNames

func (m *SyntaxTreeInfo) ResolveExpressionNames(scope js.Scope) error

func (*SyntaxTreeInfo) WriteExpression

func (m *SyntaxTreeInfo) WriteExpression() string

type ToInstance

type ToInstance struct {
	Macro
	// contains filtered or unexported fields
}

func (*ToInstance) ResolveExpressionActivity

func (m *ToInstance) ResolveExpressionActivity(usage js.Usage) error

func (*ToInstance) ResolveExpressionNames

func (m *ToInstance) ResolveExpressionNames(scope js.Scope) error

type TranspileWebGLShadersFunc

type TranspileWebGLShadersFunc func(callerPath string, vertexPath *js.Word, vertexConsts map[string]values.Value,
	fragmentPath *js.Word, fragmentConsts map[string]values.Value) (string, string, error)

type URLCurrent

type URLCurrent struct {
	Macro
}

func (*URLCurrent) Dump

func (m *URLCurrent) Dump(indent string) string

func (*URLCurrent) EvalExpression

func (m *URLCurrent) EvalExpression() (values.Value, error)

func (*URLCurrent) WriteExpression

func (m *URLCurrent) WriteExpression() string

type WebAssemblyEnvHeader

type WebAssemblyEnvHeader struct {
	HeaderData
}

func (*WebAssemblyEnvHeader) Dependencies

func (h *WebAssemblyEnvHeader) Dependencies() []Header

func (*WebAssemblyEnvHeader) Write

func (h *WebAssemblyEnvHeader) Write() string

type WebAssemblyExec

type WebAssemblyExec struct {
	Macro
}

func (*WebAssemblyExec) Dump

func (m *WebAssemblyExec) Dump(indent string) string

func (*WebAssemblyExec) EvalExpression

func (m *WebAssemblyExec) EvalExpression() (values.Value, error)

func (*WebAssemblyExec) WriteExpression

func (m *WebAssemblyExec) WriteExpression() string

type WebGLProgram

type WebGLProgram struct {
	Macro
	// contains filtered or unexported fields
}

func (*WebGLProgram) Dump

func (m *WebGLProgram) Dump(indent string) string

func (*WebGLProgram) EvalExpression

func (m *WebGLProgram) EvalExpression() (values.Value, error)

func (*WebGLProgram) ResolveExpressionActivity

func (m *WebGLProgram) ResolveExpressionActivity(usage js.Usage) error

func (*WebGLProgram) ResolveExpressionNames

func (m *WebGLProgram) ResolveExpressionNames(scope js.Scope) error

func (*WebGLProgram) UniqueExpressionNames

func (m *WebGLProgram) UniqueExpressionNames(ns js.Namespace) error

func (*WebGLProgram) WriteExpression

func (m *WebGLProgram) WriteExpression() string

type WebGLProgramHeader

type WebGLProgramHeader struct {
	HeaderData
}

func (*WebGLProgramHeader) Dependencies

func (h *WebGLProgramHeader) Dependencies() []Header

func (*WebGLProgramHeader) Write

func (h *WebGLProgramHeader) Write() string

type XMLHttpRequestPost

type XMLHttpRequestPost struct {
	PostMacro
}

func (*XMLHttpRequestPost) Dump

func (m *XMLHttpRequestPost) Dump(indent string) string

func (*XMLHttpRequestPost) EvalExpression

func (m *XMLHttpRequestPost) EvalExpression() (values.Value, error)

func (*XMLHttpRequestPost) ResolveExpressionActivity

func (m *XMLHttpRequestPost) ResolveExpressionActivity(usage js.Usage) error

func (*XMLHttpRequestPost) UniqueExpressionNames

func (m *XMLHttpRequestPost) UniqueExpressionNames(ns js.Namespace) error

func (*XMLHttpRequestPost) WriteExpression

func (m *XMLHttpRequestPost) WriteExpression() string

type XMLPostHeader

type XMLPostHeader struct {
	HeaderData
}

func (*XMLPostHeader) Dependencies

func (h *XMLPostHeader) Dependencies() []Header

func (*XMLPostHeader) Write

func (h *XMLPostHeader) Write() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL