genphp

package
v1.5.3 Latest Latest
Warning

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

Go to latest
Published: May 14, 2026 License: MPL-2.0 Imports: 11 Imported by: 0

Documentation

Index

Constants

View Source
const (
	PHPFileStart             = "<?php\n"
	PHPRPCFunctionMock       = "__RPC_FUNCTION_MOCK"
	PHPRPCFunctionResultMock = "__RPC_FUNCTION_RESULT_MOCK"
	PHPRPCResponseMock       = "__RPC_RESPONSE_MOCK"
)
View Source
const BasicTLCodePHP = `` /* 7310-byte string literal not displayed */
View Source
const BasicTlPathPHP = "tl_streams.php"
View Source
const RpcFunctionFetchersPHP = `` /* 273-byte string literal not displayed */
View Source
const RpcFunctionPHP = `` /* 262-byte string literal not displayed */
View Source
const RpcFunctionWithFetchersPHP = `` /* 558-byte string literal not displayed */
View Source
const RpcResponsePHP = `` /* 670-byte string literal not displayed */
View Source
const TL2ContextPHP = `` /* 2005-byte string literal not displayed */
View Source
const TL2SupportPHP = `` /* 1956-byte string literal not displayed */
View Source
const TLInterfacesCodePHP = `` /* 563-byte string literal not displayed */
View Source
const TLInterfacesPathPHP = "tl_interfaces.php"
View Source
const TLSwitcherPHP = `` /* 2424-byte string literal not displayed */

Variables

View Source
var DEBUG = true

For debugging

Functions

func Debugf

func Debugf(format string, args ...interface{})

func Generate

func Generate(kernel *pure.Kernel, options *puregen.Options) error

func GenerateTL2

func GenerateTL2(opt *puregen.Options) bool

func PHPAddDollarSign

func PHPAddDollarSign(s []string) []string

func PHPGetAllReachableTypes

func PHPGetAllReachableTypes(startTypes []*TypeRWWrapper) map[*TypeRWWrapper]bool

func PHPIsDict

func PHPIsDict(tp *pure.KernelType) bool

func PHPLegacyGoNameToCompare

func PHPLegacyGoNameToCompare(canonicalName string) string

TODO!

func PHPMockTypesToIgnore

func PHPMockTypesToIgnore() map[string]bool

func PHPRPCPrimitive

func PHPRPCPrimitive(originalName string) (bool, string)

func PHPSpecialMembersTypes

func PHPSpecialMembersTypes(wrapper *TypeRWWrapper) string

func PhpGenerateInterfaceCode

func PhpGenerateInterfaceCode(code *strings.Builder, bytes bool, targetType *TypeRWWrapper, itsConstructors []*TypeRWWrapper) error

func ToLowerFirst

func ToLowerFirst(str string) string

func ToUpperFirst

func ToUpperFirst(str string) string

Types

type ArgInfo

type ArgInfo struct {
	FieldName    string
	TypeName     string
	DefaultValue string

	FieldValue string

	SpecialArgument bool
}

type Deconflicter

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

func (*Deconflicter) DeconflictName

func (d *Deconflicter) DeconflictName(s string) string

type Field

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

func (*Field) Bare

func (f *Field) Bare() bool

func (*Field) IsBit

func (f *Field) IsBit() bool

generate Set/IsSet with external (TL1) or internal (TL1 & TL2) mask/ must exactly correspond to migrator logic TL1: x:fm.b?true x:fm.b?True TL2: x:bit

func (*Field) IsTL2Omitted

func (f *Field) IsTL2Omitted() bool

do not generate fields, but affect block position and skip during reading TL1: never TL2: _:X

func (*Field) TL2MaskForOP

func (f *Field) TL2MaskForOP(op string) string

type Namespace

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

type PhpClassMeta

type PhpClassMeta struct {
	UsedOnlyInInternal bool
	UsedInFunctions    bool

	IsDuplicate   bool
	MappingOrigin *TypeRWWrapper // not nil if IsDuplicate = true

	RequireFunctionBodies bool

	IsRPCPrimitive bool // for TL\Response special case
}

