/tools/Ruby/lib/ruby/1.8/xsd/codegen/gensupport.rb

http://github.com/agross/netopenspace · Ruby · 166 lines · 139 code · 21 blank · 6 comment · 6 complexity · 14c5b257a62b7b8681be9e1e1d692456 MD5 · raw file

  1. # XSD4R - Code generation support
  2. # Copyright (C) 2004, 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
  3. # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
  4. # redistribute it and/or modify it under the same terms of Ruby's license;
  5. # either the dual license version in 2003, or any later version.
  6. module XSD
  7. module CodeGen
  8. # from the file 'keywords' in 1.9.
  9. KEYWORD = {}
  10. %w(
  11. __LINE__
  12. __FILE__
  13. BEGIN
  14. END
  15. alias
  16. and
  17. begin
  18. break
  19. case
  20. class
  21. def
  22. defined?
  23. do
  24. else
  25. elsif
  26. end
  27. ensure
  28. false
  29. for
  30. if
  31. in
  32. module
  33. next
  34. nil
  35. not
  36. or
  37. redo
  38. rescue
  39. retry
  40. return
  41. self
  42. super
  43. then
  44. true
  45. undef
  46. unless
  47. until
  48. when
  49. while
  50. yield
  51. ).each { |k| KEYWORD[k] = nil }
  52. module GenSupport
  53. def capitalize(target)
  54. target.sub(/^([a-z])/) { $1.tr!('[a-z]', '[A-Z]') }
  55. end
  56. module_function :capitalize
  57. def uncapitalize(target)
  58. target.sub(/^([A-Z])/) { $1.tr!('[A-Z]', '[a-z]') }
  59. end
  60. module_function :uncapitalize
  61. def safeconstname(name)
  62. safename = name.scan(/[a-zA-Z0-9_]+/).collect { |ele|
  63. GenSupport.capitalize(ele)
  64. }.join
  65. if /^[A-Z]/ !~ safename or keyword?(safename)
  66. safename = "C_#{safename}"
  67. end
  68. safename
  69. end
  70. module_function :safeconstname
  71. def safeconstname?(name)
  72. /\A[A-Z][a-zA-Z0-9_]*\z/ =~ name and !keyword?(name)
  73. end
  74. module_function :safeconstname?
  75. def safemethodname(name)
  76. safename = name.scan(/[a-zA-Z0-9_]+/).join('_')
  77. safename = uncapitalize(safename)
  78. if /^[a-z]/ !~ safename
  79. safename = "m_#{safename}"
  80. end
  81. safename
  82. end
  83. module_function :safemethodname
  84. def safemethodname?(name)
  85. /\A[a-zA-Z_][a-zA-Z0-9_]*[=!?]?\z/ =~ name
  86. end
  87. module_function :safemethodname?
  88. def safevarname(name)
  89. safename = uncapitalize(name.scan(/[a-zA-Z0-9_]+/).join('_'))
  90. if /^[a-z]/ !~ safename or keyword?(safename)
  91. "v_#{safename}"
  92. else
  93. safename
  94. end
  95. end
  96. module_function :safevarname
  97. def safevarname?(name)
  98. /\A[a-z_][a-zA-Z0-9_]*\z/ =~ name and !keyword?(name)
  99. end
  100. module_function :safevarname?
  101. def keyword?(word)
  102. KEYWORD.key?(word)
  103. end
  104. module_function :keyword?
  105. def format(str, indent = nil)
  106. str = trim_eol(str)
  107. str = trim_indent(str)
  108. if indent
  109. str.gsub(/^/, " " * indent)
  110. else
  111. str
  112. end
  113. end
  114. private
  115. def trim_eol(str)
  116. str.collect { |line|
  117. line.sub(/\r?\n\z/, "") + "\n"
  118. }.join
  119. end
  120. def trim_indent(str)
  121. indent = nil
  122. str = str.collect { |line| untab(line) }.join
  123. str.each do |line|
  124. head = line.index(/\S/)
  125. if !head.nil? and (indent.nil? or head < indent)
  126. indent = head
  127. end
  128. end
  129. return str unless indent
  130. str.collect { |line|
  131. line.sub(/^ {0,#{indent}}/, "")
  132. }.join
  133. end
  134. def untab(line, ts = 8)
  135. while pos = line.index(/\t/)
  136. line = line.sub(/\t/, " " * (ts - (pos % ts)))
  137. end
  138. line
  139. end
  140. def dump_emptyline
  141. "\n"
  142. end
  143. end
  144. end
  145. end