diff --git a/concept1.cpc b/concept1.cpc index 6aca3fd..3fca71c 100644 --- a/concept1.cpc +++ b/concept1.cpc @@ -2,12 +2,11 @@ ' les mots clef peuvent prendre des "flags" et des arguments ' un peu à la maniere de programme POSIX (les flags obligatoirements ' avant les arguments) - txt/ /#R "Hello " txt/ "World" ' ${} aurait la meme comportement que les {} dans les f-strings en python -txt/ "il est ${sys/ /time}" +txt/ "il est ${SYS.TIME}" ' pour definir une fonction ' def/ name (args) @@ -18,11 +17,6 @@ def/ hello (name) txt/ "hello ${name}" end/ -' Une petite lambda: -goodby = lambda/ (name) - text/ "Goodbye ${name}" -end/ - ' et on les appeleraient comme ceci: call/ hello "test de julien a nouveau" ' l'idée serait de séparer mot clef (finissant par / et reserver) et l'espace de nom utilisateur @@ -121,3 +115,46 @@ PictureBox/ .image = "%user_path%/name.png" end/ +' Pour les variables modifiables par l'utilisateur : + +let/ /input: "Entrez une valeur : ", x + +txt/ "${x}" + +' Pour les conditions + +let/ y = 5 + +if/ x == y : + txt/ "x est egal a y" +elif/ x < y : + txt/ "x est inferieur a y" +else/ + txt/ "x est superieur a y" +end/ + +' Pour les boucles type "tant que" + +while/ x < y : + let/ x = x + 1 +end/ while + +' Pour les boucles type 'pour' + +let/ tab = [3, 5, 4, 9, 14, 15, 21, 38] + +for/ y in tab: + if/ tab[0] == y : + txt/ "y = ${tab[0]}" + end/ +end/ + +' Pour les conditions types "switch" (comme en C++). Attention, ça peut piquer des yeux. + +switch/ x : + case/ 1 : "Yes" + case/ 2 : "No" + case/ default : "None" +end/ + + diff --git a/concept_ui.cpc b/concept_ui.cpc new file mode 100644 index 0000000..43ab2af --- /dev/null +++ b/concept_ui.cpc @@ -0,0 +1,113 @@ +// Ce fichier, que j'ai fait à part du premier fichier, permet de conceptualiser une syntaxe pour la lib GUI de Cpcdos OS3.0 + +use/ "cpcgui" // D'après ce qui avait été défini, on importe la lib native pour ajouter les keywords spécifiques à l'interface graphique + +// On conceptualisera les éléments graphiques comme suit : + +let/ my_window = window/ ... end/ + +// (Je n'ai pas complété le code de la fenêtre) +// L'élément est déclaré dans une variable. Cela permettra de créer un parent pour les éléments enfants que nous allons intégrer plus tard + +// Auparavant, une fenêtre se créait ainsi : + +window/ my_old_window + ... + ... + @#my_old_window_handle create/ +end/ window + +// La ligne qui précède `end/ window` créait un handle permettant d'associer un parent lors de la création d'un élément enfant. +// Aujourd'hui, on passe par une simple déclaration de variable. Ce qui formalise également une seule façon de déclarer des variables. +// Code complet d'une fenêtre en CC+ 3.0 : + +let/ my_window = window/ + .title = "My window" + .px = 100 + .py = 100 + .sx = 300 + .sy = 200 + .opacity = 255 // L'oppacité est une valeur qui va de 0 à 255 + .parameters = "TYPE:0" // Je définirais les paramètres ultérieurement dans ce document + .barcolor = (50,50,100) + .titlecolor = (255,255,255) + .windowcolor = (198,198,198) + .icon = "" +end/ + +// J'ai fait le choix délibéré de remplacer "windowcolor" qui change la couleur de la bar-titre par "barcolor" par question de logique. +// "windowcolor" va remplacer "backcolor". +// "titlecolor" reste inchangé. + +// La création d'élément enfant se fait comme suit (ici, un bouton) : + +let/ my_window_btn = button/ + .parent = my_window + .px = 100 + .py = 100 + .sx = 30 + .sy = 15 + .opacity = 255 + .parameters = "CLICKABLE:1 IMGAUTO:0" + .text = "Click me !" + .backcolor = (50,50,100) + .textcolor = (255,255,255) + .image = "" + .events = my_window_btn_events +end/ + +// Remplacement de l'attribut "handle" par "parent" (c'est un choix personnel. On débattera des keywords de toute façon). +// Création d'un nouveau paramètre : CLICKABLE (0 : le bouton n'est pas cliquable - 1 : le bouton est cliquable). +// Dans .events, on indique la fonction qui définira les événements provoqués par le bouton lors de son actionnement. Les fonctions sont stockées dans des variables. + +// D'autres éléments enfants : + +let/ my_picturebox = picturebox/ + .parent = my_window + .px = 10 + .py = 10 + .sx = 16 + .sy = 16 + .opacity = 125 + .parameters = "IMGAUTO:0 + .image = "" +end/ + +let/ my_textblock = textblock/ + .parent = my_window + .px = 200 + .py = 200 + .sx = 100 + .sy = 15 + .font-size = 13 + .font-family = "sans-serif" + .parameters = "BOLD:1 ITALIC:1 UNDERLINE:1 ALIGN:0" + .textcolor = (255,255,255) + .backcolor = (0,0,0) +end/ + +// Ajout de deux nouveaux attributs inspirés du CSS : font-size et font-family +// Trois paramètres spécifiques : BOLD, ITALIC, UNDERLINE et ALIGN : 0 à gauche, 1 au centre, 2 à droite et 3 justifié + +let/ my_textbox = textbox/ + .parent = my_window + .px = 0 + .py = 150 + .sx = 100 + .sy = 15 + .font-size = 13 + .font-family = "sans-serif" + .parameters = "BOLD:1 ITALIC:0 UNDERLINE:0 ALIGN:0" + .textcolor = (0,0,0) + .backcolor = (255,255,255) +end/ + +// Les mêmes paramètres que pour le textblock. Je rajouterais d'autres éléments plus tard. En attendant, on a déjà de quoi faire une très bonne base. + + + + + + + +