1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
# XSD4R - Code generation support
# Copyright (C) 2004, 2005 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 = {}
%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
).each { |k| KEYWORD[k] = nil }
module GenSupport
def capitalize(target)
target.sub(/^([a-z])/) { $1.tr!('[a-z]', '[A-Z]') }
end
module_function :capitalize
def uncapitalize(target)
target.sub(/^([A-Z])/) { $1.tr!('[A-Z]', '[a-z]') }
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}"
end
safename
end
module_function :safeconstname
def safeconstname?(name)
/\A[A-Z][a-zA-Z0-9_]*\z/ =~ name and !keyword?(name)
end
module_function :safeconstname?
def safemethodname(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
def safemethodname?(name)
/\A[a-zA-Z_][a-zA-Z0-9_]*[=!?]?\z/ =~ name
end
module_function :safemethodname?
def safevarname(name)
safename = uncapitalize(name.scan(/[a-zA-Z0-9_]+/).join('_'))
if /^[a-z]/ !~ safename or keyword?(safename)
"v_#{safename}"
else
safename
end
end
module_function :safevarname
def safevarname?(name)
/\A[a-z_][a-zA-Z0-9_]*\z/ =~ name and !keyword?(name)
end
module_function :safevarname?
def keyword?(word)
KEYWORD.key?(word)
end
module_function :keyword?
def format(str, indent = nil)
str = trim_eol(str)
str = trim_indent(str)
if indent
str.gsub(/^/, " " * indent)
else
str
end
end
private
def trim_eol(str)
str.collect { |line|
line.sub(/\r?\n\z/, "") + "\n"
}.join
end
def trim_indent(str)
indent = nil
str = str.collect { |line| untab(line) }.join
str.each do |line|
head = line.index(/\S/)
if !head.nil? and (indent.nil? or head < indent)
indent = head
end
end
return str unless indent
str.collect { |line|
line.sub(/^ {0,#{indent}}/, "")
}.join
end
def untab(line, ts = 8)
while pos = line.index(/\t/)
line = line.sub(/\t/, " " * (ts - (pos % ts)))
end
line
end
def dump_emptyline
"\n"
end
end
end
end
|