Current section

Files

Jump to
calendrical lib calendrical formatter.ex
Raw

lib/calendrical/formatter.ex

defmodule Calendrical.Formatter do
@moduledoc """
Calendar formatter behaviour.
This behaviour defines a set of callbacks that are invoked during
the formatting of a calendar.
At each point in the formatting process the callbacks are invoked
from the "inside out". That is, `format_day/4` is invoked for each
day of the week, then `format_week/5` is called, then
`format_month/4` and finally `format_year/3` is called if
required.
"""
@doc """
Returns the formatted calendar for a year.
### Arguments
* `formatted_months` is the result returned by `format_month/4`.
* `year` is the year for which the calendar is requested.
* `options` is a keyword list of formatter options.
### Returns
* An arbitrary result as required by the implementing formatter.
"""
@callback format_year(
formatted_months :: String.t(),
year :: Calendar.year(),
options :: map()
) :: any()
@doc """
Returns the formatted calendar for a month.
### Arguments
* `formatted_weeks` is the result returned by `format_week/5`.
* `year` is the year for which the calendar is requested.
* `month` is the month for which the calendar is requested.
* `options` is a keyword list of formatter options.
### Returns
* An arbitrary result as required by the implementing formatter,
which is either returned (if called by `Calendrical.Format.month/3`)
or passed to `format_year/3` if not.
"""
@callback format_month(
formatted_weeks :: String.t(),
year :: Calendar.year(),
month :: Calendar.month(),
options :: map()
) :: any()
@doc """
Returns the formatted calendar for a week.
### Arguments
* `formatted_days` is the result returned by `format_day/4`.
* `year` is the year for which the calendar is requested.
* `month` is the month for which the calendar is requested.
* `week_number` is a 2-tuple of the form `{year, week_number}`
that represents the week-of-year for the week to be formatted.
* `options` is a keyword list of formatter options.
### Returns
* An arbitrary result as required by the implementing formatter,
which is passed to `format_month/4`.
"""
@callback format_week(
formatted_days :: String.t(),
year :: Calendar.year(),
month :: Calendar.month(),
week_number :: {Calendar.year(), pos_integer},
options :: map()
) :: any()
@doc """
Returns the formatted calendar for a day.
### Arguments
* `date` is the `t:Date.t/0` of the day being formatted.
* `year` is the year for which the calendar is requested.
* `month` is the month for which the calendar is requested.
* `options` is a keyword list of formatter options.
### Returns
* An arbitrary result as required by the implementing formatter,
which is passed to `format_week/5`.
"""
@callback format_day(
date :: Date.t(),
year :: Calendar.year(),
month :: Calendar.month(),
options :: map()
) :: any()
end