Gavin Kistner wrote:
> In OWLScratch, the following represents a nested list:
> 
>   * List item 1
>   * List item 2
>     * List item 2.1
>     * List item 2.2
>   * List item 3
>     * List item 3.1
>       * List item 3.1.1
> 
> Right now, that tokenizes into one node per line:
> <bullet level="1">List item 1</bullet>
> <bullet level="1">List item 2</bullet>
> <bullet level="2">List item 2.1</bullet>
> <bullet level="2">List item 2.2</bullet>
> <bullet level="1">List item 3</bullet>
> <bullet level="2">List item 3.1</bullet>
> <bullet level="3">List item 3.1.1</bullet>
> 
> The challenge is that I need to be able to spin through the list and  
> (should be possible in one pass) properly nest those as the HTML  requires:

How about something like:

     bullets = [[1, "List Item 1."],
               [1, "List Item 2."],
               [2, "List Item 2.1"],
               [2, "List Item 2.2"],
               [1, "List Item 3."],
               [2, "List Item 3.1"],
               [3, "List Item 3.1.1"]
     ]

     def indent(level, text)
       puts "  "*level + text
     end

     current_level = 0
     bullets.each do |level, text|
       indent((current_level+=1)-1, "<ul>" ) while level > current_level
       indent( current_level-=1,    "</ul>") while level < current_level
       indent( current_level,       "<li>#{text}</li>")
     end
     indent(current_level-=1, "</ul>") while 0 < current_level

Now, I'm sure you don't want the output in text, so perhaps you like to 
replace indent(level, "text") with insert("<node>"), but the structure 
might not be that different.

     - Aleksi