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