diff --git a/lib/rdoc/rd/block_parser.ry b/lib/rdoc/rd/block_parser.ry index 675d437208..a56a866593 100644 --- a/lib/rdoc/rd/block_parser.ry +++ b/lib/rdoc/rd/block_parser.ry @@ -230,8 +230,6 @@ end # :stopdoc: -TMPFILE = ["rdtmp", $$, 0] - MARK_TO_LEVEL = { '=' => 1, '==' => 2, @@ -341,15 +339,19 @@ def next_token # :nodoc: # non-RD part begin when /^=begin\s+(\w+)/ part = $1 +=begin # not imported to RDoc if @in_part # if in non-RD part @part_content.push(line) else @in_part = part if @tree.filter[part] # if filter exists # p "BEGIN_PART: #{@in_part}" # DEBUG end +=end + @in_part = part # non-RD part end - when /^=end/ + when /^=end(?:$|[\s\0\C-d\C-z])/ if @in_part # if in non-RD part +=begin # not imported to RDoc # p "END_PART: #{@in_part}" # DEBUG # make Part-in object part = RDoc::RD::Part.new(@part_content.join(""), @tree, "r") @@ -360,20 +362,22 @@ def next_token # :nodoc: if @tree.filter[@in_part].mode == :rd # if output is RD formatted subtree = parse_subtree(part_out.to_a) else # if output is target formatted - basename = TMPFILE.join('.') - TMPFILE[-1] += 1 - tmpfile = open(@tree.tmp_dir + "/" + basename + ".#{@in_part}", "w") - tmpfile.print(part_out) - tmpfile.close + basename = Tempfile.create(["rdtmp", ".#{@in_part}"], @tree.tmp_dir) do |tmpfile| + tmpfile.print(part_out) + File.basename(tmpfile.path) + end subtree = parse_subtree(["=begin\n", "<<< #{basename}\n", "=end\n"]) end @in_part = nil return [:SUBTREE, subtree] +=end end else +=begin # not imported to RDoc if @in_part # if in non-RD part @part_content.push(line) end +=end end end diff --git a/test/rdoc/test_rdoc_rd_block_parser.rb b/test/rdoc/test_rdoc_rd_block_parser.rb index 22f432eaf4..ca0ac9f9e9 100644 --- a/test/rdoc/test_rdoc_rd_block_parser.rb +++ b/test/rdoc/test_rdoc_rd_block_parser.rb @@ -168,6 +168,27 @@ def test_parse_include_subtree tf.close! end +=begin + def test_parse_include_other_format + @block_parser.include_path = [Dir.tmpdir] + + expected = + doc( + blank_line, + para("include ((*worked*))"), + blank_line, + blank_line) + + str = <<~STR + =begin nonrd + <<< worked + =end + STR + + assert_equal(expected, @block_parser.parse str.lines.to_a) + end +=end + def test_parse_heading assert_equal doc(head(1, "H")), parse("= H") assert_equal doc(head(2, "H")), parse("== H")