]> git.wincent.com - wikitext.git/commitdiff
Various fixes for Ruby 2.0.0 compatibility
authorWincent Colaiuta <win@wincent.com>
Wed, 27 Feb 2013 05:22:45 +0000 (21:22 -0800)
committerWincent Colaiuta <win@wincent.com>
Wed, 27 Feb 2013 05:35:41 +0000 (21:35 -0800)
  - switch Gemfile source from :gemcutter to 'https://rubygems.org'
    (silences security warnings)
  - bump version number prior to 4.0.0 release
  - drop unnecessary `encoding` magic comments from source files
  - drop support for versions of Ruby < 2.0.0
  - make sure string_from_str() returns a string that is marked as UTF-8
    encoded; otherwise a string marked as "ASCII-8BIT" will be returned
    and string comparisons will fail; this was noticed due to the
    breakage of the "redlink" specs which were failing otherwise
  - drop references to now-dead iconv
  - swap some `proc` for `Proc.new`
  - swap some `lambda` for `expect` in the spec suite; this is not
    merely cosmetic as the LocalJumpError tests were failing without it
  - drop some "should" from `it` descriptions in the spec suite
  - loosen brittle TypeError assertions in spec suite which would
    otherwise have failed (the error message has changed since 1.9.x)
  - always use a space after a comma separating arguments
  - replace `not` and `or` with `!` and `!!`
  - use `__dir__` in lieu of `File.dirname(__FILE__)`
  - update copyright year ranges in touched files
  - update docs prior to release

Signed-off-by: Wincent Colaiuta <win@wincent.com>
25 files changed:
Gemfile
Gemfile.lock
README.rdoc
benchmarks/parsing.rb
benchmarks/profile_parsing.rb
benchmarks/tokenizing.rb
doc/RELEASE-NOTES
ext/extconf.rb
ext/parser.c
ext/str.c
lib/wikitext/version.rb
spec/encoding_spec.rb
spec/external_link_spec.rb
spec/fulltext_spec.rb
spec/img_spec.rb
spec/integration_spec.rb
spec/internal_link_spec.rb
spec/link_encoding_spec.rb
spec/link_sanitizing_spec.rb
spec/nowiki_spec.rb
spec/pre_spec.rb
spec/regressions_spec.rb
spec/spec_helper.rb
spec/wikitext_spec.rb
wikitext.gemspec

diff --git a/Gemfile b/Gemfile
index 632c37e041c5f43e168d13be527dd8a94dd9b7c1..fa75df15632305f9badb9a7ac0028e4b2ef4d221 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -1,3 +1,3 @@
-source :gemcutter
+source 'https://rubygems.org'
 
 gemspec
index bedd268d325db2879e2c8ba16e217a78f6cd1722..7344f03633c4773f63f98b6eed78c2993fbbf696 100644 (file)
@@ -1,10 +1,10 @@
 PATH
   remote: .
   specs:
-    wikitext (3.1)
+    wikitext (4.0)
 
 GEM
-  remote: http://rubygems.org/
+  remote: https://rubygems.org/
   specs:
     ZenTest (4.5.0)
     diff-lcs (1.1.3)
index 9a32baa3c1e3332315e9998b94ada6bc211de947..ad4b566cf678372ea8cc6d1fc75501603eb90c00 100644 (file)
@@ -426,6 +426,12 @@ Would produce:
       </li>
     </ol>
 
+= Ruby support
+
+Version 4.0.0 and above target Ruby 2.0.0 or higher.
+
+For older versions of Ruby, you may use the 3.1 release or older.
+
 = Rails support
 
 The Wikitext extension provides a template handler so that templates named
@@ -497,7 +503,7 @@ Other contributors that have submitted patches include:
 
 = License
 
-Copyright 2007-2012 Wincent Colaiuta. All rights reserved.
+Copyright 2007-2013 Wincent Colaiuta. All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
index 759285b06f0252909258a3ced757b5cbfea8f26f..c67fedc4bd0391bf75e0247ae151063aebd96b54 100755 (executable)
@@ -1,6 +1,5 @@
 #!/usr/bin/env ruby
-# encoding: utf-8
-# Copyright 2008-2009 Wincent Colaiuta. All rights reserved.
+# Copyright 2008-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
index 3f50cd324da997454ca459f2c9c57b68979f0fef..581d00134fd7bc764e8b601f03ffc29bf699c163 100755 (executable)
@@ -1,6 +1,5 @@
 #!/usr/bin/env ruby
