35deecc383
git-svn-id: svn://svn.c3d2.de/c3d2-web/trunk@1381 31f61c52-7bfb-0310-b897-fc00f8a278f0
33 lines
777 B
Ruby
33 lines
777 B
Ruby
#!/usr/bin/env ruby
|
|
|
|
require 'rexml/document'
|
|
|
|
matrix = REXML::Document.new($stdin).root
|
|
tracks = 0
|
|
matrix.each_element('rooms/room') {
|
|
tracks += 1
|
|
}
|
|
trackspans = [0] * tracks
|
|
matrix.each_element('table/timeslot') { |timeslot|
|
|
events = []
|
|
timeslot.each_element { |event|
|
|
timeslot.delete(event)
|
|
events << event
|
|
}
|
|
$stderr.puts trackspans.inspect
|
|
tracks.times { |i|
|
|
if trackspans[i] > 1
|
|
timeslot.add(REXML::Element.new('span'))
|
|
trackspans[i] -= 1
|
|
else
|
|
event = events.shift || REXML::Element.new('empty')
|
|
timeslot.add(event)
|
|
if event.name == 'event'
|
|
trackspans[i] = (event.attributes['slots'] || 1).to_i
|
|
end
|
|
end
|
|
}
|
|
$stderr.puts "Stale elements: #{events.inspect}" if events.size > 0
|
|
}
|
|
puts matrix.to_s
|