Elemental Cube

GRPH 1.10 - Documentation

menu

GRPH 1.10 - Documentation

Par Snowy le 23/06/2018 à 16h37

Cet article regroupe toutes les fonctionnalités de GRPH 1.10. Il n'inclut pas les différentes fonctions, méthodes, et espaces de noms, utilisez l'autocomplétion de BBTCEnvironment pour comprendre leur fonctionnement.

Instructions (lignes)

Déclaration de variable

[global ][final ]type name = value

Crée une variable, avec le nom, le type et la valeur par défaut donnés. Le mot-clé 'final' permet de créer une constante à la place, sa valeur ne peut pas être modifiée.

Le mot-clé 'global' permet de rendre la variable globale, elle sera déclarée avec la plus grande portée. Son usage est déconseillé, le compilateur le comprend mal. Déclarez la variable dans la plus grande portée directement.

Assignation de variable ou de propriété

name = value
on.name = value

Modifie la valeur stockée dans la variable. La valeur doit être du type donné lors de la déclaration.

Modification du contenu d'un tableau

name{int} = value // Modification de la valeur n°'int'
name{int+} = value // Ajout après la valeur n°'int'
name{+} = value // Ajout à la fin
name{int-} = // Suppression de la valeur n°'int'
name{-} = value // Suppression de la valeur 'value'
name{int-} = value // Suppression de la valeur n°'int' si elle a pour valeur 'value'

La variable doit être déclarée avec le type '{mixed}', ou tout autre tableau.

Déclaration simple de fonction

type name[params] = value

Déclare une fonction simple, qui renvoie tout simplement la valeur, évaluée à chaque appel avec les arguments donnés. Contrairement à #function, aucune portée n'est ouverte, elle ne peut donc pas exécuter d'instructions.

Appel de méthode

name on: params

Appelle la méthode 'name' sur la variable 'on', avec les arguments 'params' (séparés par des espaces).

Appel de fonction

name[params]

Appelle la fonction 'name' avec les arguments 'params' (séparés par des espaces).

Commandes (sauf blocs)

