;;; -*- mode: Lisp; Syntax: Common-Lisp; -*- ;;; ;;; Copyright (c) 2009 by the authors. ;;; ;;; See LICENCE for details. (in-package :hu.dwim.projectional-editor) ;;;;;; ;;; Projection (def (projection e) nesting () ((elements :type list))) ;;;;;; ;;; Construction (def (function e) make-projection/nesting (elements) (make-projection 'nesting :elements elements)) ;;;;;; ;;; Construction (def (macro e) nesting (&body forms) `(make-projection/nesting (list ,@forms))) ;;;;;; ;;; Printer (def printer nesting (projection recursion input input-reference output-reference) (bind ((elements (elements-of projection))) (if elements (bind ((first-element (first elements))) (funcall (printer-of first-element) first-element (make-projection/nesting (rest elements)) input input-reference output-reference)) (recurse-printer recursion input input-reference output-reference)))) ;;;;;; ;;; Reader (def reader nesting (projection recursion input input-reference output-reference) (bind ((elements (elements-of projection))) (if elements (bind ((first-element (first elements))) (funcall (reader-of first-element) first-element (make-projection/nesting (rest elements)) input input-reference output-reference)) (recurse-reader recursion input input-reference output-reference))))