| Class | Origami::PageTreeNode |
| In: |
sources/parser/page.rb
|
| Parent: | Dictionary |
Class representing a node in a Page tree.
| Count | = | 0 |
| Kids | = | [] |
| Count | = | self.children.length |
| Count | = | self.Count + 1 |
| Count | = | self.Count + 1 |
| Count | = | self.Count + 1 |
| Count | = | self.Kids.length |
| Parent | = | self |
# File sources/parser/page.rb, line 149
149: def initialize(hash = {})
150: self.Count = 0
151: self.Kids = []
152:
153: super(hash)
154:
155: set_indirect(true)
156: end
# File sources/parser/page.rb, line 228
228: def << (pageset)
229:
230: pageset = [pageset] unless pageset.is_a?(Enumerable)
231: fail "Cannot add anything but Page and PageTreeNode to this node" unless pageset.all? { |item| item.is_a?(Page) or item.is_a?(PageTreeNode) }
232:
233: self.Kids ||= Array.new
234: self.Kids.concat(pageset)
235: self.Count = self.Kids.length
236:
237: pageset.each do |node|
238: node.Parent = self
239: end
240:
241: end
Returns an array of Page inheriting this tree node.
# File sources/parser/page.rb, line 210
210: def children
211: pageset = []
212:
213: unless self.Count.nil?
214: self.Count.value.times { |n|
215: if n < self.Kids.length
216: node = self.Kids[n].is_a?(Reference) ? self.Kids[n].solve : self.Kids[n]
217: case node
218: when PageTreeNode then pageset.concat(node.children)
219: when Page then pageset << node
220: end
221: end
222: }
223: end
224:
225: pageset
226: end
# File sources/parser/page.rb, line 164
164: def insert_page(index, page)
165:
166: if index > self.Count
167: raise IndexError, "Invalid index for page tree"
168: end
169:
170: count = 0
171: kids = self.Kids
172:
173: kids.length.times { |n|
174: if count == index
175: kids.insert(n, page)
176: self.Count = self.Count + 1
177: return self
178: else
179: node = kids[n].is_a?(Reference) ? kids[n].solve : kids[n]
180: case node
181: when Page
182: count = count + 1
183: next
184: when PageTreeNode
185: if count + node.Count > index
186: node.insert_page(index - count, page)
187: self.Count = self.Count + 1
188: return self
189: else
190: count = count + node.Count
191: next
192: end
193: end
194: end
195: }
196:
197: if count == index
198: kids.push(page)
199: self.Count = self.Count + 1
200: else
201: raise IndexError, "An error occured while inserting page"
202: end
203:
204: self
205: end