]> git.sev.monster Git - dotfiles.git/blob - .vim/syntax/python/dateregex/dateregex/before.py
initial commit
[dotfiles.git] / .vim / syntax / python / dateregex / dateregex / before.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 # File:        before.py
4 # Author:      Guilherme Victal <guilherme at victal.eti.br>
5 # Description: Generates regexes before a certain date
6 # License:     Vim license
7 # Website:     http://github.com/freitass/todo.txt-vim
8 # Version:     0.1
9
10 from datetime import date, timedelta, MINYEAR
11
12 def _year_regex_before(year):
13     if int(year) <= MINYEAR:
14         return None
15     year_regex = r'('
16     year_regex += r'\d{1,%s}' % str(len(year) - 1) if len(year) > 1 else ''
17     for idx, digit in enumerate(year):
18         if digit != '0':
19             regex = '|' + year[0:idx]
20             regex += '0' if digit == '1' else '[0-%s]' % str(int(digit) - 1)
21             if idx < len(year) - 1:
22                 regex += '\d{%s}' % (len(year) - (idx + 1))
23             year_regex += regex
24
25     year_regex += ')'
26     return '-'.join((year_regex, r'\d{2}', r'\d{2}'))
27
28 def _month_regex_before(year, month):
29     if month == '01':
30         return None
31
32     digit1, digit2 = month
33     if digit1 == '0':
34         month_regex = '01' if month == '02' else r'0[1-%s]' % str(int(digit2) - 1)
35     elif month == '10':
36         month_regex = r'0\d'
37     elif month == '11':
38         month_regex = r'(0\d|10)'
39     else:
40         month_regex = r'(0\d|1[01])'
41
42     return '-'.join((year, month_regex, r'\d{2}'))
43
44 def _day_regex_before(year, month, day):
45     if day == '01':
46         return None
47     last_month_day = str((date(int(year), int(month) % 12 + 1, 1) + - date.resolution).day)
48     last_digit1, last_digit2 = last_month_day
49
50     digit1, digit2 = day
51     if digit1 == '0':
52         day_regex = '01' if day == '02' else r'0[1-%s]' % str(int(digit2) - 1)
53     else:
54         day_regex = r'('
55         day_regex += '0' if digit1 == '1' else r'[0-%s]' % str(int(digit1) - 1)
56         day_regex += r'\d'
57         if digit2 != '0':
58             day_regex += '|'
59             day_regex += digit1
60             day_regex += '0' if digit2 == '1' else r'[0-%s]' % str(int(digit2) - 1)
61         day_regex += ')'
62
63     return '-'.join((year, month, day_regex))
64
65
66
67
68 def regex_date_before(given_date):
69     year, month, day = given_date.isoformat().split('-')
70
71     year_regex = _year_regex_before(year)
72     month_regex = _month_regex_before(year, month)
73     day_regex = _day_regex_before(year, month, day)
74
75     date_regex = '(' + year_regex if year_regex else '('
76     date_regex += ('|' + month_regex) if month_regex else ''
77     date_regex += ('|' + day_regex) if day_regex else ''
78     date_regex += ')'
79     return date_regex
This page took 0.038743 seconds and 4 git commands to generate.