aboutsummaryrefslogtreecommitdiffstats
path: root/Tools/scripts/plist
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/scripts/plist')
-rwxr-xr-xTools/scripts/plist50
1 files changed, 36 insertions, 14 deletions
diff --git a/Tools/scripts/plist b/Tools/scripts/plist
index 92e953e6919..6a903ad15f3 100755
--- a/Tools/scripts/plist
+++ b/Tools/scripts/plist
@@ -42,29 +42,51 @@ class Mtree
@paths = []
@curlevel = []
@strip = strip.to_i
- @cont = false
+ @curline = ''
+ @global_settings = {}
self
end
def parse_line(line)
line.chomp!
- spline = line.split
- oldcont = @cont
- @cont = line[-1, 1] == "\\"
- case spline[0]
- when nil
- when /^[\/#]/
- # ignore "command" lines and comments
- when '..'
- if oldcont
- raise 'continued line has a .. directive?!'
+ if line.empty? || line[0, 1] == '#'
+ return
+ end
+ if line[-1, 1] == "\\"
+ @curline.concat(line[0..-2])
+ next
+ end
+ line = @curline + line
+ @curline = ''
+ case line[/\S.+/]
+ when /^\/(\S+)/
+ case $1
+ when 'set'
+ $'.split.each {|setting|
+ key, value, = setting.split(/=/)
+ @global_settings[key] = value
+ }
+ when 'unset'
+ $'.split.each {|setting| @global_settings.delete(setting)}
+ else
+ raise "invalid command \"#{$1}\""
end
+ when '..'
if @curlevel.pop.nil?
raise '".." with no previous directory'
end
else
- if !oldcont
- @curlevel.push(spline[0])
- @paths.push(@curlevel.dup)
+ spline = line.split()
+ path = spline[0]
+ settings = @global_settings.dup
+ if spline.size > 1
+ spline[1..-1].each {|setting|
+ key, value, = setting.split(/=/)
+ settings[key] = value
+ }
+ end
+ @paths.push(@curlevel + [path])
+ if settings['type'] == nil || settings['type'] == 'dir'
+ @curlevel.push(path)
end
end
self