diff options
Diffstat (limited to 'lib/xsd/codegen')
-rw-r--r-- | lib/xsd/codegen/classdef.rb | 2 | ||||
-rw-r--r-- | lib/xsd/codegen/commentdef.rb | 4 | ||||
-rw-r--r-- | lib/xsd/codegen/gensupport.rb | 67 | ||||
-rw-r--r-- | lib/xsd/codegen/methoddef.rb | 2 | ||||
-rw-r--r-- | lib/xsd/codegen/moduledef.rb | 2 |
5 files changed, 65 insertions, 12 deletions
diff --git a/lib/xsd/codegen/classdef.rb b/lib/xsd/codegen/classdef.rb index 8f72e95ef..9eb1ce660 100644 --- a/lib/xsd/codegen/classdef.rb +++ b/lib/xsd/codegen/classdef.rb @@ -77,7 +77,7 @@ class ClassDef < ModuleDef end buf << dump_class_def_end buf << dump_package_def_end(package) unless package.empty? - buf + buf.gsub(/^\s+$/, '') end private diff --git a/lib/xsd/codegen/commentdef.rb b/lib/xsd/codegen/commentdef.rb index f98fade57..c9493a136 100644 --- a/lib/xsd/codegen/commentdef.rb +++ b/lib/xsd/codegen/commentdef.rb @@ -21,10 +21,10 @@ module CommentDef private def dump_comment - if /^#/ =~ @comment + if /\A#/ =~ @comment format(@comment) else - format(@comment).gsub(/^/, "# ") + format(@comment).gsub(/^/, '# ') end end end diff --git a/lib/xsd/codegen/gensupport.rb b/lib/xsd/codegen/gensupport.rb index df90550fa..854534154 100644 --- a/lib/xsd/codegen/gensupport.rb +++ b/lib/xsd/codegen/gensupport.rb @@ -9,6 +9,49 @@ module XSD module CodeGen +# from the file 'keywords' in 1.9. +KEYWORD = %w( +__LINE__ +__FILE__ +BEGIN +END +alias +and +begin +break +case +class +def +defined? +do +else +elsif +end +ensure +false +for +if +in +module +next +nil +not +or +redo +rescue +retry +return +self +super +then +true +undef +unless +until +when +while +yield +) module GenSupport def capitalize(target) @@ -25,7 +68,7 @@ module GenSupport safename = name.scan(/[a-zA-Z0-9_]+/).collect { |ele| GenSupport.capitalize(ele) }.join - unless /^[A-Z]/ =~ safename + if /^[A-Z]/ !~ safename or keyword?(safename) safename = "C_#{safename}" end safename @@ -33,12 +76,17 @@ module GenSupport module_function :safeconstname def safeconstname?(name) - /\A[A-Z][a-zA-Z0-9_]*\z/ =~ name + /\A[A-Z][a-zA-Z0-9_]*\z/ =~ name and !keyword?(name) end module_function :safeconstname? def safemethodname(name) - safevarname(name) + safename = name.scan(/[a-zA-Z0-9_]+/).join('_') + safename = uncapitalize(safename) + if /^[a-z]/ !~ safename + safename = "m_#{safename}" + end + safename end module_function :safemethodname @@ -50,18 +98,23 @@ module GenSupport def safevarname(name) safename = name.scan(/[a-zA-Z0-9_]+/).join('_') safename = uncapitalize(safename) - unless /^[a-z]/ =~ safename - safename = "m_#{safename}" + if /^[a-z]/ !~ safename or keyword?(safename) + safename = "v_#{safename}" end safename end module_function :safevarname def safevarname?(name) - /\A[a-z_][a-zA-Z0-9_]*\z/ =~ name + /\A[a-z_][a-zA-Z0-9_]*\z/ =~ name and !keyword?(name) end module_function :safevarname? + def keyword?(word) + KEYWORD.include?(word) + end + module_function :keyword? + def format(str, indent = nil) str = trim_eol(str) str = trim_indent(str) @@ -76,7 +129,7 @@ private def trim_eol(str) str.collect { |line| - line.sub(/\r?\n$/, "") + "\n" + line.sub(/\r?\n\z/, "") + "\n" }.join end diff --git a/lib/xsd/codegen/methoddef.rb b/lib/xsd/codegen/methoddef.rb index 24a9168d5..15892fc5b 100644 --- a/lib/xsd/codegen/methoddef.rb +++ b/lib/xsd/codegen/methoddef.rb @@ -34,7 +34,7 @@ class MethodDef buf = "" buf << dump_comment if @comment buf << dump_method_def - buf << dump_definition if @definition + buf << dump_definition if @definition and !@definition.empty? buf << dump_method_def_end buf end diff --git a/lib/xsd/codegen/moduledef.rb b/lib/xsd/codegen/moduledef.rb index dc2746b2e..744af2ff9 100644 --- a/lib/xsd/codegen/moduledef.rb +++ b/lib/xsd/codegen/moduledef.rb @@ -89,7 +89,7 @@ class ModuleDef end buf << dump_module_def_end buf << dump_package_def_end(package) unless package.empty? - buf + buf.gsub(/^\s+$/, '') end private |