Skip to content

Référence du langage Eidolang

Eidolang est la représentation textuelle d'une figure Eidograph. Une figure est un script : des commandes créent des objets, des expressions établissent des dépendances, et le style et l'animation restent dans le même texte. Le glissement, les outils du canevas et les changements de propriétés finissent tous par réécrire ce script.

Cette page ne décrit que le langage actuel, Eidolang 0.2 ; elle ne contient aucune syntaxe retirée. Pour des scripts complets exécutables, consultez les projets d'exemple.

Squelette de script

Chaque script devrait commencer par une déclaration d'espace :

txt
space plane
version 0.2

# Une commande par ligne ; # démarre un commentaire
point A -2 0
point B 2 0
segment base A B
point M = midpoint(A, B)
  • space plane sélectionne le dialecte 2D ; space solid sélectionne le dialecte 3D.
  • version 0.2 est facultatif. C'est la version du langage, pas la version du manifeste .eido.
  • Les noms sont sensibles à la casse et doivent être définis avant leur utilisation.
  • Les littéraux d'angle nus sont en radians ; écrivez les valeurs en degrés explicitement, par exemple 45deg.
  • Les chaînes utilisent des guillemets doubles. Les couleurs peuvent utiliser des formes telles que #3366cc.

Modèle de liberté

Chaque objet géométrique appartient exactement à un niveau :

NiveauDéfinitionComportement
LibreLes coordonnées ou valeurs sont littéralesSe déplace directement ou se modifie dans le panneau des propriétés
LiéUtilise on … at … ou des coordonnées locales par rapport à un supportSe déplace uniquement sur son support
DérivéUtilise une expression = fondée sur d'autres objetsNe peut pas être déplacé ; se met à jour quand ses entrées changent
txt
point A 0 0                    # libre
point P on c at 0.25           # lié
point M = midpoint(A, P)        # dérivé

Valeurs et expressions partagées

Les expressions scalaires prennent en charge + - * / ^, les parenthèses, les comparaisons et les opérations booléennes. Les constantes incluent pi, tau et e ; les fonctions courantes incluent sin, cos, tan, sqrt, abs, min, max, ainsi que des fonctions de distance et de vecteur.

Les propriétés d'objets peuvent alimenter des expressions ultérieures, comme base.length, c.radius et poly.area. let stocke la valeur de n'importe quelle expression, tandis que fn définit une fonction pour les tracés ou surfaces :

txt
let half = base.length / 2
fn wave(x) = sin(x) * half
plot graph wave domain -6 6

Les valeurs invalides ne font pas planter l'application. Les diagnostics signalent l'emplacement source et la raison, tandis que les objets en aval deviennent des enregistrements invalides ou d'avertissement.

Commandes du plan (2D)

Construire des objets de base

ComposantFormes courantes
Pointpoint A x y, point P on path at t, point M = expr
Linéairesegment s A B, line l A B, ray r A B, vector v A B
Cerclecircle c O radius r, circle c O through A
Ellipse et arcellipse e F1 F2 through P, arc a P1 P2 P3
Polygonepolygon tri A B C
Constructions standardmidpoint M A B, parallel p A l, perpendicular p A l
Intersectionsintersections xs pathA pathB

Les résultats d'intersection sont de type list<point>. Préférez des sélecteurs stables tels que xs.nearest(A), xs.maxY ou xs.minX ; l'ordre derrière xs[0] peut changer pendant le mouvement.

Chemins, fonctions et régions

txt
plot graph sin domain -6 6
curve loop (cos(t), sin(t)) t from 0 to tau samples 160
polar rose (2*cos(3*a)) a from 0 to tau
equation unit x^2 + y^2 = 1
locus trace P driver u samples 180

region disk = c
region lens = intersection(c1, c2)

Segments, droites, demi-droites, cercles, ellipses, arcs, tracés de fonctions et lieux implémentent le comportement Path. Ils peuvent porter des points liés, s'intersecter entre eux et se composer avec subpath et pathjoin.

Transformations et repères

txt
point Q = reflect(P, axis)
rotate tri2 tri around O by 30deg
translate c2 c by (2, -1)
scale big tri around O by 2

frame f O X
point L in f 1 0.5

reflect, rotate, translate et scale sont disponibles à la fois comme fonctions d'expression et comme commandes. Les transformations de similitude préservent les types d'objets lorsque c'est possible.

Commandes solides (3D)

txt
space solid
point3 O 0 0 0
point3 T 0 0 3
sphere ball O radius 2
cylinder body O T radius 1
ComposantFormes courantes
Points et lignespoint3, segment3, line3, ray3, vector3
Plans et sphèresplane ground A B C, sphere s O radius r
Solidesbox, prism, pyramid, cylinder, cone
Repèresframe3 f O X Y, point3 P in f x y z
Courbes spatialescurve3, locus3
Surfaces de fonctionsurface waves f domain x0 x1 y0 y1
Intersectionsintersections3, plane_intersect_line, sphere_intersect_sphere
Transformationsreflect3, rotate3, translate3, scale3

En 3D, un point peut se lier à un segment, une droite, une demi-droite ou une surface de sphère. Un point de sphère utilise deux paramètres :

txt
point3 P on ball atAngles 45deg 90deg

box, prism, pyramid, cylinder et cone exposent des mesures telles que .volume, .surfaceArea et .centroid. curve3 et locus3 sont des objets d'affichage échantillonnés et ne sont actuellement pas des supports pour des points liés.

Paramètres, animation et mises en scène

txt
param r 1 range 0.5 4 step 0.1
circle c O radius r
animate r duration 2s mode pingpong

stage result duration 1.2s reveal draw
show c transition draw duration 0.8s
  • param crée un curseur dans le panneau Paramètres.
  • animate prend en charge loop, pingpong et once.
  • stage crée des étapes de présentation séquentielles ; show, hide, clear et les modes de révélation contrôlent la présence.
  • La lecture 2D, la lecture 3D et l'export GIF/MP4 partagent la même chronologie.

Commandes de présentation

txt
style base stroke #3366cc width 2 opacity 0.9
label base text "given segment"
textbox note -4 3 width 5 height 2 text "Drag A or B"
group helpers A B base
hide helpers transition fade duration 0.5s

style contrôle la couleur, le remplissage, la largeur, l'opacité et les tailles de points/flèches ; la 2D prend aussi en charge les motifs de tirets. Un texte d'étiquette entièrement entouré de $$…$$ est rendu en LaTeX. textbox est réservé à la 2D.

Macros et assertions

txt
def bisect(A, B) -> (M, b) {
midpoint M A B
perpendicular_bisector b A B
}

use bisect P Q -> M1 b1
assert dist(P, M1) == dist(M1, Q) tolerance 1e-6 note "M1 is midpoint"

def/use réutilisent une construction et isolent ses noms internes pendant l'expansion. assert vérifie une relation et produit un avertissement ; cela ne contraint ni ne résout la figure.

Interroger les signatures exactes dans l'application

Cette page organise les commandes couramment utilisées par objectif. Pour des signatures exactes et complètes de la version installée :

  • utilisez help dans l'éditeur Eidolang ;
  • demandez à l'agent intégré d'appeler list_commands ;
  • appelez le même outil depuis un client MCP/REST externe.

La liste renvoyée provient directement du registre de l'analyseur syntaxique du dialecte actif, elle reste donc alignée sur la version installée.