;time sbcl --noinform --noprint --load lecture1.lisp --eval '(d1)' --eval '(quit)'|less ;
      
(defmacro eecummings (x)
  "http://en.wikipedia.org/wiki/E._E._Cummings"
  `(progn
    (setf cl:*print-case* :downcase)
    ,x
    (setf cl:*print-case* :upcase)))

(defun todo-p (x) (fboundp  (first x)))

(let ((in 0) (c " ") (next 2) (s t))
  
  (defun pad () (dotimes (i in) (princ c s)))
  
  (defun tag (x)
    (cond ((atom   x) (pad) (format s "~a~%" x))
	  ((todo-p x) (eval x))
	  (t          (wrap (pop x) x))))
  
  (defun tag1 (l)
    (setf in (+ in next))
    (dolist (one l) (tag one))
    (setf in (- in next)))
  
  (defun wrap (a b &optional (c a))
    (pad) (format s "<~a>~%" a)
    (tag1 b)
    (pad) (format s "~%" c))
  
  (defun    href (url txt)  (pad) (format s "~a~%" url txt))
  (defmacro tr1  (&rest l) `(wrap "tr class=one"  ',l "tr"))   
  (defmacro tr0  (&rest l) `(wrap "tr class=zero" ',l "tr"))
    
)

(defun d1 ()
  (eecummings
   (tag '(html
	  (head (title "sadas"))
	  (body
	   (p   
	    Anytime you want its trouble asdasd
	    asd dsasasdasa sad asd asd as dsadasasdas
	    (table 
	     (tr0
	      (td i love ice cream)
	      (td "dssaasd")))
	    (ul (li "dadas asdas")
		(li "dasddas asdas 121312"))
	    (href "dsda" "dass")))))))

;; (defmacro whitespacep (char)
;;   "Checks whether CHAR is whitespace."
;;   `(find ,char
;;     '(#\Space #\Tab #\Newline #\Linefeed #\Return #\Page)))

;; (defun skip-whitespace (s)
;;   (if (whitespace (peek-char nil s nil :eof))
;;       (read-char nil s nil) 
;;       (skip-whitespace s)))
     
;; (defun tagfile (fin fout)
;;   (with-open-file (*standard-output* fout 
;; 				     :direction :output
;; 				     :if-exists :supersede)
;;     (with-open-file  (sin fin :direction :input)
;;       (tagfile1 sin))))

;; (defun tagfile1 (s &optional b4 )
;;   (when b4
;;     (format s "~a~%" b4))
;;   (skip-whitespace s)
;;   (let* ((one (peek-char nil s nil :eof1))
;; 	 (two (peek-char nil s nil :eof2))
;; 	 (three (peek-char nil s nil :eof3))
;; 	 (four (peek-char nil s nil :eof4)))
;;     (cond ((and (eql one #\() (eql two #\t) (eql three #\a) (eql four #\g))
;; 	   (eval (read s))
;; 	   (princ "
")
;; 	   (tagfile1 s "))
;; 	  (
  
;;   (loop for line = (read stream nil 'end)
;;           until (eq line 'end)           
;;           do (print (list (coerce line 'integer) 
;want to make single list
                            )