3
class ParsableLine < String
9
return true if self =~ /^\[.*\]$/
14
return true if self =~ /(.*?)=(.*?)/
25
File.open(file).readlines.each do | line |
26
line = ParsableLine.new(line)
30
group = line.gsub(/(^\[)(.*?[^\[])(\]$)/, '\2').chomp
33
key, value = line.split(/\s*=\s*/)
35
value.gsub!(/^\s|\s$|[#;].*$/, '') if value
36
keys.store(key, value)
38
if group.length > 0 and not key.nil? and key.size > 0
39
@groups.store(group, keys)
47
return keys.has_key?(key)
52
return @groups.has_key?(group)
55
def readEntry(group, key)
56
return if not group?(group)
58
return keys[key] if keys.has_key?(key)
63
class Metadata < IniFile
73
return readEntry("Desktop Entry", "X-KDE-PluginInfo-Name")
77
return readEntry("Desktop Entry", "X-KDE-PluginInfo-Author")
81
return readEntry("Desktop Entry", "X-KDE-PluginInfo-Email")
85
return readEntry("Desktop Entry", "X-KDE-PluginInfo-License")
89
Dir.glob("*/metadata.desktop").each do | metadataPath |
90
metadata = Metadata.new(metadataPath)
91
puts "Files: #{metadataPath.split("/")[0]}/*"
92
puts "Copyright: #{metadata.author?} <#{metadata.email?}>"
93
license = metadata.license?
94
if license == "LGPLv3"
99
puts "License: #{license}"