GRPH 1.10 - Documentation
Par Snowy le 23/06/2018 à 16h37Cet 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'