type TypeRW

type TypeRW interface {
	TypeRWPHPData
}

type TypeRWBool

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

func (*TypeRWBool) PhpCalculateSizesTL2MethodCall

func (trw *TypeRWBool) PhpCalculateSizesTL2MethodCall(targetName string, bare bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canOmit bool) []string

func (*TypeRWBool) PhpClassName

func (trw *TypeRWBool) PhpClassName(withPath bool, bare bool) string

func (*TypeRWBool) PhpClassNameReplaced

func (trw *TypeRWBool) PhpClassNameReplaced() bool

func (*TypeRWBool) PhpDefaultInit

func (trw *TypeRWBool) PhpDefaultInit() string

func (*TypeRWBool) PhpDefaultValue

func (trw *TypeRWBool) PhpDefaultValue() string

func (*TypeRWBool) PhpGenerateCode

func (trw *TypeRWBool) PhpGenerateCode(code *strings.Builder, bytes bool) error

func (*TypeRWBool) PhpIterateReachableTypes

func (trw *TypeRWBool) PhpIterateReachableTypes(reachableTypes *map[*TypeRWWrapper]bool)

func (*TypeRWBool) PhpReadMethodCall

func (trw *TypeRWBool) PhpReadMethodCall(targetName string, bare bool, initIfDefault bool, args []string, supportSuffix string) []string

func (*TypeRWBool) PhpReadTL2MethodCall

func (trw *TypeRWBool) PhpReadTL2MethodCall(targetName string, bare bool, initIfDefault bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canDependOnLocalBit bool) []string

func (*TypeRWBool) PhpTypeName

func (trw *TypeRWBool) PhpTypeName(withPath bool, bare bool) string

func (*TypeRWBool) PhpWriteMethodCall

func (trw *TypeRWBool) PhpWriteMethodCall(targetName string, bare bool, args []string, supportSuffix string) []string

func (*TypeRWBool) PhpWriteTL2MethodCall

func (trw *TypeRWBool) PhpWriteTL2MethodCall(targetName string, bare bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canDependOnLocalBit bool) []string

type TypeRWBrackets

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

func (*TypeRWBrackets) PhpCalculateSizesTL2MethodCall

func (trw *TypeRWBrackets) PhpCalculateSizesTL2MethodCall(targetName string, bare bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canOmit bool) []string

func (*TypeRWBrackets) PhpClassName

func (trw *TypeRWBrackets) PhpClassName(withPath bool, bare bool) string

func (*TypeRWBrackets) PhpClassNameReplaced

func (trw *TypeRWBrackets) PhpClassNameReplaced() bool

func (*TypeRWBrackets) PhpDefaultInit

func (trw *TypeRWBrackets) PhpDefaultInit() string

func (*TypeRWBrackets) PhpDefaultValue

func (trw *TypeRWBrackets) PhpDefaultValue() string

func (*TypeRWBrackets) PhpGenerateCode

func (trw *TypeRWBrackets) PhpGenerateCode(code *strings.Builder, bytes bool) error

func (*TypeRWBrackets) PhpHasPrimitiveInnerElement

func (trw *TypeRWBrackets) PhpHasPrimitiveInnerElement() bool

func (*TypeRWBrackets) PhpIterateReachableTypes

func (trw *TypeRWBrackets) PhpIterateReachableTypes(reachableTypes *map[*TypeRWWrapper]bool)

func (*TypeRWBrackets) PhpReadMethodCall

func (trw *TypeRWBrackets) PhpReadMethodCall(targetName string, bare bool, initIfDefault bool, args []string, supportSuffix string) []string

func (*TypeRWBrackets) PhpReadTL2MethodCall

func (trw *TypeRWBrackets) PhpReadTL2MethodCall(targetName string, bare bool, initIfDefault bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canDependOnLocalBit bool) []string

func (*TypeRWBrackets) PhpTypeName

