rdtool 0.6.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. data/COPYING.txt +674 -0
  2. data/Gemfile +9 -0
  3. data/HISTORY +284 -0
  4. data/LICENSE.txt +58 -0
  5. data/MANIFEST +89 -0
  6. data/README.html +44 -0
  7. data/README.ja.html +46 -0
  8. data/README.rd +52 -0
  9. data/README.rd.ja +54 -0
  10. data/Rakefile +29 -0
  11. data/TODO +15 -0
  12. data/VERSION +1 -0
  13. data/bin/rd2 +281 -0
  14. data/bin/rdswap.rb +207 -0
  15. data/doc/rd-draft.rd +479 -0
  16. data/doc/rd-draft.rd.ja +487 -0
  17. data/lib/rd/block-element.rb +114 -0
  18. data/lib/rd/complex-list-item.rb +65 -0
  19. data/lib/rd/desclist.rb +55 -0
  20. data/lib/rd/document-struct.rb +46 -0
  21. data/lib/rd/dot.rd2rc +18 -0
  22. data/lib/rd/element.rb +160 -0
  23. data/lib/rd/filter.rb +255 -0
  24. data/lib/rd/inline-element.rb +233 -0
  25. data/lib/rd/labeled-element.rb +14 -0
  26. data/lib/rd/list.rb +57 -0
  27. data/lib/rd/loose-struct.rb +11 -0
  28. data/lib/rd/methodlist.rb +57 -0
  29. data/lib/rd/output-format-visitor.rb +28 -0
  30. data/lib/rd/package.rb +4 -0
  31. data/lib/rd/parser-util.rb +14 -0
  32. data/lib/rd/post-install +1 -0
  33. data/lib/rd/rbl-file.rb +69 -0
  34. data/lib/rd/rbl-suite.rb +37 -0
  35. data/lib/rd/rd-struct.rb +86 -0
  36. data/lib/rd/rd2html-lib.rb +490 -0
  37. data/lib/rd/rd2html-opt.rb +67 -0
  38. data/lib/rd/rd2man-lib.rb +241 -0
  39. data/lib/rd/rd2rdo-lib.rb +19 -0
  40. data/lib/rd/rd2rmi-lib.rb +32 -0
  41. data/lib/rd/rdblockparser.ry +518 -0
  42. data/lib/rd/rdblockparser.tab.rb +1050 -0
  43. data/lib/rd/rdfmt.rb +15 -0
  44. data/lib/rd/rdinlineparser.ry +503 -0
  45. data/lib/rd/rdinlineparser.tab.rb +1243 -0
  46. data/lib/rd/rdvisitor.rb +214 -0
  47. data/lib/rd/reference-resolver.rb +114 -0
  48. data/lib/rd/search-file.rb +14 -0
  49. data/lib/rd/tree.rb +103 -0
  50. data/lib/rd/version.rb +39 -0
  51. data/lib/rd/visitor.rb +86 -0
  52. data/makerdtool.rb +75 -0
  53. data/setup.rb +1596 -0
  54. data/test.rb +33 -0
  55. data/test/data/includee1.html +1 -0
  56. data/test/data/includee2.html +1 -0
  57. data/test/data/includee3.nothtml +1 -0
  58. data/test/data/includee4.xhtml +0 -0
  59. data/test/data/label.rbl +2 -0
  60. data/test/data/label2.rbl +2 -0
  61. data/test/data/sub/includee2.html +1 -0
  62. data/test/data/sub/includee4.html +0 -0
  63. data/test/dummy-observer.rb +6 -0
  64. data/test/dummy.rb +33 -0
  65. data/test/temp-dir.rb +19 -0
  66. data/test/test-block-parser.rb +46 -0
  67. data/test/test-desclist-item.rb +219 -0
  68. data/test/test-document-element.rb +46 -0
  69. data/test/test-document-struct.rb +66 -0
  70. data/test/test-element.rb +46 -0
  71. data/test/test-headline.rb +80 -0
  72. data/test/test-inline-parser.rb +46 -0
  73. data/test/test-list-item.rb +54 -0
  74. data/test/test-list.rb +53 -0
  75. data/test/test-methodlist-item.rb +73 -0
  76. data/test/test-nonterminal-element.rb +170 -0
  77. data/test/test-nonterminal-inline.rb +33 -0
  78. data/test/test-output-format-visitor.rb +48 -0
  79. data/test/test-parser-util.rb +41 -0
  80. data/test/test-rbl-file.rb +156 -0
  81. data/test/test-rbl-suite.rb +43 -0
  82. data/test/test-rd2html-lib.rb +496 -0
  83. data/test/test-rdtree.rb +17 -0
  84. data/test/test-rdvisitor.rb +29 -0
  85. data/test/test-reference-resolver.rb +202 -0
  86. data/test/test-reference.rb +132 -0
  87. data/test/test-search-file.rb +22 -0
  88. data/test/test-terminal-inline.rb +41 -0
  89. data/test/test-textblock.rb +44 -0
  90. data/test/test-tree.rb +82 -0
  91. data/test/test-version.rb +57 -0
  92. data/test/test-visitor.rb +230 -0
  93. data/utils/rd-mode.el +425 -0
  94. metadata +203 -0
