Package: ruby-rchardet Version: 1.3-1 Severity: important Tags: patch Hi there,
Trying to use ruby-rchardet using ruby1.9.1 gives syntax errors when loading the module. See the following output: bram@debian:~$ irb1.9.1 -rrchardet <internal:lib/rubygems/custom_require>:29:in `require': /usr/lib/ruby/vendor_ruby/rchardet/chardistribution.rb:60: syntax error, unexpected ':', expecting keyword_then or ';' or '\n' (SyntaxError) /usr/lib/ruby/vendor_ruby/rchardet/chardistribution.rb:61: syntax error, unexpected ':', expecting keyword_then or ';' or '\n' /usr/lib/ruby/vendor_ruby/rchardet/chardistribution.rb:75: syntax error, unexpected ':', expecting keyword_then or ';' or '\n' /usr/lib/ruby/vendor_ruby/rchardet/chardistribution.rb:84: syntax error, unexpected keyword_end, expecting $end from <internal:lib/rubygems/custom_require>:29:in `require' from /usr/lib/ruby/vendor_ruby/rchardet.rb:25:in `<top (required)>' from <internal:lib/rubygems/custom_require>:29:in `require' from <internal:lib/rubygems/custom_require>:29:in `require' from /usr/lib/ruby/1.9.1/irb/init.rb:281:in `block in load_modules' from /usr/lib/ruby/1.9.1/irb/init.rb:279:in `each' from /usr/lib/ruby/1.9.1/irb/init.rb:279:in `load_modules' from /usr/lib/ruby/1.9.1/irb/init.rb:20:in `setup' from /usr/lib/ruby/1.9.1/irb.rb:53:in `start' from /usr/bin/irb1.9.1:12:in `<main>' This is because a number of "if" and "for" statements end with a colon, which was apparently valid in ruby1.8, but is not valid in ruby1.9.1. Attached is a patch that removes these colons, so that ruby-rchardet loads without syntax errors. Cheers, Bram Senders b...@proggerij.nl -- System Information: Debian Release: wheezy/sid APT prefers testing APT policy: (500, 'testing') Architecture: amd64 (x86_64) Kernel: Linux 3.0.0-1-amd64 (SMP w/1 CPU core) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages ruby-rchardet depends on: ii ruby 4.8 ii ruby1.8 [ruby-interpreter] 1.8.7.352-2 ii ruby1.9.1 [ruby-interpreter] 1.9.2.290-2 ruby-rchardet recommends no packages. ruby-rchardet suggests no packages. -- no debconf information
--- rchardet/chardistribution.rb.orig 2011-09-29 14:49:18.504002350 +0200 +++ rchardet/chardistribution.rb 2011-09-29 14:49:40.715993001 +0200 @@ -57,8 +57,8 @@ if order >= 0 @_mTotalChars += 1 # order is valid - if order < @_mTableSize: - if 512 > @_mCharToFreqOrder[order]: + if order < @_mTableSize + if 512 > @_mCharToFreqOrder[order] @_mFreqChars += 1 end end @@ -72,7 +72,7 @@ return SURE_NO end - if @_mTotalChars != @_mFreqChars: + if @_mTotalChars != @_mFreqChars r = @_mFreqChars / ((@_mTotalChars - @_mFreqChars) * @_mTypicalDistributionRatio) if r < SURE_YES return r @@ -227,7 +227,7 @@ # first byte range: 0xa0 -- 0xfe # second byte range: 0xa1 -- 0xfe # no validation needed here. State machine has done that - if aStr[0..0] >= "\xA0": + if aStr[0..0] >= "\xA0" return 94 * (aStr[0] - 0xA1) + aStr[1] - 0xa1 else return -1 --- rchardet/charsetgroupprober.rb.orig 2011-09-29 14:50:19.704001646 +0200 +++ rchardet/charsetgroupprober.rb 2011-09-29 14:51:26.724007530 +0200 @@ -40,7 +40,7 @@ super @_mActiveNum = 0 - for prober in @_mProbers: + for prober in @_mProbers if prober prober.reset() prober.active = true --- rchardet/escprober.rb.orig 2011-09-29 14:51:47.431989041 +0200 +++ rchardet/escprober.rb 2011-09-29 14:52:01.616000777 +0200 @@ -41,7 +41,7 @@ def reset super() - for codingSM in @_mCodingSM: + for codingSM in @_mCodingSM next if not codingSM codingSM.active = true codingSM.reset() --- rchardet/eucjpprober.rb.orig 2011-09-29 14:52:23.071997248 +0200 +++ rchardet/eucjpprober.rb 2011-09-29 14:52:35.936003051 +0200 @@ -56,7 +56,7 @@ elsif codingState == EItsMe @_mState = EFoundIt break - elsif codingState == EStart: + elsif codingState == EStart charLen = @_mCodingSM.get_current_charlen() if i == 0 @_mLastChar[1] = aBuf[0..0] --- rchardet/jpcntx.rb.orig 2011-09-29 14:53:02.935989236 +0200 +++ rchardet/jpcntx.rb 2011-09-29 14:53:26.824001825 +0200 @@ -150,9 +150,9 @@ @_mNeedToSkipCharNum = i - aLen @_mLastCharOrder = -1 else - if (order != -1) and (@_mLastCharOrder != -1): + if (order != -1) and (@_mLastCharOrder != -1) @_mTotalRel += 1 - if @_mTotalRel > MAX_REL_THRESHOLD: + if @_mTotalRel > MAX_REL_THRESHOLD @_mDone = true break end @@ -169,7 +169,7 @@ def get_confidence # This is just one way to calculate confidence. It works well for me. - if @_mTotalRel > MINIMUM_DATA_THRESHOLD: + if @_mTotalRel > MINIMUM_DATA_THRESHOLD return (@_mTotalRel - @_mRelSample[0]) / @_mTotalRel else return DONT_KNOW @@ -208,7 +208,7 @@ return -1, 1 unless aStr # find out current char's byte length aStr = aStr[0..1].join if aStr.class == Array - if (aStr[0..0] == "\x8E") or ((aStr[0..0] >= "\xA1") and (aStr[0..0] <= "\xFE")): + if (aStr[0..0] == "\x8E") or ((aStr[0..0] >= "\xA1") and (aStr[0..0] <= "\xFE")) charLen = 2 elsif aStr[0..0] == "\x8F" charLen = 3 --- rchardet/sjisprober.rb.orig 2011-09-29 14:53:36.076010091 +0200 +++ rchardet/sjisprober.rb 2011-09-29 14:53:46.235996348 +0200 @@ -71,7 +71,7 @@ @_mLastChar[0] = aBuf[aLen - 1.. aLen-1] - if get_state() == EDetecting: + if get_state() == EDetecting if @_mContextAnalyzer.got_enough_data() and (get_confidence() > SHORTCUT_THRESHOLD) @_mState = EFoundIt end --- rchardet/universaldetector.rb.orig 2011-09-29 14:54:15.824011206 +0200 +++ rchardet/universaldetector.rb 2011-09-29 14:54:28.324002819 +0200 @@ -91,11 +91,11 @@ end @_mGotData = true - if @result['encoding'] and (@result['confidence'] > 0.0): + if @result['encoding'] and (@result['confidence'] > 0.0) @done = true return end - if @_mInputState == EPureAscii: + if @_mInputState == EPureAscii if @_highBitDetector =~ (aBuf) @_mInputState = EHighbyte elsif (@_mInputState == EPureAscii) and @_escDetector =~ (@_mLastChar + aBuf) @@ -138,12 +138,12 @@ end @done = true - if @_mInputState == EPureAscii: + if @_mInputState == EPureAscii @result = {'encoding' => 'ascii', 'confidence' => 1.0} return @result end - if @_mInputState == EHighbyte: + if @_mInputState == EHighbyte confidences = {} @_mCharSetProbers.each{ |prober| confidences[prober] = prober.get_confidence } maxProber = @_mCharSetProbers.max{ |a,b| confidences[a] <=> confidences[b] } --- rchardet/utf8prober.rb.orig 2011-09-29 14:54:50.203995741 +0200 +++ rchardet/utf8prober.rb 2011-09-29 14:54:58.976001367 +0200 @@ -63,7 +63,7 @@ end end - if get_state() == EDetecting: + if get_state() == EDetecting if get_confidence() > SHORTCUT_THRESHOLD @_mState = EFoundIt end