func (trw *TypeRWBrackets) PhpTypeName(withPath bool, bare bool) string

func (*TypeRWBrackets) PhpWriteMethodCall

func (trw *TypeRWBrackets) PhpWriteMethodCall(targetName string, bare bool, args []string, supportSuffix string) []string

func (*TypeRWBrackets) PhpWriteTL2MethodCall

func (trw *TypeRWBrackets) PhpWriteTL2MethodCall(targetName string, bare bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canDependOnLocalBit bool) []string

type TypeRWMaybe

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

func (*TypeRWMaybe) PhpCalculateSizesTL2MethodCall

func (trw *TypeRWMaybe) PhpCalculateSizesTL2MethodCall(targetName string, bare bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canOmit bool) []string

func (*TypeRWMaybe) PhpClassName

func (trw *TypeRWMaybe) PhpClassName(withPath bool, bare bool) string

func (*TypeRWMaybe) PhpClassNameReplaced

func (trw *TypeRWMaybe) PhpClassNameReplaced() bool

func (*TypeRWMaybe) PhpDefaultInit

func (trw *TypeRWMaybe) PhpDefaultInit() string

func (*TypeRWMaybe) PhpDefaultValue

func (trw *TypeRWMaybe) PhpDefaultValue() string

func (*TypeRWMaybe) PhpGenerateCode

func (trw *TypeRWMaybe) PhpGenerateCode(code *strings.Builder, bytes bool) error

func (*TypeRWMaybe) PhpIterateReachableTypes

func (trw *TypeRWMaybe) PhpIterateReachableTypes(reachableTypes *map[*TypeRWWrapper]bool)

func (*TypeRWMaybe) PhpReadMethodCall

func (trw *TypeRWMaybe) PhpReadMethodCall(targetName string, bare bool, initIfDefault bool, args []string, supportSuffix string) []string

func (*TypeRWMaybe) PhpReadTL2MethodCall

func (trw *TypeRWMaybe) PhpReadTL2MethodCall(targetName string, bare bool, initIfDefault bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canDependOnLocalBit bool) []string

func (*TypeRWMaybe) PhpTypeName

func (trw *TypeRWMaybe) PhpTypeName(withPath bool, bare bool) string

func (*TypeRWMaybe) PhpWriteMethodCall

func (trw *TypeRWMaybe) PhpWriteMethodCall(targetName string, bare bool, args []string, supportSuffix string) []string

func (*TypeRWMaybe) PhpWriteTL2MethodCall

func (trw *TypeRWMaybe) PhpWriteTL2MethodCall(targetName string, bare bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canDependOnLocalBit bool) []string

type TypeRWPHPData

type TypeRWPHPData interface {
	PhpClassName(withPath bool, bare bool) string
	PhpClassNameReplaced() bool
	PhpTypeName(withPath bool, bare bool) string
	PhpGenerateCode(code *strings.Builder, bytes bool) error
	// PhpDefaultInit return not null type initialization value
	PhpDefaultInit() string
	// PhpDefaultValue return default value for field of this type (can be null)
	PhpDefaultValue() string
	PhpIterateReachableTypes(reachableTypes *map[*TypeRWWrapper]bool)
	PhpReadMethodCall(targetName string, bare bool, initIfDefault bool, args []string, supportSuffix string) []string
	PhpWriteMethodCall(targetName string, bare bool, args []string, supportSuffix string) []string
	PhpReadTL2MethodCall(targetName string, bare bool, initIfDefault bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canDependOnLocalBit bool) []string
	PhpWriteTL2MethodCall(targetName string, bare bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canDependOnLocalBit bool) []string
	PhpCalculateSizesTL2MethodCall(targetName string, bare bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canOmit bool) []string
}

type TypeRWPrimitive

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

func (*TypeRWPrimitive) PhpCalculateSizesTL2MethodCall

func (trw *TypeRWPrimitive) PhpCalculateSizesTL2MethodCall(targetName string, bare bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canOmit bool) []string

