Michal Suchanek 398394
#!/usr/bin/ruby
Michal Suchanek 398394
Michal Suchanek 398394
def max x, y
Michal Suchanek 398394
	(x >= y) ? x : y
Michal Suchanek 398394
end
Michal Suchanek 398394
Michal Suchanek 398394
class String
Michal Suchanek 398394
	def tablen
Michal Suchanek 398394
		(length + 8) / 8
Michal Suchanek 398394
	end
Michal Suchanek 398394
	def tabfill tabs
Michal Suchanek 398394
		self + "\t" * (tabs - (length / 8))
Michal Suchanek 398394
	end
Michal Suchanek 398394
	def ** other
Michal Suchanek 398394
		star = nil
Michal Suchanek 398394
		star = length - 1 if self[length - 1] == '*'
Michal Suchanek 398394
		star = other.length - 1 if other[other.length - 1] == '*'
Michal Suchanek 398394
		if star then
Michal Suchanek 398394
			if self[0...star] == other[0...star] then
Michal Suchanek 398394
				return 1 if star == length - 1
Michal Suchanek 398394
				return -1
Michal Suchanek 398394
			end
Michal Suchanek 398394
		end
Michal Suchanek 398394
		return self <=> other
Michal Suchanek 398394
	end
Michal Suchanek 398394
end
Michal Suchanek 398394
Michal Suchanek 398394
header = []
Michal Suchanek 398394
supported = []
Michal Suchanek 398394
maxtabs = [0,0]
Michal Suchanek 398394
maxlen = [0,0]
Michal Suchanek 398394
Michal Suchanek 398394
File.open("supported.conf"){|f|
Michal Suchanek 398394
	f.each_line{|l|
Michal Suchanek 398394
		l.chomp!
Michal Suchanek 398394
		l.gsub! %r<//>, '/'
Michal Suchanek 398394
		split = (l.match %r<^([^[:blank:]/]*)[[:blank:]]+(?:([^[:blank:]/]+)[[:blank:]]+)?(?:([^[:blank:]/]+)[[:blank:]]+)?([^[:blank:]]+/[^[:blank:]]+)(?:[[:blank:]]+(.*))?$>)
Michal Suchanek 398394
		if ! split then
Michal Suchanek 398394
			header << l
Michal Suchanek 398394
		else
Michal Suchanek 398394
			# [[flag, ..],module,comment,is_kmp]
Michal Suchanek 398394
			s = [[]]
Michal Suchanek 398394
			slash = false
Michal Suchanek 398394
			split[1..-1].each{|e|
Michal Suchanek 398394
				if slash then
Michal Suchanek 398394
					raise l + split.inspect if s[2]
Michal Suchanek 398394
					s[2] = e
Michal Suchanek 398394
				else
Michal Suchanek 398394
					if e =~ %r then
Michal Suchanek 398394
						slash = true
Michal Suchanek 398394
						s[1] = e
Michal Suchanek 398394
					else
Michal Suchanek 398394
						s[0] << e if e
Michal Suchanek 398394
						s[3] = true if e =~ /-kmp/
Michal Suchanek 398394
					end
Michal Suchanek 398394
				end
Michal Suchanek 398394
			}
Michal Suchanek 398394
			supported << s
Michal Suchanek 398394
			maxtabs[0] = max(maxtabs[0], s[0].join(" ").tablen)
Michal Suchanek 398394
			maxlen[0] = max(maxlen[0], s[0].join(" ").length)
Michal Suchanek 398394
			if s[2] then
Michal Suchanek 398394
				maxtabs[1] = max(maxtabs[1], s[1].tablen)
Michal Suchanek 398394
				maxlen[1] = max(maxlen[1], s[1].length)
Michal Suchanek 398394
			end
Michal Suchanek 398394
		end
Michal Suchanek 398394
	}
Michal Suchanek 398394
}
Michal Suchanek 398394
Michal Suchanek 398394
supported = supported.sort{|s1,s2|
Michal Suchanek 398394
	cmp = 0
Michal Suchanek 398394
	if s1[3] then
Michal Suchanek 398394
		if s2[3] then
Michal Suchanek 398394
			cmp = s1[0] <=> s2[0]
Michal Suchanek 398394
		else
Michal Suchanek 398394
			cmp = -1
Michal Suchanek 398394
		end
Michal Suchanek 398394
	elsif s2[3]
Michal Suchanek 398394
		cmp = 1
Michal Suchanek 398394
	end
Michal Suchanek 398394
	cmp != 0 ? cmp : s1[1] ** s2[1]
Michal Suchanek 398394
}
Michal Suchanek 398394
Michal Suchanek 398394
File.open("supported.conf",'wb'){|f|
Michal Suchanek 398394
	header.each{|l| f.puts l }
Michal Suchanek 398394
	supported.each{|s|
Michal Suchanek 398394
		f.puts s[0].join(" ").tabfill(maxtabs[0]) + (s[2] ? s[1].tabfill(maxtabs[1]) : s[1]) + s[2].to_s
Michal Suchanek 398394
	}
Michal Suchanek 398394
}
Michal Suchanek 398394
#STDERR.puts (0..maxlen[1]).each{|n| STDERR.puts ("a"*n).tabfill(maxtabs[1]) + "|"}