示例#1
0
文件: journal.py 项目: quixotique/ABO
 def _parse_line_keytext(cls, line, text):
     words = text.split(None, 1)
     if len(words) == 2:
         line.key, line.text = str(words[0]), words[1]
     elif len(words) == 1:
         line.key, line.text = str(words[0]), ''
     else:
         raise ParseException(line, 'expecting <key> [value]')
示例#2
0
文件: journal.py 项目: quixotique/ABO
 def _parse_date(self, text, relative_to=None):
     d = None
     enforce = True
     if text.endswith("!"):
         enforce = False
         text = text[:-1]
     if relative_to is not None:
         dmy = text.split('/', 2)
         if len(dmy) == 3:
             if not dmy[0]:
                 dmy[0] = '%u' % relative_to.day
             if not dmy[1]:
                 dmy[1] = '%u' % relative_to.month
             if not dmy[2]:
                 dmy[2] = '%04u' % relative_to.year
             text = '/'.join(dmy)
     try:
         d = datetime.datetime.strptime(text, '%d/%m/%Y').date()
     except ValueError:
         if self._period:
             enforce = True
             try:
                 d = datetime.datetime.strptime(text + '/%04u' % self._period[0].year, '%d/%m/%Y').date()
                 if d < self._period[0]:
                     d = None
             except ValueError:
                 pass
             if d is None and self._period[0].year != self._period[1].year:
                 try:
                     d = datetime.datetime.strptime(text + '/%04u' % self._period[1].year, '%d/%m/%Y').date()
                 except ValueError:
                     pass
     if d is not None:
         if enforce and self._period and (d < self._period[0] or d > self._period[1]):
             raise ParseException(text, 'date %s outside period' % text)
         return d
     if relative_to is not None and self._regex_relative.match(text):
         return relative_to + datetime.timedelta(int(text))
     raise ParseException(text, 'invalid date %r' % text)
示例#3
0
文件: journal.py 项目: quixotique/ABO
 def _parse_date_edate(self, text):
     texts = text.split('=', 1)
     date = self._parse_date(texts[0])
     edate = self._parse_date(texts[1], relative_to=date) if len(texts) > 1 else None
     return date, edate