Improve parser - generate prims from globals
[clnl] / src / main / model.lisp
index 83179a0bb4f2e6abaae54724c1287af73e5eeaa9..33f90aa588327b040c5b87a02b1f85efb21223b5 100644 (file)
@@ -54,7 +54,15 @@ DESCRIPTION:
           (read-sections (append section (list line))))))))
      (read-sections))))
   (make-model
-   :code (nth 0 sections)
+   :code (clnl-code-parser:parse
+          (clnl-lexer:lex (format nil "~{~A~^~%~}" (nth 0 sections)))
+          (remove nil
+           (mapcar
+            (lambda (widget)
+             (typecase widget
+              (slider (intern (string-upcase (slider-varname widget)) (find-package :keyword)))
+              (switch (intern (string-upcase (switch-varname widget)) (find-package :keyword)))))
+            (parse-interface (nth 1 sections)))))
    :interface (parse-interface (nth 1 sections))
    :info (nth 2 sections)
    :turtle-shapes (nth 3 sections)
@@ -222,6 +230,7 @@ DESCRIPTION:
    :ymin (view-min-pycor view)
    :ymax (view-max-pycor view))))
 
+; For now, we keep the code hidden in this package
 (defun globals (model)
  "GLOBALS MODEL => GLOBALS
 
@@ -242,10 +251,12 @@ DESCRIPTION:
    (list
     (intern (string-upcase (car pair)) clnl:*model-package*)
     (cadr pair)))
-  (remove nil
-   (mapcar
-    (lambda (widget)
-     (typecase widget
-      (slider (list (slider-varname widget) (slider-default widget)))
-      (switch (list (switch-varname widget) (switch-on widget)))))
-    (model-interface model)))))
+  (append
+   (clnl-code-parser:globals (model-code model))
+   (remove nil
+    (mapcar
+     (lambda (widget)
+      (typecase widget
+       (slider (list (slider-varname widget) (slider-default widget)))
+       (switch (list (switch-varname widget) (switch-on widget)))))
+     (model-interface model))))))