`id', which should be a string that can be passed to the `byid'
function of its parent node to recover the node. Such string ID
should be more persistent than the node's numeric index in the
- parent."""
+ parent.
+
+ All pagetree objects should contain an attribute `name',
+ containing some human-readable Unicode representation of the
+ pagelist."""
def idlist(self):
"""Returns a list of the IDs necessary to resolve this node
from the root node."""
if len(self.stack) == 0:
- raise Exception("Cannot get ID list on root node.")
- return [n.id for n, i in self.stack[1:]] + [self.id]
+ return []
+ return self.stack[-1][0].idlist() + [self.id]
def byidlist(self, idlist):
if len(idlist) == 0:
class pagelist(pagetree):
"""Class representing a list of either pages, or nested
- pagelists. Might be, for instance, a volume or a chapter.
-
- All pagelists should contain an attribute `name', containing some
- human-readable Unicode representation of the pagelist."""
+ pagelists. Might be, for instance, a volume or a chapter."""
def __len__(self):
"""Return the number of (direct) sub-nodes in this pagelist.
else:
self.cur = self.descend(ob)
- def descend(self, ob):
+ def descend(self, ob, last=False):
while isinstance(ob, pagelist):
- ob = ob[0]
+ ob = ob[len(ob) - 1 if last else 0]
if not isinstance(ob, page):
raise TypeError("object in page tree was unexpectedly not a pagetree")
return ob
raise StopIteration()
def prev(self):
- for n, i in reversed(self.cur,stack):
+ for n, i in reversed(self.cur.stack):
if i > 0:
- self.cur = self.descend(n[i - 1])
+ self.cur = self.descend(n[i - 1], True)
return self.cur
raise StopIteration()
def __iter__(self):
return self
+
+loaded = {}
+def findlib(name):
+ def load(name):
+ mod = __import__(name, fromlist=["dummy"])
+ if not hasattr(mod, "library"):
+ raise ImportError("module " + name + " is not a manga library")
+ return mod.library()
+ if name not in loaded:
+ try:
+ loaded[name] = load("manga." + name)
+ except ImportError:
+ loaded[name] = load(name)
+ return loaded[name]