Added a flat page iterator for arbitrary page lists.
[automanga.git] / manga / lib.py
1 class library(object):
2     pass
3
4 class pagelist(object):
5     pass
6
7 class manga(pagelist):
8     pass
9
10 class page(object):
11     pass
12
13 class pageiter(object):
14     def __init__(self, root):
15         self.nstack = [0]
16         self.lstack = [root]
17
18     def next(self):
19         while True:
20             if len(self.nstack) == 0:
21                 raise StopIteration
22             try:
23                 node = self.lstack[-1][self.nstack[-1]]
24             except IndexError:
25                 self.lstack.pop()
26                 self.nstack.pop()
27                 if len(self.nstack) > 0:
28                     self.nstack[-1] += 1
29                 continue
30             if isinstance(node, page):
31                 nl = tuple(self.nstack)
32                 self.nstack[-1] += 1
33                 return nl, node
34             elif isinstance(node, pagelist):
35                 self.lstack.append(node)
36                 self.nstack.append(0)
37
38     def __iter__(self):
39         return self