diff options
Diffstat (limited to 'kate/tests/highlight.rb')
-rw-r--r-- | kate/tests/highlight.rb | 480 |
1 files changed, 480 insertions, 0 deletions
diff --git a/kate/tests/highlight.rb b/kate/tests/highlight.rb new file mode 100644 index 000000000..96061c1d0 --- /dev/null +++ b/kate/tests/highlight.rb @@ -0,0 +1,480 @@ +# This file is a testcase for the highlighting of Ruby code +# It's not executable code, but a collection of code snippets +# + +require 'Config' +require 'DO/Clients' +require 'DO/DBClients' + + def CGI::escapeElement(string, *elements) + elements = elements[0] if elements[0].kind_of?(Array) + unless elements.empty? + string.gsub(/<\/?(?:#{elements.join("|")})(?!\w)(?:.|\n)*?>/ni) do + CGI::escapeHTML($&) + end + else + string + end + end + +case inputLine + when "debug" + dumpDebugInfo + dumpSymbols + when /p\s+(\w+)/ + dumpVariable($1) + when "quit", "exit" + exit + else + print "Illegal command: #{inputLine}" +end + + +kind = case year #hi there + when 1850..1889 then "Blues" + when 1890..1909 then "Ragtime" + when 1910..1929 then "New Orleans Jazz" + when 1930..1939 then "Swing" + when 1940..1950 then "Bebop" + else "Jazz" + end + + # URL-encode a string. + # url_encoded_string = CGI::escape("'Stop!' said Fred") + # # => "%27Stop%21%27+said+Fred" + def CGI::escape(string) + string.gsub(/([^ a-zA-Z0-9_.-]+)/n) do + '%' + $1.unpack('H2' * $1.size).join('%').upcase + end.tr(' ', '+') + end + + +# Class ClientManager +# +# definition : Import, store and export the various data used by the application. +# This class is the sole interface between the application and the underlying database. + +mon, day, year = $1, $2, $3 if /(\d\d)-(\d\d)-(\d\d)/ +puts "a = #{a}" if fDebug +print total unless total == 0 + +while gets + next if /^#/ # Skip comments + parseLine unless /^$/ # Don't parse empty lines +end + +if artist == "John Coltrane" #hi there + artist = "'Trane" #hi there +end unless nicknames == "no" #hi there + +handle = if aSong.artist == "Gillespie" then #hi there + "Dizzy" + elsif aSong.artist == "Parker" then + "Bird" + else #hi there + "unknown" + end + +if aSong.artist == "Gillespie" then handle = "Dizzy" +elsif aSong.artist == "Parker" then handle = "Bird" +else handle = "unknown" +end #hi there + +if aSong.artist == "Gillespie" then + handle = "Dizzy" +elsif aSong.artist == "Parker" then + handle = "Bird" +else + handle = "unknown" +end + +if aSong.artist == "Gillespie" + handle = "Dizzy" +elsif aSong.artist == "Parker" + handle = "Bird" +else + handle = "unknown" +end + + case line + when /title=(.*)/ + puts "Title is #$1" + when /track=(.*)/ + puts "Track is #$1" + when /artist=(.*)/ + puts "Artist is #$1" +end + +case shape + when Square, Rectangle + # ... + when Circle + # ... + when Triangle + # ... + else + # ... +end + + +until playList.duration > 60 #hi there + playList.add(songList.pop) +end + +3.times do + print "Ho! " +end + +loop { + # block ... +} + +songList.each do |aSong| + aSong.play +end + +for aSong in songList + aSong.play +end + +for i in ['fee', 'fi', 'fo', 'fum'] + print i, " " +end +for i in 1..3 + print i, " " +end +for i in File.open("ordinal").find_all { |l| l =~ /d$/} + print i.chomp, " " +end + +class Periods + def each + yield "Classical" + yield "Jazz" + yield "Rock" + end +end + + +periods = Periods.new +for genre in periods + print genre, " " +end + +while gets + next if /^\s*#/ # skip comments + break if /^END/ # stop at end + # substitute stuff in backticks and try again + redo if gsub!(/`(.*?)`/) { eval($1) } + # process line ... +end + +i=0 +loop do + i += 1 + next if i < 3 + print i + break if i > 4 +end + +for i in 1..100 + print "Now at #{i}. Restart? " + retry if gets =~ /^y/i +end + +def doUntil(cond) + yield + retry unless cond +end + +i = 0 +doUntil(i > 3) { + print i, " " + i += 1 +} + +def system_call + # ... code which throws SystemCallError +rescue SystemCallError + $stderr.print "IO failed: " + $! + opFile.close + File.delete(opName) + raise +end + +class ClientManager + + # constructor + def initialize(dbase) + @dbClient = DBClient.new(dbase) + @clients = Clients.new + end + + def prout(a, b, xy="jj") 24 end + ############################################################### + # + # CLIENTS SECTION + # + ############################################################### + + # update the clients object by retrieving the related data from the database + # returns the number of clients + def refreshClients + @clients.clean + unless @sqlQuery.nil? then + @sqlQuery.selectClient.each do |row| + @clients.addClient(row[0],row[1],row[2],row[3],row[4],row[5], row[6], row[7], row[8]) + end + else + puts "SqlQuery wasn't created : cannot read data from database" + end + return @clients.length + end + + # insert a client in the database and refreshes the local clients object + # we assume that none of the arguments is null + # we assume that the client, identified by raison_sociale doesn't already exists + def addClient(raison_sociale, division, departement, adresse, cp, ville, nom_contact, tel_contact) + id = "0" + unless @sqlQuery.nil? then + id = @sqlQuery.insertClient(raison_sociale, division, departement, adresse, cp, ville, nom_contact,tel_contact) + else + puts "SqlQuery wasn't created : database update cannot be performed" + end + @clients.addClient(id, raison_sociale, division, departement, adresse, cp, ville, nom_contact, tel_contact) # synchronize local object with DB + end + + # deletes a client from the database and updates the local Clients object accordingly + def delClient(nomclient_brut) + raison_sociale, div, dep = Clients.getIdentifiers(nomclient_brut) + listeContratsExp, listeContratsSup, listeContratsProd, listePropositionsExp, listePropositionsSup = [] + + listeContratsExp = @contratsExpertise.getContratsFromClient(nomclient_brut) + listeContratsSup = @contratsSupport.getContratsFromClient(nomclient_brut) + listeContratsProd = @contratsProduits.getContratsFromClient(nomclient_brut) + listePropositionsExp = @propositionsExpertise.getPropositionsFromClient(nomclient_brut) + listePropositionsSup = @propositionsSupport.getPropositionsFromClient(nomclient_brut) + + unless @sqlQuery.nil? then + @sqlQuery.deleteClient(raison_sociale, div, dep) + + @sqlQuery.deleteContracts(Config::EXPERTISE,listeContratsExp) + @sqlQuery.deleteContracts(Config::SUPPORT,listeContratsSup) + @sqlQuery.deleteContracts(Config::PRODUIT,listeContratsProd) + @sqlQuery.deletePropositions(Config::EXPERTISE,listePropositionsExp) + @sqlQuery.deletePropositions(Config::SUPPORT,listePropositionsSup) + else + puts "SqlQuery wasn't created : database update cannot be performed" + end + @clients.delClient(raison_sociale,div,dep) + + @contratsExpertise.deleteContracts(listeContratsExp) + @contratsSupport.deleteContracts(listeContratsSup) + @contratsProduits.deleteContracts(listeContratsProd) + @propositionsExpertise.deletePropositions(listePropositionsExp) + @propositionsSupport.deletePropositions(listePropositionsSup) + end +end + + # Mixin module for HTML version 3 generation methods. + module Html3 # :nodoc: + + # The DOCTYPE declaration for this version of HTML + def doctype + %|<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">| + end + + # Initialise the HTML generation methods for this version. + def element_init + extend TagMaker + methods = "" + # - - + for element in %w[ A TT I B U STRIKE BIG SMALL SUB SUP EM STRONG + DFN CODE SAMP KBD VAR CITE FONT ADDRESS DIV center MAP + APPLET PRE XMP LISTING DL OL UL DIR MENU SELECT table TITLE + STYLE SCRIPT H1 H2 H3 H4 H5 H6 TEXTAREA FORM BLOCKQUOTE + CAPTION ] + methods += <<-BEGIN + nn_element_def(element) + <<-END + def #{element.downcase}(attributes = {}) + BEGIN + end + END + end + + # - O EMPTY + for element in %w[ IMG BASE BASEFONT BR AREA LINK PARAM HR INPUT + ISINDEX META ] + methods += <<-BEGIN + nOE_element_def(element) + <<-END + def #{element.downcase}(attributes = {}) + BEGIN + end + END + end + + # O O or - O + for element in %w[ HTML HEAD BODY P PLAINTEXT DT DD LI OPTION tr + th td ] + methods += <<-BEGIN + nO_element_def(element) + <<-END + def #{element.downcase}(attributes = {}) + BEGIN + end + END + end + eval(methods) + end + + end + +# following snippet from Webrick's log.rb +# notice the erronous handling of the query method is_a? +def format(arg) + str = if arg.is_a?(Exception) + "#{arg.class}: #{arg.message}\n\t" << + arg.backtrace.join("\n\t") << "\n" + elsif arg.respond_to?(:to_str) + arg.to_str + else + arg.inspect + end +end + +# following snippet from Webrick's httputils.rb +# Splitting regexps on several lines might be bad form, +# but not illegal in Ruby. +# This should probably be supported in the highlighting +def split_header_value(str) + str.scan(/((?:"(?:\\.|[^"])+?"|[^",]+)+) + (?:,\s*|\Z)/xn).collect{|v| v[0] } +end + +# snippet from Net::Telnet +string.gsub(/#{IAC}( + [#{IAC}#{AO}#{AYT}#{DM}#{IP}#{NOP}]| + [#{DO}#{DONT}#{WILL}#{WONT}] + [#{OPT_BINARY}-#{OPT_NEW_ENVIRON}#{OPT_EXOPL}]| + #{SB}[^#{IAC}]*#{IAC}#{SE} + )/xno) + +# following snippet from Webrick's httpresponse.rb +# the HEREDOC is not recognized as such +@body << <<-_end_of_html_ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> +<HTML> + <HEAD><TITLE>#{HTMLUtils::escape(@reason_phrase)}</TITLE></HEAD> + <BODY> + <H1>#{HTMLUtils::escape(@reason_phrase)}</H1> + #{HTMLUtils::escape(ex.message)} + <HR> +_end_of_html_ + + +# snippet from Webrick's httpproxy.rb +# here we should make sure that the symbol definition ':' doesn't override +# the module operator '::' +Net::HTTP::version_1_2 if RUBY_VERSION < "1.7" + +# snippet from Webrick's cookie.rb +# the beginning of the regexp is erronously highlighted like an operator +key, val = x.split(/=/,2) + +# the following are division operators +# it's a bit tricky to keep the operator apart from the regexp +# we currently require a space after the operator, but that is not quite right either +result = 8 / 4 +result /= divisor + +# test cases for general delimited input +# quoted strings +%Q|this is a string| +%Q{this is a string} +%Q(this is a string) +%Q<this is a string> +%Q[this is a string] + +%|also a string| +%{also a string} +%(also a string) +%<also a string> +%[also a string] + +# apostrophed strings +%q|apostrophed| +%q{apostrophed} +%q(apostrophed) +%q<apostrophed> +%q[apostrophed] + +# regular expressions +%r{expression} +%r(expression) +%r<expression> +%r[expression] +%r|expression| + +# shell commands +%x{ls -l} +%x(ls -l) +%x<ls -l> +%x[ls -l] + +# sometimes it's useful to have the command on multiple lines +%x{ls -l | +grep test } + +# token array +%w{one two three} +%w(one two three) +%w<one two three> +%w[one two three] + +# snippet from Net::IMAP +# I object to putting String, Integer and Array into kernel methods. +# While these classes are builtin in Ruby, this is an implementation detail +# that should not be exposed to the user. +# If we want to handle all std-lib classes, fine. But then they should be in their +# own std-lib keyword category. + +def send_data(data) + case data + when nil + put_string("NIL") + when String + send_string_data(data) + when Integer + send_number_data(data) + when Array + send_list_data(data) + when Time + send_time_data(data) + when Symbol + send_symbol_data(data) + else + data.send_data(self) + end +end + +# snippet from Net::POP +# class names can have numbers in them as long as they don't begin with numbers +# Ruby doesn't internally really make much of a difference between a class name and a constant + +# class aliases + POP = POP3 + POPSession = POP3 + POP3Session = POP3 + +# "member access" +POP::Session.COUNT.attribute.calc_with(2){ |arg| puts arg } + +# snippet from Net::SMTP +# This breaks the code folding. I think we would need to +# handle the '\' that continues the statement to the next line +# in some way to make these kind of things not break something. +raise ArgumentError, 'both user and secret are required'\ + unless user and secret + +# string escapes must detect escaping the escape char +str = "\\" +str = "\\\\" +# this is not part of the string +%x{echo \\\}\\} # prints \}\ +# this is not part of the command |