Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # coding: utf-8
- # project.pbxproj を JSON に変換します。
- # 第一引数に project.pbxproj を指定してね
- require 'json'
- File.open(ARGV[0]) {|f| @project = f.read }
- # クォート置き換え用トークン
- # 末尾に数字使っちゃダメです
- @token = '--pbxproj2json@@@'
- raise 'Invalid Token (has numeric suffix)' if /\d$/ =~ @token
- @quotes = []
- @project.gsub!(/"(.+?[^\\])"/) do
- @quotes << $1.dup
- '%s%d' % [@token, @quotes.size - 1]
- end
- @project.gsub!(/\/\/.+[\r\n+]/, '')
- @project.gsub!(/\/\*.+?\*\//, '')
- @project.gsub!(/;/, ',')
- @project.gsub!(/ = /, ' : ')
- @project.gsub!(/([^ '"\t(){},]+)[ \t]*:/, '"\1" :')
- @project.gsub!(/:[ \t]*([^ '"\t(){},]+)[ \t]*/, ': "\1"')
- @project.gsub!(/\(/, '[')
- @project.gsub!(/\)/, ']')
- @project.gsub!(/\[(.+?)\]/m) do |array|
- items = $1.split(',')
- items.pop if items.last.strip.empty?
- items.map!{|item|'"%s"' % item.strip}
- next array if items.empty?
- '[%s]' % items.join(',')
- end
- @project.gsub!(/\n/, '')
- @project.gsub!(/[ \t]*([,{}\[\]:])[ \t]*/, '\1')
- @project.gsub!(/,([\]}])/, '\1')
- @project.gsub!(/#{@token}(\d+)/) do
- @quotes[$1.to_i]
- end
- # JSONできたよー
- @project_json = JSON.parse(@project)
- puts JSON.pretty_generate(@project_json)
Add Comment
Please, Sign In to add comment