Files
SplitNotes/note_reader.py
T
Joelnir af125173c4 Settings Menu
Finished the settings menu and systems for saving and loading settings
from a config file.
2016-02-18 16:28:54 +01:00

123 lines
2.3 KiB
Python

import tkinter.filedialog as file_dia
import os.path as path
import config
"""
NOTE STANDARD FORMATTING
empty newlines separate notes for different splits
lines that start and end with [ ] are ignored for notes.
these can be used for titles.
(ex. [Split1] is not included in notes)
all other lines of text are added as notes
"""
def get_note_lines(file_path):
"""
Reads file at given path and returns
a list containing all rows of text in given file.
Returns false if file can not be read.
"""
# check so file isn't too big
if path.getsize(file_path) > config.MAX_FILE_SIZE:
return False
try:
notes_file = open(file_path, "r")
except:
return False
# read file line per line
f_lines = []
keep_reading = True
while keep_reading:
cur_line = notes_file.readline()
if cur_line:
f_lines.append(cur_line)
else:
keep_reading = False
return f_lines
def encode_notes(note_lines):
"""
Takes a list containing strings.
Encodes given strings according to the note formatting.
Returns the list containing the notes for every split.
"""
def is_title(line):
if not line:
return False
return (line[0] == "[") and (line[-1] == "]")
def is_newline(line):
return (line == "\n") or (line == "\r")
def remove_new_line(line):
if (len(line) >= 1) and (is_newline(line[-1])):
return line[:-1]
else:
return line
note_list = []
cur_notes = ""
for line in note_lines:
# remove whitespace at beginning and end
line = line.strip(" ")
if is_newline(line):
if cur_notes:
note_list.append(cur_notes)
cur_notes = ""
else:
line = remove_new_line(line)
if not is_title(line):
cur_notes += line + "\n" # newline
if cur_notes:
note_list.append(cur_notes)
return note_list
def get_notes(file_path):
"""
Takes a path to a file and returns a list with the notes
in the file encoded according to the note fromatting.
Returns False if file is empty.
"""
note_lines = get_note_lines(file_path)
if not note_lines:
return False
note_list = encode_notes(note_lines)
return note_list
def select_file():
"""
Opens a file select window.
Returns False upon no file selection.
Otherwise returns absolute path to selected file.
"""
file = file_dia.askopenfilename(filetypes=config.TEXT_FILES)
if file:
return file
else:
return False