Warning, /frameworks/syntax-highlighting/autotests/folding/highlight.rb.fold is written in an unsupported language. File is not indexed.
0001 # This file is a testcase for the highlighting of Ruby code
0002 # It's not executable code, but a collection of code snippets
0003 #
0004
0005 require 'Config'
0006 require 'DO/Clients'
0007 require 'DO/DBClients'
0008
0009 <beginfold id='1'>def</beginfold id='1'> CGI::escapeElement(string, *elements)
0010 elements = elements[0] if elements[0].kind_of?(Array)
0011 <beginfold id='1'>unless</beginfold id='1'> elements.empty?
0012 string.gsub(/<\/?(?:#{elements.join("|")})(?!\w)(?:.|\n)*?>/ni) <beginfold id='1'>do</beginfold id='1'>
0013 CGI::escapeHTML($&)
0014 <endfold id='1'>end</endfold id='1'>
0015 <endfold id='1'></endfold id='1'><beginfold id='1'>else</beginfold id='1'>
0016 string
0017 <endfold id='1'>end</endfold id='1'>
0018 <endfold id='1'>end</endfold id='1'>
0019
0020 <beginfold id='1'>case</beginfold id='1'> inputLine
0021 when "debug"
0022 dumpDebugInfo
0023 dumpSymbols
0024 when /p\s+(\w+)/
0025 dumpVariable($1)
0026 when "quit", "exit"
0027 exit
0028 <endfold id='1'></endfold id='1'><beginfold id='1'>else</beginfold id='1'>
0029 print "Illegal command: #{inputLine}"
0030 <endfold id='1'>end</endfold id='1'>
0031
0032
0033 kind = <beginfold id='1'>case</beginfold id='1'> year #hi there
0034 when 1850..1889 then "Blues"
0035 when 1890..1909 then "Ragtime"
0036 when 1910..1929 then "New Orleans Jazz"
0037 when 1930..1939 then "Swing"
0038 when 1940..1950 then "Bebop"
0039 <endfold id='1'></endfold id='1'><beginfold id='1'>else</beginfold id='1'> "Jazz"
0040 <endfold id='1'>end</endfold id='1'>
0041
0042 # URL-encode a string.
0043 # url_encoded_string = CGI::escape("'Stop!' said Fred")
0044 # # => "%27Stop%21%27+said+Fred"
0045 <beginfold id='1'>def</beginfold id='1'> CGI::escape(string)
0046 string.gsub(/([^ a-zA-Z0-9_.-]+)/n) <beginfold id='1'>do</beginfold id='1'>
0047 '%' + $1.unpack('H2' * $1.size).join('%').upcase
0048 <endfold id='1'>end</endfold id='1'>.tr(' ', '+')
0049 <endfold id='1'>end</endfold id='1'>
0050
0051
0052 # Class ClientManager
0053 #
0054 # definition : Import, store and export the various data used by the application.
0055 # This class is the sole interface between the application and the underlying database.
0056
0057 mon, day, year = $1, $2, $3 if /(\d\d)-(\d\d)-(\d\d)/
0058 puts "a = #{a}" if fDebug
0059 print total unless total == 0
0060
0061 <beginfold id='1'>while</beginfold id='1'> gets
0062 next if /^#/ # Skip comments
0063 parseLine unless /^$/ # Don't parse empty lines
0064 <endfold id='1'>end</endfold id='1'>
0065
0066 <beginfold id='1'>if</beginfold id='1'> artist == "John Coltrane" #hi there
0067 artist = "'Trane" #hi there
0068 <endfold id='1'>end</endfold id='1'> unless nicknames == "no" #hi there
0069
0070 handle <beginfold id='1'>= if</beginfold id='1'> aSong.artist == "Gillespie" then #hi there
0071 "Dizzy"
0072 <endfold id='1'></endfold id='1'><beginfold id='1'>elsif</beginfold id='1'> aSong.artist == "Parker" then
0073 "Bird"
0074 <endfold id='1'></endfold id='1'><beginfold id='1'>else</beginfold id='1'> #hi there
0075 "unknown"
0076 <endfold id='1'>end</endfold id='1'>
0077
0078 <beginfold id='1'>if</beginfold id='1'> aSong.artist == "Gillespie" then handle = "Dizzy"
0079 <endfold id='1'></endfold id='1'><beginfold id='1'>elsif</beginfold id='1'> aSong.artist == "Parker" then handle = "Bird"
0080 <endfold id='1'></endfold id='1'><beginfold id='1'>else</beginfold id='1'> handle = "unknown"
0081 <endfold id='1'>end</endfold id='1'> #hi there
0082
0083 <beginfold id='1'>if</beginfold id='1'> aSong.artist == "Gillespie" then
0084 handle = "Dizzy"
0085 <endfold id='1'></endfold id='1'><beginfold id='1'>elsif</beginfold id='1'> aSong.artist == "Parker" then
0086 handle = "Bird"
0087 <endfold id='1'></endfold id='1'><beginfold id='1'>else</beginfold id='1'>
0088 handle = "unknown"
0089 <endfold id='1'>end</endfold id='1'>
0090
0091 <beginfold id='1'>if</beginfold id='1'> aSong.artist == "Gillespie"
0092 handle = "Dizzy"
0093 <endfold id='1'></endfold id='1'><beginfold id='1'>elsif</beginfold id='1'> aSong.artist == "Parker"
0094 handle = "Bird"
0095 <endfold id='1'></endfold id='1'><beginfold id='1'>else</beginfold id='1'>
0096 handle = "unknown"
0097 <endfold id='1'>end</endfold id='1'>
0098
0099 <beginfold id='1'>case</beginfold id='1'> line
0100 when /title=(.*)/
0101 puts "Title is #$1"
0102 when /track=(.*)/
0103 puts "Track is #$1"
0104 when /artist=(.*)/
0105 puts "Artist is #$1"
0106 <endfold id='1'>end</endfold id='1'>
0107
0108 <beginfold id='1'>case</beginfold id='1'> shape
0109 when Square, Rectangle
0110 # ...
0111 when Circle
0112 # ...
0113 when Triangle
0114 # ...
0115 <endfold id='1'></endfold id='1'><beginfold id='1'>else</beginfold id='1'>
0116 # ...
0117 <endfold id='1'>end</endfold id='1'>
0118
0119
0120 <beginfold id='1'>until</beginfold id='1'> playList.duration > 60 #hi there
0121 playList.add(songList.pop)
0122 <endfold id='1'>end</endfold id='1'>
0123
0124 3.times <beginfold id='1'>do</beginfold id='1'>
0125 print "Ho! "
0126 <endfold id='1'>end</endfold id='1'>
0127
0128 loop <beginfold id='1'>{</beginfold id='1'>
0129 # block ...
0130 <endfold id='1'>}</endfold id='1'>
0131
0132 songList.each <beginfold id='1'>do</beginfold id='1'> |aSong|
0133 aSong.play
0134 <endfold id='1'>end</endfold id='1'>
0135
0136 <beginfold id='1'>for</beginfold id='1'> aSong in songList
0137 aSong.play
0138 <endfold id='1'>end</endfold id='1'>
0139
0140 <beginfold id='1'>for</beginfold id='1'> i in ['fee', 'fi', 'fo', 'fum']
0141 print i, " "
0142 <endfold id='1'>end</endfold id='1'>
0143 <beginfold id='1'>for</beginfold id='1'> i in 1..3
0144 print i, " "
0145 <endfold id='1'>end</endfold id='1'>
0146 <beginfold id='1'>for</beginfold id='1'> i in File.open("ordinal").find_all <beginfold id='1'>{</beginfold id='1'> |l| l =~ /d$/<endfold id='1'>}</endfold id='1'>
0147 print i.chomp, " "
0148 <endfold id='1'>end</endfold id='1'>
0149
0150 <beginfold id='1'>class</beginfold id='1'> Periods
0151 <beginfold id='1'>def</beginfold id='1'> each
0152 yield "Classical"
0153 yield "Jazz"
0154 yield "Rock"
0155 <endfold id='1'>end</endfold id='1'>
0156 <endfold id='1'>end</endfold id='1'>
0157
0158
0159 periods = Periods.new
0160 <beginfold id='1'>for</beginfold id='1'> genre in periods
0161 print genre, " "
0162 <endfold id='1'>end</endfold id='1'>
0163
0164 <beginfold id='1'>while</beginfold id='1'> gets
0165 next if /^\s*#/ # skip comments
0166 break if /^END/ # stop at end
0167 # substitute stuff in backticks and try again
0168 redo if gsub!(/`(.*?)`/) <beginfold id='1'>{</beginfold id='1'> eval($1) <endfold id='1'>}</endfold id='1'>
0169 # process line ...
0170 <endfold id='1'>end</endfold id='1'>
0171
0172 i=0
0173 loop <beginfold id='1'>do</beginfold id='1'>
0174 i += 1
0175 next if i < 3
0176 print i
0177 break if i > 4
0178 <endfold id='1'>end</endfold id='1'>
0179
0180 <beginfold id='1'>for</beginfold id='1'> i in 1..100
0181 print "Now at #{i}. Restart? "
0182 retry if gets =~ /^y/i
0183 <endfold id='1'>end</endfold id='1'>
0184
0185 <beginfold id='1'>def</beginfold id='1'> doUntil(cond)
0186 yield
0187 retry unless cond
0188 <endfold id='1'>end</endfold id='1'>
0189
0190 i = 0
0191 doUntil(i > 3) <beginfold id='1'>{</beginfold id='1'>
0192 print i, " "
0193 i += 1
0194 <endfold id='1'>}</endfold id='1'>
0195
0196 <beginfold id='1'>def</beginfold id='1'> system_call
0197 # ... code which throws SystemCallError
0198 <endfold id='1'></endfold id='1'><beginfold id='1'>rescue</beginfold id='1'> SystemCallError
0199 $stderr.print "IO failed: " + $!
0200 opFile.close
0201 File.delete(opName)
0202 raise
0203 <endfold id='1'>end</endfold id='1'>
0204
0205 <beginfold id='1'>class</beginfold id='1'> ClientManager
0206
0207 # constructor
0208 <beginfold id='1'>def</beginfold id='1'> initialize(dbase)
0209 @dbClient = DBClient.new(dbase)
0210 @clients = Clients.new
0211 <endfold id='1'>end</endfold id='1'>
0212
0213 <beginfold id='1'>def</beginfold id='1'> prout(a, b, xy="jj") 24 <endfold id='1'>end</endfold id='1'>
0214 ###############################################################
0215 #
0216 # CLIENTS SECTION
0217 #
0218 ###############################################################
0219
0220 # update the clients object by retrieving the related data from the database
0221 # returns the number of clients
0222 <beginfold id='1'>def</beginfold id='1'> refreshClients
0223 @clients.clean
0224 <beginfold id='1'>unless</beginfold id='1'> @sqlQuery.nil? then
0225 @sqlQuery.selectClient.each <beginfold id='1'>do</beginfold id='1'> |row|
0226 @clients.addClient(row[0],row[1],row[2],row[3],row[4],row[5], row[6], row[7], row[8])
0227 <endfold id='1'>end</endfold id='1'>
0228 <endfold id='1'></endfold id='1'><beginfold id='1'>else</beginfold id='1'>
0229 puts "SqlQuery wasn't created : cannot read data from database"
0230 <endfold id='1'>end</endfold id='1'>
0231 return @clients.length
0232 <endfold id='1'>end</endfold id='1'>
0233
0234 # insert a client in the database and refreshes the local clients object
0235 # we assume that none of the arguments is null
0236 # we assume that the client, identified by raison_sociale doesn't already exists
0237 <beginfold id='1'>def</beginfold id='1'> addClient(raison_sociale, division, departement, adresse, cp, ville, nom_contact, tel_contact)
0238 id = "0"
0239 <beginfold id='1'>unless</beginfold id='1'> @sqlQuery.nil? then
0240 id = @sqlQuery.insertClient(raison_sociale, division, departement, adresse, cp, ville, nom_contact,tel_contact)
0241 <endfold id='1'></endfold id='1'><beginfold id='1'>else</beginfold id='1'>
0242 puts "SqlQuery wasn't created : database update cannot be performed"
0243 <endfold id='1'>end</endfold id='1'>
0244 @clients.addClient(id, raison_sociale, division, departement, adresse, cp, ville, nom_contact, tel_contact) # synchronize local object with DB
0245 <endfold id='1'>end</endfold id='1'>
0246
0247 # deletes a client from the database and updates the local Clients object accordingly
0248 <beginfold id='1'>def</beginfold id='1'> delClient(nomclient_brut)
0249 raison_sociale, div, dep = Clients.getIdentifiers(nomclient_brut)
0250 listeContratsExp, listeContratsSup, listeContratsProd, listePropositionsExp, listePropositionsSup = []
0251
0252 listeContratsExp = @contratsExpertise.getContratsFromClient(nomclient_brut)
0253 listeContratsSup = @contratsSupport.getContratsFromClient(nomclient_brut)
0254 listeContratsProd = @contratsProduits.getContratsFromClient(nomclient_brut)
0255 listePropositionsExp = @propositionsExpertise.getPropositionsFromClient(nomclient_brut)
0256 listePropositionsSup = @propositionsSupport.getPropositionsFromClient(nomclient_brut)
0257
0258 <beginfold id='1'>unless</beginfold id='1'> @sqlQuery.nil? then
0259 @sqlQuery.deleteClient(raison_sociale, div, dep)
0260
0261 @sqlQuery.deleteContracts(Config::EXPERTISE,listeContratsExp)
0262 @sqlQuery.deleteContracts(Config::SUPPORT,listeContratsSup)
0263 @sqlQuery.deleteContracts(Config::PRODUIT,listeContratsProd)
0264 @sqlQuery.deletePropositions(Config::EXPERTISE,listePropositionsExp)
0265 @sqlQuery.deletePropositions(Config::SUPPORT,listePropositionsSup)
0266 <endfold id='1'></endfold id='1'><beginfold id='1'>else</beginfold id='1'>
0267 puts "SqlQuery wasn't created : database update cannot be performed"
0268 <endfold id='1'>end</endfold id='1'>
0269 @clients.delClient(raison_sociale,div,dep)
0270
0271 @contratsExpertise.deleteContracts(listeContratsExp)
0272 @contratsSupport.deleteContracts(listeContratsSup)
0273 @contratsProduits.deleteContracts(listeContratsProd)
0274 @propositionsExpertise.deletePropositions(listePropositionsExp)
0275 @propositionsSupport.deletePropositions(listePropositionsSup)
0276 <endfold id='1'>end</endfold id='1'>
0277 <endfold id='1'>end</endfold id='1'>
0278
0279 # Mixin module for HTML version 3 generation methods.
0280 <beginfold id='1'>module</beginfold id='1'> Html3 # :nodoc:
0281
0282 # The DOCTYPE declaration for this version of HTML
0283 <beginfold id='1'>def</beginfold id='1'> doctype
0284 <beginfold id='2'> %</beginfold id='2'>|<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><endfold id='2'>|</endfold id='2'>
0285 <endfold id='1'>end</endfold id='1'>
0286
0287 # Initialise the HTML generation methods for this version.
0288 <beginfold id='1'>def</beginfold id='1'> element_init
0289 extend TagMaker
0290 methods = ""
0291 # - -
0292 <beginfold id='1'>for</beginfold id='1'> element in<beginfold id='2'> %</beginfold id='2'>w[ A TT I B U STRIKE BIG SMALL SUB SUP EM STRONG
0293 DFN CODE SAMP KBD VAR CITE FONT ADDRESS DIV center MAP
0294 APPLET PRE XMP LISTING DL OL UL DIR MENU SELECT table TITLE
0295 STYLE SCRIPT H1 H2 H3 H4 H5 H6 TEXTAREA FORM BLOCKQUOTE
0296 CAPTION <endfold id='2'>]</endfold id='2'>
0297 methods +=<beginfold id='3'> <<-</beginfold id='3'>BEGIN + nn_element_def(element) + <<-END
0298 def #{element.downcase}(attributes = {})
0299 <endfold id='3'>BEGIN</endfold id='3'>
0300 <endfold id='1'>end</endfold id='1'>
0301 END
0302 <endfold id='1'>end</endfold id='1'>
0303
0304 # - O EMPTY
0305 <beginfold id='1'>for</beginfold id='1'> element in<beginfold id='2'> %</beginfold id='2'>w[ IMG BASE BASEFONT BR AREA LINK PARAM HR INPUT
0306 ISINDEX META <endfold id='2'>]</endfold id='2'>
0307 methods +=<beginfold id='3'> <<-</beginfold id='3'>BEGIN + nOE_element_def(element) + <<-END
0308 def #{element.downcase}(attributes = {})
0309 <endfold id='3'>BEGIN</endfold id='3'>
0310 <endfold id='1'>end</endfold id='1'>
0311 END
0312 <endfold id='1'>end</endfold id='1'>
0313
0314 # O O or - O
0315 <beginfold id='1'>for</beginfold id='1'> element in<beginfold id='2'> %</beginfold id='2'>w[ HTML HEAD BODY P PLAINTEXT DT DD LI OPTION tr
0316 th td <endfold id='2'>]</endfold id='2'>
0317 methods +=<beginfold id='3'> <<-</beginfold id='3'>BEGIN + nO_element_def(element) + <<-END
0318 def #{element.downcase}(attributes = {})
0319 <endfold id='3'>BEGIN</endfold id='3'>
0320 <endfold id='1'>end</endfold id='1'>
0321 END
0322 <endfold id='1'>end</endfold id='1'>
0323 eval(methods)
0324 <endfold id='1'>end</endfold id='1'>
0325
0326 <endfold id='1'>end</endfold id='1'>
0327
0328 # following snippet from Webrick's log.rb
0329 # notice the erronous handling of the query method is_a?
0330 <beginfold id='1'>def</beginfold id='1'> format(arg)
0331 str <beginfold id='1'>= if</beginfold id='1'> arg.is_a?(Exception)
0332 "#{arg.class}: #{arg.message}\n\t" <<
0333 arg.backtrace.join("\n\t") << "\n"
0334 <endfold id='1'></endfold id='1'><beginfold id='1'>elsif</beginfold id='1'> arg.respond_to?(:to_str)
0335 arg.to_str
0336 <endfold id='1'></endfold id='1'><beginfold id='1'>else</beginfold id='1'>
0337 arg.inspect
0338 <endfold id='1'>end</endfold id='1'>
0339 <endfold id='1'>end</endfold id='1'>
0340
0341 # following snippet from Webrick's httputils.rb
0342 # Splitting regexps on several lines might be bad form,
0343 # but not illegal in Ruby.
0344 # This should probably be supported in the highlighting
0345 <beginfold id='1'>def</beginfold id='1'> split_header_value(str)
0346 str.scan(/((?:"(?:\\.|[^"])+?"|[^",]+)+)
0347 (?:,\s*|\Z)/xn).collect<beginfold id='1'>{</beginfold id='1'>|v| v[0] <endfold id='1'>}</endfold id='1'>
0348 <endfold id='1'>end</endfold id='1'>
0349
0350 # snippet from Net::Telnet
0351 string.gsub(/#{IAC}(
0352 [#{IAC}#{AO}#{AYT}#{DM}#{IP}#{NOP}]|
0353 [#{DO}#{DONT}#{WILL}#{WONT}]
0354 [#{OPT_BINARY}-#{OPT_NEW_ENVIRON}#{OPT_EXOPL}]|
0355 #{SB}[^#{IAC}]*#{IAC}#{SE}
0356 )/xno)
0357
0358 # following snippet from Webrick's httpresponse.rb
0359 # the HEREDOC is not recognized as such
0360 @body <<<beginfold id='3'> <<-</beginfold id='3'>_end_of_html_
0361 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
0362 <HTML>
0363 <HEAD><TITLE>#{HTMLUtils::escape(@reason_phrase)}</TITLE></HEAD>
0364 <BODY>
0365 <H1>#{HTMLUtils::escape(@reason_phrase)}</H1>
0366 #{HTMLUtils::escape(ex.message)}
0367 <HR>
0368 <endfold id='3'>_end_of_html_</endfold id='3'>
0369
0370
0371 # snippet from Webrick's httpproxy.rb
0372 # here we should make sure that the symbol definition ':' doesn't override
0373 # the module operator '::'
0374 Net::HTTP::version_1_2 if RUBY_VERSION < "1.7"
0375
0376 # snippet from Webrick's cookie.rb
0377 # the beginning of the regexp is erronously highlighted like an operator
0378 key, val = x.split(/=/,2)
0379
0380 # the following are division operators
0381 # it's a bit tricky to keep the operator apart from the regexp
0382 result = 8 / 4
0383 result /= divisor
0384
0385 # 2008-06-01 regexp and division operator syntax has been fixed:
0386 result = 8/4 # division
0387 result = 8/foo # division
0388 result = /8/ # regexp
0389 result = 8//4/ # division and regexp
0390
0391 10/10 # division
0392 10/ 10 # division
0393 10 /10 # division
0394 10 / 10 # division
0395
0396 foo/10 # division
0397 foo/ 10 # division
0398 foo /10/ # regexp
0399 foo / 10 # division
0400
0401 foo/10/10 # both division
0402 total/count/2 # both division
0403 total/(count/2) # both division
0404
0405 @foo/10 # division
0406 @foo /10 # division
0407
0408 "hello"/10 # division
0409 "hello" / 10 # division
0410
0411 /regexp//10 # division
0412 /regexp/ / 10 # division
0413
0414 Math::PI/10 # division
0415 Math::foo /rx/ # regexp
0416
0417 # 2008-06-05 similar fix for modulo operator:
0418
0419 10%4 # modulo
0420 10 %4 # modulo
0421 10% 4 # modulo
0422 10 % 4 # modulo
0423
0424 foo%4 # modulo
0425 # foo %4 # illegal %string
0426 foo% 4 # modulo
0427 foo % 4 # modulo
0428
0429 foo % (4) # modulo
0430
0431 foo <beginfold id='2'>%</beginfold id='2'>(4<endfold id='2'>)</endfold id='2'> # %string
0432 foo <beginfold id='2'>%</beginfold id='2'>q(4<endfold id='2'>)</endfold id='2'> # %string
0433 foo <beginfold id='2'>%</beginfold id='2'>Q(4<endfold id='2'>)</endfold id='2'> # %string
0434 foo <beginfold id='2'>%</beginfold id='2'>%4<endfold id='2'>%</endfold id='2'> # %string
0435
0436 foo =<beginfold id='2'> %</beginfold id='2'>|blah<endfold id='2'>|</endfold id='2'> # GDL input
0437 foo %<beginfold id='2'> %</beginfold id='2'>|blah<endfold id='2'>|</endfold id='2'> # modulo and GDL
0438
0439 # mix in any way you want
0440 result = 10//regexp//20/foo//regexp//20
0441
0442 # test cases for general delimited input
0443 # quoted strings
0444 <beginfold id='2'>%</beginfold id='2'>Q|this is a string<endfold id='2'>|</endfold id='2'>
0445 <beginfold id='2'>%</beginfold id='2'>Q{this is a string<endfold id='2'>}</endfold id='2'>
0446 <beginfold id='2'>%</beginfold id='2'>Q(this is a string<endfold id='2'>)</endfold id='2'>
0447 <beginfold id='2'>%</beginfold id='2'>Q<this is a string<endfold id='2'>></endfold id='2'>
0448 <beginfold id='2'>%</beginfold id='2'>Q[this is a string<endfold id='2'>]</endfold id='2'>
0449
0450 <beginfold id='2'>%</beginfold id='2'>|also a string<endfold id='2'>|</endfold id='2'>
0451 <beginfold id='2'>%</beginfold id='2'>{also a string<endfold id='2'>}</endfold id='2'>
0452 <beginfold id='2'>%</beginfold id='2'>(also a string<endfold id='2'>)</endfold id='2'>
0453 <beginfold id='2'>%</beginfold id='2'><also a string<endfold id='2'>></endfold id='2'>
0454 <beginfold id='2'>%</beginfold id='2'>[also a string<endfold id='2'>]</endfold id='2'>
0455
0456 # apostrophed strings
0457 <beginfold id='2'>%</beginfold id='2'>q|apostrophed<endfold id='2'>|</endfold id='2'>
0458 <beginfold id='2'>%</beginfold id='2'>q{apostrophed<endfold id='2'>}</endfold id='2'>
0459 <beginfold id='2'>%</beginfold id='2'>q(apostrophed<endfold id='2'>)</endfold id='2'>
0460 <beginfold id='2'>%</beginfold id='2'>q<apostrophed<endfold id='2'>></endfold id='2'>
0461 <beginfold id='2'>%</beginfold id='2'>q[apostrophed<endfold id='2'>]</endfold id='2'>
0462
0463 # regular expressions
0464 <beginfold id='2'>%</beginfold id='2'>r{expression<endfold id='2'>}</endfold id='2'>
0465 <beginfold id='2'>%</beginfold id='2'>r(expression<endfold id='2'>)</endfold id='2'>
0466 <beginfold id='2'>%</beginfold id='2'>r<expression<endfold id='2'>></endfold id='2'>
0467 <beginfold id='2'>%</beginfold id='2'>r[expression<endfold id='2'>]</endfold id='2'>
0468 <beginfold id='2'>%</beginfold id='2'>r|expression<endfold id='2'>|</endfold id='2'>
0469
0470 # shell commands
0471 <beginfold id='2'>%</beginfold id='2'>x{ls -l<endfold id='2'>}</endfold id='2'>
0472 <beginfold id='2'>%</beginfold id='2'>x(ls -l<endfold id='2'>)</endfold id='2'>
0473 <beginfold id='2'>%</beginfold id='2'>x<ls -l<endfold id='2'>></endfold id='2'>
0474 <beginfold id='2'>%</beginfold id='2'>x[ls -l<endfold id='2'>]</endfold id='2'>
0475
0476 # sometimes it's useful to have the command on multiple lines
0477 <beginfold id='2'>%</beginfold id='2'>x{ls -l |
0478 grep test <endfold id='2'>}</endfold id='2'>
0479
0480 # alternative syntax
0481 `ls -l`
0482 `echo ' '`
0483
0484 # token array
0485 <beginfold id='2'>%</beginfold id='2'>w{one two three<endfold id='2'>}</endfold id='2'>
0486 <beginfold id='2'>%</beginfold id='2'>w(one two three<endfold id='2'>)</endfold id='2'>
0487 <beginfold id='2'>%</beginfold id='2'>w<one two three<endfold id='2'>></endfold id='2'>
0488 <beginfold id='2'>%</beginfold id='2'>w[one two three<endfold id='2'>]</endfold id='2'>
0489
0490 # snippet from Net::IMAP
0491 # I object to putting String, Integer and Array into kernel methods.
0492 # While these classes are builtin in Ruby, this is an implementation detail
0493 # that should not be exposed to the user.
0494 # If we want to handle all std-lib classes, fine. But then they should be in their
0495 # own std-lib keyword category.
0496
0497 <beginfold id='1'>def</beginfold id='1'> send_data(data)
0498 <beginfold id='1'>case</beginfold id='1'> data
0499 when nil
0500 put_string("NIL")
0501 when String
0502 send_string_data(data)
0503 when Integer
0504 send_number_data(data)
0505 when Array
0506 send_list_data(data)
0507 when Time
0508 send_time_data(data)
0509 when Symbol
0510 send_symbol_data(data)
0511 <endfold id='1'></endfold id='1'><beginfold id='1'>else</beginfold id='1'>
0512 data.send_data(self)
0513 <endfold id='1'>end</endfold id='1'>
0514 <endfold id='1'>end</endfold id='1'>
0515
0516 # snippet from Net::POP
0517 # class names can have numbers in them as long as they don't begin with numbers
0518 # Ruby doesn't internally really make much of a difference between a class name and a constant
0519
0520 # class aliases
0521 POP = POP3
0522 POPSession = POP3
0523 POP3Session = POP3
0524
0525 # "member access"
0526 POP::Session.COUNT.attribute.calc_with(2)<beginfold id='1'>{</beginfold id='1'> |arg| puts arg <endfold id='1'>}</endfold id='1'>
0527
0528 # snippet from Net::SMTP
0529 # This breaks the code folding. I think we would need to
0530 # handle the '\' that continues the statement to the next line
0531 # in some way to make these kind of things not break something.
0532 raise ArgumentError, 'both user and secret are required'\
0533 unless user and secret
0534
0535 # string escapes must detect escaping the escape char
0536 str = "\\"
0537 str = "\\\\"
0538 # this is not part of the string
0539 <beginfold id='2'>%</beginfold id='2'>x{echo \\\}\\<endfold id='2'>}</endfold id='2'> # prints \}\
0540 # this is not part of the command
0541
0542 # these are all symbols
0543 :abc
0544 :abc!
0545 :abc?
0546 :abc=
0547 :[]
0548 :[]=
0549 :@abc
0550 :@@abc
0551 :$abc
0552
0553 # squiggly HEREDOC
0554 <beginfold id='3'> <<~</beginfold id='3'>HEREDOC
0555 Hello!!
0556 <endfold id='3'>HEREDOC</endfold id='3'>
0557
0558 # HEREDOC with backticks
0559 <beginfold id='3'><<</beginfold id='3'>`HEREDOC`
0560 echo "hello"
0561 <endfold id='3'>HEREDOC</endfold id='3'>
0562
0563 # do not highlight HEREDOC markers after the "class" keyword
0564 # (singleton class definition) (bug: #358273)
0565 <beginfold id='1'>class</beginfold id='1'> <<Foo = Object.new
0566 attr_accessor :foo
0567 <endfold id='1'>end</endfold id='1'>
0568 singleton_class = ( <beginfold id='1'>class</beginfold id='1'> <<foo; self; <endfold id='1'>end</endfold id='1'> )
0569
0570 # highlight regular expressions after ": " (bug: #361875)
0571 get 'files/:slug/:filename', to: 'files#download', slug: /^[a-z]+$/, filename: <beginfold id='2'>%</beginfold id='2'>r|^[/\s]+$<endfold id='2'>|</endfold id='2'>
0572 @@hello!: /regexp/
0573 []=: <beginfold id='2'>%</beginfold id='2'>r!regexp<endfold id='2'>!</endfold id='2'>
0574
0575 # refinements and its usage
0576 <beginfold id='1'>module</beginfold id='1'> Constantize
0577 refine String <beginfold id='1'>do</beginfold id='1'>
0578 <beginfold id='1'>def</beginfold id='1'> constantize
0579 ::Kernel.const_get(self)
0580 <endfold id='1'>end</endfold id='1'>
0581 <endfold id='1'>end</endfold id='1'>
0582 <endfold id='1'>end</endfold id='1'>
0583
0584 <beginfold id='1'>class</beginfold id='1'> MyClass
0585 using Constantize
0586
0587 SOME_CONST = "Kate is cool!"
0588
0589 <beginfold id='1'>def</beginfold id='1'> self.method_using_refinement
0590 "MyClass::SOME_CONST".constantize
0591 <endfold id='1'>end</endfold id='1'>
0592 <endfold id='1'>end</endfold id='1'>
0593
0594 puts MyClass.method_using_refinement