Source code for timelinelib.calendar.gregorian.timetype.strips.stripdecade
# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 Rickard Lindberg, Roger Lindberg
#
# This file is part of Timeline.
#
# Timeline is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Timeline is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Timeline. If not, see <http://www.gnu.org/licenses/>.
from timelinelib.canvas.drawing.interface import Strip
from timelinelib.calendar.gregorian.gregorian import GregorianDateTime
from timelinelib.calendar.gregorian.timetype.yearformatter import BC
[docs]class StripDecade(Strip):
"""
Year Name | Year integer | Decade name
----------+--------------+------------
.. | .. |
20 BC | -19 | 20s BC (10 years)
----------+--------------+------------
19 BC | -18 |
18 BC | -17 |
17 BC | -16 |
16 BC | -15 |
15 BC | -14 | 10s BC (10 years)
14 BC | -13 |
13 BC | -12 |
12 BC | -11 |
11 BC | -10 |
10 BC | -9 |
----------+--------------+------------
9 BC | -8 |
8 BC | -7 |
7 BC | -6 |
6 BC | -5 |
5 BC | -4 | 0s BC (only 9 years)
4 BC | -3 |
3 BC | -2 |
2 BC | -1 |
1 BC | 0 |
----------+--------------+------------
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 | 0s (only 9 years)
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
----------+--------------+------------
10 | 10 |
11 | 11 |
12 | 12 |
13 | 13 |
14 | 14 |
15 | 15 | 10s (10 years)
16 | 16 |
17 | 17 |
18 | 18 |
19 | 19 |
----------+--------------+------------
20 | 20 | 20s (10 years)
.. | .. |
"""
[docs] def __init__(self):
self.skip_s_in_decade_text = False
[docs] def label(self, time, major=False):
gregorian_time = GregorianDateTime.from_time(time)
return self._format_decade(
self._decade_number(self._decade_start_year(gregorian_time.year)),
gregorian_time.is_bc()
)
[docs] def start(self, time):
return GregorianDateTime.from_ymd(
self._decade_start_year(GregorianDateTime.from_time(time).year),
1,
1
).to_time()
[docs] def increment(self, time):
gregorian_time = GregorianDateTime.from_time(time)
return gregorian_time.replace(
year=self._next_decacde_start_year(gregorian_time.year)
).to_time()
[docs] def set_skip_s_in_decade_text(self, value):
self.skip_s_in_decade_text = value
def _format_decade(self, decade_number, is_bc):
parts = []
parts.append("{0}".format(decade_number))
if not self.skip_s_in_decade_text:
parts.append("s")
if is_bc:
parts.append(" ")
parts.append(BC)
return "".join(parts)
def _decade_start_year(self, year):
if year > 9:
return int(year) - (int(year) % 10)
elif year >= 1:
return 1
elif year >= -8:
return -8
else: # year < -8
return -self._decade_start_year(-year + 1) - 8
def _next_decacde_start_year(self, start_year):
return start_year + self._decade_year_len(start_year)
def _decade_year_len(self, start_year):
if self._decade_number(start_year) == 0:
return 9
else:
return 10
def _decade_number(self, start_year):
if start_year > 9:
return start_year
elif start_year >= -8:
return 0
else: # start_year < -8
return self._decade_number(-start_year - 8)