-# encoding: utf-8
-# Copyright 2008-2009 Wincent Colaiuta. All rights reserved.
+# Copyright 2008-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
index 25a84d7e15b090cdb2af76ad5383e41ef9951521..d68358292de9c0e7ecbfe9799c7065d452d230f2 100755 (executable)
@@ -1,6 +1,5 @@
 #!/usr/bin/env ruby
-# encoding: utf-8
-# Copyright 2008-2009 Wincent Colaiuta. All rights reserved.
+# Copyright 2008-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
index 5fd06fe5db8fcc0f7aca9a88b0cf278ba1c2395f..1b0b23e8995697b47c5e888711a1e44a89afed2f 100644 (file)
@@ -6,6 +6,11 @@ require any user or developer action are generally not included
 in these release notes. For a full listing of all changes see
 the source code repository at: http://git.wincent.com.
 
+= Changes in 4.0
+
+* requires Ruby 2.0.0; for older versions of Ruby please use a previous
+  Wikitext release
+
 = Changes in 3.1
 
 * the +link_proc+ parse option can now be set as an attribute on the parser
index f49c9c448a1f4978503b9cb0e0c47dc9dcf7f210..04f4b351ec0ae487899366e19bc96470c6ce5472 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2008-2009 Wincent Colaiuta. All rights reserved.
+# Copyright 2008-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
@@ -29,10 +29,8 @@ def missing item
 end
 
 case RUBY_VERSION
-when /\A1\.8/
-  $CFLAGS += ' -DRUBY_1_8_x'
-when /\A1\.9/
-  $CFLAGS += ' -DRUBY_1_9_x'
+when /\A2\.0/
+  $CFLAGS += ' -DRUBY_2_0_x'
 else
   raise "unsupported Ruby version: #{RUBY_VERSION}"
 end
index 86791252fb4920f475e1e49f756dde76faf9842a..283ea5e681e120d2d89c39a7aea28c1c99c06117 100644 (file)
@@ -2585,21 +2585,11 @@ return_output:
     str_append(parser->output, null_str, 1); // null-terminate
     len = parser->output->len - 1; // don't count null termination
 
-#if defined(RUBY_1_9_x)
     VALUE out = rb_str_buf_new(RSTRING_EMBED_LEN_MAX + 1);
     free(RSTRING_PTR(out));
     RSTRING(out)->as.heap.aux.capa = len;
     RSTRING(out)->as.heap.ptr = parser->output->ptr;
     RSTRING(out)->as.heap.len = len;
-#elif defined(RUBY_1_8_x)
-    VALUE out = rb_str_new2("");
-    free(RSTRING_PTR(out));
-    RSTRING(out)->len = len;
-    RSTRING(out)->aux.capa = len;
-    RSTRING(out)->ptr = parser->output->ptr;
-#else
-#error unsupported RUBY_VERSION
-#endif
     parser->output->ptr = NULL; // don't double-free
     return out;
 }
index 322a9f3aefcf49eee3f6ce9619963cca91ff42b0..28b8444bf2c4076cd594f3b4710250fe2d3aeeef 100644 (file)
--- a/ext/str.c
+++ b/ext/str.c
@@ -54,7 +54,9 @@ str_t *str_new_from_string(VALUE string)
 
 VALUE string_from_str(str_t *str)
 {
-    return rb_str_new(str->ptr, str->len);
+    VALUE string = rb_str_new(str->ptr, str->len);
+    rb_funcall(string, rb_intern("force_encoding"), 1, rb_str_new2("UTF-8"));
+    return string;
 }
 
 void str_grow(str_t *str, long len)
index 452ba72cd9a8c4d93b3a929e1530f09eedcbcf51..c9840c42c18d9c673b821f209e838050ecbfebc3 100644 (file)
@@ -22,5 +22,5 @@
 # POSSIBILITY OF SUCH DAMAGE.
 
 module Wikitext
-  VERSION = '3.1.0.99'
+  VERSION = '4.0'
 end # module Wikitext
index bbeb916fe57ca245f72a1ee2f55b0e50d7ad9cfc..62d46a5f217c0accf820826bcd7fef233698f33c 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
+# Copyright 2007-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
@@ -22,7 +22,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 
 require 'spec_helper'
-require 'iconv'
 
 describe Wikitext, 'with invalidly encoded input' do
   before do