func (*TypeRWPrimitive) PhpClassName

func (trw *TypeRWPrimitive) PhpClassName(withPath bool, bare bool) string

func (*TypeRWPrimitive) PhpClassNameReplaced

func (trw *TypeRWPrimitive) PhpClassNameReplaced() bool

func (*TypeRWPrimitive) PhpDefaultInit

func (trw *TypeRWPrimitive) PhpDefaultInit() string

func (*TypeRWPrimitive) PhpDefaultValue

func (trw *TypeRWPrimitive) PhpDefaultValue() string

func (*TypeRWPrimitive) PhpGenerateCode

func (trw *TypeRWPrimitive) PhpGenerateCode(code *strings.Builder, bytes bool) error

func (*TypeRWPrimitive) PhpIterateReachableTypes

func (trw *TypeRWPrimitive) PhpIterateReachableTypes(reachableTypes *map[*TypeRWWrapper]bool)

func (*TypeRWPrimitive) PhpReadMethodCall

func (trw *TypeRWPrimitive) PhpReadMethodCall(targetName string, bare bool, initIfDefault bool, args []string, supportSuffix string) []string

func (*TypeRWPrimitive) PhpReadTL2MethodCall

func (trw *TypeRWPrimitive) PhpReadTL2MethodCall(targetName string, bare bool, initIfDefault bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canDependOnLocalBit bool) []string

func (*TypeRWPrimitive) PhpTypeName

func (trw *TypeRWPrimitive) PhpTypeName(withPath bool, bare bool) string

func (*TypeRWPrimitive) PhpWriteMethodCall

func (trw *TypeRWPrimitive) PhpWriteMethodCall(targetName string, bare bool, args []string, supportSuffix string) []string

func (*TypeRWPrimitive) PhpWriteTL2MethodCall

func (trw *TypeRWPrimitive) PhpWriteTL2MethodCall(targetName string, bare bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canDependOnLocalBit bool) []string

type TypeRWStruct

type TypeRWStruct struct {
	Fields []Field

	ResultType    *TypeRWWrapper
	ResultNatArgs []pure.ActualNatArg
	// contains filtered or unexported fields
}

func (*TypeRWStruct) PHPFetcherArguments

func (trw *TypeRWStruct) PHPFetcherArguments() []ArgInfo

func (*TypeRWStruct) PHPGetFieldMask

func (trw *TypeRWStruct) PHPGetFieldMask(targetName string, calculatedArgs []string, fieldIndex int) string

func (*TypeRWStruct) PHPGetResultNatDependenciesValuesAsTypeTree

func (trw *TypeRWStruct) PHPGetResultNatDependenciesValuesAsTypeTree() ([]string, bool)

func (*TypeRWStruct) PHPStructConstructor

func (trw *TypeRWStruct) PHPStructConstructor(code *strings.Builder, necessaryFieldsInConstructor []Field)

func (*TypeRWStruct) PHPStructFieldMaskCalculators

func (trw *TypeRWStruct) PHPStructFieldMaskCalculators(code *strings.Builder, usedFieldMasksIndecies []int, usedFieldMasks map[int][]Field)

func (*TypeRWStruct) PHPStructFieldMasks

func (trw *TypeRWStruct) PHPStructFieldMasks(code *strings.Builder)

func (*TypeRWStruct) PHPStructFields

func (trw *TypeRWStruct) PHPStructFields(code *strings.Builder)

func (*TypeRWStruct) PHPStructFunctionSpecificMethods

func (trw *TypeRWStruct) PHPStructFunctionSpecificMethods(code *strings.Builder)

func (*TypeRWStruct) PHPStructFunctionSpecificTypes

func (trw *TypeRWStruct) PHPStructFunctionSpecificTypes(code *strings.Builder)

func (*TypeRWStruct) PHPStructHeader

func (trw *TypeRWStruct) PHPStructHeader(code *strings.Builder)

func (*TypeRWStruct) PHPStructRPCSpecialGetters

