rdtool 0.6.37 → 0.6.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/rd/rdvisitor.rb CHANGED
@@ -193,7 +193,7 @@ this module provide several functions for MehotList.
193
193
  indexes = []
194
194
  tree.each do |i|
195
195
  if i.is_a?(MethodListItem)
196
- klass, kind, method, args = analize_method(i.term.content)
196
+ klass, kind, method, _args = analize_method(i.term.content)
197
197
  indexes.push([klass, kind2num(kind), method, kind]) if kind
198
198
  end
199
199
  end
@@ -211,4 +211,3 @@ end # RD
211
211
  $Id: rdvisitor.rb,v 1.46 2003/02/18 16:20:25 tosh Exp $
212
212
 
213
213
  =end
214
-
data/lib/rd/version.rb CHANGED
@@ -1,14 +1,14 @@
1
1
  module RD
2
2
 
3
- VERSION = '0.6.37'
3
+ VERSION = '0.6.39'
4
4
 
5
5
  class Version
6
6
  attr_reader :name
7
7
  attr_reader :major, :minor, :patch_level
8
8
 
9
- def Version.new_from_version_string(name, version_str)
10
- major, minor, patch_level, *dummy = analyze_version_string(version_str)
11
- return Version.new(name, major, minor, patch_level)
9
+ def self.new_from_version_string(name, version_str)
10
+ major, minor, patch_level, = analyze_version_string(version_str)
11
+ Version.new(name, major, minor, patch_level)
12
12
  end
13
13
 
14
14
  def initialize(name, major, minor, patch_level)
@@ -18,7 +18,7 @@ module RD
18
18
  @patch_level = patch_level
19
19
  end
20
20
 
21
- def Version.analyze_version_string(version_str)
21
+ def self.analyze_version_string(version_str)
22
22
  version_str = clean_up_version_string(version_str)
23
23
  version_str.split(/\./).collect{|i| i.to_i }
24
24
  end
@@ -30,7 +30,7 @@ module RD
30
30
  result
31
31
  end
32
32
 
33
- def Version.clean_up_version_string(version_str)
33
+ def self.clean_up_version_string(version_str)
34
34
  if /^\$Version:?\s*(.*)\$/ === version_str
35
35
  $1
36
36
  else
data/rdtool.gemspec CHANGED
@@ -1,24 +1,28 @@
1
1
  # -*- coding: utf-8; mode: ruby -*-
2
2
  Gem::Specification.new do |s|
3
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
4
- s.rubygems_version = "1.3.5"
5
-
6
3
  s.name = 'rdtool'
7
- s.version = '0.6.37'
8
- s.date = '2012-06-12'
4
+ s.version = '0.6.39'
5
+ s.date = '2026-03-17'
9
6
 
10
- s.summary = "RDtool is formatter for RD."
11
- s.description = "RD is multipurpose documentation format created for documentating Ruby and output of Ruby world. You can embed RD into Ruby script. And RD have neat syntax which help you to read document in Ruby script. On the other hand, RD have a feature for class reference."
7
+ s.summary = "Formatter and converter for RD documents."
8
+ s.description = "RDtool parses RD documents and converts them to formats such as HTML and roff. It also includes utilities for working with RD embedded in Ruby source files."
12
9
  s.authors = ["Youhei SASAKI"]
13
10
  s.email = "uwabami@gfd-dennou.org"
14
- s.homepage = "http://github.com/uwabami/rdtool"
15
- s.licenses = ["GPL-2+", "Ruby"]
11
+ s.homepage = "https://github.com/uwabami/rdtool"
12
+ s.licenses = ["GPL-2.0-or-later", "Ruby"]
13
+ s.required_ruby_version = ">= 3.2"
16
14
  s.require_paths = ["lib"]
17
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
- s.test_files = `git ls-files -- test/*`.split("\n")
15
+ s.executables = %w[rd2 rdswap.rb]
16
+ s.metadata = {
17
+ "bug_tracker_uri" => "https://github.com/uwabami/rdtool/issues",
18
+ "changelog_uri" => "https://github.com/uwabami/rdtool/blob/main/HISTORY",
19
+ "source_code_uri" => "https://github.com/uwabami/rdtool",
20
+ }
19
21
 
20
- s.add_development_dependency('racc', "~> 1.4.6")
21
- s.add_development_dependency('rake', ">= 0") unless defined? Rake
22
+ s.add_dependency('nkf', '>= 0.1', '< 1.0')
23
+ s.add_development_dependency('racc', "~> 1.4")
24
+ s.add_development_dependency('test-unit', "~> 3.0")
25
+ s.add_development_dependency('rake', "~> 13.0")
22
26
 
