diff --git a/ash/ash_guide.html b/ash/ash_guide.html index 3a4145d..e7858d9 100644 --- a/ash/ash_guide.html +++ b/ash/ash_guide.html @@ -9,6 +9,13 @@ + @@ -170,12 +177,16 @@
Classes et objets
-Gestion des erreurs
-Bibliothèque standard
Les arguments sont stockés dans une liste. 0 est le nom du script. En nég, les options préalables. En pos, les options du script.
+Ces encadrés exposent des décisions de design.
+La syntaxe de Ash s'inspire des langages Lua, Ruby et Pascal.
+Les langages JavaScript et Python sont également des inspirations pour leur fonctionnement et leur bibliothèque de base.
La tradition veut qu'on affiche "Bonjour le monde !" sur la sortie standard. Pour cela, il faut lancer l'interpréteur interactif
ash.exe
@@ -224,7 +242,7 @@
Les commentaires monolignes commençent par --
(comme Lua et SQL)
Les commentaires multilignes commençent par --[[
et finissent par --]]
(comme Lua)
Cela permet de conserver //
(C, JavaScript) et #
(Ruby, Python) comme opérateurs de intdiv et longueur respectivement.
-- comment --[[ start of multi line @@ -243,7 +268,7 @@1.4 Mots-clés
Ash utilise 27 mots-clés.
- var const + if then elif else end if then elsif else end while do loop for in break next @@ -255,19 +280,19 @@ fun pro return 1.4 Mots-clés
1.5 Constantes et variables
Pour déclarer une variable, il faut utiliser cette syntaxe :
-[var] ID [: TYPE] = EXPR +[var] ID [: TYPE] = EXPRIl est recommandé de commencer une variable par une minuscule et d'utiliser un "_" pour séparer les mots.
-var age_personne : nat = 25 +var age_personne : nat = 25Pour déclarer une constante de référence, il faut utiliser cette syntaxe :
-const ID [: TYPE] = EXPR +const ID [: TYPE] = EXPRIl est recommandé de commencer une constante par une majuscule.
-const PI : num = 3.14 +const PI : num = 3.14nom de variable : (_A-Za-z)(0-9A-Za-z)
_ is for dummy variable or the last expression. utf-8 variable are supported.
@@ -286,7 +311,7 @@1.5 Constantes et variables
1.6 Expressions et opérateurs
Une expression est forcément évaluable à une valeur avec un type :
-5 + 2 +5 + 2Cette expression donne 7, de type nat.
Une expression est composée d'opérateur et d'opérande.
@@ -332,6 +357,24 @@2.1 Booléen
2.2 Entier et réel
2.3 Chaîne
2.4 Liste
++
+ Signature + pro flatten() + pro pop, shift() : any + pro insert(index : int, value : any) + pro add, append, push(value : any) + get first : any + get last : any + fun find, index(value : any) : nat + fun find_all(value : any) : [int] + fun include?, has? contains?(value : any) : bool + get min : any + get max : any + get length, count, size : nat + pro sort() + pro reverse() + pro uniq() 2.5 Dictionnaire
3. Contrôle du flux
3.1 Séquence
@@ -358,69 +401,80 @@3.3 Boucle
ACTION loop -for ID1[, ID2] in ITERABLE [if CONDITION] do +for ID1[, ID2] in ITERABLE [if CONDITION] do ACTION loop break next -4. Fonctions et procédures
+4. Sous-programmes
+4.1 Fonctions
-fun[ction] ID (P1 [: T1], P2 [: T2]) [: TYPE] +fun[ction] ID (P1 [: T1], P2 [: T2]) [: TYPE] ACTION -end - -pro[cedure] ID (P1 [: T1], P2 [: T2]) - ACTION -end - -return [EXPR] + return EXPR +end ++4.2 Procédures
++pro[cedure] ID (P1 [: T1], P2 [: T2]) + ACTION + return +end ++4.3 Getters
+Un getter est une fonction qui ne prend pas de paramètres. Elle sert à retourner des valeurs qui sont calculées. On évitera de mettre des calculs trop importants dans un getter.
++get ID : TYPE + ACTION + return EXPR +end5. Classes et objets
class ID [< SUPER] - [static const, static var, var] ID = EXPR - [static] fun or pro + [static const, static var, var] ID = EXPR + [static] fun or pro pro init(@a int, b int) - @b = b + @b = b end end -a = ID.new(param) +a = ID.new(param) class Point object (fixed fields)/obj x int y int end @attr -- instance attribute -$attr -- class attribute (en Ruby pour global et @@ pour class) - -if o is Class c then - -- vous pouvez utiliser c dans ce bloc -end - -static class Order < String -- no instance <=> enum - static Move = "Move" - static Wait = "Wait" - static Attack = "Attack" - static Follow = "Follow" -end +$attr -- class attribute (en Ruby pour global et @@ pour class) + +if o is Class c then + -- vous pouvez utiliser c dans ce bloc +end + +static class Order < String -- no instance <=> enum + static Move = "Move" + static Wait = "Wait" + static Attack = "Attack" + static Follow = "Follow" +end6. Gestion des erreurs
return EXCEPTION -fun div(a : num, b : num) : num - if b == 0 then +fun div(a : num, b : num) : num + if b == 0 then return DivByZeroException else return a / b end end -div(5, 0) +div(5, 0) if DivByZeroException then writeln("An exception has been catched") end @@ -428,7 +482,7 @@6. Gestion des erreurs
7. Bibliothèque standard
-ID [module] = import (FILEPATH | ID) [ > ID1, ID2 ] +ID [module] = import (FILEPATH | ID) [ > ID1, ID2 ] module ID -- (en tête de fichier, pas de fin) (plutôt que package ou namespace)diff --git a/rts/rts.js b/rts/rts.js index 4b036ce..48d28f7 100644 --- a/rts/rts.js +++ b/rts/rts.js @@ -209,7 +209,7 @@ class Map { class Order { } -class Move extends Order { +class Move extends Order { constructor(row, col) { super(); this.row = row; @@ -394,7 +394,7 @@ class Group { done: false }; } else { - this.index = 0; + this.index = 0; return { done: true }; @@ -668,14 +668,12 @@ class Menu { if (!camera.selected.is_building) { ctx.drawImage(textures['Move'], this.x, this.y); ctx.drawImage(textures['Attack'], this.x + 32, this.y); - } else { - if (camera.selected.first.type == 'barrack') { + } else if (camera.selected.first.type == 'barrack') { ctx.strokeStyle = 'rgb(0, 128, 0)'; ctx.strokeRect(this.x, this.y + 32, this.width / 2, 1); ctx.drawImage(textures['CreateSoldier'], this.x, this.y + 32); ctx.drawImage(textures['CreateScout'], this.x + 32, this.y + 32); ctx.drawImage(textures['CreateBuilder'], this.x + 64, this.y + 32); - } } // Info on unit if (camera.selected.length == 1 && camera.selected.first instanceof UnitCreator) { @@ -941,7 +939,7 @@ function draw() { ctx.strokeStyle = 'rgb(255, 255, 255)'; ctx.strokeRect(Math.min(mouse_start_col - camera.col * 32, mouse_col), Math.min(mouse_start_row - camera.row * 32, mouse_row - camera.row), - Math.abs(mouse_start_col - camera.col * 32 - mouse_col), + Math.abs(mouse_start_col - camera.col * 32 - mouse_col), Math.abs(mouse_start_row - camera.row * 32 - mouse_row)); //console.log(mouse_start_col, mouse_start_row, mouse_col, mouse_row); } @@ -1149,7 +1147,7 @@ function transition_one(trow, tcol, content) { } } } - let cal = [center, 0, + let cal = [center, 0, 0, 0, 0, 0, 0, 0, 0, 0]; let O = 1; @@ -1202,4 +1200,4 @@ function make_transition(content) { } // Swap return [trans_matrix, pass_matrix]; -} \ No newline at end of file +} diff --git a/static/input/ash/ash_guide.hml b/static/input/ash/ash_guide.hml index 33835be..b0bca98 100644 --- a/static/input/ash/ash_guide.hml +++ b/static/input/ash/ash_guide.hml @@ -7,7 +7,11 @@ !require https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js §§ https://www.color-hex.com/color-palette/5452 -!css details { border: 1px solid #5bc0de; padding: 5px; cursor: pointer; margin-bottom: 0.5em; background-color: #F9F9F9;} +!css details { border: 1px solid #5bc0de; cursor: pointer; margin-bottom: 0.5em; background-color: #F9F9F9;} +!css summary { color: #F9F9F9; background-color: #5bc0de;} +!css details summary:before { content: "+"; margin-right: 6px;} +!css details[open] summary:before { content: "-"; margin-right: 6px;} +!css details div { padding: 5px; } !var DEFAULT_CODE=ash @@ -111,10 +115,12 @@ ash.ex -i pipo.ash Les arguments sont stockés dans une liste. 0 est le nom du script. En nég, les options préalables. En pos, les options du script. <> +{{begin}} ''Ces encadrés exposent des décisions de design.'' La syntaxe de Ash s'inspire des langages ''Lua'', ''Ruby'' et ''Pascal''. Les langages ''JavaScript'' et ''Python'' sont également des inspirations pour leur fonctionnement et leur bibliothèque de base. +{{end}} < > ### 1.2 Premiers programmes @@ -149,7 +155,9 @@ Les commentaires monolignes commençent par @@--@@ (comme Lua et SQL) Les commentaires multilignes commençent par @@--[[@@ et finissent par @@--]]@@ (comme Lua) < > +{{begin}} Cela permet de conserver @@//@@ (C, JavaScript) et @@#@@ (Ruby, Python) comme opérateurs de intdiv et longueur respectivement. +{{end}} < > @@@text