Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

root/branches/1_5/lib/xsd/codegen/gensupport.rb

Revision 2015, 4.0 kB (checked in by nahi, 12 hours ago)
  • ruby-1.8.7 warning cleanups. closes #497.
  • Property svn:eol-style set to native
  • Property svn:keywords set to author date id revision
Line 
1 # XSD4R - Code generation support
2 # Copyright (C) 2000-2007  NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
4 # This program is copyrighted free software by NAKAMURA, Hiroshi.  You can
5 # redistribute it and/or modify it under the same terms of Ruby's license;
6 # either the dual license version in 2003, or any later version.
7
8
9 module XSD
10 module CodeGen
11
12 # from the file 'keywords' in 1.9.
13 KEYWORDS = {}
14 %w(
15 __LINE__
16 __FILE__
17 BEGIN
18 END
19 alias
20 and
21 begin
22 break
23 case
24 class
25 def
26 defined?
27 do
28 else
29 elsif
30 end
31 ensure
32 false
33 for
34 if
35 in
36 module
37 next
38 nil
39 not
40 or
41 redo
42 rescue
43 retry
44 return
45 self
46 super
47 then
48 true
49 undef
50 unless
51 until
52 when
53 while
54 yield
55 ).each { |k| KEYWORDS[k] = nil }
56
57 # from Module.constants from 1.8 & 1.9
58 CONSTANTS = {}
59 %w(
60 ARGF
61 ARGV
62 ArgumentError
63 Array
64 BasicObject
65 Bignum
66 Binding
67 Class
68 Comparable
69 Continuation
70 Data
71 Dir
72 ENV
73 EOFError
74 Enumerable
75 Errno
76 Exception
77 FALSE
78 FalseClass
79 File
80 FileTest
81 Fixnum
82 Float
83 FloatDomainError
84 GC
85 Hash
86 IO
87 IOError
88 IndexError
89 Integer
90 Interrupt
91 Kernel
92 KeyError
93 LoadError
94 LocalJumpError
95 Marshal
96 MatchData
97 MatchingData
98 Math
99 Method
100 Module
101 Mutex
102 NIL
103 NameError
104 NilClass
105 NoMemoryError
106 NoMethodError
107 NotImplementedError
108 Numeric
109 Object
110 ObjectSpace
111 PLATFORM
112 Precision
113 Proc
114 Process
115 RELEASE_DATE
116 RUBY_PATCHLEVEL
117 RUBY_PLATFORM
118 RUBY_RELEASE_DATE
119 RUBY_VERSION
120 Range
121 RangeError
122 Regexp
123 RegexpError
124 RuntimeError
125 STDERR
126 STDIN
127 STDOUT
128 ScriptError
129 SecurityError
130 Signal
131 SignalException
132 StandardError
133 String
134 Struct
135 Symbol
136 SyntaxError
137 SystemCallError
138 SystemExit
139 SystemStackError
140 TOPLEVEL_BINDING
141 TRUE
142 Thread
143 ThreadError
144 ThreadGroup
145 Time
146 TrueClass
147 TypeError
148 UnboundMethod
149 VERSION
150 VM
151 ZeroDivisionError
152 ).each { |c| CONSTANTS[c] = nil }
153
154
155 module GenSupport
156   def capitalize(target)
157     target.sub(/^([a-z])/) { $1.upcase }
158   end
159   module_function :capitalize
160
161   def uncapitalize(target)
162     target.sub(/^([A-Z])/) { $1.downcase }
163   end
164   module_function :uncapitalize
165
166   def safeconstname(name)
167     safename = name.scan(/[a-zA-Z0-9_]+/).collect { |ele|
168       GenSupport.capitalize(ele)
169     }.join
170     if /\A[A-Z]/ !~ safename or keyword?(safename) or constant?(safename)
171       "C_#{safename}"
172     else
173       safename
174     end
175   end
176   module_function :safeconstname
177
178   def safeconstname?(name)
179     /\A[A-Z][a-zA-Z0-9_]*\z/ =~ name and !keyword?(name)
180   end
181   module_function :safeconstname?
182
183   def safemethodname(name)
184     postfix = name[/[=?!]$/]
185     safename = name.scan(/[a-zA-Z0-9_]+/).join('_')
186     safename = uncapitalize(safename)
187     safename += postfix if postfix
188     if /\A[a-z]/ !~ safename or keyword?(safename)
189       "m_#{safename}"
190     else
191       safename
192     end
193   end
194   module_function :safemethodname
195
196   def safemethodname?(name)
197     /\A[a-zA-Z_][a-zA-Z0-9_]*[=!?]?\z/ =~ name and !keyword?(name)
198   end
199   module_function :safemethodname?
200
201   def safevarname(name)
202     safename = uncapitalize(name.scan(/[a-zA-Z0-9_]+/).join('_'))
203     if /\A[a-z]/ !~ safename or keyword?(safename)
204       "v_#{safename}"
205     else
206       safename
207     end
208   end
209   module_function :safevarname
210
211   def safevarname?(name)
212     /\A[a-z_][a-zA-Z0-9_]*\z/ =~ name and !keyword?(name)
213   end
214   module_function :safevarname?
215
216   def keyword?(word)
217     KEYWORDS.key?(word)
218   end
219   module_function :keyword?
220
221   def constant?(word)
222     CONSTANTS.key?(word)
223   end
224   module_function :constant?
225
226   def format(str, indent = nil)
227     str = trim_eol(str)
228     str = trim_indent(str)
229     if indent
230       str.gsub(/^/, " " * indent)
231     else
232       str
233     end
234   end
235
236 private
237
238   def trim_eol(str)
239     ary = []
240     str.each_line do |line|
241       ary << line.sub(/\r?\n\z/, '') + "\n"
242     end
243     ary.join
244   end
245
246   def trim_indent(str)
247     indent = nil
248     ary = []
249     str.each_line do |line|
250       ary << untab(line)
251     end
252     ary.each do |line|
253       head = line.index(/\S/)
254       if !head.nil? and (indent.nil? or head < indent)
255         indent = head
256       end
257     end
258     str = ary.join
259     return str unless indent
260     str.gsub(/^ {0,#{indent}}/, "")
261   end
262
263   def untab(line, ts = 8)
264     while pos = line.index(/\t/)
265       line = line.sub(/\t/, " " * (ts - (pos % ts)))
266     end
267     line
268   end
269
270   def dump_emptyline
271     "\n"
272   end
273 end
274
275
276 end
277 end
Note: See TracBrowser for help on using the browser.