diff --git a/scripts/generate_heatmap_svg.py b/scripts/generate_heatmap_svg.py index 439a244..69723dc 100644 --- a/scripts/generate_heatmap_svg.py +++ b/scripts/generate_heatmap_svg.py @@ -58,26 +58,40 @@ def weekday_row(day): def month_labels(grid_start, visible_start, grid_end): labels = [] total_weeks = ((grid_end - grid_start).days // 7) + 1 + first_visible_month = visible_start.strftime("%b") + first_visible_week = ((visible_start - grid_start).days // 7) for week in range(total_weeks): week_start = grid_start + timedelta(days=week * 7) - week_label = None + label = None for offset in range(7): day = week_start + timedelta(days=offset) if day < visible_start: continue - if week == 0 and week_label is None: - week_label = day.strftime("%b") - if day.day == 1: - week_label = day.strftime("%b") + label = day.strftime("%b") break - if week_label is not None: - if not labels or labels[-1][1] != week_label: - labels.append((week, week_label)) + if week == first_visible_week and not labels: + next_month_close = False + for future_week in range(week + 1, min(week + 3, total_weeks)): + future_start = grid_start + timedelta(days=future_week * 7) + for offset in range(7): + day = future_start + timedelta(days=offset) + if day >= visible_start and day.day == 1: + next_month_close = True + break + if next_month_close: + break + + if not next_month_close: + label = first_visible_month + + if label is not None: + if not labels or labels[-1][1] != label: + labels.append((week, label)) return labels