Les commandes sont des instructions commançant par '#', suivi par son nom et ses paramètres. Elles servent à être exécutés lors de la compilation (#import, #requires), à modifier où continuer l'exécution (#goto, #break, #continue, #return, #throw), ou à ouvrir une portée (Blocs).

#import

#import ns
#import ns>member

Importe l'espace de nom, la méthode ou la fonction donnée, qui peut ensuite être utilisé dans des appels de fonction ou de méthode, sans avoir à spécifier l'espace de nom.

#requires

#requires plugin version
#requires GRPH version

Arrête l'exécution immédiatement si l'utilisateur ne possède pas la version de GRPH ou d'un plugin requis (ou ultérieur). Si GRPH 1.10 est requis, l'utilisateur ne pourra pas lancer le script avec GRPH 1.8 ou GRPH 1.9, mais le fera sans problème avec GRPH 1.0 ou GRPH 1.11.

#goto

#goto line
#goto ::label

Le script continuera à être lu à la ligne donnée. Dans le cas d'un label, la ligne est celle où il est.

Son usage est déconseillé, surtout si la destination est à l'intérieur d'un bloc. Dans ce cas, le bloc est exécuté immédiatement sans conditions.

#break

#break

Arrête l'exécution du bloc le plus proche, et continue l'exécution à la première instruction après le bloc.

#continue

#continue

Arrête l'exécution du bloc le plus proche, et continue l'exécution comme si cette instruction est la dernière du bloc : dans le cas d'une boucle, le script continue à la prochaine itération, la prochaine instruction exécutée est la première de la boucle. Dans le cas d'un bloc exécuté une fois ou si il n'y a pas d'itération suivante, cette commande a le même effet que #break.

#return

#return value

Arrête l'exécution de la fonction, et retourne la valeur donnée.

#throw

#throw type(msg)

Lance une exception du type donné, avec le message donné. Lancer une exception arrête l'exception du script sauf si elle est dans un #try qui rattrape le type donné via le #catch approprié.

Le type 'type' est un type d'exception, les différentes possibilités sont :

InvalidTypeException CastException IOException ReflectionException InvalidArgumentException NoPermissionException UnexpectedException

Blocs

Les blocs sont des commandes qui ouvrent une nouvelle portée, en indentant le code les lignes suivantes pour les mettre dans cette portée.

#block

#block

Exécute les instructions à l'intérieur. Ne sert qu'à créer une nouvelle portée.

#if

#if bool

Exécute les instructions à l'intérieur seulement si la valeur 'bool' renvoie 'true'.

#elseif

#elseif bool

Exécute les instructions à l'intérieur seulement si le #if et aucun #elseif d'affilé n'a été exécuté et que la valeur 'bool' renvoie 'true'.

#else

#else

Exécute les instructions à l'intérieur seulement si le #if et aucun #elseif d'affilé n'a été exécuté.

#while

#while bool

Exécute les instructions à l'intérieur seulement si 'bool' renvoie 'true', et revient au début de cette instruction ensuite, pour recommencer si 'bool' renvoie toujours 'true'.

#foreach

#foreach name : array

Exécute les instructions à l'intérieur pour chaque valeur dans le tableau 'array'. La valeur est stockée dans la variable 'name'

#function

#function type name\[params\][ = default]

Déclare une fonction avec le type de retour 'type', le nom 'name', les paramètres donnés, et la valeur par défaut donnée, évaluée et retournée si #return n'est pas appelé.

La syntaxe d'un paramètre est le suivant, où 'type' est le type requis, 'name' le nom de la variable qui va être créé. Les paramètres sont séparés par des virgules ','.

type name // Variable de type 'type'
type name? // Paramètre optionnel, variable de type 'type?'
type name = default // Paramètre optionnel, variable de type 'type', la valeur 'default' est évaluée et utilisée si il n'est pas spécifié

À l'intérieur du bloc, les seules variables disponibles sont les arguments et les constantes globales.

#try

#try

Exécute les instructions à l'intérieur et rattrape les exceptions des types des différents #catch et les exécute.

#catch

#catch name : type

Exécute les instructions à l'intérieur si une exception de type 'type' est attrapé dans le #try précédent. Une variable nommée 'name' et de type string est créée dans sa portée, elle contient le message de l'exception.

Le type 'type' est un type d'exception, les différentes possibilités sont :

Exception InvalidTypeException CastException IOException ReflectionException InvalidArgumentException NoPermissionException UnexpectedException

Portée (scope)

La portée actuelle est le bloc le plus proche. Toutes les variables déclarées sans le mot-clé 'global' sont déclarés dans la portée actuelle. En sortant du bloc, la portée est détruite, et les variables déclarées dedans ne peuvent plus être utilisés.

La portée la plus grande (portée globale) est l'absence de bloc, elle n'est détruite qu'à la fin de l'exécution du script.

Types

Le type d'une variable ou d'un paramètre peut être n'importe lequel de ceux documentés ci-dessous. Le type d'une valeur ne peut pas être un type multiple. La hiérarchie de types peut être trouvé ici.

Type simple

mixed num integer float rotation pos boolean string paint color linear radial shape direction stroke file image font

Type de figure (ou type constructeur)

Rectangle Circle Line Polygon Image Text Path Group Background

Les types de figure peuvent être instanciés avec des constructeurs du même nom. Ils sont tous de type 'shape'.

Type tableau

{type}

Les types tableaux peuvent être instanciés avec les litéraux de création de tableau. Ils peuvent contenir n'importe quel nombre de valeur de type 'type'.

Type optionnel

type?

Les types optionnels peuvent contenir soit une valeur de type 'type', soit 'null'. Les types optionnels sont automatiquement convertis vers le type 'type' et vice-versa, selon le besoin.

Type multiple OU

type|type

Les types multiples OU peuvent contenir soit le premier type, soit le second.

Expressions

Les expressions peuvent être utilisés dans les instructions ou d'autres expressions. Leur ordre de priorité est respecté dans la liste ci-dessous. Les crochets '[]' peuvent être utilisés pour donner une priorité aux expressions.

Énumérations

direction: right downRight down downLeft left upLeft up upRight
stroke: elongated cut rounded
boolean: true false

Les valeurs sont du type donné, si l'expression est un de ceux donnés.

Null

null

Type : déduit lorsqu'il est optionnel, sinon erreur.

Rotation

value°

Type : rotation
Crée une rotation, en degrés, de la valeur donnée (nombre entier constant)

Nombre à virgule flottante

-?[0-9]+(\.[0-9]+[Ff]?|[Ff])

Type : float

Nombre entier

-?[0-9]+

Type : integer

Valeur d'un tableau

name{n}
[$A-Za-z_][A-Za-z0-9_]*\{.*\}

Type : déduit du type de la variable name
Renvoit la énième valeur du tableau dans la variable 'name'

Variable

[A-Za-z0-9_$]+

Type : type de la variable
Renvoie la variable de ce nom

Création d'un tableau

type {values}
([A-Za-z|<>{}]+)? *\{.*\}

Type : 'type', ou float
Crée et retourne un tableau de 'type', avec les valeurs donnés

Cast

value as/is type
(.+) (as|is) ([A-Za-z|<>{}?]+)

Type : 'type' pour as, boolean pour is
Pour as, appelle reflect>castTo pour convertir la valeur au type donné, et le renvoie.
Pour is, renvoie true si la valeur donnée peut être assignée à une variable du type donné, sinon renvoie false.

Position

x,y
(-?[0-9.]+),(-?[0-9.]+)

Type : pos
Renvoie une position avec les coordonnées x et y données.

Appel de fonction

name[args]
([A-Za-z>]+)\[(.*)\]

Type : type de retour de la fonction
Renvoie la valeur que retourne cette fonction, une fois exécutée avec les arguments donnés (séparés par des espaces).

Comparaisons && et ||

bool (&&|\|\|) bool

Type : boolean
Pour &&, renvoie true si les deux valeurs sont true.
Pour ||, renvoie true si au moins un des deux arguments sont true

Comparaisons >=, <=, > et <

value (>=|<=|>|<) value

Type : boolean
Renvoie true si la première valeur est (plus grand ou égal à / plus petit ou égal à / plus grand que / plus petit que) la deuxième valeur. Elle peut s'appliquer à deux num ou deux pos.

Opérations binaires

value (&|\||\^|<<|>>|>>>) value

Type : même que les deux valeurs (boolean ou integer)
Applique respectivement un ET, un OU inclusif, un OU exclusif, un shift gauche, un shift droit arithmétique et un shift droit logique. Nécessite deux integer ou deux boolean (sauf pour les shifts).

Comparaisons == et !=

value (==|!=) value

Type : boolean
Renvoie true si les valeurs sont égales pour ==, l'inverse pour !=.

Appel de constructeur

type(args)
([A-Za-z]*)\((.+)\)

Type : 'type' donné, ou déduit si il est absent, et Background si c'est impossible
Appelle le constructeur donné avec les arguments donnés.

Signes mathématiques de basse priorité

number (+|-) number

Type : déduit des deux nombres (integer s'ils sont tous les deux des entiers, float si un des deux est un float, string pour '+' avec deux string, num sinon)
Exécute l'opération mathématique donné (addition, soustraction ou concaténation).

Signes mathématiques de haute priorité

number (\*|\/|\%) number

Type : déduit des deux nombres (integer s'ils sont tous les deux des entiers, float si un des deux est un float, num sinon)
Exécute l'opération mathématique donné (multiplication, division ou modulo).

Opération unaire

(~|-|!)value

Type : respectivement integer, déduit de value lorsqu'il est un num, et boolean)
Exécute l'opération unaire donné, respectivement le complément binaire (inversion de tous les bits), l'opposé du nombre et l'inversion du boolean.

Propriété

on.name
(.+)\.([A-Za-z0-9_]+)

Type : déduit du type de la propriété
Pour une constante : retourne la valeur de la constante 'name' dans le type 'on'.
Pour un champ : retourne la valeur du champ 'name' à partir de l'expression 'on'

Commentaires

Personne n'a encore commenté cet article. Connectez-vous pour écrire un commentaire !