Welcome to the CHICKEN Scheme pasting service

bootstrap-sxml: useful? added by arthurmaciel on Tue Apr 14 02:31:22 2015

(use sxml-transforms sxpath-lolevel doctype)

(define (with-class class element)
  (let* ((element (pre-post-order* element bootstrap-rules))
	 (old-class (or (sxml:attr element 'class) "")))
    (sxml:set-attr element `(class ,(string-join (list old-class class))))))

(define bootstrap-rules
  `((bs-page . ,(lambda (tag body)
		  (let ((title (car body)))
		    `(html 
		      (head 
		       (meta (@ (charset "utf-8")))
		       (meta (@ (http-equiv "X-UA-Compatible") (content "IE=edge")))
		       (meta (@ (name "viewport") (content "width=device-width, initial-scale=1")))
		       (link (@ (rel "stylesheet") (href "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css")))
		       (style 
			   "body {
                           padding-top: 50px;
                         }
                         .starter-template {
                           padding: 40px 15px;
                           text-align: center;
                         }
                         ")
		       (title ,title))
		      (body ,@(cdr body)
			    (script (@ (src "https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js")))
			    (script (@ (src "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"))))))))
    (caret . ,(lambda (tag body)
		'(span (@ (class "caret")))))
    (container . ,(lambda (tag body)
		    `(div (@ (class "container"))
			  ,body)))
    (container-fluid . ,(lambda (tag body)
			  `(div (@ (class "container-fluid"))
				,body)))
    (row . ,(lambda (tag body)
	      `(div (@ (class "row"))
		    ,body)))
    (col . ,(lambda (tag body)
	      (let ((sizes (car body))
		    (body (cdr body)))
		`(div (@ (class ,(string-intersperse 
				  (map (lambda (size) 
					 (string-append "col-" (->string (car size)) "-" (->string (cadr size))))
				       sizes))))
		      ,body))))
    (navbar . ,(lambda (tag body)
		 `(nav (@ (class "navbar navbar-default"))
		       ,body)))
    (navbar-inverse . ,(lambda (tag body)
			 `(nav (@ (class "navbar navbar-inverse"))
			       ,body)))
    (navbar-fixed-top . ,(lambda (tag body)
			   `(nav (@ (class "navbar navbar-default navbar-fixed-top"))
				 (div (@ (class "container")) ,body))))
    (navbar-inverse-fixed-top . ,(lambda (tag body)
				   `(nav (@ (class "navbar navbar-inverse navbar-fixed-top"))
					 (div (@ (class "container")) ,body))))
    (navbar-fixed-bottom . ,(lambda (tag body)
			      `(nav (@ (class "navbar navbar-default navbar-fixed-bottom"))
				    (div (@ (class "container")) ,body))))
    (navbar-inverse-fixed-bottom . ,(lambda (tag body)
				      `(nav (@ (class "navbar navbar-inverse"))
					    (div (@ (class "container")) ,body))))    
    (navbar-header . ,(lambda (tag body)
			`(div (@ (class "navbar-header"))
			      ,body)))
    (navbar-toggle-btn . ,(lambda (tag body)
			    (let ((target-id (car body)))
			      `(button (@ (type "button")
					  (class "navbar-toggle collapsed")
					  (data-togle "collapse")
					  (data-target ,target-id))
				       (span (@ (class "sr-only")) "Toggle navigation")
				       (span (@ (class "icon-bar")))
				       (span (@ (class "icon-bar")))
				       (span (@ (class "icon-bar")))
				       ,@(cdr body)))))
    (navbar-brand . ,(lambda (tag body)
    		       (let ((path (car body)))
			 `(a (@ (class "navbar-brand")
				(href ,path))
			     ,@(cdr body)))))
    (navbar-collapse . ,(lambda (tag body)
			  (let ((id (car body)))
			    `(div (@ (id ,id)
				     (class "collapse navbar-collapse")) 
				  ,@(cdr body)))))
    (navbar-nav . ,(lambda (tag body)
		     `(ul (@ (class "nav navbar-nav"))
			  ,(map (lambda (item)
				  `(li ,item))
				body))))
    (nav-tabs . ,(lambda (tag body)
		   `(ul (@ (class "nav nav-tabs"))
			,@(map (lambda (item)
				 `(li (@ (role "presentation"))
				      ,item))
			       body))))
    (nav-pills . ,(lambda (tag body)
		    `(ul (@ (class "nav nav-pills"))
			 ,@(map (lambda (item)
				  `(li (@ (role "presentation"))
				       ,item))
				body))))
    (nav-stacked . ,(lambda (tag body)
		      (with-class "nav-stacked" `(nav-pills ,body))))
    (alert-success . ,(lambda (tag body)
			`(div (@ (class "alert alert-success"))
			      ,body)))
    (alert-info . ,(lambda (tag body)
		     `(div (@ (class "alert alert-info"))
			   ,body)))
    (alert-warning . ,(lambda (tag body)
			`(div (@ (class "alert alert-warning"))
			      ,body)))
    (alert-danger . ,(lambda (tag body)
		       `(div (@ (class "alert alert-danger"))
			     ,body)))
    (p-lead . ,(lambda (tag body)
		 `(p (@ (class "lead"))
		     ,body)))
    (list . ,(lambda (tag body)
	       (cons 'ol (map (lambda (x) (list 'li x)) body))))
    ,@alist-conv-rules*))

(define test-code
  `(bs-page "Starter Template for Bootstrap"
	    (navbar-inverse-fixed-top
	     (navbar-header
	      ((navbar-toggle-btn "#navbar")
	       (navbar-brand "#" "Project name")))
	     (navbar-collapse "navbar"
			      (navbar-nav
			       (a (@ (href "#")) "Home")
			       (a (@ (href "#about")) "About")
			       (a (@ (href "#contact")) "Contact"))))
	    (container 
	     (div (@ (class "starter-template"))
		  ((h1 "Bootstrap starter template")
		   (p (@ (class "lead")) 
		      "Use this document as a way to quickly start any new project"
		      (br)
		      "All you get is this text and a mostly barebones HTML document"))))))

(define result
  (pre-post-order* test-code
		   bootstrap-rules))

(define (res)
  (display result)
  (newline))

(SXML->HTML result)
(newline)

;;;; Another example
;; (define test-code
;;   `(bs-page 
;;     (container 
;;      (row 
;;       (col ((sm 2) (md 1) (lg 4))
;; 	   (alert-success "I'm on first position"))
;;       (col ((sm 4) (md 8) (lg 4))
;; 	   (alert-info "I'm on second position"))
;;       (col ((sm 6) (md 3) (lg 4))
;; 	   (alert-danger "I'm on third position")))
;;      (row
;;       (nav-stacked
;;        (a (@ (href "#")) "Home")
;;        (a (@ (href "#")) "Profile")
;;        (a (@ (href "#")) "About"))))))

Your annotation:

Enter a new annotation:

Your nick:
The title of your paste:
Your paste (mandatory) :
What's the result of `(let ((spammers 'dumb)) spammers)'?
Visually impaired? Let me spell it for you (wav file) download WAV