index b106a69e39f46d92886898b9e4ee1cd12bd44381..2980154f4098bddc2466ad5933d5285ff5bc5d20 100644 (file)
@@ -1,5 +1,4 @@
-# encoding: utf-8
-# Copyright 2007-2012 Wincent Colaiuta. All rights reserved.
+# Copyright 2007-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
index 8c4d91492ffd6b8e9ebb75d721631ba0a70002ba..a29d20dde85439af3b59c7ec813981bafc350f75 100644 (file)
@@ -1,5 +1,4 @@
-# encoding: utf-8
-# Copyright 2008-2010 Wincent Colaiuta. All rights reserved.
+# Copyright 2008-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
index a89e56d5a385633f8a5b8668de00d7a2857e3d86..b49eca685e532426e553d18cabdd3d7f2c4e3019 100644 (file)
@@ -1,5 +1,4 @@
-# encoding: utf-8
-# Copyright 2008-2010 Wincent Colaiuta. All rights reserved.
+# Copyright 2008-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
index b461f7932d7ee4c4f82b8c3b511c730f54196645..0c5e7330d7d0499370cc7e34080199bce516f73d 100644 (file)
@@ -1,5 +1,4 @@
-# encoding: utf-8
-# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
+# Copyright 2007-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
index e8d06ab3a726a080ec64d7d484109319ec9144c5..c1c0fd1f51495a7a330098e1361f608c4f369e0f 100644 (file)
@@ -1,4 +1,3 @@
-# encoding: utf-8
 # Copyright 2007-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -166,16 +165,14 @@ describe Wikitext::Parser, 'internal links (space to underscore off)' do
       lambda { @parser.parse('[[foo]]', :link_proc => lambda { |target| raise 'bar' }) }.should raise_error(RuntimeError, /bar/)
     end
 