@@ -0,0 +1,114 @@
1
+ require 'rd/element'
2
+ require 'rd/labeled-element'
3
+
4
+ module RD
5
+ # Block-level Element of document tree. abstruct class.
6
+ class BlockElement < Element
7
+ end
8
+
9
+ class Headline < BlockElement
10
+ include NonterminalElement
11
+ include LabeledElement
12
+
13
+ MARK2LEVEL = {
14
+ "=" => 1,
15
+ "==" => 2,
16
+ "===" => 3,
17
+ "====" => 4,
18
+ "+" => 5,
19
+ "++" => 6
20
+ }
21
+
22
+ attr_accessor :level
23
+ attr_reader :title
24
+
25
+ def initialize(level_num)
26
+ super()
27
+ @level = level_num
28
+ @title = []
29
+ end
30
+
31
+ def accept(visitor)
32
+ visitor.visit_Headline(self)
33
+ end
34
+
35
+ def calculate_label
36
+ ret = ""
37
+ @title.each do |i|
38
+ ret << i.to_label
39
+ end
40
+ ret
41
+ end
42
+ private :calculate_label
43
+
44
+ def Headline.mark_to_level(mark_str)
45
+ MARK2LEVEL[mark_str] or
46
+ raise ArgumentError, "#{mark_str} is irregular for Headline mark."
47
+ end
48
+
49
+ def children
50
+ @title
51
+ end
52
+ end
53
+
54
+ class Include < BlockElement
55
+ include TerminalElement
56
+
57
+ attr_accessor :filename
58
+
59
+ def initialize(filename)
60
+ super()
61
+ @filename = filename
62
+ end
63
+
64
+ def accept(visitor)
65
+ visitor.visit_Include(self)
66
+ end
67
+ end # Include
68
+
69
+ class TextBlock < BlockElement
70
+ include NonterminalElement
71
+
72
+ attr_accessor :content
73
+
74
+ def initialize()
75
+ super()
76
+ @content = []
77
+ end
78
+
79
+ def accept(visitor)
80
+ visitor.visit_TextBlock(self)
81
+ end
82
+
83
+ def children
84
+ @content
85
+ end
86
+ end
87
+
88
+ class Verbatim < BlockElement
89
+ include TerminalElement
90
+
91
+ attr_reader :content
92
+
93
+ def initialize(content_strings = [])
94
+ super()
95
+ @content = content_strings # Array of String
96
+ end
97
+
98
+ def accept(visitor)
99
+ visitor.visit_Verbatim(self)
100
+ end
101
+
102
+ def each_line
103
+ if @content.respond_to?(:each_line)
104
+ @content.each_line {|i|
105
+ yield i
106
+ }
107
+ else
108
+ @content.each {|i|
109
+ yield i
110
+ }
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,65 @@
1
+
2
+
3
+ module RD
4
+ # abstruct class for ListItem which have term part additionaly.
5
+ # (i.e. DescListItem and MethodListItem)
6
+ module ComplexListItem
7
+ def set_term(term)
8
+ set_term_under_document_struct(term, tree.document_struct)
9
+ end
10
+ alias term= set_term
11
+
12
+ def set_term_under_document_struct(term, document_struct)
13
+ raise ArgumentError unless document_struct.is_valid?(self, term)
14
+ assign_term(term)
15
+ end
16
+
17
+ def set_term_without_document_struct(term)
18
+ assign_term(term)
19
+ end
20
+
21
+ def assign_term(term)
22
+ @term = term
23
+ term.parent = self
24
+ end
25
+
26
+ def make_term(*args_of_new, &block)
27
+ child = self.class::Term.new(*args_of_new)
28
+ set_term(child)
29
+ child.build(&block) if block_given?
30
+ child
31
+ end
32
+
33
+ def each_element(&block)
34
+ yield(self)
35
+ @term.each_element(&block)
36
+ @description.each do |i|
37
+ i.each_element(&block)
38
+ end
39
+ end
40
+ alias each each_element
41
+
42
+ def each_block_in_description
43
+ @description.each do |i|
44
+ yield(i)
45
+ end
46
+ end
47
+ alias each_block each_block_in_description
48
+
49
+ def children
50
+ @description
51
+ end
52
+
53
+ def to_label
54
+ @term.to_label
55
+ end
56
+ alias label to_label
57
+
58
+ def inspect
59
+ t = indent2(term.inspect) if term
60
+ c = children.collect{|i| indent2(i.inspect)}.join("\n")
61
+ "<#{self.class.name}>" + (term ? "\n" : "") + t.to_s +
62
+ (c.empty? ? "" : "\n") + c
63
+ end
64
+ end # ComplexListItem
65
+ end # RD
@@ -0,0 +1,55 @@
1
+ require 'rd/element'
2
+ require 'rd/list'
3
+ require 'rd/complex-list-item'
4
+ require 'rd/labeled-element'
5
+
6
+ module RD
7
+ class DescList < List
8
+ def accept(visitor)
9
+ visitor.visit_DescList(self)
10
+ end
11
+ end
12
+
13
+ class DescListItem < ListItem
14
+ include ComplexListItem
15
+
16
+ attr_reader :term
17
+ attr_reader :description
18
+
19
+ def initialize
20
+ @term = nil
21
+ @description = []
22
+ @label = nil
23
+ end
24
+
25
+ def accept(visitor)
26
+ visitor.visit_DescListItem(self)
27
+ end
28
+
29
+ class Term < Element
30
+ include NonterminalElement
31
+ include LabeledElement
32
+
33
+ def initialize
34
+ @content = []
35
+ end
36
+
37
+ def calculate_label
38
+ ret = ""
39
+ children.each do |i|
40
+ ret.concat(i.to_label)
41
+ end
42
+ ret
43
+ end
44
+ private :calculate_label
45
+
46
+ def accept(visitor)
47
+ visitor.visit_DescListItemTerm(self)
48
+ end
49
+
50
+ def children
51
+ @content
52
+ end
53
+ end
54
+ end # DescListItem
55
+ end # RD
@@ -0,0 +1,46 @@
1
+
2
+ module RD
3
+ # DocumentStructure defines and restricts structure of document tree.
4
+ # it consists of ElementRelationship
5
+ class DocumentStructure
6
+ def initialize
7
+ @relationships = []
8
+ end
9
+
10
+ def add_relationships(*relations)
11
+ @relationships += relations
12
+ end
13
+
14
+ def define_relationship(parent, child)
15
+ add_relationships(ElementRelationship.new(parent, child))
16
+ end
17
+
18
+ def each_relationship
19
+ @relationships.each do |i|
20
+ yield(i)
21
+ end
22
+ end
23
+
24
+ def is_valid?(parent, child)
25
+ each_relationship do |i|
26
+ return true if i.match?(parent, child)
27
+ end
28
+ false
29
+ end
30
+ end
31
+
32
+ # ElementRelationship is knowledge about parent-children relationship
33
+ # between Elements.
34
+ class ElementRelationship
35
+ attr_reader(:parent, :child)
36
+
37
+ def initialize(parent, child)
38
+ @parent = parent
39
+ @child = child
40
+ end
41
+
42
+ def match?(parent, child)
43
+ parent.is_a? @parent and child.is_a? @child
44
+ end
45
+ end
46
+ end
data/lib/rd/dot.rd2rc ADDED
@@ -0,0 +1,18 @@
1
+ =begin
2
+ = dot.rd2rc
3
+ default dot file for "rd2".
4
+ =end
5
+
6
+ # define relation between types of part and Filter to set $RD["filter"]
7
+ # RD::INCLUDE_FILTER is used if type doesn't set.
8
+ # $RC["filter"]["((|type|))"] = ((|Filter|))
9
+
10
+ $RC["filter"]["include"] = RD::INCLUDE_FILTER
11
+ $RC["filter"]["rd"] = RD::RD_FILTER
12
+ $RC["filter"]["eval"] = RD::EVAL_FILTER
13
+
14
+ =begin
15
+ == script info.
16
+ default dot file for "rd2".
17
+ $Id: dot.rd2rc,v 1.2 2000/06/09 15:48:42 toshirok Exp $
18
+ =end
data/lib/rd/element.rb ADDED
@@ -0,0 +1,160 @@
1
+
2
+ module RD
3
+
4
+ # abstruct class of node of document tree
5
+ class Element
6
+ include Enumerable
7
+
8
+ attr_accessor :parent
9
+
10
+ def initialize
11
+ @parent = nil
12
+ end
13
+
14
+ def tree
15
+ raise RuntimeError, "#{self} doesn't have a parent." unless @parent
16
+ @parent.tree
17
+ end
18
+
19
+ def inspect
20
+ c = children.collect{|i| indent2(i.inspect)}.join("\n")
21
+ "<#{self.class.name}>" + (c.empty? ? "" : "\n") + c
22
+ end
23
+ end # Element
24
+
25
+ # element which don't have children.
26
+ module TerminalElement
27
+ def children
28
+ []
29
+ end
30
+
31
+ def each_element
32
+ yield(self)
33
+ end
34
+ alias each each_element
35
+ end
36
+
37
+ # element which have children.
38
+ module NonterminalElement
39
+ def initialize(*arg)
40
+ @temporary_document_structure = nil
41
+ super
42
+ end
43
+
44
+ def children
45
+ raise NotImplimentedError, "need #{self}#children."
46
+ end
47
+
48
+ def each_child
49
+ children.each do |i|
50
+ yield(i)
51
+ end
52
+ end
53
+
54
+ def each_element(&block)
55
+ yield(self)
56
+ children.each do |i|
57
+ i.each_element(&block)
58
+ end
59
+ end
60
+ alias each each_element
61
+
62
+ def add_child(child)
63
+ add_child_under_document_struct(child, tree.document_struct)
64
+ end
65
+
66
+ def add_child_under_document_struct(child, document_struct)
67
+ if document_struct.is_valid?(self, child)
68
+ push_to_children(child)
69
+ else
70
+ raise ArgumentError,
71
+ "mismatched document structure, #{self} <-/- #{child}."
72
+ end
73
+ return self
74
+ end
75
+
76
+ def add_children(children)
77
+ add_children_under_document_struct(children, tree.document_struct)
78
+ end
79
+
80
+ def add_children_under_document_struct(children, document_struct)
81
+ children.each do |i|
82
+ add_child_under_document_struct(i, document_struct)
83
+ end
84
+ return self
85
+ end
86
+
87
+ def add_children_without_document_struct(new_children)
88
+ new_children.each do |i|
89
+ push_to_children(i)
90
+ end
91
+ return self
92
+ end
93
+
94
+ def push_to_children(child)
95
+ children.push(child)
96
+ child.parent = self
97
+ end
98
+
99
+ attr_accessor :temporary_document_structure
100
+
101
+ def build(document_struct = tree.document_struct, &block)
102
+ under_temporary_document_structure(document_struct) do
103
+ self.instance_eval(&block)
104
+ end
105
+ self
106
+ end
107
+
108
+ def make_child(child_class, *args_of_new, &block)
109
+ child = child_class.new(*args_of_new)
110
+ if self.temporary_document_structure
111
+ self.add_child_under_document_struct(child,
112
+ self.temporary_document_structure)
113
+ child.build(self.temporary_document_structure, &block) if block_given?
114
+ else
115
+ self.add_child(child)
116
+ child.build(&block) if block_given?
117
+ end
118
+ child
119
+ end
120
+ alias new make_child
121
+ private :new
122
+ # NonterminalElement#new, not NonterminalElement.new
123
+
124
+ def under_temporary_document_structure(document_struct)
125
+ begin
126
+ self.temporary_document_structure = document_struct
127
+ yield
128
+ ensure
129
+ self.temporary_document_structure = nil
130
+ end
131
+ end
132
+
133
+ def indent2(str)
134
+ buf = ''
135
+ str.each_line{|i| buf << " " << i }
136
+ buf
137
+ end
138
+ private :indent2
139
+ end
140
+
141
+ # root node of document tree
142
+ class DocumentElement < Element
143
+ include NonterminalElement
144
+ attr_reader :blocks
145
+
146
+ def initialize()
147
+ @blocks = []
148
+ end
149
+
150
+ def accept(visitor)
151
+ visitor.visit_DocumentElement(self)
152
+ end
153
+
154
+ alias each_block each_child
155
+
156
+ def children
157
+ @blocks
158
+ end
159
+ end
160
+ end