Seperation of title and entry is now purely virtual.

Fixes #360
This commit is contained in:
Manuel Ebert 2015-12-28 21:24:39 -08:00
parent 849dc89557
commit 95d399d5c3
5 changed files with 90 additions and 83 deletions

View file

@ -5,33 +5,58 @@ from __future__ import unicode_literals
import re
import textwrap
from datetime import datetime
from .util import split_title
class Entry:
def __init__(self, journal, date=None, title="", body="", starred=False):
self.journal = journal # Reference to journal mainly to access it's config
def __init__(self, journal, date=None, text="", starred=False):
self.journal = journal # Reference to journal mainly to access its config
self.date = date or datetime.now()
self.title = title.rstrip("\n ")
self.body = body.rstrip("\n ")
self.tags = self.parse_tags()
self.text = text
self._title = self._body = self._tags = None
self.starred = starred
self.modified = False
@property
def fulltext(self):
return self.title + " " + self.body
def _parse_text(self):
raw_text = self.text
lines = raw_text.splitlines()
if lines[0].strip().endswith("*"):
self.starred = True
raw_text = lines[0].strip("\n *") + "\n" + "\n".join(lines[1:])
self._title, self._body = split_title(raw_text)
if self._tags is None:
self._tags = list(self._parse_tags())
@property
def title(self):
if self._title is None:
self._parse_text()
return self._title
@property
def body(self):
if self._body is None:
self._parse_text()
return self._body
@property
def tags(self):
if self._tags is None:
self._parse_text()
return self._tags
@staticmethod
def tag_regex(tagsymbols):
pattern = r'(?u)\s([{tags}][-+*#/\w]+)'.format(tags=tagsymbols)
pattern = r'(?u)(?:^|\s)([{tags}][-+*#/\w]+)'.format(tags=tagsymbols)
return re.compile(pattern, re.UNICODE)
def parse_tags(self):
fulltext = " " + " ".join([self.title, self.body]).lower()
def _parse_tags(self):
tagsymbols = self.journal.config['tagsymbols']
tags = re.findall(Entry.tag_regex(tagsymbols), fulltext)
self.tags = tags
return set(tags)
return set(tag.lower() for tag in re.findall(Entry.tag_regex(tagsymbols), self.text))
def __unicode__(self):
"""Returns a string representation of the entry to be written into a journal file."""