-    it 'should complain if the link proc returns a non-stringy object (Proc object version)' do
-      lambda {
-        @parser.parse '[[foo]]', :link_proc => Proc.new { 1 }
-      }.should raise_error(TypeError, /can't convert/)
+    it 'complains if the link proc returns a non-stringy object (Proc object version)' do
+      expect { @parser.parse '[[foo]]', link_proc: proc { 1 } }.
+        to raise_error(TypeError)
     end
 
-    it 'should complain if the link proc returns a non-stringy object (lambda version)' do
-      lambda {
-        @parser.parse '[[foo]]', :link_proc => lambda { 1 }
-      }.should raise_error(TypeError, /can't convert/)
+    it 'complains if the link proc returns a non-stringy object (lambda version)' do
+      expect { @parser.parse '[[foo]]', link_proc: lambda { |target| 1 } }.
+        to raise_error(TypeError)
     end
 
     # a couple of Ruby's idiosynchrasies: different behaviour of lambdas and Procs
@@ -191,16 +188,16 @@ describe Wikitext::Parser, 'internal links (space to underscore off)' do
       }.should raise_error(ArgumentError, /wrong number/)
     end
 
-    it 'should complain when "return" is used inside a "Proc.new" block' do
-      lambda {
-        @parser.parse '[[foo]]', :link_proc => Proc.new { return 'bar' }
-      }.should raise_error(LocalJumpError)
+    it 'complains when "return" is used inside a "Proc.new" block' do
+      expect {
+        @parser.parse '[[foo]]', link_proc: proc { return 'bar' }
+      }.to raise_error(LocalJumpError)
     end
 
     it 'should not complain when "return" is used inside a lambda' do
-      lambda {
-        @parser.parse '[[foo]]', :link_proc => lambda { return 'bar' }
-      }.should_not raise_error(LocalJumpError)
+      expect {
+        @parser.parse '[[foo]]', link_proc: lambda { return 'bar' }
+      }.to_not raise_error(LocalJumpError)
     end
 
     it 'should interact correctly with spaces in link targets (Proc object version)' do
@@ -227,10 +224,10 @@ describe Wikitext::Parser, 'internal links (space to underscore off)' do
       @parser.parse('[[foo a|hello]] [[bar b|world]]', :link_proc => link_proc).should == expected
     end
 
-    it 'should handle link targets with encoded parts (Proc object version)' do
-      link_proc = Proc.new { |target| target == 'información' ? 'redlink' : nil }
+    it 'handles link targets with encoded parts (Proc object version)' do
+      link_proc = proc { |target| target == 'información' ? 'redlink' : nil }
       expected = %Q{<p><a href="/wiki/informaci%c3%b3n" class="redlink">informaci&#x00f3;n</a> <a href="/wiki/bar">bar</a></p>\n}
-      @parser.parse('[[información]] [[bar]]', :link_proc => link_proc).should == expected
+      @parser.parse('[[información]] [[bar]]', link_proc: link_proc).should == expected
     end
 
     it 'should handle link targets with encoded parts (lambda version)' do
@@ -706,41 +703,39 @@ describe Wikitext::Parser, 'internal links (space to underscore on)' do
       lambda { @parser.parse('[[foo]]', :link_proc => lambda { |target| raise 'bar' }) }.should raise_error(RuntimeError, /bar/)
     end
 
-    it 'should complain if the link proc returns a non-stringy object (Proc object version)' do
-      lambda {
-        @parser.parse '[[foo]]', :link_proc => Proc.new { 1 }
-      }.should raise_error(TypeError, /can't convert/)
+    it 'complains if the link proc returns a non-stringy object (Proc object version)' do
+      expect { @parser.parse '[[foo]]', link_proc: proc { 1 } }.
+        to raise_error(TypeError)
     end
 
-    it 'should complain if the link proc returns a non-stringy object (lambda version)' do
-      lambda {
-        @parser.parse '[[foo]]', :link_proc => lambda { 1 }
-      }.should raise_error(TypeError, /can't convert/)
+    it 'complains if the link proc returns a non-stringy object (lambda version)' do
+      expect { @parser.parse '[[foo]]', link_proc: lambda { |target| 1 } }.
+        to raise_error(TypeError)
     end
 
     # a couple of Ruby's idiosynchrasies: different behaviour of lambdas and Procs
     it 'should not complain if the Proc object accepts too many arguments' do
       lambda {
-        @parser.parse '[[foo]]', :link_proc => Proc.new { |a,b| }
+        @parser.parse '[[foo]]', :link_proc => Proc.new { |a, b| }
       }.should_not raise_error(ArgumentError, /wrong number/)
     end
 
     it 'should complain if the lambda accepts too many arguments' do
       lambda {
-        @parser.parse '[[foo]]', :link_proc => lambda { |a,b| }
+        @parser.parse '[[foo]]', :link_proc => lambda { |a, b| }
       }.should raise_error(ArgumentError, /wrong number/)
     end
 
     it 'should complain when "return" is used inside a "Proc.new" block' do
-      lambda {
+      expect {
         @parser.parse '[[foo]]', :link_proc => Proc.new { return 'bar' }
-      }.should raise_error(LocalJumpError)
+      }.to raise_error(LocalJumpError)
     end
 
     it 'should not complain when "return" is used inside a lambda' do
-      lambda {
+      expect {
         @parser.parse '[[foo]]', :link_proc => lambda { return 'bar' }
-      }.should_not raise_error(LocalJumpError)
+      }.to_not raise_error(LocalJumpError)
     end
 
     it 'should interact correctly with spaces in link targets (Proc object version)' do
@@ -773,10 +768,10 @@ describe Wikitext::Parser, 'internal links (space to underscore on)' do
       @parser.parse('[[información]] [[bar]]', :link_proc => link_proc).should == expected
     end
 
-    it 'should handle link targets with encoded parts (lambda version)' do
+    it 'handles link targets with encoded parts (lambda version)' do
       link_proc = lambda { |target| target == 'información' ? 'redlink' : nil }
       expected = %Q{<p><a href="/wiki/informaci%c3%b3n" class="redlink">informaci&#x00f3;n</a> <a href="/wiki/bar">bar</a></p>\n}
-      @parser.parse('[[información]] [[bar]]', :link_proc => link_proc).should == expected
+      @parser.parse('[[información]] [[bar]]', link_proc: link_proc).should == expected
     end
   end
 
index d91958d63bc47c1ccbeb665b62acc6d56d6bfc21..4bf33c43e9538cc4e50d41e62865a1a582745f13 100644 (file)
@@ -1,5 +1,4 @@
-# encoding: utf-8
-# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
+# Copyright 2007-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
index dda68f389280ba604a922fa724d4ac0b28f0046a..4be8eb02366ce47780f4c89acfe5904ebe03136f 100644 (file)
@@ -1,5 +1,4 @@
-# encoding: utf-8
-# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
+# Copyright 2007-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
index d01069f2a53ba9cf5fb07f94b2d86f646f2417fe..a1057f3b3ae54b754217c380c496f0196cbe753b 100644 (file)
@@ -1,5 +1,4 @@
-# encoding: utf-8
-# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
+# Copyright 2007-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
index 3387af93ec74164be4f571d3835f170c84ccde9c..61ca9b8f51a5161c36c1e0200baacc3dea065d09 100644 (file)
@@ -1,5 +1,4 @@
-# encoding: utf-8
-# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
+# Copyright 2007-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
index 698cbd47a6b08206a755d3a0e2dc4a4d84e28723..da1aab29c54d182b370bd4beab1714f33ae9da80 100644 (file)
@@ -1,5 +1,4 @@
-# encoding: utf-8
-# Copyright 2008-2011 Wincent Colaiuta. All rights reserved.
+# Copyright 2008-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
index 28b9a0a448f1fb8009172db10bcaae2c18fe0eaf..1ade42d8097817da8d87850492153dc135563ffb 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
+# Copyright 2007-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
@@ -26,9 +26,9 @@ require 'rspec'
 
 # allow indenting of multiline spec data for better readability
 # but must dedent it before actually doing the comparison
-def dedent spaces, string = nil
+def dedent(spaces, string = nil)
   if spaces.kind_of? String
-    if not string.nil?
+    if !string.nil?
       raise 'When first argument is a String, second argument must be nil'
     else
       # default use: single String parameter, dedent by 6
@@ -36,14 +36,14 @@ def dedent spaces, string = nil
       spaces = 6
     end
   elsif spaces.kind_of? Integer
-    if string.nil? or not string.kind_of?(String)
+    if string.nil? || !string.kind_of?(String)
       raise 'When first argument is a number, second must be a String'
     end
   else
     raise 'Invalid argument'
   end
   string.each_line do |line|
-    if not line =~ /\A {#{spaces.to_i}}/
+    if line !~ /\A {#{spaces.to_i}}/
       raise "Underlength indent for line: #{line.inspect}"
     end
   end
@@ -51,32 +51,30 @@ def dedent spaces, string = nil
 end
 
 # prepend local directories to search path if not already present
-basedir     = Pathname.new(__FILE__).dirname + '..'
+basedir     = Pathname.new(__dir__) + '..'
 extdir      = (basedir + 'ext').realpath
 libdir      = (basedir + 'lib').realpath
 normalized  = $:.map { |path| Pathname.new(path).realpath rescue path }
 [libdir, extdir].each { |d| $:.unshift(d) unless normalized.include?(d) }
 
 module UTF8
-  if not const_defined? 'Invalid'
-    module Invalid
-      TWO_BYTES_MISSING_SECOND_BYTE       = [0b11011111].pack('C*')
-      TWO_BYTES_MALFORMED_SECOND_BYTE     = [0b11011111, 0b00001111].pack('C*') # should be 10......
-      OVERLONG                            = [0b11000000, 0b10000000].pack('C*') # lead byte is 110..... but code point is <= 127
-      OVERLONG_ALT                        = [0b11000001, 0b10000000].pack('C*') # lead byte is 110..... but code point is <= 127
-      THREE_BYTES_MISSING_SECOND_BYTE     = [0b11100000].pack('C*')
-      THREE_BYTES_MISSING_THIRD_BYTE      = [0b11100000, 0b10000000].pack('C*')
-      THREE_BYTES_MALFORMED_SECOND_BYTE   = [0b11100000, 0b00001111, 0b10000000].pack('C*') # should be 10......
-      THREE_BYTES_MALFORMED_THIRD_BYTE    = [0b11100000, 0b10000000, 0b00001111].pack('C*') # should be 10......
-      FOUR_BYTES_MISSING_SECOND_BYTE      = [0b11110000].pack('C*')
-      FOUR_BYTES_MISSING_THIRD_BYTE       = [0b11110000, 0x10111111].pack('C*')
-      FOUR_BYTES_MISSING_FOURTH_BYTE      = [0b11110000, 0x10111111, 0x10111111].pack('C*')
-      FOUR_BYTES_ILLEGAL_FIRST_BYTE       = [0b11110101, 0x10111111, 0x10111111, 0x10111111].pack('C*')
-      FOUR_BYTES_ILLEGAL_FIRST_BYTE_ALT   = [0b11110101, 0x10111111, 0x10111111, 0x10111111].pack('C*')
-      FOUR_BYTES_ILLEGAL_FIRST_BYTE_ALT2  = [0b11110101, 0x10111111, 0x10111111, 0x10111111].pack('C*')
-      UNEXPECTED_BYTE                     = [0b11111000].pack('C*')
-    end # module Invalid
-  end
+  module Invalid
+    TWO_BYTES_MISSING_SECOND_BYTE       = [0b11011111].pack('C*')
+    TWO_BYTES_MALFORMED_SECOND_BYTE     = [0b11011111, 0b00001111].pack('C*') # should be 10......
+    OVERLONG                            = [0b11000000, 0b10000000].pack('C*') # lead byte is 110..... but code point is <= 127
+    OVERLONG_ALT                        = [0b11000001, 0b10000000].pack('C*') # lead byte is 110..... but code point is <= 127
+    THREE_BYTES_MISSING_SECOND_BYTE     = [0b11100000].pack('C*')
+    THREE_BYTES_MISSING_THIRD_BYTE      = [0b11100000, 0b10000000].pack('C*')
+    THREE_BYTES_MALFORMED_SECOND_BYTE   = [0b11100000, 0b00001111, 0b10000000].pack('C*') # should be 10......
+    THREE_BYTES_MALFORMED_THIRD_BYTE    = [0b11100000, 0b10000000, 0b00001111].pack('C*') # should be 10......
+    FOUR_BYTES_MISSING_SECOND_BYTE      = [0b11110000].pack('C*')
+    FOUR_BYTES_MISSING_THIRD_BYTE       = [0b11110000, 0x10111111].pack('C*')
+    FOUR_BYTES_MISSING_FOURTH_BYTE      = [0b11110000, 0x10111111, 0x10111111].pack('C*')
+    FOUR_BYTES_ILLEGAL_FIRST_BYTE       = [0b11110101, 0x10111111, 0x10111111, 0x10111111].pack('C*')
+    FOUR_BYTES_ILLEGAL_FIRST_BYTE_ALT   = [0b11110101, 0x10111111, 0x10111111, 0x10111111].pack('C*')
+    FOUR_BYTES_ILLEGAL_FIRST_BYTE_ALT2  = [0b11110101, 0x10111111, 0x10111111, 0x10111111].pack('C*')
+    UNEXPECTED_BYTE                     = [0b11111000].pack('C*')
+  end # module Invalid
 end # module UTF8
 
 require 'wikitext'
index bbea4d0fc8e0fde8bee4d27355e5079b371bac69..9b43ba3ee1b0d1c1cb1e0c6750e53df0b125c303 100644 (file)
@@ -1,4 +1,3 @@
-# encoding: utf-8
 # Copyright 2007-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
index a7d038582a9f2c75ac7be8de7415afbeafbf76c3..65d8e929efd9f00c60e0ce967c70e16a013ee316 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2010-2012 Wincent Colaiuta. All rights reserved.
+# Copyright 2010-2013 Wincent Colaiuta. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
@@ -25,17 +25,18 @@ $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
 require 'wikitext/version'
 
 Gem::Specification.new do |s|
-  s.name              = 'wikitext'
-  s.version           =  Wikitext::VERSION
-  s.author            = 'Wincent Colaiuta'
-  s.email             = 'win@wincent.com'
-  s.homepage          = 'https://wincent.com/products/wikitext'
-  s.rubyforge_project = 'wikitext'
-  s.platform          = Gem::Platform::RUBY
-  s.summary           = 'Wikitext-to-HTML translator'
-  s.description       = <<-ENDDESC
+  s.name                  = 'wikitext'
+  s.version               =  Wikitext::VERSION
+  s.author                = 'Wincent Colaiuta'
+  s.email                 = 'win@wincent.com'
+  s.homepage              = 'https://wincent.com/products/wikitext'
+  s.rubyforge_project     = 'wikitext'
+  s.platform              = Gem::Platform::RUBY
+  s.required_ruby_version = '>= 2.0.0'
+  s.summary               = 'Wikitext-to-HTML translator'
+  s.description           = <<-DESC
     Wikitext is a fast wikitext-to-HTML translator written in C.
-  ENDDESC
+  DESC
   s.require_paths     = ['ext', 'lib']
   s.files             = Dir['bin/wikitext',
                             'ext/*.{rb,c,h}',
@@ -45,12 +46,6 @@ Gem::Specification.new do |s|
                             'spec/*.rb']
   s.extensions        = ['ext/extconf.rb']
   s.executables       = ['wikitext']
-
-  if !s.respond_to? :add_development_dependency
-    def s.add_development_dependency gem, *requirements
-      s.add_dependency gem, *requirements
-    end
-  end
   s.add_development_dependency 'rake'
   s.add_development_dependency 'rspec', '>= 2.0'
   s.add_development_dependency 'thor'