<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -15,13 +15,13 @@ DEPENDENCIES
 
 This version of the sample code has been tested with:
 
-Clojure SVN revision 1279
-svn co -r 1279 http://clojure.googlecode.com/svn/trunk/ clojure    
+Clojure SVN revision 1299
+svn co -r 1299 http://clojure.googlecode.com/svn/trunk/ clojure    
 
-Clojure-Contrib SVN revision 459:
-svn co -r 459 http://clojure-contrib.googlecode.com/svn/trunk/ clojure-contrib     
+Clojure-Contrib SVN revision 505:
+svn co -r 505 http://clojure-contrib.googlecode.com/svn/trunk/ clojure-contrib     
 
-Compojure GIT commit 0c8eff9
+Compojure GIT commit 0fa49377
 
 -------------------------------------------------------------------------------
 You can run the completed Compojure example with</diff>
      <filename>README</filename>
    </modified>
    <modified>
      <diff>@@ -54,12 +54,15 @@
      :else (fib [0 1] 2)))) 
 ; END: fibo-series
 
-; START: lazy-cons-fibo
-(defn lazy-cons-fibo []
-  ((fn fib [a b] ; &lt;label id=&quot;code.lazy-cons.fib&quot;/&gt;
-     (lazy-cons a (fib b (+ a b)))) ; &lt;label id=&quot;code.lazy-cons.recur&quot;/&gt;
-   0 1)) ; &lt;label id=&quot;code.lazy-cons.basis&quot;/&gt;
-; END: lazy-cons-fibo
+; START: lazy-seq-fibo
+(defn lazy-seq-fibo 
+  ([] 
+     (concat [0 1] (lazy-seq-fibo 0 1)))
+  ([a b]
+     (let [n (+ a b)]
+       (lazy-seq
+	(cons n (lazy-seq-fibo b n))))))
+; END: lazy-seq-fibo
 
 ; START: head-fibo
 ; holds the head (avoid!)
@@ -80,9 +83,11 @@
 
 ; START: by-pairs
 (defn by-pairs [coll]
-  (let [pair (take 2 coll)] ; &lt;label id=&quot;code.by-pairs.take&quot;/&gt;
-    (when (= 2 (count pair)) ; &lt;label id=&quot;code.by-pairs.count&quot;/&gt;
-      (lazy-cons pair (by-pairs (rest coll)))))) ; &lt;label id=&quot;code.by-pairs.lazy&quot;/&gt;
+  (let [take-pair (fn take-pair [c]
+		    (when (next c) (take 2 c)))]
+    (lazy-seq
+     (when-let [pair (seq (take-pair coll))]
+	 (cons pair (by-pairs (rest coll)))))))
 ; END: by-pairs
 
 ; START: count-heads-by-pairs</diff>
      <filename>examples/functional.clj</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,10 @@
 (ns examples.lazy-index-of-any)
 
-(defn logging-seq [s]
-  (if s
-    (do (println &quot;Iterating over&quot; (first s))
-	(lazy-cons (first s) (logging-seq (rest s))))))
+(defn logging-seq [coll]
+  (lazy-seq
+   (when-let [s (seq coll)]
+       (do (println &quot;Iterating over&quot; (first s))
+	   (cons (first s) (logging-seq (rest s)))))))
 
 (defn indexed [s] (map vector (iterate inc 0) s (logging-seq s)))
 (defn index-filter [pred coll]</diff>
      <filename>examples/lazy_index_of_any.clj</filename>
    </modified>
    <modified>
      <diff>@@ -6,10 +6,10 @@
 (defmulti replace-symbol coll-or-scalar) ; &lt;label id=&quot;code.replace-symbol.multi&quot;/&gt;
 
 (defmethod replace-symbol :collection [coll oldsym newsym]
-  (if (empty? coll)
-    coll
-    (lazy-cons (replace-symbol (first coll) oldsym newsym) ; &lt;label id=&quot;code.replace-symbol.lazy-cons&quot;/&gt;
-	       (replace-symbol (rest coll) oldsym newsym))))
+  (lazy-seq
+   (when-let [s (seq coll)]
+    (cons (replace-symbol (first coll) oldsym newsym) ; &lt;label id=&quot;code.replace-symbol.lazy-cons&quot;/&gt;
+	  (replace-symbol (rest coll) oldsym newsym)))))
 
 (defmethod replace-symbol :scalar [obj oldsym newsym] 
   (if (= obj oldsym) newsym obj))</diff>
      <filename>examples/replace_symbol.clj</filename>
    </modified>
    <modified>
      <diff>@@ -19,8 +19,8 @@
 (deftest test-fibo-series
   (is (= ten-fibs (fibo-series 10))))
 
