rdtool 0.6.38 → 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.
- checksums.yaml +7 -0
- data/Gemfile +1 -1
- data/HISTORY +6 -0
- data/README.html +63 -9
- data/README.ja.html +67 -10
- data/README.rd +67 -4
- data/README.rd.ja +71 -5
- data/Rakefile +19 -13
- data/bin/rd2 +208 -182
- data/bin/rdswap.rb +144 -88
- data/lib/rd/filter.rb +1 -1
- data/lib/rd/rd2html-ext-opt.rb +1 -1
- data/lib/rd/rd2html-opt.rb +1 -3
- data/lib/rd/rd2html5-lib.rb +118 -0
- data/lib/rd/rd2man-lib.rb +37 -12
- data/lib/rd/rd2man-opt.rb +16 -0
- data/lib/rd/rdblockparser.ry +0 -1
- data/lib/rd/rdblockparser.tab.rb +111 -110
- data/lib/rd/rdinlineparser.tab.rb +214 -212
- data/lib/rd/rdvisitor.rb +1 -2
- data/lib/rd/version.rb +6 -6
- data/rdtool.gemspec +23 -13
- data/test/test-methodlist-item.rb +0 -1
- data/test/test-rbl-file.rb +4 -7
- data/test/test-rd2-cli.rb +91 -0
- data/test/test-rd2html5-lib.rb +67 -0
- data/test/test-rd2man-lib.rb +54 -0
- data/test/test-rdswap-cli.rb +49 -0
- data/test/test-reference-resolver.rb +1 -1
- data/utils/rd-mode.el +40 -32
- metadata +66 -72
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,
|
|
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.
|
|
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
|
|
10
|
-
major, minor, patch_level,
|
|
11
|
-
|
|
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
|
|
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
|
|
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.
|
|
8
|
-
s.date = '
|
|
4
|
+
s.version = '0.6.39'
|
|
5
|
+
s.date = '2026-03-17'
|
|
9
6
|
|
|
10
|
-
s.summary = "
|
|
11
|
-
s.description = "
|
|
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 = "
|
|
15
|
-
s.licenses = ["GPL-2
|
|
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 =
|
|
18
|
-
s.
|
|
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.
|
|
21
|
-
s.add_development_dependency('
|
|
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)
|
data/test/test-rbl-file.rb
CHANGED
|
@@ -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
|
-
|
|
20
|
+
new Headline, 1 do
|
|
23
21
|
new StringElement, "label1"
|
|
24
22
|
end
|
|
25
23
|
new TextBlock
|
|
26
|
-
|
|
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
|
-
|
|
35
|
+
new(Headline, 1) do
|
|
39
36
|
new StringElement, "label1"
|
|
40
37
|
end
|
|
41
38
|
new DescList do
|
|
42
39
|
new DescListItem do
|
|
43
|
-
|
|
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
|
data/utils/rd-mode.el
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
;;; rd-mode.el --- Major mode for RD editing
|
|
2
|
-
;;;
|
|
2
|
+
;;;
|
|
3
3
|
;;; NOTE: experimental.
|
|
4
|
+
;;; $Lastupdate: 2018-08-19 23:51:49$
|
|
4
5
|
|
|
5
|
-
;; Copyright (C) 1999 Koji Arai, Toshiro Kuwabara
|
|
6
|
+
;; Copyright (C) 1999-2018 Koji Arai, Toshiro Kuwabara, Youhei SASAKI
|
|
6
7
|
|
|
7
|
-
;; Author: Koji Arai, Toshiro Kuwabara
|
|
8
|
+
;; Author: Koji Arai, Toshiro Kuwabara, Youhei SASAKI
|
|
8
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
|
|
9
13
|
|
|
10
14
|
;; This file is not part of GNU Emacs, but the same permissions apply.
|
|
11
15
|
|
|
@@ -21,8 +25,8 @@
|
|
|
21
25
|
|
|
22
26
|
;; You should have received a copy of the GNU General Public License
|
|
23
27
|
;; along with GNU Emacs; see the file COPYING. If not, write to the
|
|
24
|
-
;; Free Software Foundation, Inc.,
|
|
25
|
-
;; Boston, MA
|
|
28
|
+
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor
|
|
29
|
+
;; Boston, MA 02110-1301, USA.
|
|
26
30
|
|
|
27
31
|
;; Settings:
|
|
28
32
|
;;
|
|
@@ -43,6 +47,28 @@
|
|
|
43
47
|
(defvar rd-mode-hook nil
|
|
44
48
|
"Hooks run when entering `rd-mode' major mode")
|
|
45
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
|
|
46
72
|
(define-derived-mode rd-mode text-mode "RD"
|
|
47
73
|
"Major mode for RD editing.
|
|
48
74
|
\\{rd-mode-map}"
|
|
@@ -50,7 +76,7 @@
|
|
|
50
76
|
(setq paragraph-separate "=+\\|\\++\\|[ \t\n\^L]*$")
|
|
51
77
|
(make-local-variable 'paragraph-start)
|
|
52
78
|
(setq paragraph-start "=+\\|\\++\\|[ \t\n\^L]")
|
|
53
|
-
(make-local-variable 'require-final-newline)
|
|
79
|
+
(make-local-variable 'require-final-newline)
|
|
54
80
|
(setq require-final-newline t)
|
|
55
81
|
(make-local-variable 'font-lock-defaults)
|
|
56
82
|
(setq font-lock-defaults '((rd-font-lock-keywords) t nil))
|
|
@@ -62,7 +88,6 @@
|
|
|
62
88
|
(add-hook (make-local-variable 'write-contents-hooks) 'rd-strip-cr-on-top)
|
|
63
89
|
(add-hook (make-local-variable 'after-save-hook) 'rd-rehide-endline)
|
|
64
90
|
(rd-hide-other-block-all)
|
|
65
|
-
(rd-setup-keys)
|
|
66
91
|
(setq indent-tabs-mode nil)
|
|
67
92
|
(setq imenu-create-index-function 'rd-imenu-create-index)
|
|
68
93
|
(run-hooks 'rd-mode-hook)
|
|
@@ -112,25 +137,6 @@
|
|
|
112
137
|
0 rd-description-face)
|
|
113
138
|
))
|
|
114
139
|
|
|
115
|
-
(defun rd-setup-keys ()
|
|
116
|
-
(interactive)
|
|
117
|
-
(define-key rd-mode-map "\t" 'rd-indent-line)
|
|
118
|
-
(define-key rd-mode-map "\C-j" 'rd-newline-and-indent)
|
|
119
|
-
(define-key rd-mode-map "\C-c\C-v" 'rd-cite-region)
|
|
120
|
-
(define-key rd-mode-map "\C-c\C-ie" 'rd-insert-emphasis)
|
|
121
|
-
(define-key rd-mode-map "\C-c\C-ic" 'rd-insert-code)
|
|
122
|
-
(define-key rd-mode-map "\C-c\C-iv" 'rd-insert-var)
|
|
123
|
-
(define-key rd-mode-map "\C-c\C-ik" 'rd-insert-keyboard)
|
|
124
|
-
(define-key rd-mode-map "\C-c\C-ii" 'rd-insert-index)
|
|
125
|
-
(define-key rd-mode-map "\C-c\C-ir" 'rd-insert-ref)
|
|
126
|
-
(define-key rd-mode-map "\C-c\C-iu" 'rd-insert-reftourl)
|
|
127
|
-
(define-key rd-mode-map "\C-c\C-if" 'rd-insert-footnote)
|
|
128
|
-
(define-key rd-mode-map "\C-c\C-ib" 'rd-insert-verb)
|
|
129
|
-
(define-key rd-mode-map "\C-c\C-y" 'rd-yank-as-url)
|
|
130
|
-
(define-key rd-mode-map "\C-c\M-y" 'rd-yank-pop-as-url)
|
|
131
|
-
(define-key rd-mode-map "\C-c\C-u" 'rd-insert-url)
|
|
132
|
-
(define-key rd-mode-map "\M-\C-m" 'rd-intelligent-newline))
|
|
133
|
-
|
|
134
140
|
(defun rd-strip-cr-on-top ()
|
|
135
141
|
(save-excursion
|
|
136
142
|
(widen)
|
|
@@ -186,7 +192,7 @@
|
|
|
186
192
|
(set-buffer-modified-p mod))
|
|
187
193
|
(setq selective-display t
|
|
188
194
|
selective-display-ellipses rd-selective-display-ellipses))
|
|
189
|
-
|
|
195
|
+
|
|
190
196
|
(defun rd-show-other-block ()
|
|
191
197
|
"Shows lines not in RD format before current point."
|
|
192
198
|
(interactive)
|
|
@@ -336,7 +342,7 @@
|
|
|
336
342
|
(beginning-of-line)
|
|
337
343
|
(looking-at "--- +\\| *\\(\\* +\\|([0-9]+) +\\)?")
|
|
338
344
|
(length (buffer-substring (match-beginning 0)(match-end 0)))))
|
|
339
|
-
|
|
345
|
+
|
|
340
346
|
(defun rd-cite-region (beg end)
|
|
341
347
|
"Make region into Verbatim."
|
|
342
348
|
(interactive "r*")
|
|
@@ -357,7 +363,7 @@
|
|
|
357
363
|
(rd-indent-region beg end prev-indent))
|
|
358
364
|
(t
|
|
359
365
|
(goto-char end)))))))
|
|
360
|
-
|
|
366
|
+
|
|
361
367
|
(defun rd-indent-region (beg end &optional indent)
|
|
362
368
|
"Make the indent of region deeper by INDENT."
|
|
363
369
|
(interactive "r*")
|
|
@@ -415,7 +421,7 @@
|
|
|
415
421
|
)
|
|
416
422
|
(end-of-line)
|
|
417
423
|
(newline)
|
|
418
|
-
(if item (insert
|
|
424
|
+
(if item (insert item) )
|
|
419
425
|
)
|
|
420
426
|
)
|
|
421
427
|
|
|
@@ -423,7 +429,7 @@
|
|
|
423
429
|
(let ((root '(nil . nil))
|
|
424
430
|
cur-alist
|
|
425
431
|
(cur-level 0)
|
|
426
|
-
(pattern "^\\(
|
|
432
|
+
(pattern "^\\(=+\\|---\\)[ \t\v\f]*\\(.*?\\)[ \t\v\f]*$")
|
|
427
433
|
(empty-heading "-")
|
|
428
434
|
(self-heading ".")
|
|
429
435
|
pos level heading alist)
|
|
@@ -459,6 +465,8 @@
|
|
|
459
465
|
cur-level level))))))
|
|
460
466
|
(cdr root)))
|
|
461
467
|
|
|
468
|
+
;;;###autoload
|
|
469
|
+
(add-to-list 'auto-mode-alist '("\\.rd\\'" . rd-mode))
|
|
470
|
+
|
|
462
471
|
(provide 'rd-mode)
|
|
463
472
|
;;; rd-mode.el ends here
|
|
464
|
-
|