1
# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
3
# Copyright (C) 2012 ximilian <ximilian@gmail.com>
4
# This program is free software: you can redistribute it and/or modify it
5
# under the terms of the GNU General Public License version 3, as published
6
# by the Free Software Foundation.
8
# This program is distributed in the hope that it will be useful, but
9
# WITHOUT ANY WARRANTY; without even the implied warranties of
10
# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11
# PURPOSE. See the GNU General Public License for more details.
13
# You should have received a copy of the GNU General Public License along
14
# with this program. If not, see <http://www.gnu.org/licenses/>.
20
""" A class for task object """
41
REGEX_DATE = re.compile('[0-9]{4}(-[0-9]{2}){2}')
43
def __init__(self, line):
52
self.data = self.data.strip()
58
return "Task(id=%r, priority=%r, data=%r, creation_date=%r, completion_date=%r, project=%r, context=%r, keyword=%r)" % \
59
(self.id, self.priority, self.data, \
60
repr(self.creation_date), repr(self.completion_date),
61
self.project, self.context, self.keyword)
64
return 'id: ' + str(self.id) + '\n' \
65
'pri: ' + self.priority + '\n' \
66
'date: ' + self.creation_date + " _ " + self.completion_date + '\n' \
67
'+: ' + str(self.project) + '\n' \
68
'@: ' + str(self.context) + '\n' \
69
'#: ' + str(self.keyword) + '\n' \
70
'[' + self.data + ']' + '\n'
72
def Parse(self, begin=0):
73
if not begin < self.raw.__len__():
76
while (self.raw[begin] == ' '):
79
if self.status == "beg":
80
begin = self.ParsePriority(0)
81
begin = self.ParseCompleted(begin)
82
elif self.status == "sdate":
83
[self.creation_date, begin] = self.ParseDate(begin)
85
elif self.status == "edate":
86
[self.completion_date, begin] = self.ParseDate(begin)
88
elif self.raw[begin] == Task.PROJECT:
89
self.ParseToList(begin+1, self.project)
90
begin = self.ParseDataWord(begin)
91
elif self.raw[begin] == Task.CONTEXT:
92
self.ParseToList(begin+1, self.context)
93
begin = self.ParseDataWord(begin)
94
elif self.raw[begin] == Task.KEYWORD:
95
self.ParseToList(begin+1, self.keyword)
96
begin = self.ParseDataWord(begin)
98
begin = self.ParseDataWord(begin)
102
def ParsePriority(self, begin):
103
self.status = "sdate"
104
if self.raw[begin] == Task.OPEN_BRACKET and self.raw[begin+2] == Task.CLOSE_BRACKET:
105
self.priority = self.raw[1]
110
def ParseCompleted(self, begin):
111
if self.raw[begin] == Task.COMPLETED and self.raw[begin+1] == ' ':
112
self.priority = Task.COMPLETED
113
self.status = "edate"
117
def ParseDate(self, begin):
118
[word, end] = self.ParseWord(self.raw, begin)
119
if not Task.REGEX_DATE.match(word):
124
def ParseToList(self, begin, working_list):
125
[elem, end] = self.ParseWord(self.raw, begin)
127
working_list.add(elem)
130
def ParseDataWord(self, begin):
131
[word, end] = self.ParseWord(self.raw, begin)
132
self.data += " " + word
135
def ParseWord(self, text, begin):
138
end = text.index(" ", begin)
141
word = text[begin:end]