-(deftest test-lazy-cons-fibo
-  (is (= ten-fibs (take 10 (lazy-cons-fibo)))))
+(deftest test-lazy-seq-fibo
+  (is (= ten-fibs (take 10 (lazy-seq-fibo)))))
 
 (deftest test-head-fibo 
   (is (= ten-fibs (take 10 head-fibo))))</diff>
      <filename>examples/test/functional.clj</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>lib/clojure-contrib.jar</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>lib/clojure.jar</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>lib/compojure.jar</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
+// (?=[\[\]\{\}\(\) \^\,\#\']|$) is to avoid \b matching '-' boundaries
 CodeHighlighter.addStyle(&quot;clojure&quot;,{
 	&quot;comment&quot;: {
 		exp: /;[^\n]+/
@@ -12,22 +13,25 @@ CodeHighlighter.addStyle(&quot;clojure&quot;,{
 		exp: /\{|\}/
 	},
 	&quot;keyword&quot;: {
-	  exp: /(:[\w|-]+)/
+	  exp: /(:{1,2}[\w|-]+)/
+	},
+	&quot;specialvar&quot;: {
+	  exp: /\b(\*print-length\*)(?=[\[\]\{\}\(\) \^\,\#\']|$)/
 	},
 	&quot;specialops&quot;: {
-		exp: /\b(new|quote|\&amp;|var|set\!|monitor-enter|recur|\.|do|fn\*|throw|monitor-exit|finally|let\*|loop\*|try|catch|if|def)\b/
+		exp: /\b(new|quote|\&amp;|var|set\!|monitor-enter|recur|\.|do|fn\*|throw|monitor-exit|finally|let\*|loop\*|try|catch|if|def)(?=[\[\]\{\}\(\) \^\,\#\']|$)/
 	},
 	&quot;function&quot;: {
-		exp: /\b(def|sorted-map|read-line|re-pattern|keyword\?|val|!|max-key|list\*|ns-aliases|\=\=|longs|special-form-anchor|instance\?|syntax-symbol-anchor|format|sequential\?|fn\?|empty|dorun|gensym|not\=|unchecked-multiply|bit-or|aset-byte|hash-set|add-watch|unchecked-dec|some|nil\?|string\?|second|keys|long-array|bit-set|sorted\?|ns-unalias|ns-publics|all-ns|long|add-classpath|false\?|await1|true\?|short|ns-unmap|repeat|zipmap|distinct|get-in|bit-xor|complement|get-validator|derive|aset-float|scan|commute|rem|set-validator|odd\?|symbol\?|proxy-call-with-super|ns-interns|re-matches|split-with|find-doc|rfirst|gen-and-load-class|import|symbol|vals|print-doc|select-keys|re-matcher|rand|deref|unchecked-inc|read|make-hierarchy|\+|number\?|descendants|into-array|last|unchecked-negate|integer\?|alter|prn|with-meta|floats|\*|fnseq|butlast|-|reversible\?|rseq|send-off|seq\?|identical\?|print|bit-flip|zero\?|bit-and|re-groups|newline|cache-seq|replicate|distinct\?|remove-ns|ratio\?|xml-seq|vec|concat|update-in|vector|conj|bases|\/|unchecked-add|ref-set|assoc|seque|aset-char|boolean|read-string|neg\?|float-array|doubles|isa\?|remove-watch|print-str|gen-and-save-class|rsubseq|vector\?|split-at|ns-refers|create-struct|int-array|float|rrest|map|double-array|accessor|class\?|rand-int|aset-short|prn-str|iterate|slurp|mapcat|assoc-in|special-symbol\?|ref|find-var|inc|unchecked-subtract|ns-name|re-find|bit-not|construct-proxy|destructure|seq|to-array-2d|sorted-map-by|filter|var\?|key|class|re-seq|empty\?|test|create-ns|name|list\?|nthrest|aset|doall|macroexpand-1|not-any\?|resultset-seq|into|ffirst|bit-clear|load-reader|hash|print-ctor|associative\?|float\?|drop-last|replace|decimal\?|parents|map\?|quot|file-seq|send|reverse|count|get-proxy-class|set|comp|nth|byte|constantly|load|namespace|pr-str|&lt;|rationalize|sort-by|cycle|peek|reduce|interleave|cons|macroexpand|var-set|str|aset-boolean|ns-imports|first|bean|\=|var-get|range|tree-seq|aset-double|enumeration-seq|ensure|find-ns|not-every\?|struct-map|&gt;|max|proxy-mappings|identity|ints|min-key|subs|agent-errors|clear-agent-errors|printf|ns-resolve|method-sig|&gt;\=|shutdown-agents|even\?|require|bit-shift-left|touch|compare|cast|supers|load-string|get|&lt;\=|await|resolve|loaded-libs|force|partial|pmap|comparator|pos\?|char|take-while|refer|underive|in-ns|iterator-seq|ancestors|partition|contains\?|update-proxy|interpose|aset-int|load-file|apply|subvec|rest|keyword|ns-map|int|bigdec|aset-long|struct|array-map|bigint|dec|println|aget|pr|drop|gen-class|eval|aclone|pop|bit-shift-right|delay\?|num|disj|rational\?|merge-with|take-nth|double|line-seq|take|set\?|make-array|alias|use|alength|to-array|hash-map|bit-and-not|repeatedly|frest|remove|find|coll\?|drop-while|not-empty|print-special-doc|println-str|list|every\?|flush|sort|dissoc|not|agent|sorted-set|alter-var-root|merge|subseq|min|print-simple|bit-test|await-for|meta|unchecked-divide|rename-keys|union|select|project|join|intersection|map-invert|difference|rename|index|startparse-sax|parse|emit-element|emit|lefts|down|insert-left|up|next|path|children|vector-zip|append-child|zipper|branch\?|end\?|edit|replace|insert-right|root|insert-child|seq-zip|xml-zip|make-node|rights|node|right|left|remove|pany|par|pdistinct|pfilter-dupes|pfilter-nils|pmax|pmin|preduce|psort|psummary|pvec)\b/
+		exp: /\b(def|sorted-map|read-line|re-pattern|keyword\?|val|!|max-key|list\*|ns-aliases|\=\=|longs|special-form-anchor|instance\?|syntax-symbol-anchor|format|sequential\?|fn\?|empty|dorun|gensym|not\=|unchecked-multiply|bit-or|aset-byte|hash-set|add-watch|unchecked-dec|some|nil\?|string\?|second|keys|long-array|bit-set|sorted\?|ns-unalias|ns-publics|all-ns|long|add-classpath|false\?|await1|true\?|short|ns-unmap|repeat|zipmap|distinct|get-in|bit-xor|complement|get-validator|derive|aset-float|scan|commute|rem|set-validator|odd\?|symbol\?|proxy-call-with-super|ns-interns|re-matches|split-with|find-doc|rfirst|gen-and-load-class|import|symbol|vals|print-doc|select-keys|re-matcher|rand|deref|unchecked-inc|read|make-hierarchy|\+|number\?|descendants|into-array|last|unchecked-negate|integer\?|alter|prn|with-meta|floats|fnseq|butlast|-|reversible\?|rseq|send-off|seq\?|identical\?|print|bit-flip|zero\?|bit-and|re-groups|newline|cache-seq|replicate|distinct\?|remove-ns|ratio\?|xml-seq|vec|concat|update-in|vector|conj|bases|\/|unchecked-add|ref-set|assoc|seque|aset-char|boolean|read-string|neg\?|float-array|doubles|isa\?|remove-watch|print-str|gen-and-save-class|rsubseq|vector\?|split-at|ns-refers|create-struct|int-array|float|rrest|map|double-array|accessor|class\?|rand-int|aset-short|prn-str|iterate|slurp|mapcat|assoc-in|special-symbol\?|ref|find-var|inc|unchecked-subtract|ns-name|re-find|bit-not|construct-proxy|destructure|seq|to-array-2d|sorted-map-by|filter|var\?|key|class|re-seq|empty\?|test|create-ns|name|list\?|nthrest|aset|doall|macroexpand-1|not-any\?|resultset-seq|into|ffirst|bit-clear|load-reader|hash|print-ctor|associative\?|float\?|drop-last|replace|decimal\?|parents|map\?|quot|file-seq|send|reverse|count|get-proxy-class|set|comp|nth|byte|constantly|load|namespace|pr-str|&lt;|rationalize|sort-by|cycle|peek|reduce|interleave|cons|macroexpand|var-set|str|aset-boolean|ns-imports|first|bean|\=|var-get|range|tree-seq|aset-double|enumeration-seq|ensure|find-ns|not-every\?|struct-map|&gt;|max|proxy-mappings|identity|ints|min-key|subs|agent-errors|clear-agent-errors|printf|ns-resolve|method-sig|&gt;\=|shutdown-agents|even\?|require|bit-shift-left|touch|compare|cast|supers|load-string|get|&lt;\=|await|resolve|loaded-libs|force|partial|pmap|comparator|pos\?|char|take-while|refer|underive|in-ns|iterator-seq|ancestors|partition|contains\?|update-proxy|interpose|aset-int|load-file|apply|subvec|rest|keyword|ns-map|int|bigdec|aset-long|struct|array-map|bigint|dec|println|aget|pr|drop|gen-class|eval|aclone|pop|bit-shift-right|delay\?|num|disj|rational\?|merge-with|take-nth|double|line-seq|take|set\?|make-array|alias|use|alength|to-array|hash-map|bit-and-not|repeatedly|frest|remove|find|coll\?|drop-while|not-empty|print-special-doc|println-str|list|every\?|flush|sort|dissoc|not|agent|sorted-set|alter-var-root|merge|subseq|min|print-simple|bit-test|await-for|meta|unchecked-divide|rename-keys|union|select|project|join|intersection|map-invert|difference|rename|index|startparse-sax|parse|emit-element|emit|lefts|down|insert-left|up|next|path|children|vector-zip|append-child|zipper|branch\?|end\?|edit|replace|insert-right|root|insert-child|seq-zip|xml-zip|make-node|rights|node|right|left|remove|pany|par|pdistinct|pfilter-dupes|pfilter-nils|pmax|pmin|preduce|psort|psummary|pvec)(?=[\[\]\{\}\(\) \^\,\#\']|$)/
 	},
 	&quot;macro&quot;: {
-		exp: /\b(time|remove-method|doseq|for|cond|fn|dosync|with-open|sync|let|dotimes|defmethod|lazy-cat|defstruct|with-in-str|loop|with-out-str|when-not|refer-clojure|\.\.|doto|proxy-super|assert|memfn|when-first|definline|defn-|comment|ns|with-precision|or|defn|with-local-vars|when-let|amap|-&gt;|defmacro|prefer-method|if-let|and|lazy-cons|declare|locking|delay|defmulti|proxy|defonce|when|areduce|binding|doc)\b/
+		exp: /\b(time|remove-method|doseq|for|cond|fn|dosync|with-open|sync|let|dotimes|defmethod|lazy-cat|defstruct|with-in-str|loop|with-out-str|when-not|refer-clojure|\.\.|doto|proxy-super|assert|memfn|when-first|definline|defn-|comment|ns|with-precision|or|defn|with-local-vars|when-let|amap|-&gt;|defmacro|prefer-method|if-let|and|lazy-seq|declare|locking|delay|defmulti|proxy|defonce|when|areduce|binding|doc)(?=[\[\]\{\}\(\) \^\,\#\']|$)/
 	},
 	&quot;string&quot;: {
-		exp: /&quot;[^&quot;]*&quot;/
+		exp: /&quot;(\\&quot;|[^&quot;])*&quot;/
 	},
 	/* &quot;preencoded&quot; is just a hack to stop the comment rule from inseting a semicolon after -&gt; */
 	&quot;preencoded&quot;: {
 		exp: /&amp;gt;|&amp;lt;|&amp;amp;/
 	}
-});
\ No newline at end of file
+});</diff>
      <filename>public/javascripts/clojure.js</filename>
    </modified>
    <modified>
      <diff>@@ -5,10 +5,10 @@ public class StringUtils {
       return true; 
     }  
     for (int i = 0; i &lt; strLen; i++) { 
-	if ((Character.isWhitespace(str.charAt(i)) == false)) { 
-	    return false; 
-	}
+	    if ((Character.isWhitespace(str.charAt(i)) == false)) { 
+	      return false; 
+	    }
     }
     return true;
   }
-}
+}
\ No newline at end of file</diff>
      <filename>snippets/isBlank.java</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>64283e4c58b0095e383dc4af101bc0a889bd59d5</id>
    </parent>
  </parents>
  <author>
    <name>Stuart Halloway</name>
    <email>stu@thinkrelevance.com</email>
  </author>
  <url>http://github.com/stuarthalloway/programming-clojure/commit/95d9943dfb54112912714a2d741a34749bca3be2</url>
  <id>95d9943dfb54112912714a2d741a34749bca3be2</id>
  <committed-date>2009-02-23T07:48:50-08:00</committed-date>
  <authored-date>2009-02-23T07:48:50-08:00</authored-date>
  <message>updated to work with the new laziness
improvements to syntax highlighting
rebuilt dependencies
other minor edits</message>
  <tree>26b9ab3f471538765f23f4a497804f199f78c37e</tree>
  <committer>
    <name>Stuart Halloway</name>
    <email>stu@thinkrelevance.com</email>
  </committer>
</commit>
