update_constants_in_other_files.rb 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/usr/bin/env ruby
  2. require "rtruckboris"
  3. require "active_support/inflector"
  4. PATH = File.expand_path(File.dirname(__FILE__))
  5. require "#{PATH}/binder"
  6. def to_snake_case(camel_cased_word)
  7. return camel_cased_word unless camel_cased_word =~ /[A-Z-]|::/
  8. word = camel_cased_word.to_s.gsub(/::/, '/')
  9. word.gsub!(/(?:(?<=([A-Za-z\d]))|\b)(#{ActiveSupport::Inflector.inflections.acronym_regex})(?=\b|[^a-z])/) { "#{$1 && '_'}#{$2.downcase}" }
  10. word.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
  11. word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
  12. word.tr!("-", "_")
  13. word
  14. end
  15. def rename_enum_constant(enum_constant)
  16. new_name = enum_constant.gsub(/CX[^\_]*\_/,"")
  17. new_name = to_snake_case(new_name)
  18. new_name.upcase
  19. end
  20. constants_names = []
  21. def get_constants_names(enum_constant)
  22. {:old => enum_constant.gsub(/CX[^\_]*\_/,"").capitalize, :new => rename_enum_constant(enum_constant)}
  23. end
  24. headerPaths = []
  25. #get gcc include if needed
  26. gccLibBase='/usr/lib/gcc/' << `llvm-config --host-target`.chomp << "/*"
  27. gccLib = Dir.glob(gccLibBase ).sort.last + "/include"
  28. headerPaths << gccLib
  29. headerPaths << "/usr/include"
  30. headerPaths << "/usr/include/clang-c"
  31. clang_c = "/usr/include/clang-c/Index.h"
  32. parser = Rtruckboris::HeaderParser.new(clang_c, headerPaths)
  33. if(!parser.parse(true))
  34. puts "Whada fock??"
  35. exit
  36. end
  37. enums = parser.enums
  38. enums.each do |e|
  39. e.enum_constants.each do |c|
  40. constants_names << get_constants_names(c.name)
  41. end
  42. end
  43. clang_c = "/usr/include/clang-c/CXErrorCode.h"
  44. parser = Rtruckboris::HeaderParser.new(clang_c, headerPaths)
  45. if(!parser.parse(true))
  46. puts "Whada fock??"
  47. exit
  48. end
  49. enums = parser.enums
  50. enums.each do |e|
  51. e.enum_constants.each do |c|
  52. constants_names << get_constants_names(c.name)
  53. end
  54. end
  55. files = ["#{PATH}/../README.md"] + Dir.glob("#{PATH}/../samples/*.rb")
  56. files.each do |f|
  57. constants_names.each do |c|
  58. `/usr/bin/sed -i 's/\:#{c[:old]}$/\:#{c[:new]}/g' #{f}`
  59. `/usr/bin/sed -i 's/\:#{c[:old]}\ /\:#{c[:new]}\ /g' #{f}`
  60. `/usr/bin/sed -i 's/\:#{c[:old]}\|/\:#{c[:new]}\|/g' #{f}`
  61. `/usr/bin/sed -i 's/\:#{c[:old]}\)/\:#{c[:new]}\)/g' #{f}`
  62. `/usr/bin/sed -i 's/\:#{c[:old]}\,/\:#{c[:new]}\,/g' #{f}`
  63. `/usr/bin/sed -i 's/Clangc::TYPE/Clangc::Type/g' #{f}`
  64. end
  65. end