From 81fb5f852cd7049fb900e6d745702c037d5fb4db Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 6 Jan 2008 16:41:51 +0000 Subject: [PATCH] Support for OPF 2.) linear attribute on spine elements. Thanks llasram. --- src/libprs500/ebooks/metadata/opf.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/libprs500/ebooks/metadata/opf.py b/src/libprs500/ebooks/metadata/opf.py index 9dbc9c257d..f87c6cdda0 100644 --- a/src/libprs500/ebooks/metadata/opf.py +++ b/src/libprs500/ebooks/metadata/opf.py @@ -48,18 +48,32 @@ class Manifest(list): if i.id == id: return i -class Spine(list): +class Spine(object): def __init__(self, soup, manifest): self.manifest = manifest + self.linear_ids, self.nonlinear_ids = [], [] spine = soup.find('spine') if spine is not None: for itemref in spine.findAll('itemref'): if itemref.has_key('idref'): - self.append(itemref['idref']) + if itemref.get('linear', 'yes') == 'yes': + self.linear_ids.append(itemref['idref']) + else: + self.nonlinear_ids.append(itemref['idref']) + def linear_items(self): + for id in self.linear_ids: + yield self.manifest.item(id) + + + def nonlinear_items(self): + for id in self.nonlinear_ids: + yield self.manifest.item(id) + + def items(self): - for i in self: + for i in self.linear_ids + self.nonlinear_ids: yield self.manifest.item(i) class TOC(list): @@ -480,4 +494,4 @@ def main(args=sys.argv): return 0 if __name__ == '__main__': - sys.exit(main()) \ No newline at end of file + sys.exit(main())