Commit fb5ef145 authored by mitshel's avatar mitshel
Browse files

Start work with cover show

parent b65c3092
Loading
Loading
Loading
Loading

py/book.fb2

0 → 100644
+15929 −0

File added.

Preview size limit exceeded, changes collapsed.

+3 −2
Original line number Diff line number Diff line
@@ -4,8 +4,9 @@
import sopdsparse

  
f=open('../test/25453.fb2','rb')
parser=sopdsparse.fb2parser()
f=open('book.fb2','rb')
parser=sopdsparse.fb2parser(1)
parser.parse(f)
print(parser.author_first.getvalue(), parser.author_last.getvalue(), parser.genre.getvalue(), parser.lang.getvalue(), parser.book_title.getvalue())
print(parser.book_cover.getvalue())
f.close()
+28 −5
Original line number Diff line number Diff line
@@ -33,12 +33,19 @@ class fb2tag:


class fb2parser:
   def __init__(self):
   def __init__(self, readcover=0):
       self.rc=readcover
       self.author_first=fb2tag(('description','title-info','author','first-name'))
       self.author_last=fb2tag(('description','title-info','author','last-name'))
       self.genre=fb2tag(('description','title-info','genre'))
       self.lang=fb2tag(('description','title-info','lang'))
       self.book_title=fb2tag(('description','title-info','book-title'))
       if self.rc!=0:
          self.book_cover = fb2tag (('binary'));
          self.stoptag='fictionbook'
          self.iscover=False
       else:
          self.stoptag='description'
       self.parse_error=0

   def reset(self):
@@ -48,6 +55,8 @@ class fb2parser:
       self.genre.reset()
       self.lang.reset()
       self.book_title.reset()
       if self.rc!=0:
          self.book_cover.reset()

   def xmldecl(self,version, encoding, standalone):
       pass
@@ -58,6 +67,14 @@ class fb2parser:
       self.genre.tagopen(name)
       self.lang.tagopen(name)
       self.book_title.tagopen(name)
       if self.rc!=0 and name.lower()=='binary':
          self.book_cover.tagopen(name)
          idvalue=attrs.get('id')
          if idvalue!=None:
             idvalue=idvalue.lower()
          if idvalue=='cover.jpg':
             self.iscover=True
             print(name, idvalue)

   def end_element(self,name):
       self.author_first.tagclose(name)
@@ -65,6 +82,9 @@ class fb2parser:
       self.genre.tagclose(name)
       self.lang.tagclose(name)
       self.book_title.tagclose(name)
       if self.rc!=0 and name.lower()=='binary':
          self.book_cover.tagclose(name)
          self.iscover=False

       #Выравниваем количество last_name и first_name
       if name.lower()=='author': 
@@ -73,7 +93,7 @@ class fb2parser:
          elif len(self.author_last.getvalue())<len(self.author_first.getvalue()):
             self.author_last.values.append(" ")

       if name.lower()=='description':
       if name.lower()==self.stoptag:
          raise StopIteration
  
   def char_data(self,data):
@@ -83,8 +103,11 @@ class fb2parser:
       self.genre.setvalue(value)
       self.lang.setvalue(value)
       self.book_title.setvalue(value)
       if self.rc!=0 and self.iscover:
          self.book_cover.setvalue(value)
          print(value, end='')

   def parse(self,f,hsize):
   def parse(self,f,hsize=0):
       self.reset()
       parser = xml.parsers.expat.ParserCreate()
       parser.XmlDeclHandler = self.xmldecl
@@ -98,5 +121,5 @@ class fb2parser:
            parser.Parse(f.read(hsize), True)
       except StopIteration:
         pass
       except:
         parse_error=1
#       except:
#         parse_error=1