Skip to content

Commit 407d641

Browse files
committed
P now sets logical page starting at page
1 parent 1d745b8 commit 407d641

File tree

1 file changed

+67
-10
lines changed

1 file changed

+67
-10
lines changed

termpdf.py

+67-10
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ def __init__(self):
9090
'lynx'
9191
]
9292
self.URL_BROWSER = None
93+
self.GUI_VIEWER = 'preview'
9394
self.NOTE_PATH = os.path.join(os.getenv("HOME"), 'inbox.org')
9495

9596
def browser_detect(self):
@@ -354,7 +355,7 @@ def prev_chap(self, count=1):
354355

355356
def parse_pagelabels(self):
356357
if self.isPDF:
357-
from pdfrw import PdfReader, PdfWriter
358+
from pdfrw import PdfReader
358359
from pagelabels import PageLabels, PageLabelScheme
359360

360361
reader = PdfReader(self.filename)
@@ -364,6 +365,29 @@ def parse_pagelabels(self):
364365
labels = []
365366
return labels
366367

368+
def set_pagelabel(self,count,style="arabic"):
369+
if self.isPDF:
370+
from pdfrw import PdfReader, PdfWriter
371+
from pagelabels import PageLabels, PageLabelScheme
372+
reader = PdfReader(self.filename)
373+
labels = PageLabels.from_pdf(reader)
374+
newlabels = PageLabels()
375+
for label in labels:
376+
if label.startpage != self.page:
377+
newlabels.append(label)
378+
379+
newlabel = PageLabelScheme(startpage=self.page,
380+
style=style,
381+
prefix="",
382+
firstpagenum=count)
383+
newlabels.append(newlabel)
384+
newlabels.write(reader)
385+
386+
writer = PdfWriter()
387+
writer.trailer = reader
388+
print("writing new pagelabels...")
389+
writer.write(self.filename)
390+
367391
# unused; using pdfrw instead
368392
def parse_pagelabels_pure(self):
369393
cat = self._getPDFroot()
@@ -601,7 +625,7 @@ def display_page(self, bar, p, display=True):
601625
# calculate place in pixels, convert to cells
602626
pix_x = (dw / 2) - (zw / 2)
603627
pix_y = (dh / 2) - (zh / 2)
604-
l_col = int(pix_x / scr.cell_width)
628+
l_col = int(pix_x / scr.cell_width) + 1
605629
t_row = int(pix_y / scr.cell_height)
606630
r_col = l_col + int(zw / scr.cell_width)
607631
b_row = t_row + int(zh / scr.cell_height)
@@ -1020,9 +1044,11 @@ def __init__(self):
10201044
self.TOGGLE_ALPHA = {ord('A')}
10211045
self.TOGGLE_INVERT = {ord('i')}
10221046
self.TOGGLE_TINT = {ord('d')}
1023-
self.SET_PAGE = {ord('P')}
1047+
self.SET_PAGE_LABEL = {ord('P')}
1048+
self.SET_PAGE_ALT = {ord('I')}
10241049
self.INC_FONT = {ord('=')}
10251050
self.DEC_FONT = {ord('-')}
1051+
self.OPEN_GUI = {ord('X')}
10261052
self.REFRESH = {18, curses.KEY_RESIZE} # CTRL-R
10271053
self.QUIT = {3, ord('q')}
10281054
self.DEBUG = {ord('D')}
@@ -1119,10 +1145,17 @@ def path_from_citekey(citekey):
11191145
raise SystemExit('No file for ' + citekey)
11201146
paths = paths.split(';')
11211147
exts = ['.pdf', '.xps', '.cbz', '.fb2' ]
1122-
extsf = ['.epub', '.oxps' ]
1123-
paths = [path for path in paths if path[-4:] in exts or path[-5:] in extsf]
1124-
if len(paths) != 0:
1125-
return paths[0]
1148+
extsf = ['.epub', '.oxps']
1149+
extsl = ['.html']
1150+
best = [path for path in paths if path[-4:] in exts]
1151+
okay = [path for path in paths if path[-5:] in extsf]
1152+
worst = [path for path in paths if path[-5:] in extsl]
1153+
if len(best) != 0:
1154+
return best[0]
1155+
elif len(okay) != 0:
1156+
return okay[0]
1157+
elif len(worst) != 0:
1158+
return worst[0]
11261159
return None
11271160

11281161
# Command line helper functions
@@ -1190,7 +1223,14 @@ def parse_args(args):
11901223
opts['citekey'] = citekey
11911224
path = path_from_citekey(citekey)
11921225
if path:
1193-
files += [path]
1226+
if path[-5:] == '.html':
1227+
subprocess.run([config.URL_BROWSER, path], check=True)
1228+
print("Opening html file in browser")
1229+
elif path[-5:] == '.docx':
1230+
# TODO: support for docx files
1231+
raise SystemExit('Cannot open ' + path)
1232+
else:
1233+
files += [path]
11941234
else:
11951235
raise SystemExit('No file for ' + citekey)
11961236
skip = True
@@ -1205,6 +1245,9 @@ def parse_args(args):
12051245
else:
12061246
raise SystemExit('Can\'t open file: ' + arg)
12071247

1248+
if len(files) == 0:
1249+
raise SystemExit('No file to open')
1250+
12081251
return files, opts
12091252

12101253

@@ -1632,11 +1675,22 @@ def view(doc):
16321675
count_string = ""
16331676
stack = [0]
16341677

1635-
elif key in keys.SET_PAGE:
1636-
doc.first_page_offset = count - doc.page
1678+
elif key in keys.SET_PAGE_LABEL:
1679+
if doc.isPDF:
1680+
doc.set_pagelabel(count,'arabic')
1681+
else:
1682+
doc.first_page_offset = count - doc.page
16371683
doc.pages_to_logical_pages()
16381684
count_string = ""
16391685
stack = [0]
1686+
1687+
elif key in keys.SET_PAGE_ALT:
1688+
if doc.isPDF:
1689+
doc.set_pagelabel(count,'roman lowercase')
1690+
else:
1691+
doc.first_page_offset = count - doc.page
1692+
doc.pages_to_logical_pages()
1693+
count_string = ""
16401694

16411695
elif key == ord('/'):
16421696
scr.place_string(1,scr.rows,"/")
@@ -1647,6 +1701,9 @@ def view(doc):
16471701
curses.noecho()
16481702
bar.message = doc.search_text(search_text)
16491703

1704+
elif key in keys.OPEN_GUI:
1705+
subprocess.run([config.GUI_VIEWER, doc.filename], check=True)
1706+
16501707
elif key in keys.DEBUG:
16511708
pass
16521709

0 commit comments

Comments
 (0)