1 # $Id: node.rb,v 1.6 2012/04/17 02:49:40 machan Exp $
2
3 require 'tmdoc/constant'
4 require 'tmdoc/model/document/abstraction'
5 require 'tmdoc/model/document/link'
6 require 'tmdoc/model/document/module-infobox'
7
8
9 module TmDoc
10
11 module Model::Document
12
13 module Node
14
15 class ModuleStructure < Abstraction::Node::LogicalStructure
16 alias below_module_nodes elements
17
18
19 def initialize(a_link_to_module, elements, opts = {})
20 ASSERT.kind_of a_link_to_module, MDL::Module
21 ASSERT.kind_of elements, SeqOfModule
22 ASSERT.kind_of opts, Hash
23
24 a_infobox = nil
25 is_focused = false
26 links_to_line = nil
27 for key, val in opts
28 ASSERT.kind_of key, Symbol
29
30 case key
31 when :is_focused
32 ASSERT.boolean val
33
34 is_focused = val
35 when :links_to_line
36 ASSERT.opt_kind_of(
37 val, Model::Document::Link::SeqOfLine
38 )
39
40 links_to_line = val
41 when :infobox
42 ASSERT.kind_of val, InfoBox
43
44 a_infobox = val
45 else
46 ASSERT.abort("Unknown option: %s", key)
47 end
48 end
49
50 super(
51 a_link_to_module,
52 elements,
53 is_focused,
54 a_infobox,
55 links_to_line
56 )
57 end
58 end
59
60
61
62 class SeqOfModule < Abstraction::Node::SeqOfLogical
63 LSM_ELEMENT_CLASS = ModuleStructure
64 end
65
66 EMPTY_MODULES = SeqOfModule.new
67
68
69
70 class InfoBox < Module::InfoBox::InfoBox
71 attr_reader :module_above_path,
72 :module_name
73
74 def initialize(module_above_path, module_name, module_rows)
75 ASSERT.kind_of module_above_path, Path
76 ASSERT.kind_of module_name, String
77 ASSERT.kind_of module_rows, Module::InfoBox::Row::SeqOfRow
78
79 super(module_rows)
80
81 @module_above_path = module_above_path
82 @module_name = module_name
83 end
84 end
85
86
87
88
89 class ClassHierarchy < Abstraction::Node::LogicalStructure
90 alias subclass_nodes elements
91
92
93 def initialize(a_link_to_class, elements, opts = {})
94 ASSERT.kind_of a_link_to_class, MDL::Class
95 ASSERT.kind_of elements, SeqOfClass
96 ASSERT.kind_of opts, Hash
97
98
99 a_infobox = nil
100 is_focused = false
101 links_to_line = nil
102 @is_above_module_equal_to_superclass = false
103 for key, val in opts
104 ASSERT.kind_of key, Symbol
105
106 case key
107 when :is_focused
108 ASSERT.boolean val
109
110 is_focused = val
111 when :links_to_line
112 ASSERT.opt_kind_of(
113 val, Model::Document::Link::SeqOfLine
114 )
115
116 links_to_line = val
117 when :infobox
118 ASSERT.kind_of val, InfoBox
119
120 a_infobox = val
121 when :is_above_module_equal_to_superclass
122 ASSERT.boolean val
123
124 @is_above_module_equal_to_superclass = val
125 else
126 ASSERT.abort("Unknown option: %s", key)
127 end
128 end
129
130 super(
131 a_link_to_class,
132 elements,
133 is_focused,
134 a_infobox,
135 links_to_line
136 )
137 end
138
139
140 def above_module_equal_to_superclass?
141 ASSERT.boolean @is_above_module_equal_to_superclass
142 end
143 end
144
145
146
147 class SeqOfClass < Abstraction::Node::SeqOfLogical
148 LSM_ELEMENT_CLASS = ClassHierarchy
149 end
150
151 EMPTY_CLASSES = SeqOfClass.new
152
153
154
155 class File < Abstraction::Document
156 attr_reader :a_link_to_file
157
158
159 def initialize(a_link_to_file)
160 ASSERT.kind_of a_link_to_file, Link::File
161
162 @a_link_to_file = a_link_to_file
163 end
164
165
166 def to_s
167 ASSERT.kind_of self.a_link_to_file.to_s, String
168 end
169 end
170
171
172
173 class SeqOfFile < Abstraction::SeqOfDocument
174 LSM_ELEMENT_CLASS = File
175 end
176
177
178
179 class SourceStructure < TmStd::Lsm::Product::Abstract
180 attr_reader :files
181
182
183 def initialize(files)
184 ASSERT.kind_of files, SeqOfFile
185
186 @files = files
187 end
188
189
190 def print
191 for file in self.files
192 LOG::Debug.log file.to_s
193 end
194
195 nil
196 end
197 end
198
199 end # TmDoc::Model::Document::Node
200
201 end # TmDoc::Model::Document
202
203 end # TmDoc