1 fname = ARGV[0]
     
2 
     3 # Tangle
     
4 myseg = :start
     
5 segments = {}
     
6 segments[myseg] = []
     
7 File.open("#{fname}.md").each do |line|
     
8   if(line.start_with?('## '))
     
9     myseg = line[3..].chomp
    
10     puts "Found segment '#{myseg}'"
    
11     segments[myseg] = []
    
12   end
    
13 
    14   if(line.start_with?(' '))
    
15     segments[myseg].push(line)
    
16   end
    
17 end
    
18 def put_lines(file, segments, sname)
    
19   puts "Fetching segment '#{sname}'"
    
20   segments[sname].each do |line|
    
21     if(m = /^\s*<<([^>]+)>>\s*$/.match(line))
    
22       put_lines(file, segments, m[1])
    
23     else
    
24       file.puts line
    
25     end
    
26   end
    
27 end
    
28 File.open("#{fname}.rb", 'w') do |out|
    
29   put_lines(out, segments, :start)
    
30 end