lib/xsd/codegen/gensupport.rb in soap4r-1.5.5.20061022 vs lib/xsd/codegen/gensupport.rb in soap4r-1.5.6
- old
+ new
@@ -1,18 +1,18 @@
# XSD4R - Code generation support
-# Copyright (C) 2004, 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
+# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
# redistribute it and/or modify it under the same terms of Ruby's license;
# either the dual license version in 2003, or any later version.
module XSD
module CodeGen
# from the file 'keywords' in 1.9.
-KEYWORD = {}
+KEYWORDS = {}
%w(
__LINE__
__FILE__
BEGIN
END
@@ -50,31 +50,130 @@
unless
until
when
while
yield
-).each { |k| KEYWORD[k] = nil }
+).each { |k| KEYWORDS[k] = nil }
+# from Module.constants from 1.8 & 1.9
+CONSTANTS = {}
+%w(
+ARGF
+ARGV
+ArgumentError
+Array
+BasicObject
+Bignum
+Binding
+Class
+Comparable
+Continuation
+Data
+Dir
+ENV
+EOFError
+Enumerable
+Errno
+Exception
+FALSE
+FalseClass
+File
+FileTest
+Fixnum
+Float
+FloatDomainError
+GC
+Hash
+IO
+IOError
+IndexError
+Integer
+Interrupt
+Kernel
+KeyError
+LoadError
+LocalJumpError
+Marshal
+MatchData
+MatchingData
+Math
+Method
+Module
+Mutex
+NIL
+NameError
+NilClass
+NoMemoryError
+NoMethodError
+NotImplementedError
+Numeric
+Object
+ObjectSpace
+PLATFORM
+Precision
+Proc
+Process
+RELEASE_DATE
+RUBY_PATCHLEVEL
+RUBY_PLATFORM
+RUBY_RELEASE_DATE
+RUBY_VERSION
+Range
+RangeError
+Regexp
+RegexpError
+RuntimeError
+STDERR
+STDIN
+STDOUT
+ScriptError
+SecurityError
+Signal
+SignalException
+StandardError
+String
+Struct
+Symbol
+SyntaxError
+SystemCallError
+SystemExit
+SystemStackError
+TOPLEVEL_BINDING
+TRUE
+Thread
+ThreadError
+ThreadGroup
+Time
+TrueClass
+TypeError
+UnboundMethod
+VERSION
+VM
+ZeroDivisionError
+).each { |c| CONSTANTS[c] = nil }
+
+
module GenSupport
def capitalize(target)
- target.sub(/^([a-z])/) { $1.tr!('[a-z]', '[A-Z]') }
+ target.sub(/^([a-z])/) { $1.upcase }
end
module_function :capitalize
def uncapitalize(target)
- target.sub(/^([A-Z])/) { $1.tr!('[A-Z]', '[a-z]') }
+ target.sub(/^([A-Z])/) { $1.downcase }
end
module_function :uncapitalize
def safeconstname(name)
safename = name.scan(/[a-zA-Z0-9_]+/).collect { |ele|
GenSupport.capitalize(ele)
}.join
- if /^[A-Z]/ !~ safename or keyword?(safename)
- safename = "C_#{safename}"
+ if /\A[A-Z]/ !~ safename or keyword?(safename) or constant?(safename)
+ "C_#{safename}"
+ else
+ safename
end
- safename
end
module_function :safeconstname
def safeconstname?(name)
/\A[A-Z][a-zA-Z0-9_]*\z/ =~ name and !keyword?(name)
@@ -84,25 +183,26 @@
def safemethodname(name)
postfix = name[/[=?!]$/]
safename = name.scan(/[a-zA-Z0-9_]+/).join('_')
safename = uncapitalize(safename)
safename += postfix if postfix
- if /^[a-z]/ !~ safename
- safename = "m_#{safename}"
+ if /\A[a-z]/ !~ safename or keyword?(safename)
+ "m_#{safename}"
+ else
+ safename
end
- safename
end
module_function :safemethodname
def safemethodname?(name)
- /\A[a-zA-Z_][a-zA-Z0-9_]*[=!?]?\z/ =~ name
+ /\A[a-zA-Z_][a-zA-Z0-9_]*[=!?]?\z/ =~ name and !keyword?(name)
end
module_function :safemethodname?
def safevarname(name)
safename = uncapitalize(name.scan(/[a-zA-Z0-9_]+/).join('_'))
- if /^[a-z]/ !~ safename or keyword?(safename)
+ if /\A[a-z]/ !~ safename or keyword?(safename)
"v_#{safename}"
else
safename
end
end
@@ -112,12 +212,17 @@
/\A[a-z_][a-zA-Z0-9_]*\z/ =~ name and !keyword?(name)
end
module_function :safevarname?
def keyword?(word)
- KEYWORD.key?(word)
+ KEYWORDS.key?(word)
end
module_function :keyword?
+
+ def constant?(word)
+ CONSTANTS.key?(word)
+ end
+ module_function :constant?
def format(str, indent = nil)
str = trim_eol(str)
str = trim_indent(str)
if indent