Add support for removing inner bookmarks

This commit is contained in:
Nemo 2021-05-26 21:44:26 +05:30
parent 47b1830b57
commit abd72521b1
1 changed files with 28 additions and 11 deletions

View File

@ -22,7 +22,10 @@ class Stitcher:
os.chdir(self.dir) os.chdir(self.dir)
text = inputBuffer.read() text = inputBuffer.read()
html = markdown.markdown(text,extensions=['attr_list']) md = markdown.Markdown(extensions=['attr_list', 'meta'])
html = md.convert(text)
self.attributes = md.Meta
document = html5lib.parseFragment(html, namespaceHTMLElements=False) document = html5lib.parseFragment(html, namespaceHTMLElements=False)
for e in document.iter(): for e in document.iter():
self.iter(e) self.iter(e)
@ -50,8 +53,8 @@ class Stitcher:
elif(tag =='a'): elif(tag =='a'):
file = element.attrib.get('href') file = element.attrib.get('href')
b = Bookmark(self.currentPage, element.text, self.currentLevel+1) b = Bookmark(self.currentPage, element.text, self.currentLevel+1)
self.currentPage += self._get_pdf_number_of_pages(file)
self.files.append((file, self.currentPage)) self.files.append((file, self.currentPage))
self.currentPage += self._get_pdf_number_of_pages(file)
if b: if b:
self.bookmarks.append(b) self.bookmarks.append(b)
@ -62,21 +65,35 @@ class Stitcher:
targetFileHandle.write("BookmarkPageNumber: " + str(page) + "\n") targetFileHandle.write("BookmarkPageNumber: " + str(page) + "\n")
targetFileHandle.write("BookmarkZoom: FitHeight\n") targetFileHandle.write("BookmarkZoom: FitHeight\n")
def _generate_metadata(self, filename, flatten_inner_bookmarks=True): def _existingBookmarkConfig(self):
return self.attributes.get('existing_bookmarks', ['keep'])
def _keepExistingBookmarks(self):
return self._existingBookmarkConfig()[0] != 'remove'
def _flattenBookmarks(self):
if (self._existingBookmarkConfig() == ['flatten']):
return True
return False
def _generate_metadata(self, filename):
if (self._flattenBookmarks()):
_logger.info("Bookmarks are flattened")
with open(filename, 'w') as target: with open(filename, 'w') as target:
if (self.title): if (self.title):
target.write("InfoBegin\n") target.write("InfoBegin\n")
target.write("InfoKey: Title\n") target.write("InfoKey: Title\n")
target.write("InfoValue: " + self.title + "\n") target.write("InfoValue: " + self.title + "\n")
for b in self.oldBookmarks: if (self._keepExistingBookmarks()):
outer_level = self._get_level_from_page_number(b.page) for b in self.oldBookmarks:
if (flatten_inner_bookmarks): outer_level = self._get_level_from_page_number(b.page)
increment = 1 if (self._flattenBookmarks()):
else: increment = 1
increment = b.level else:
level = outer_level + increment increment = b.level
self.bookmarks.append(Bookmark(b.page+1, b.title, level)) level = outer_level + increment
self.bookmarks.append(Bookmark(b.page+1, b.title, level))
self.bookmarks.sort() self.bookmarks.sort()