Guest User

Untitled

a guest
Jan 23rd, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. # coding: utf-8
  2. # project.pbxproj を JSON に変換します。
  3. # 第一引数に project.pbxproj を指定してね
  4.  
  5. require 'json'
  6.  
  7. File.open(ARGV[0]) {|f| @project = f.read }
  8.  
  9. # クォート置き換え用トークン
  10. # 末尾に数字使っちゃダメです
  11. @token = '--pbxproj2json@@@'
  12.  
  13. raise 'Invalid Token (has numeric suffix)' if /\d$/ =~ @token
  14.  
  15. @quotes = []
  16.  
  17. @project.gsub!(/"(.+?[^\\])"/) do
  18. @quotes << $1.dup
  19. '%s%d' % [@token, @quotes.size - 1]
  20. end
  21.  
  22. @project.gsub!(/\/\/.+[\r\n+]/, '')
  23. @project.gsub!(/\/\*.+?\*\//, '')
  24. @project.gsub!(/;/, ',')
  25. @project.gsub!(/ = /, ' : ')
  26. @project.gsub!(/([^ '"\t(){},]+)[ \t]*:/, '"\1" :')
  27. @project.gsub!(/:[ \t]*([^ '"\t(){},]+)[ \t]*/, ': "\1"')
  28. @project.gsub!(/\(/, '[')
  29. @project.gsub!(/\)/, ']')
  30. @project.gsub!(/\[(.+?)\]/m) do |array|
  31. items = $1.split(',')
  32. items.pop if items.last.strip.empty?
  33. items.map!{|item|'"%s"' % item.strip}
  34. next array if items.empty?
  35. '[%s]' % items.join(',')
  36. end
  37.  
  38. @project.gsub!(/\n/, '')
  39. @project.gsub!(/[ \t]*([,{}\[\]:])[ \t]*/, '\1')
  40.  
  41. @project.gsub!(/,([\]}])/, '\1')
  42.  
  43. @project.gsub!(/#{@token}(\d+)/) do
  44. @quotes[$1.to_i]
  45. end
  46.  
  47. # JSONできたよー
  48. @project_json = JSON.parse(@project)
  49. puts JSON.pretty_generate(@project_json)
Add Comment
Please, Sign In to add comment