diff --git a/lib/cgi.rb b/lib/cgi.rb index 1b55f0ac95..1b5dc7d5b0 100644 --- a/lib/cgi.rb +++ b/lib/cgi.rb @@ -1,10 +1,10 @@ =begin -== CGI SUPPORT LIBRARY +== NAME -cgi.rb +cgi.rb - cgi support library -Version 1.7.0 +Version 2.0.0 Copyright (C) 2000 Network Applied Communication Laboratory, Inc. @@ -176,6 +176,7 @@ HTTP_REFERER HTTP_USER_AGENT =end +raise "Please, use ruby1.5.4 or later." if RUBY_VERSION < "1.5.4" require 'English' @@ -184,10 +185,10 @@ class CGI CR = "\015" LF = "\012" EOL = CR + LF - VERSION = "1.7.0" - RELEASE_DATE = "2000-06-19" - VERSION_CODE = 170 - RELEASE_CODE = 20000619 + VERSION = "2.0.0" + RELEASE_DATE = "2000-09-12" + VERSION_CODE = 200 + RELEASE_CODE = 20000912 NEEDS_BINMODE = true if /WIN/ni === RUBY_PLATFORM PATH_SEPARATOR = {'UNIX'=>'/', 'WINDOWS'=>'\\', 'MACINTOSH'=>':'} @@ -239,13 +240,9 @@ class CGI url_encoded_string = CGI::escape("string") =end def CGI::escape(string) - string.gsub(/([^a-zA-Z0-9_.-])/n) do - if " " == $1 - "+" - else - sprintf("%%%02X", $1.unpack("C")[0]) - end - end + string.gsub(/([^ a-zA-Z0-9_.-]+)/n) do + '%' + $1.unpack('H2' * $1.size).join('%').upcase + end.tr(' ', '+') end @@ -254,8 +251,8 @@ class CGI string = CGI::unescape("url encoded string") =end def CGI::unescape(string) - string.gsub(/\+/n, ' ').gsub(/%([0-9a-fA-F]{2})/n) do - [$1.hex].pack("c") + string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do + [$1.delete('%')].pack('H*') end end @@ -285,13 +282,24 @@ class CGI if Integer($1) < 256 Integer($1).chr else - if $KCODE[0] == ?u or $KCODE[0] == ?U + if Integer($1) < 65536 and ($KCODE[0] == ?u or $KCODE[0] == ?U) [Integer($1)].pack("U") else - "#" + $1 + "&##{$1};" end end - when /\A#x([0-9a-f]+)\z/ni then $1.hex.chr + when /\A#x([0-9a-f]+)\z/ni then + if $1.hex < 256 + $1.hex.chr + else + if $1.hex < 65536 and ($KCODE[0] == ?u or $KCODE[0] == ?U) + [$1.hex].pack("U") + else + "&#x#{$1};" + end + end + else + "&#{$1};" end end end @@ -299,15 +307,19 @@ class CGI =begin === ESCAPE ELEMENT - print CGI::escapeElement("
", "A", "IMG") + print CGI::escapeElement('
', "A", "IMG") # "
<A HREF="url"></A>" - print CGI::escapeElement("
", ["A", "IMG"]) + print CGI::escapeElement('
', ["A", "IMG"]) # "
<A HREF="url"></A>" =end def CGI::escapeElement(string, *element) - string.gsub(/<\/?(?:#{element.join("|")})(?!\w)(?:.|\n)*?>/ni) do - CGI::escapeHTML($&) + unless element.empty? + string.gsub(/<\/?(?:#{element.join("|")})(?!\w)(?:.|\n)*?>/ni) do + CGI::escapeHTML($&) + end + else + string end end @@ -315,11 +327,11 @@ class CGI =begin === UNESCAPE ELEMENT print CGI::unescapeElement( - CGI::escapeHTML("
"), "A", "IMG") + CGI::escapeHTML('
'), "A", "IMG") # "<BR>" print CGI::unescapeElement( - CGI::escapeHTML("
"), ["A", "IMG"]) + CGI::escapeHTML('
'), ["A", "IMG"]) # "<BR>" =end def CGI::unescapeElement(string, *element) @@ -332,11 +344,11 @@ class CGI =begin === MAKE RFC1123 DATE STRING CGI::rfc1123_date(Time.now) - # Sut, 1 Jan 2000 00:00:00 GMT + # Sat, 1 Jan 2000 00:00:00 GMT =end def CGI::rfc1123_date(time) t = time.clone.gmtime - return format("%s, %.2d %s %d %.2d:%.2d:%.2d GMT", + return format("%s, %d %s %d %.2d:%.2d:%.2d GMT", RFC822_DAYS[t.wday], t.day, RFC822_MONTHS[t.month-1], t.year, t.hour, t.min, t.sec) end @@ -1732,7 +1744,7 @@ convert string charset, and set language to "ja". module Html4 def doctype - %|| + %|| end def element_init @@ -1778,7 +1790,7 @@ convert string charset, and set language to "ja". module Html4Tr def doctype - %|| + %|| end def element_init @@ -1826,7 +1838,7 @@ convert string charset, and set language to "ja". module Html4Fr def doctype - %|| + %|| end def element_init @@ -1908,6 +1920,21 @@ end == HISTORY +* Tue Sep 12 06:56:51 JST 2000 - wakou + * version 2.0.0 + * require ruby1.5.4 or later. (ruby1.4 doesn't have block_given? method.) + * improvement: CGI::escape(), CGI::unescape(). + thanks to WATANABE Hirofumi + * bug fix: CGI::escapeElement(). + * improvement: CGI::unescapeHTML(). + thanks to Kazuhiro NISHIYAMA + +* 2000/08/09 04:32:22 - matz + * improvement: CGI::pretty() + +* 2000/06/23 07:01:34 - matz + * change: iterator? --> block_given? + * Sun Jun 18 23:31:44 JST 2000 - wakou * version 1.7.0 * change: version syntax. old: x.yz, now: x.y.z diff --git a/lib/net/telnet.rb b/lib/net/telnet.rb index 9377d47888..43d80693ec 100644 --- a/lib/net/telnet.rb +++ b/lib/net/telnet.rb @@ -1,10 +1,10 @@ =begin -== SIMPLE TELNET CLIENT LIBRARY +== NAME -net/telnet.rb +net/telnet.rb - simple telnet client library -Version 1.5.0 +Version 1.6.0 Wakou Aoyama @@ -71,7 +71,7 @@ of cource, set sync=true or flush is necessary. line = host.cmd("string") line = host.cmd({"String" => "string", - "Prompt" => /[$%#>] \z/n, + "Match" => /[$%#>] \z/n, "Timeout" => 10}) @@ -79,7 +79,7 @@ of cource, set sync=true or flush is necessary. host.cmd("string"){|c| print c } host.cmd({"String" => "string", - "Prompt" => /[$%#>] \z/n, + "Match" => /[$%#>] \z/n, "Timeout" => 10}){|c| print c } of cource, set sync=true or flush is necessary. @@ -88,7 +88,17 @@ of cource, set sync=true or flush is necessary. === SEND STRING host.print("string") - # == host.write("string\n") + host.puts("string") + +Telnet#puts() adds "\n" to the last of "string". + +WARNING: Telnet#print() NOT adds "\n" to the last of "string", in the future. + +If "Telnetmode" option is true, then escape IAC code ("\xFF"). If +"Binmode" option is false, then convert "\n" to EOL(end of line) code. + +If "WILL SGA" and "DO BIN", then EOL is CR. If "WILL SGA", then EOL is +CR + NULL. If the other cases, EOL is CR + LF. === TOGGLE TELNET COMMAND INTERPRETATION @@ -109,25 +119,19 @@ of cource, set sync=true or flush is necessary. host.login("username", "password") host.login({"Name" => "username", - "Password" => "password", - "Prompt" => /[$%#>] \z/n, - "Timeout" => 10}) + "Password" => "password"}) if no password prompt: host.login("username") - host.login({"Name" => "username", - "Prompt" => /[$%#>] \z/n, - "Timeout" => 10}) + host.login({"Name" => "username"}) ==== REALTIME OUTPUT host.login("username", "password"){|c| print c } host.login({"Name" => "username", - "Password" => "password", - "Prompt" => /[$%#>] \z/n, - "Timeout" => 10}){|c| print c } + "Password" => "password"}){|c| print c } of cource, set sync=true or flush is necessary. @@ -235,10 +239,10 @@ module Net CR = "\015" LF = "\012" EOL = CR + LF - VERSION = "1.5.0" - RELEASE_DATE = "2000-06-19" - VERSION_CODE = 150 - RELEASE_CODE = 20000619 + VERSION = "1.6.0" + RELEASE_DATE = "2000-09-12" + VERSION_CODE = 160 + RELEASE_CODE = 20000912 def initialize(options) @options = options @@ -507,6 +511,10 @@ module Net end def print(string) + if $VERBOSE + $stderr.puts 'WARNING: Telnet#print("string") NOT adds "\n" to the last of "string", in the future.' + $stderr.puts ' cf. Telnet#puts().' + end string = string + "\n" string = string.gsub(/#{IAC}/no, IAC + IAC) if @options["Telnetmode"] @@ -526,6 +534,10 @@ module Net end end + def puts(string) + self.print(string) + end + def cmd(options) match = @options["Prompt"] time_out = @options["Timeout"] @@ -584,6 +596,12 @@ end == HISTORY +* Tue Sep 12 06:52:48 JST 2000 - wakou + * version 1.6.0 + * correct: document. + thanks to Kazuhiro NISHIYAMA + * add: Telnet#puts(). + * Sun Jun 18 23:31:44 JST 2000 - wakou * version 1.5.0 * change: version syntax. old: x.yz, now: x.y.z