func (trw *TypeRWStruct) PHPStructRPCSpecialGetters(code *strings.Builder)

func (*TypeRWStruct) PHPStructReadMethods

func (trw *TypeRWStruct) PHPStructReadMethods(code *strings.Builder)

func (*TypeRWStruct) PHPStructResultType

func (trw *TypeRWStruct) PHPStructResultType(code *strings.Builder)

func (*TypeRWStruct) PHPStructWriteMethods

func (trw *TypeRWStruct) PHPStructWriteMethods(code *strings.Builder)

func (*TypeRWStruct) PhpCalculateSizesTL2MethodCall

func (trw *TypeRWStruct) PhpCalculateSizesTL2MethodCall(targetName string, bare bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canOmit bool) []string

func (*TypeRWStruct) PhpCanBeSimplify

func (trw *TypeRWStruct) PhpCanBeSimplify() bool

func (*TypeRWStruct) PhpClassName

func (trw *TypeRWStruct) PhpClassName(withPath bool, bare bool) string

func (*TypeRWStruct) PhpClassNameReplaced

func (trw *TypeRWStruct) PhpClassNameReplaced() bool

func (*TypeRWStruct) PhpConstructorNeedsUnion

func (trw *TypeRWStruct) PhpConstructorNeedsUnion() (unionParent *TypeRWWrapper)

func (*TypeRWStruct) PhpDefaultInit

func (trw *TypeRWStruct) PhpDefaultInit() string

func (*TypeRWStruct) PhpDefaultValue

func (trw *TypeRWStruct) PhpDefaultValue() string

func (*TypeRWStruct) PhpGenerateCode

func (trw *TypeRWStruct) PhpGenerateCode(code *strings.Builder, bytes bool) error

func (*TypeRWStruct) PhpGetArgsForField

func (trw *TypeRWStruct) PhpGetArgsForField(fieldIndex int, calculatedArgs []string) []string

func (*TypeRWStruct) PhpIterateReachableTypes

func (trw *TypeRWStruct) PhpIterateReachableTypes(reachableTypes *map[*TypeRWWrapper]bool)

func (*TypeRWStruct) PhpReadMethodCall

func (trw *TypeRWStruct) PhpReadMethodCall(targetName string, bare bool, initIfDefault bool, args []string, supportSuffix string) []string

func (*TypeRWStruct) PhpReadTL2MethodCall

func (trw *TypeRWStruct) PhpReadTL2MethodCall(targetName string, bare bool, initIfDefault bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canDependOnLocalBit bool) []string

func (*TypeRWStruct) PhpTypeName

func (trw *TypeRWStruct) PhpTypeName(withPath bool, bare bool) string

func (*TypeRWStruct) PhpWriteMethodCall

func (trw *TypeRWStruct) PhpWriteMethodCall(targetName string, bare bool, args []string, supportSuffix string) []string

func (*TypeRWStruct) PhpWriteTL2MethodCall

func (trw *TypeRWStruct) PhpWriteTL2MethodCall(targetName string, bare bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canDependOnLocalBit bool) []string

type TypeRWUnion

type TypeRWUnion struct {
	Fields []Field
	IsEnum bool
	// contains filtered or unexported fields
}

func (*TypeRWUnion) PhpCalculateSizesTL2MethodCall

func (trw *TypeRWUnion) PhpCalculateSizesTL2MethodCall(targetName string, bare bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canOmit bool) []string

func (*TypeRWUnion) PhpClassName

func (trw *TypeRWUnion) PhpClassName(withPath bool, bare bool) string

func (*TypeRWUnion) PhpClassNameReplaced

func (trw *TypeRWUnion) PhpClassNameReplaced() bool

func (*TypeRWUnion) PhpDefaultInit

func (trw *TypeRWUnion) PhpDefaultInit() string

func (*TypeRWUnion) PhpDefaultValue

func (trw *TypeRWUnion) PhpDefaultValue() string

func (*TypeRWUnion) PhpGenerateCode