23
27
  # = MANIFEST =
24
28
  s.files = %w[
@@ -64,7 +68,9 @@ Gem::Specification.new do |s|
64
68
  lib/rd/rd2html-ext-opt.rb
65
69
  lib/rd/rd2html-lib.rb
66
70
  lib/rd/rd2html-opt.rb
71
+ lib/rd/rd2html5-lib.rb
67
72
  lib/rd/rd2man-lib.rb
73
+ lib/rd/rd2man-opt.rb
68
74
  lib/rd/rd2rdo-lib.rb
69
75
  lib/rd/rd2rmi-lib.rb
70
76
  lib/rd/rdblockparser.ry
@@ -107,7 +113,11 @@ Gem::Specification.new do |s|
107
113
  test/test-parser-util.rb
108
114
  test/test-rbl-file.rb
109
115
  test/test-rbl-suite.rb
116
+ test/test-rd2-cli.rb
110
117
  test/test-rd2html-lib.rb
118
+ test/test-rd2html5-lib.rb
119
+ test/test-rd2man-lib.rb
120
+ test/test-rdswap-cli.rb
111
121
  test/test-rdtree.rb
112
122
  test/test-rdvisitor.rb
113
123
  test/test-reference-resolver.rb
@@ -34,7 +34,6 @@ class TestMethodListItem < Test::Unit::TestCase
34
34
  def test_inspect
35
35
  mi = MethodListItem.new
36
36
  mt = MethodListItem::Term.new
37
- se = StringElement.new "string"
38
37
  tb = TextBlock.new
39
38
  mi.set_term_under_document_struct(mt, DocumentStructure::RD)
40
39
  mi.add_child_under_document_struct(tb, DocumentStructure::RD)
@@ -16,14 +16,12 @@ class TestRBLFile < Test::Unit::TestCase
16
16
  tr_head2 = Tree.new_with_document_struct(DocumentStructure::RD)
17
17
  de_head2 = DocumentElement.new
18
18
  tr_head2.root = de_head2
19
- hl1_head2, hl2_head2 = nil
20
-
21
19
  de_head2.build do
22
- hl1_head2 = new Headline, 1 do
20
+ new Headline, 1 do
23
21
  new StringElement, "label1"
24
22
  end
25
23
  new TextBlock
26
- hl2_head2 = new Headline, 2 do
24
+ new Headline, 2 do
27
25
  new StringElement, "label2"
28
26
  end
29
27
  end
@@ -33,14 +31,13 @@ class TestRBLFile < Test::Unit::TestCase
33
31
  tr_desc = Tree.new_with_document_struct(DocumentStructure::RD)
34
32
  de_desc = DocumentElement.new
35
33
  tr_desc.root = de_desc
36
- hl1_desc, dt1_desc = nil
37
34
  de_desc.build do
38
- hl1_desc = new(Headline, 1) do
35
+ new(Headline, 1) do
39
36
  new StringElement, "label1"
40
37
  end
41
38
  new DescList do
42
39
  new DescListItem do
43
- dt1_desc = make_term do
40
+ make_term do
44
41
  new StringElement, "label2"
45
42
  end
46
43
  end
@@ -0,0 +1,91 @@
1
+ require "test/unit"
2
+ require "open3"
3
+ require "rbconfig"
4
+ require "tmpdir"
5
+ require "fileutils"
6
+
7
+ class TestRD2CLI < Test::Unit::TestCase
8
+ def setup
9
+ @root = File.expand_path("..", __dir__)
10
+ @rd2 = File.join(@root, "bin", "rd2")
11
+ @libdir = File.join(@root, "lib")
12
+ end
13
+
14
+ def test_external_sub_option_parser_registered_via_argv_options_is_shown_in_help
15
+ Dir.mktmpdir("rd2-cli") do |tmpdir|
16
+ write_fake_formatter_files(tmpdir)
17
+
18
+ _stdout, stderr, status = run_rd2(tmpdir, "-r", "fake_rd2_visitor", "--help")
19
+
20
+ assert_predicate(status, :success?, stderr)
21
+ assert_match(/--fake-flag/, stderr)
22
+ end
23
+ end
24
+
25
+ def test_external_sub_option_parser_registered_via_argv_options_is_applied
26
+ Dir.mktmpdir("rd2-cli") do |tmpdir|
27
+ write_fake_formatter_files(tmpdir)
28
+ input = File.join(tmpdir, "sample.rd")
29
+ File.write(input, "=begin\n= sample\n=end\n")
30
+
31
+ stdout, stderr, status = run_rd2(tmpdir, "-r", "fake_rd2_visitor", "--fake-flag", input)
32
+
33
+ assert_predicate(status, :success?, stderr)
34
+ assert_equal("flag-on\n", stdout)
35
+ end
36
+ end
37
+
38
+ def test_rd2man_supports_custom_man_section
39
+ Dir.mktmpdir("rd2-cli") do |tmpdir|
40
+ input = File.join(tmpdir, "sample.rd")
41
+ File.write(input, "=begin\n= sample\n=end\n")
42
+
43
+ stdout, stderr, status = run_rd2(nil, "-r", "rd/rd2man-lib", "--man-section=3", input)
44
+
45
+ assert_predicate(status, :success?, stderr)
46
+ assert_match(/^\.TH .*SAMPLE 3 "/, stdout)
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def run_rd2(extra_libdir, *args)
53
+ ruby = RbConfig.ruby
54
+ rubylib = [@libdir, extra_libdir, ENV["RUBYLIB"]].compact.join(File::PATH_SEPARATOR)
55
+ Open3.capture3({ "RUBYLIB" => rubylib }, ruby, @rd2, *args)
56
+ end
57
+
58
+ def write_fake_formatter_files(tmpdir)
59
+ File.write(File.join(tmpdir, "fake_rd2_visitor.rb"), <<~RUBY)
60
+ class FakeRD2Visitor
61
+ OUTPUT_SUFFIX = "txt"
62
+
63
+ attr_accessor :input_filename, :filename, :charcode, :lang, :flag
64
+ attr_reader :include_suffix
65
+
66
+ def initialize
67
+ @include_suffix = []
68
+ @flag = false
69
+ end
70
+
71
+ def self.version
72
+ "FakeRD2Visitor 1.0"
73
+ end
74
+
75
+ def visit(_tree)
76
+ @flag ? "flag-on\\n" : "flag-off\\n"
77
+ end
78
+ end
79
+
80
+ $Visitor_Class = FakeRD2Visitor
81
+ $RD2_Sub_OptionParser = "fake_rd2_opt"
82
+ RUBY
83
+
84
+ File.write(File.join(tmpdir, "fake_rd2_opt.rb"), <<~RUBY)
85
+ q = ARGV.options
86
+ q.on_tail("--fake-flag", "toggle fake flag") do
87
+ $Visitor.flag = true
88
+ end
89
+ RUBY
90
+ end
91
+ end
@@ -0,0 +1,67 @@
1
+ require "test/unit"
2
+
3
+ require "rd/rd2html5-lib"
4
+ require "rd/tree"
5
+ require "rd/block-element"
6
+ require "rd/desclist"
7
+ require "rd/methodlist"
8
+ require "rd/inline-element"
9
+ require "rd/rd-struct"
10
+
11
+ include RD
12
+
13
+ class TestRD2HTML5Visitor < Test::Unit::TestCase
14
+ def setup
15
+ @vis = RD2HTML5Visitor.new
16
+ @vis.class.module_eval do
17
+ public :xml_decl
18
+ public :doctype_decl
19
+ public :html_open_tag
20
+ public :html_content_type
21
+ end
22
+ end
23
+
24
+ def test_html5_head_pieces
25
+ @vis.lang = "en"
26
+ @vis.charset = "utf-8"
27
+
28
+ assert_equal(nil, @vis.xml_decl)
29
+ assert_equal("<!DOCTYPE html>", @vis.doctype_decl)
30
+ assert_equal('<html lang="en">', @vis.html_open_tag)
31
+ assert_equal('<meta charset="utf-8">', @vis.html_content_type)
32
+ end
33
+
34
+ def test_apply_to_headline_uses_id_without_anchor_tag
35
+ tr = Tree.new_with_document_struct(DocumentStructure::RD)
36
+ tr.root = DocumentElement.new
37
+ headline = nil
38
+ tr.root.build do
39
+ headline = new Headline, 1 do
40
+ new StringElement, "headline"
41
+ end
42
+ end
43
+ @vis.prepare_labels(tr, "label:")
44
+
45
+ assert_equal('<h1 id="label:0">headline</h1><!-- RDLabel: "headline" -->',
46
+ @vis.apply_to_Headline(headline, ["headline"]))
47
+ end
48
+
49
+ def test_apply_to_desclist_item_uses_id_on_dt
50
+ tr = Tree.new_with_document_struct(DocumentStructure::RD)
51
+ tr.root = DocumentElement.new
52
+ item = nil
53
+ tr.root.build do
54
+ new DescList do
55
+ item = new DescListItem do
56
+ make_term do
57
+ new StringElement, "term"
58
+ end
59
+ end
60
+ end
61
+ end
62
+ @vis.prepare_labels(tr, "label:")
63
+
64
+ assert_equal('<dt id="label:0">term</dt><!-- RDLabel: "term" -->',
65
+ @vis.apply_to_DescListItem(item, ["term"], []))
66
+ end
67
+ end
@@ -0,0 +1,54 @@
1
+ require "test/unit"
2
+ require "rd/rd2man-lib"
3
+ require "rd/tree"
4
+ require "rd/block-element"
5
+ require "rd/rd-struct"
6
+
7
+ include RD
8
+
9
+ class TestRD2MANLib < Test::Unit::TestCase
10
+ def test_default_man_section_is_1
11
+ visitor = RD2MANVisitor.new
12
+
13
+ assert_equal("1", visitor.output_suffix)
14
+ end
15
+
16
+ def test_man_section_changes_output_suffix_and_th_header
17
+ visitor = RD2MANVisitor.new
18
+ visitor.man_section = "3"
19
+ visitor.input_filename = "rdtool.rd"
20
+
21
+ tree = Tree.new_with_document_struct(DocumentStructure::RD)
22
+ tree.root = DocumentElement.new
23
+
24
+ output = visitor.visit(tree)
25
+
26
+ assert_equal("3", visitor.output_suffix)
27
+ assert_match(/^\.TH RDTOOL 3 "/, output)
28
+ end
29
+
30
+ def test_th_header_uses_basename_instead_of_full_path
31
+ visitor = RD2MANVisitor.new
32
+ visitor.input_filename = "/tmp/path/to/rd2.rd"
33
+
34
+ tree = Tree.new_with_document_struct(DocumentStructure::RD)
35
+ tree.root = DocumentElement.new
36
+
37
+ output = visitor.visit(tree)
38
+
39
+ assert_match(/^\.TH RD2 1 "/, output)
40
+ end
41
+
42
+ def test_th_header_uses_output_basename_for_stdin_input
43
+ visitor = RD2MANVisitor.new
44
+ visitor.input_filename = "-"
45
+ visitor.filename = "/tmp/output/rd2"
46
+
47
+ tree = Tree.new_with_document_struct(DocumentStructure::RD)
48
+ tree.root = DocumentElement.new
49
+
50
+ output = visitor.visit(tree)
51
+
52
+ assert_match(/^\.TH RD2 1 "/, output)
53
+ end
54
+ end
@@ -0,0 +1,49 @@
1
+ require "test/unit"
2
+ require "open3"
3
+ require "rbconfig"
4
+ require "tmpdir"
5
+ require "fileutils"
6
+
7
+ class TestRDSwapCLI < Test::Unit::TestCase
8
+ def setup
9
+ @root = File.expand_path("..", __dir__)
10
+ @rdswap = File.join(@root, "bin", "rdswap.rb")
11
+ end
12
+
13
+ def test_help_exits_successfully_without_warnings
14
+ _stdout, stderr, status = Open3.capture3(RbConfig.ruby, @rdswap, "-h")
15
+
16
+ assert_predicate(status, :success?, stderr)
17
+ assert_no_match(/warning:/i, stderr)
18
+ end
19
+
20
+ def test_generates_translated_script
21
+ Dir.mktmpdir("rdswap") do |tmpdir|
22
+ source = File.join(tmpdir, "sample.rb")
23
+ translation = File.join(tmpdir, "sample.ja")
24
+
25
+ File.write(source, <<~RUBY)
26
+ puts "hello"
27
+ =begin
28
+ original
29
+ =end
30
+ puts "bye"
31
+ RUBY
32
+
33
+ File.write(translation, <<~TEXT)
34
+ =begin
35
+ translated
36
+ =end
37
+ TEXT
38
+
39
+ _stdout, stderr, status = Open3.capture3(RbConfig.ruby, @rdswap, source, translation)
40
+
41
+ assert_predicate(status, :success?, stderr)
42
+ output = File.read("#{source}.ja")
43
+ assert_match(/puts "hello"/, output)
44
+ assert_match(/translated/, output)
45
+ assert_match(/puts "bye"/, output)
46
+ assert_no_match(/original/, output)
47
+ end
48
+ end
49
+ end
@@ -145,7 +145,7 @@ class TestReferenceResolver < Test::Unit::TestCase
145
145
  ref = nil
146
146
  de.build do
147
147
  new TextBlock do
148
- se = StringElement.new "label"
148
+ StringElement.new "label"
149
149
  ref = new Reference, label_ext
150
150
  end
151
151
  end
data/utils/rd-mode.el CHANGED
@@ -1,13 +1,15 @@
1
+ ;;; rd-mode.el --- Major mode for RD editing
1
2
  ;;;
2
- ;;; rd-mode.el
3
- ;;; Major mode for RD editing
4
- ;;;
5
3
  ;;; NOTE: experimental.
4
+ ;;; $Lastupdate: 2018-08-19 23:51:49$
6
5
 
7
- ;; Copyright (C) 1999 Koji Arai, Toshiro Kuwabara.
6
+ ;; Copyright (C) 1999-2018 Koji Arai, Toshiro Kuwabara, Youhei SASAKI
8
7
 
9
- ;; Author: Koji Arai, Toshiro Kuwabara
8
+ ;; Author: Koji Arai, Toshiro Kuwabara, Youhei SASAKI
10
9
  ;; Created: Sat Nov 27 00:08:12 1999
10
+ ;; Version: 0.6.38
11
+ ;; Keywords: rd
12
+ ;; URL: https://github.com/uwabami/rdtool/blob/master/utils/rd-mode.el
11
13
 
12
14
  ;; This file is not part of GNU Emacs, but the same permissions apply.
13
15
 
@@ -23,8 +25,8 @@
23
25
 
24
26
  ;; You should have received a copy of the GNU General Public License
25
27
  ;; along with GNU Emacs; see the file COPYING. If not, write to the
26
- ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
27
- ;; Boston, MA 02111-1307, USA.
28
+ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor
29
+ ;; Boston, MA 02110-1301, USA.
28
30
 
29
31
  ;; Settings:
30
32
  ;;
@@ -45,6 +47,28 @@
45
47
  (defvar rd-mode-hook nil
46
48
  "Hooks run when entering `rd-mode' major mode")
47
49
 
50
+ (defvar rd-mode-map
51
+ (let ((m (make-sparse-keymap)))
52
+ (define-key m (kbd "TAB") 'rd-indent-line)
53
+ (define-key m (kbd "C-j") 'rd-newline-and-indent)
54
+ (define-key m (kbd "C-c C-v") 'rd-cite-region)
55
+ (define-key m (kbd "C-c C-i e") 'rd-insert-emphasis)
56
+ (define-key m (kbd "C-c C-i c") 'rd-insert-code)
57
+ (define-key m (kbd "C-c C-i v") 'rd-insert-var)
58
+ (define-key m (kbd "C-c C-i k") 'rd-insert-keyboard)
59
+ (define-key m (kbd "C-c C-i i") 'rd-insert-index)
60
+ (define-key m (kbd "C-c C-i r") 'rd-insert-ref)
61
+ (define-key m (kbd "C-c C-i u") 'rd-insert-reftourl)
62
+ (define-key m (kbd "C-c C-i f") 'rd-insert-footnote)
63
+ (define-key m (kbd "C-c C-i b") 'rd-insert-verb)
64
+ (define-key m (kbd "C-c C-y") 'rd-yank-as-url)
65
+ (define-key m (kbd "C-c M-y") 'rd-yank-pop-as-url)
66
+ (define-key m (kbd "C-c C-u") 'rd-insert-url)
67
+ (define-key m (kbd "M-C-m") 'rd-intelligent-newline)
68
+ m)
69
+ "Keymap used in rd-mode.")
70
+
71
+ ;;;###autoload
48
72
  (define-derived-mode rd-mode text-mode "RD"
49
73
  "Major mode for RD editing.
50
74
  \\{rd-mode-map}"
@@ -52,7 +76,7 @@
52
76
  (setq paragraph-separate "=+\\|\\++\\|[ \t\n\^L]*$")
53
77
  (make-local-variable 'paragraph-start)
54
78
  (setq paragraph-start "=+\\|\\++\\|[ \t\n\^L]")
55
- (make-local-variable 'require-final-newline)
79
+ (make-local-variable 'require-final-newline)
56
80
  (setq require-final-newline t)
57
81
  (make-local-variable 'font-lock-defaults)
58
82
  (setq font-lock-defaults '((rd-font-lock-keywords) t nil))
@@ -64,7 +88,6 @@
64
88
  (add-hook (make-local-variable 'write-contents-hooks) 'rd-strip-cr-on-top)
65
89
  (add-hook (make-local-variable 'after-save-hook) 'rd-rehide-endline)
66
90
  (rd-hide-other-block-all)
67
- (rd-setup-keys)
68
91
  (setq indent-tabs-mode nil)
69
92
  (setq imenu-create-index-function 'rd-imenu-create-index)
70
93
  (run-hooks 'rd-mode-hook)
@@ -114,25 +137,6 @@
114
137
  0 rd-description-face)
115
138
  ))
116
139
 
117
- (defun rd-setup-keys ()
118
- (interactive)
119
- (define-key rd-mode-map "\t" 'rd-indent-line)
120
- (define-key rd-mode-map "\C-j" 'rd-newline-and-indent)
121
- (define-key rd-mode-map "\C-c\C-v" 'rd-cite-region)
122
- (define-key rd-mode-map "\C-c\C-ie" 'rd-insert-emphasis)
123
- (define-key rd-mode-map "\C-c\C-ic" 'rd-insert-code)
124
- (define-key rd-mode-map "\C-c\C-iv" 'rd-insert-var)
125
- (define-key rd-mode-map "\C-c\C-ik" 'rd-insert-keyboard)
126
- (define-key rd-mode-map "\C-c\C-ii" 'rd-insert-index)
127
- (define-key rd-mode-map "\C-c\C-ir" 'rd-insert-ref)
128
- (define-key rd-mode-map "\C-c\C-iu" 'rd-insert-reftourl)
129
- (define-key rd-mode-map "\C-c\C-if" 'rd-insert-footnote)
130
- (define-key rd-mode-map "\C-c\C-ib" 'rd-insert-verb)
131
- (define-key rd-mode-map "\C-c\C-y" 'rd-yank-as-url)
132
- (define-key rd-mode-map "\C-c\M-y" 'rd-yank-pop-as-url)
133
- (define-key rd-mode-map "\C-c\C-u" 'rd-insert-url)
134
- (define-key rd-mode-map "\M-\C-m" 'rd-intelligent-newline))
135
-
136
140
  (defun rd-strip-cr-on-top ()
137
141
  (save-excursion
138
142
  (widen)
@@ -188,7 +192,7 @@
188
192
  (set-buffer-modified-p mod))
189
193
  (setq selective-display t
190
194
  selective-display-ellipses rd-selective-display-ellipses))
191
-
195
+
192
196
  (defun rd-show-other-block ()
193
197
  "Shows lines not in RD format before current point."
194
198
  (interactive)
@@ -338,7 +342,7 @@
338
342
  (beginning-of-line)
339
343
  (looking-at "--- +\\| *\\(\\* +\\|([0-9]+) +\\)?")
340
344
  (length (buffer-substring (match-beginning 0)(match-end 0)))))
341
-
345
+
342
346
  (defun rd-cite-region (beg end)
343
347
  "Make region into Verbatim."
344
348
  (interactive "r*")
@@ -359,7 +363,7 @@
359
363
  (rd-indent-region beg end prev-indent))
360
364
  (t
361
365
  (goto-char end)))))))
362
-
366
+
363
367
  (defun rd-indent-region (beg end &optional indent)
364
368
  "Make the indent of region deeper by INDENT."
365
369
  (interactive "r*")
@@ -417,7 +421,7 @@
417
421
  )
418
422
  (end-of-line)
419
423
  (newline)
420
- (if item (insert-string item) )
424
+ (if item (insert item) )
421
425
  )
422
426
  )
423
427
 
@@ -425,7 +429,7 @@
425
429
  (let ((root '(nil . nil))
426
430
  cur-alist
427
431
  (cur-level 0)
428
- (pattern "^\\(=+\\)[ \t\v\f]*\\(.*?\\)[ \t\v\f]*$")
432
+ (pattern "^\\(=+\\|---\\)[ \t\v\f]*\\(.*?\\)[ \t\v\f]*$")
429
433
  (empty-heading "-")
430
434
  (self-heading ".")
431
435
  pos level heading alist)
@@ -461,6 +465,8 @@
461
465
  cur-level level))))))
462
466
  (cdr root)))
463
467
 
468
+ ;;;###autoload
469
+ (add-to-list 'auto-mode-alist '("\\.rd\\'" . rd-mode))
470
+
464
471
  (provide 'rd-mode)
465
472
  ;;; rd-mode.el ends here
466
-