diff options
author | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-12-01 22:24:53 +0000 |
---|---|---|
committer | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-12-01 22:24:53 +0000 |
commit | f242cefc68e8755493a50aaf2a30943e85994d6d (patch) | |
tree | 362fd2e2ba34b31191f64b0bf49be2137c6396ff | |
parent | 2ba9cdcee6b0b97999c74c6fb19cdae08edd0e25 (diff) | |
download | ruby-f242cefc68e8755493a50aaf2a30943e85994d6d.tar.gz |
* lib/rdoc/parser.rb: Parse files with a -*- rdoc -*- modeline
* test/rdoc/test_rdoc_parser.rb: Test for above
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38135 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | lib/rdoc/parser.rb | 23 | ||||
-rw-r--r-- | test/rdoc/test_rdoc_parser.rb | 40 |
3 files changed, 67 insertions, 1 deletions
@@ -1,3 +1,8 @@ +Sun Dec 2 07:24:23 2012 Eric Hodel <drbrain@segment7.net> + + * lib/rdoc/parser.rb: Parse files with a -*- rdoc -*- modeline + * test/rdoc/test_rdoc_parser.rb: Test for above + Sun Dec 2 06:02:00 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com> * gc.h (SET_MACHINE_STACK_END): add volatile for preventing diff --git a/lib/rdoc/parser.rb b/lib/rdoc/parser.rb index b51f7868ea..1d4d0675b8 100644 --- a/lib/rdoc/parser.rb +++ b/lib/rdoc/parser.rb @@ -138,13 +138,34 @@ class RDoc::Parser # The default parser must not parse binary files ext_name = File.extname file_name return parser if ext_name.empty? - return if parser == RDoc::Parser::Simple and ext_name !~ /txt|rdoc/ + if parser == RDoc::Parser::Simple and ext_name !~ /txt|rdoc/ then + case check_modeline file_name + when 'rdoc' then # continue + else return nil + end + end parser rescue Errno::EACCES end ## + # Returns the file type from the modeline in +file_name+ + + def self.check_modeline file_name + line = open file_name do |io| + io.gets + end + + line =~ /-\*-(.*?)-\*-/ + + return nil unless type = $1 + + type.strip.downcase + rescue ArgumentError # invalid byte sequence, etc. + end + + ## # Finds and instantiates the correct parser for the given +file_name+ and # +content+. diff --git a/test/rdoc/test_rdoc_parser.rb b/test/rdoc/test_rdoc_parser.rb index 581e811a5f..628d1bd1da 100644 --- a/test/rdoc/test_rdoc_parser.rb +++ b/test/rdoc/test_rdoc_parser.rb @@ -75,6 +75,20 @@ class TestRDocParser < RDoc::TestCase end end + def test_can_parse_modeline + readme_ext = File.join Dir.tmpdir, "README.EXT.#{$$}" + + open readme_ext, 'w' do |io| + io.puts "# README.EXT - -*- rdoc -*- created at: Mon Aug 7 16:45:54 JST 1995" + io.puts + io.puts "This document explains how to make extension libraries for Ruby." + end + + assert_equal RDoc::Parser::Simple, @RP.can_parse(readme_ext) + ensure + File.unlink readme_ext + end + ## # Selenium hides a .jar file using a .txt extension. @@ -83,6 +97,32 @@ class TestRDocParser < RDoc::TestCase assert_nil @RP.can_parse(hidden_zip) end + def test_check_modeline + readme_ext = File.join Dir.tmpdir, "README.EXT.#{$$}" + + open readme_ext, 'w' do |io| + io.puts "# README.EXT - -*- RDoc -*- created at: Mon Aug 7 16:45:54 JST 1995" + io.puts + io.puts "This document explains how to make extension libraries for Ruby." + end + + assert_equal 'rdoc', @RP.check_modeline(readme_ext) + ensure + File.unlink readme_ext + end + + def test_check_modeline_no_modeline + readme_ext = File.join Dir.tmpdir, "README.EXT.#{$$}" + + open readme_ext, 'w' do |io| + io.puts "This document explains how to make extension libraries for Ruby." + end + + assert_nil @RP.check_modeline(readme_ext) + ensure + File.unlink readme_ext + end + def test_class_for_binary rp = @RP.dup |