<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>erlurl/Emakefile</filename>
    </added>
    <added>
      <filename>erlurl/Makefile</filename>
    </added>
    <added>
      <filename>erlurl/Mnesia.nonode@nohost/DECISION_TAB.LOG</filename>
    </added>
    <added>
      <filename>erlurl/Mnesia.nonode@nohost/LATEST.LOG</filename>
    </added>
    <added>
      <filename>erlurl/Mnesia.nonode@nohost/last_token.DAT</filename>
    </added>
    <added>
      <filename>erlurl/Mnesia.nonode@nohost/schema.DAT</filename>
    </added>
    <added>
      <filename>erlurl/Mnesia.nonode@nohost/url_entry.DAT</filename>
    </added>
    <added>
      <filename>erlurl/headers.txt</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_08_22</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_08_23</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_00</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_01</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_02</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_03</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_04</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_05</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_06</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_07</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_08</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_09</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_10</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_11</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_12</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_13</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_14</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_15</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_16</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_17</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_18</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_19</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_20</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_21</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_22</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_09_23</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_10_00</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_10_01</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_10_02</filename>
    </added>
    <added>
      <filename>erlurl/priv/log/access.log.2009_02_10_03</filename>
    </added>
    <added>
      <filename>erlurl/priv/www/index.html</filename>
    </added>
    <added>
      <filename>erlurl/priv/www/jquery-1.3.1.js</filename>
    </added>
    <added>
      <filename>erlurl/src/erlurl.app</filename>
    </added>
    <added>
      <filename>erlurl/src/erlurl.erl</filename>
    </added>
    <added>
      <filename>erlurl/src/erlurl.hrl</filename>
    </added>
    <added>
      <filename>erlurl/src/erlurl_app.erl</filename>
    </added>
    <added>
      <filename>erlurl/src/erlurl_deps.erl</filename>
    </added>
    <added>
      <filename>erlurl/src/erlurl_generator.erl</filename>
    </added>
    <added>
      <filename>erlurl/src/erlurl_models.hrl</filename>
    </added>
    <added>
      <filename>erlurl/src/erlurl_resource.erl</filename>
    </added>
    <added>
      <filename>erlurl/src/erlurl_root_resource.erl</filename>
    </added>
    <added>
      <filename>erlurl/src/erlurl_store.erl</filename>
    </added>
    <added>
      <filename>erlurl/src/erlurl_sup.erl</filename>
    </added>
    <added>
      <filename>erlurl/src/erlurl_util.erl</filename>
    </added>
    <added>
      <filename>erlurl/start-dev.sh</filename>
    </added>
    <added>
      <filename>erlurl/start.sh</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -5,7 +5,7 @@
 
 (defun flymake-erlang-init ()
   (let* ((temp-file (flymake-init-create-temp-buffer-copy
-		     'flymake-create-temp-inplace))
+		     'flymake-create-temp-with-folder-structure))
 	 (local-file (file-relative-name
 		      temp-file
 		      (file-name-directory buffer-file-name))))</diff>
      <filename>emacs/flymake/flymake_config.el</filename>
    </modified>
    <modified>
      <diff>@@ -2,10 +2,14 @@ ERL=erl
 ERLC=erlc
 ERLC_OPT=+debug_info -W -o ebin
 
-all: src_src
+all: tools src_src
+
+clean_gen:
+	rm -f src/herml_scan.erl
+	rm -f src/herml_parser.erl
 
 tests: src_src src_tests
-	${ERL} -pa ebin -pa ebin_tests -noshell -eval 'test_suite:test(), halt().'
+	${ERL} -pa ebin -pa ebin_tests -noshell -s init stop -eval 'test_suite:test().'
 
 ebin:
 	mkdir ebin
@@ -13,12 +17,26 @@ ebin:
 ebin_tests:
 	mkdir ebin_tests
 
-src_src: ebin
+ebin_tools:
+	mkdir -p tools/ebin
+
+tools: ebin_tools
+	cd tools/src;erl -make
+	cp tools/src/leexinc.hrl tools/ebin
+
+src_src: ebin src/herml_parse.erl
 	cd src;erl -make
 
 src_tests: ebin_tests
 	cd tests;erl -make
 
-clean:
+src/herml_scan.erl: tools
+	${ERL} -pa tools/ebin -noshell -s init stop -eval 'leex:file(&quot;src/herml_scan.xrl&quot;, [{outdir, &quot;src&quot;}])'
+
+src/herml_parse.erl: src/herml_scan.erl
+	${ERL} -noshell -s init stop -eval 'yecc:file(&quot;src/herml_parse.yrl&quot;)'
+
+clean: clean_gen
 	rm -f ebin/*
-	rm -f ebin_tests/*
\ No newline at end of file
+	rm -f ebin_tests/*
+	rm -f tools/ebin/*
\ No newline at end of file</diff>
      <filename>herml/Makefile</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
 -module(herml_reader).
 
--include(&quot;tree.hrl&quot;).
+-include(&quot;herml_tree.hrl&quot;).
 
 -export([string/1, file/1]).
 
@@ -26,97 +26,80 @@ string(Template) when is_binary(Template) -&gt;
 
 parse_nodes(Contents) -&gt;
   Lines = string:tokens(binary_to_list(Contents), ?EOLS),
-  T = build_raw_tree(Lines),
-  T1 = herml_tree_consolidator:consolidate(T),
-  transform(T1).
-
-transform(Tree) -&gt;
-  transform(Tree, []).
-
-transform([H|T], Acc) when is_tuple(H) -&gt;
-  Children = transform(H#node.children),
-  H1 = herml_tags:analyze(H#node.data),
-  transform(T, [H1#herml_node{children=Children}|Acc]);
-transform([H|T], Acc) when length(H) == 0 -&gt;
-  transform(T, Acc);
-transform([], Acc) -&gt;
-  lists:reverse(Acc).
-
-build_raw_tree(Lines) -&gt;
-  build_raw_tree(Lines, 1, 0, dict:new()).
-
-build_raw_tree([H|T], LineCounter, PrevIndentLevel, State) -&gt;
+  P1 = parse(Lines),
+  P2 = fix_continuations(P1, []),
+  MaxDepth = find_max_depth(P2, 0),
+  io:format(&quot;MaxDepth: ~p~n&quot;, [MaxDepth]),
+  rollup(lists:reverse(P2), MaxDepth).
+
+rollup(Tree, -1) -&gt;
+  lists:reverse(Tree);
+rollup(Tree, Depth) -&gt;
+  rollup(parent(Tree, Depth, Depth - 1), Depth - 1).
+
+parent(Tree, ChildDepth, ParentDepth) -&gt;
+  parent(Tree, ChildDepth, ParentDepth, [], []).
+
+parent([H|T], ChildDepth, ParentDepth, Children, Accum) -&gt;
+  case H of
+    {node, ChildDepth, _, _} -&gt;
+      parent(T, ChildDepth, ParentDepth, [H|Children], Accum);
+    {node, ParentDepth, Text, _} -&gt;
+      parent(T, ChildDepth, ParentDepth, [], [{node, ParentDepth, Text, Children}|Accum]);
+    _ -&gt;
+      parent(T, ChildDepth, ParentDepth, Children, [H|Accum])
+  end;
+
+parent([], _, _, Children, []) -&gt;
+  lists:reverse(Children);
+
+parent([], _, _, _, Accum) -&gt;
+  lists:reverse(Accum).
+
+find_max_depth([{node, Level, _, _}|T], Max) -&gt;
+  case Level &gt; Max of
+    true -&gt;
+      find_max_depth(T, Level);
+    false -&gt;
+      find_max_depth(T, Max)
+  end;
+find_max_depth([], Max) -&gt;
+  Max.
+
+fix_continuations([H|T], Accum) -&gt;
+  case H of
+    {cont, L} -&gt;
+      [{node, Indent, L1, Children}|TA] = Accum,
+      fix_continuations(T, [{node, Indent, L1 ++ L, Children}|TA]);
+    _ -&gt;
+      fix_continuations(T, [H|Accum])
+  end;
+fix_continuations([], Accum) -&gt;
+  lists:reverse(Accum).
+
+parse(Lines) -&gt;
+  parse(Lines, []).
+
+parse([H|T], Accum) -&gt;
   case length(string:strip(H)) of
     0 -&gt;
-      build_raw_tree(T, LineCounter + 1, PrevIndentLevel, State);
+      parse(T, Accum);
     _ -&gt;
-      IndentLevel = find_indent_level(H, PrevIndentLevel),
-      NewState = case dict:find(IndentLevel, State) of
-		   {ok, Nodes} -&gt;
-		     dict:store(IndentLevel, [#node{data=H, line=LineCounter, parent=find_latest_parent(IndentLevel - 1, State)}|Nodes], State);
-		   error -&gt;
-		     dict:store(IndentLevel, [#node{data=H, line=LineCounter, parent=find_latest_parent(IndentLevel - 1, State)}], State)
-		 end,
-      build_raw_tree(T, LineCounter + 1, IndentLevel, NewState)
+      parse(T, [classify(H)|Accum])
   end;
-build_raw_tree([], _, _, State) -&gt;
-  T = dict:fold(fun(Key, Value, Acc) -&gt;
-		    [{Key, lists:reverse(Value)}|Acc] end,
-		[], State),
-  reparent(lists:reverse(lists:keysort(1, T))).
-
-reparent(Nodes) when length(Nodes) == 1 -&gt;
-  [{_, NodeList}] = Nodes,
-  NodeList;
-reparent(Nodes) -&gt;
-  [{_, Current}|T] = Nodes,
-  [{PI, Parents}|PT] = T,
-  reparent([{PI, reparent_nodes(Current, Parents)}|PT]).
-
-reparent_nodes([H|T], Parents) -&gt;
-  reparent_nodes(T, reparent_node(H, Parents));
-reparent_nodes([], Parents) -&gt;
-  lists:reverse(Parents).
-
-reparent_node(Node, Parents) -&gt;
-  lists:foldl(fun(Parent, Acc) -&gt;
-		  case Parent#node.line == Node#node.parent of
-		    true -&gt;
-		      [Parent#node{children=lists:append(Parent#node.children, [Node])}|Acc];
-		    false -&gt;
-		      [Parent|Acc]
-		  end end, [], Parents).
-
-find_indent_level(Line, PrevIndentLevel) -&gt;
-  Count = string:span(Line, &quot; &quot;),
-  RawIndentLevel = case Count rem 2 == 0 of
-                     true -&gt;
-                       Count div 2;
-                     false -&gt;
-                       throw({bad_indent, Line})
-                   end,
-  if
-    RawIndentLevel == PrevIndentLevel -&gt;
-      PrevIndentLevel;
-    RawIndentLevel &gt; PrevIndentLevel -&gt;
-      PrevIndentLevel + 1;
-    RawIndentLevel &lt; PrevIndentLevel -&gt;
-      RawIndentLevel
-  end.
+parse([], Accum) -&gt;
+  lists:reverse(Accum).
 
-find_latest_parent(PreviousIndent, _State) when PreviousIndent &lt; 0 -&gt;
-  0;
-
-find_latest_parent(PreviousIndent, State) -&gt;
-  case dict:find(PreviousIndent, State) of
-    {ok, Parents} -&gt;
-      lists:foldr(fun(Parent, LineNo) -&gt;
-                      case Parent#node.line &gt; LineNo of
-                        true -&gt;
-                          Parent#node.line;
-                        false -&gt;
-                          LineNo
-                      end end, 0, Parents);
-    error -&gt;
-      find_latest_parent(PreviousIndent - 1, State)
+classify(Line) -&gt;
+  Indent = count_indent(Line, 0),
+  case Indent rem 2 of
+    0 -&gt;
+      {node, Indent div 2, Line, []};
+    _ -&gt;
+      {cont, Line}
   end.
+
+count_indent([$\s|T], Count) -&gt;
+  count_indent(T, Count + 1);
+count_indent([_|_], Count) -&gt;
+  Count.</diff>
      <filename>herml/src/herml_reader.erl</filename>
    </modified>
    <modified>
      <diff>@@ -2,6 +2,7 @@ This is a line.
   This is another line.
   This line is on the same line as the other one.
     This is the innermost one.
+     This is a continuation.
 
 This is the second group.
   This is another line in the second group.
@@ -11,5 +12,5 @@ This is the second group.
 Third group one.
 Third group two.
 
-  Third group three.
-    Third group four.
\ No newline at end of file
+Third group three.
+  Third group four.
\ No newline at end of file</diff>
      <filename>herml/tests/examples/simple_nesting.herml</filename>
    </modified>
    <modified>
      <diff>@@ -5,4 +5,6 @@
 -include_lib(&quot;eunit/include/eunit.hrl&quot;).
 
 all_test_() -&gt;
-  [{module, test_herml_reader}].
+  [{module, test_herml_scan},
+   {module, test_herml_parse},
+   {module, test_herml_reader}].</diff>
      <filename>herml/tests/test_suite.erl</filename>
    </modified>
    <modified>
      <diff>@@ -25,6 +25,16 @@ process_post(ReqProps, Context) -&gt;
     URL -&gt;
       Token = tokenizer_store:associate_token(URL),
       write(Req, Token),
+      case webmachine_util:choose_media_type(?OUTPUT_MIMETYPES, Req:get_header_value(&quot;Accept&quot;)) of
+        none -&gt;
+          {true, Context};
+        &quot;text/plain&quot; -&gt;
+          to_text(Req, Token);
+        &quot;text/xml&quot; -&gt;
+          to_xml(Req, Token);
+        &quot;application/json&quot; -&gt;
+          to_json(Req, Token)
+      end,
       {true, Context}
   end.
 </diff>
      <filename>tokenizer/src/tokenizer_token_resource.erl</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>35f69bc8fcaa151d1663af4ac11afa9301f488f5</id>
    </parent>
  </parents>
  <author>
    <name>kevsmith</name>
    <email>kevin@hypotheticalabs.com</email>
  </author>
  <url>http://github.com/kevsmith/hypotheticalabs/commit/049517b69d7968e07b57afce62720e88e7c13fe1</url>
  <id>049517b69d7968e07b57afce62720e88e7c13fe1</id>
  <committed-date>2009-02-09T19:55:49-08:00</committed-date>
  <authored-date>2009-02-09T19:55:49-08:00</authored-date>
  <message>* First commit</message>
  <tree>bfdd09c4f1984aead64a01f5390d8bc3cdc5a3eb</tree>
  <committer>
    <name>kevsmith</name>
    <email>kevin@hypotheticalabs.com</email>
  </committer>
</commit>
