Class Origami::PageTreeNode
In: sources/parser/page.rb
Parent: Dictionary

Class representing a node in a Page tree.

Methods

<<   children   insert_page   new  

Included Modules

Configurable

Constants

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

Public Class methods

[Source]

     # 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

Public Instance methods

[Source]

     # 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.

[Source]

     # 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

[Source]

     # 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

[Validate]