-
Notifications
You must be signed in to change notification settings - Fork 2
/
clippings-parser-2.py
95 lines (78 loc) · 3.24 KB
/
clippings-parser-2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from typing import List
from clippingsParserHelpers import *
# Location of clippings file
# TODO: import this with a YAML file later
CLIPPINGS = 'My Clippings.txt'
highlights = {
'titles': [],
# It will also have the following list-of-tuples for each book:
# book-title: [(
# highlighted-text <str>,
# highlight-type <'highlight' | 'note'>,
# brand-new-highlight <bool>
# )]
}
highlight_begins = True
highlight_type = 'highlight' # TODO: reinforce type so it can only be 'highlight' or 'note'
current_title = ''
brand_new_highlight = False # will be used for new notes
with open(CLIPPINGS, encoding='utf') as f:
for line in f:
# At first, perform the line cleanup
line = line_cleanup(line)
# next, depending on the type of line, parse it
if highlight_begins:
current_title = line
if line not in highlights['titles']: # `titles` is an array of string containing all the book titles
highlights['titles'].append(line)
highlights[current_title] = []
highlight_begins = False
elif line in ['\n', '', ' ']:
continue
# distinguish between a highlight and a note
elif elemInLine(STARTS_OF_HIGHLIGHT, line):
highlight_type = 'highlight'
elif elemInLine(NOTES, line):
highlight_type = 'note'
elif indexOf(line, END_OF_HIGHLIGHT) == 0:
highlight_begins = True
brand_new_highlight = True # the next highlight will be a brand new highlight
elif elemInLine(BOOKMARKS, line):
continue # simply skip the bookmarks
else:
# save the highlighted text in (text, type, bool) format, where bool is for a brand new highlight
highlights[current_title].append((line, highlight_type, brand_new_highlight))
if brand_new_highlight:
brand_new_highlight = False
print(highlights)
def save_highlights(title: str, book_highlights: List):
"""
Takes the highlights of one book, and saves those in a user-readable markdown file.
### Styles used
- Each highlight begings with an h2 header followed by the term 'Highlight' followed by the highlights number
- Each note (presumably would) follow its corresponding highlight
- Each note is presented as a quote
### Parameters
- `title`: title of the book from the `highlights` dictionary
- `book_highlights`: list-of-tuples containing the parsed text of the highlights (basically `highlights['book-name']`)
"""
title = title.replace('/', '-')
md_file = open(f'{title}.md', 'w+')
md_file.write('')
md_file.close()
highlight_ind = 1
md_file = open(f'{title}.md', 'a')
for highlight in book_highlights:
hText, hType, hEnd = highlight
hText = hText.strip() + '\n'
if hType == 'highlight':
md_file.write(f'{HIGHLIGHT_HEADER}{highlight_ind}\n')
md_file.write(hText)
highlight_ind += 1
elif hType == 'note':
if hEnd:
md_file.write('\n') # It's a new note
md_file.write(f'> {hText}')
md_file.close()
for title in highlights['titles']:
save_highlights(title, highlights[title])