func (trw *TypeRWUnion) PhpGenerateCode(code *strings.Builder, bytes bool) error

func (*TypeRWUnion) PhpIterateReachableTypes

func (trw *TypeRWUnion) PhpIterateReachableTypes(reachableTypes *map[*TypeRWWrapper]bool)

func (*TypeRWUnion) PhpReadMethodCall

func (trw *TypeRWUnion) PhpReadMethodCall(targetName string, bare bool, initIfDefault bool, args []string, supportSuffix string) []string

func (*TypeRWUnion) PhpReadTL2MethodCall

func (trw *TypeRWUnion) PhpReadTL2MethodCall(targetName string, bare bool, initIfDefault bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canDependOnLocalBit bool) []string

func (*TypeRWUnion) PhpTypeName

func (trw *TypeRWUnion) PhpTypeName(withPath bool, bare bool) string

func (*TypeRWUnion) PhpWriteMethodCall

func (trw *TypeRWUnion) PhpWriteMethodCall(targetName string, bare bool, args []string, supportSuffix string) []string

func (*TypeRWUnion) PhpWriteTL2MethodCall

func (trw *TypeRWUnion) PhpWriteTL2MethodCall(targetName string, bare bool, args []string, supportSuffix string, callLevel int, usedBytesPointer string, canDependOnLocalBit bool) []string

type TypeRWWrapper

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

func (*TypeRWWrapper) AnnotationsMask

func (w *TypeRWWrapper) AnnotationsMask() uint32

func (*TypeRWWrapper) HasAnnotation

func (w *TypeRWWrapper) HasAnnotation(str string) bool

func (*TypeRWWrapper) IsFunction

func (w *TypeRWWrapper) IsFunction() bool

func (*TypeRWWrapper) IsTrueType

func (w *TypeRWWrapper) IsTrueType() bool

func (*TypeRWWrapper) PHPDefaultValue

func (w *TypeRWWrapper) PHPDefaultValue() string

func (*TypeRWWrapper) PHPFilePath

func (w *TypeRWWrapper) PHPFilePath(bare bool) []string

func (*TypeRWWrapper) PHPGenCoreType

func (w *TypeRWWrapper) PHPGenCoreType() *TypeRWWrapper

func (*TypeRWWrapper) PHPGenerateCode

func (w *TypeRWWrapper) PHPGenerateCode(code *strings.Builder, bytes bool) error

func (*TypeRWWrapper) PHPGetNatTypeDependenciesDeclAsArray

func (w *TypeRWWrapper) PHPGetNatTypeDependenciesDeclAsArray() []string

func (*TypeRWWrapper) PHPIsBare

func (w *TypeRWWrapper) PHPIsBare() bool

func (*TypeRWWrapper) PHPIsPrimitiveType

func (w *TypeRWWrapper) PHPIsPrimitiveType(recursiveCheck bool) bool

func (*TypeRWWrapper) PHPIsTrueType

func (w *TypeRWWrapper) PHPIsTrueType() bool

func (*TypeRWWrapper) PHPNeedsCode

func (w *TypeRWWrapper) PHPNeedsCode() bool

func (*TypeRWWrapper) PHPTypePath

func (w *TypeRWWrapper) PHPTypePath() string

func (*TypeRWWrapper) PHPTypePathElements

func (w *TypeRWWrapper) PHPTypePathElements() []string

func (*TypeRWWrapper) PHPUnionParent

func (w *TypeRWWrapper) PHPUnionParent() *TypeRWWrapper

func (*TypeRWWrapper) PhpIterateReachableTypes

func (w *TypeRWWrapper) PhpIterateReachableTypes(reachableTypes *map[*TypeRWWrapper]bool)

func (*TypeRWWrapper) TLName

func (w *TypeRWWrapper) TLName() tlast.TL2TypeName

func (*TypeRWWrapper) TLTag

func (w *TypeRWWrapper) TLTag() uint32

Jump to

Keyboard shortcuts

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