'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', '{', '|', '}', '~', '<',
-
+
'<', '=', '>', '#', '#', '.', '#', '#',
'#', '#', ' ', '#', ' ', '>', '.', '.',
'[', ']', '0', '1', '2', '3', '4', '5',
return '<span style="color:rgb(%d,%d,%d)">' % (255 * r, 255 * g, 255 * b)
-def html_colors(qstr=''):
- qstr = html_escape(qfont_decode(qstr).replace('^^', '^'))
+def html_colors(qstr='', limit=None):
+ qstr = html_escape(qfont_decode(qstr))
+ qstr = qstr.replace('^^', '^')
+
+ if limit is not None and limit > 0:
+ qstr = limit_printable_characters(qstr, limit)
+
html = _dec_colors.sub(lambda match: _dec_spans[int(match.group(1))], qstr)
html = _hex_colors.sub(hex_repl, html)
return html + "</span>" * len(_all_colors.findall(qstr))
+def limit_printable_characters(qstr, limit):
+ # initialize assuming all printable characters
+ pc = [1 for i in range(len(qstr))]
+
+ groups = _all_colors.finditer(qstr)
+ for g in groups:
+ pc[g.start():g.end()] = [0 for i in range(g.end() - g.start())]
+
+ # printable characters in the string is less than or equal to what was requested
+ if limit >= len(qstr) or sum(pc) <= limit:
+ return qstr
+ else:
+ sumpc = 0
+ for i,v in enumerate(pc):
+ sumpc += v
+ if sumpc == limit:
+ return qstr[0:i+1]
+
+
def page_url(page):
return current_route_url(request, page=page, _query=request.GET)
result[key] = to_json(value.to_dict())
return result
+
+def is_leap_year(today_dt=None):
+ if today_dt is None:
+ today_dt = datetime.utcnow()
+
+ if today_dt.year % 400 == 0:
+ leap_year = True
+ elif today_dt.year % 100 == 0:
+ leap_year = False
+ elif today_dt.year % 4 == 0:
+ leap_year = True
+ else:
+ leap_year = False
+
+ return leap_year
+
+
+def is_cake_day(create_dt, today_dt=None):
+ cake_day = False
+
+ if today_dt is None:
+ today_dt = datetime.utcnow()
+
+ # cakes are given on the first anniversary, not the actual create date!
+ if datetime.date(today_dt) != datetime.date(create_dt):
+ if today_dt.day == create_dt.day and today_dt.month == create_dt.month:
+ cake_day = True
+
+ # leap year people get their cakes on March 1
+ if not is_leap_year(today_dt) and create_dt.month == 2 and create_dt.day == 29:
+ if today_dt.month == 3 and today_dt.day == 1:
+ cake_day = True
+
+ return cake_day