/usr/lib/ocaml/calendar/printer.mli is in libcalendar-ocaml-dev 2.03.2-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 | (**************************************************************************)
(* *)
(* This file is part of Calendar. *)
(* *)
(* Copyright (C) 2003-2011 Julien Signoles *)
(* *)
(* you can redistribute it and/or modify it under the terms of the GNU *)
(* Lesser General Public License version 2.1 as published by the *)
(* Free Software Foundation, with a special linking exception (usual *)
(* for Objective Caml libraries). *)
(* *)
(* It 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 *)
(* *)
(* See the GNU Lesser General Public Licence version 2.1 for more *)
(* details (enclosed in the file LGPL). *)
(* *)
(* The special linking exception is detailled in the enclosed file *)
(* LICENSE. *)
(**************************************************************************)
(** Pretty printing and parsing from string.
In the following, an "event" is either a date or a time or a calendar.
This module implements different printers: one for each kind of events.
The three printers have the same signature:
they mainly implement a [fprint : string -> formatter -> t -> unit] function
and a [from_fstring : string -> string -> t] function.
The first one prints an event according to a format string
(see below for a description of such a format).
The second one converts a string to an event according to a format string.
A format string follows the unix utility 'date' (with few modifications).
It is a string which contains two types of objects: plain characters and
conversion specifiers. Those specifiers are introduced by
a [%] character and their meanings are:
- [%%]: a literal [%]
- [%a]: short day name (by using a short version of [day_name])
- [%A]: day name (by using [day_name])
- [%b]: short month name (by using a short version of [month_name])
- [%B]: month name (by using [month_name])
- [%c]: shortcut for [%a %b %d %H:%M:%S %Y]
- [%C]: century: as %Y without the two last digits (since version 2.01)
- [%d]: day of month (01..31)
- [%D]: shortcut for [%m/%d/%y]
- [%e]: same as [%_d]
- [%F]: shortcut for [%Y-%m-%d]: ISO-8601 notation (since version 2.01)
- [%h]: same as [%b]
- [%H]: hour (00..23)
- [%I]: hour (01..12)
- [%i]: same as [%F]; deprecated since 2.01
- [%j]: day of year (001..366)
- [%k]: same as [%_H]
- [%l]: same as [%_I]
- [%m]: month (01..12)
- [%M]: minute (00..59)
- [%n]: a newline (same as [\n])
- [%p]: AM or PM
- [%P]: am or pm (same as %p in lowercase) (since version 2.01)
- [%r]: shortcut for [%I:%M:%S %p]
- [%R]: shortcut for [%H:%M] (since version 2.01)
- [%s]: number of seconds since 1970/1/1 (since version 2.01)
- [%S]: second (00..60)
- [%t]: a horizontal tab (same as [\t])
- [%T]: shortcut for [%H:%M:%S]
- [%V]: week number of year (01..53)
- [%w]: day of week (1..7)
- [%W]: same as [%V]
- [%y]: last two digits of year (00..99)
- [%Y]: year (four digits)
- [%z]: time zone in the form +hhmm (e.g. -0400) (since version 2.01)
- [%:z]: time zone in the form +hh:mm (e.g. -04:00) (since version 2.01)
- [%::z]: time zone in the form +hh:mm:ss (e.g. -04:00:00)
(since version 2.01)
- [%:::z]: time zone in the form +hh (e.g. -04) (since version 2.01)
By default, date pads numeric fields with zeroes. Two special modifiers
between [`%'] and a numeric directive are recognized:
- ['-' (hyphen)]: do not pad the field
- ['_' (underscore)]: pad the field with spaces
- ['0' (zero)]: pad the field with zeroes (default) (since version 2.01)
- ['^']: use uppercase if possible (since version 2.01)
Padding is only available for printers, not for parsers.
@example a possible output of [%D] is [01/06/03]
@example a possible output of [the date is %B, the %-dth] is
[the date is January, the 6th] is matched by ;
@example a possible output of [%c] is [Thu Sep 18 14:10:51 2003].
@since 1.05 *)
(** {2 Internationalization}
You can manage the string representations of days and months.
By default, the English names are used but you can change their by
setting the references [day_name] and [month_name].
@example
[day_name := function Date.Mon -> "lundi" | Date.Tue -> "mardi" |
Date.Wed -> "mercredi" | Date.Thu -> "jeudi" | Date.Fri -> "vendredi" |
Date.Sat -> "samedi" | Date.Sun -> "dimanche"]
sets the names of the days to the French names. *)
val day_name : (Date.day -> string) ref
(** String representation of a day. *)
val name_of_day : Date.day -> string
(** [name_of_day d] is equivalent to [!day_name d].
Used by the specifier [%A]. *)
val short_name_of_day : Date.day -> string
(** [short_name_of_day d] returns the 3 first characters of [name_of_day d].
Used by the specifier [%a]. *)
val month_name : (Date.month -> string) ref
(** String representation of a month. *)
val name_of_month : Date.month -> string
(** [name_of_month m] is equivalent to [!day_month m].
Used by the specifier [%B]. *)
val short_name_of_month : Date.month -> string
(** [short_name_of_month d] returns the 3 first characters of
[name_of_month d].
Used by the specifier [%b]. *)
val set_word_regexp: Str.regexp -> unit
(** Set the regular expression used to recognize words in
[from_fstring]. Default is [[a-zA-Z]*].
@since 1.10 *)
(** {2 Printers (including parsers from string)}
Printers also contain parsers which allow to build events from strings. *)
(** Generic signature of a printer-parser. *)
module type S = sig
type t
(** Generic type of a printer. *)
val fprint : string -> Format.formatter -> t -> unit
(** [fprint format formatter x] outputs [x] on [formatter] according to
the specified [format].
@raise Invalid_argument if the format is incorrect. *)
val print : string -> t -> unit
(** [print format] is equivalent to [fprint format Format.std_formatter] *)
val dprint : t -> unit
(** Same as [print d] where [d] is the default format
(see the printer implementations). *)
val sprint : string -> t -> string
(** [sprint format date] converts [date] to a string according to
[format]. *)
val to_string : t -> string
(** Same as [sprint d] where [d] is the default format
(see the printer implementations). *)
(** {3 Parsers from string} *)
val from_fstring : string -> string -> t
(** [from_fstring format s] converts [s] to a date according to [format].
Date padding (i.e. a special directive following ['%']) and
specifiers [%e], [%k] and [%l] are not recognized. Specifiers
[%a], [%A], [%j], [%v], [%w] and [%W] are recognized but mainly ignored:
only the validity of the format is checked.
In order to recognize words (used by [%a], [%A], [%b], [%B] and [%p]), a
regular expression is used which can be configured by
{!Printer.set_word_regexp}. When the format has only two digits for the
year number, 1900 are added to this number (see examples).
@raise Invalid_argument if either the format is incorrect or the string
does not match the format or the event cannot be created (e.g. if you do
not specify a year for a date).
@example [from_fstring "the date is %D" "the date is 01/06/03"]
returns a date equivalent to [Date.make 1903 1 6]
@example [from_fstring "the date is %B, the %dth %Y" "the date is May,
the 14th 2007"] returns a date equivalent to [Date.make 2007 5 14] (with
default internationalization). *)
val from_string : string -> t
(** Same as [from_fstring d] where [d] is the default format. *)
end
(** Date printer. Specifiers which use time functionalities are not available
on this printer.
Default format is [%i].
@since 2.0 *)
module Date: S with type t = Date.t
(** @deprecated Replaced by {!Printer.Date}. *)
module DatePrinter: S with type t = Date.t
(** Time printer. Specifiers which use date functionalities are not available
on this printer.
Default format is [%T].
@since 2.0 *)
module Time: S with type t = Time.t
(** @deprecated Replaced by {!Printer.Time}. *)
module TimePrinter : S with type t = Time.t
(** Ftime printer. Seconds are rounded to integers before pretty printing.
Specifiers which use date functionalities are not available
on this printer.
Default format is [%T].
@since 2.0 *)
module Ftime: S with type t = Ftime.t
(** Precise Calendar printer. Default format is [%i %T].
@since 2.0 *)
module Precise_Calendar: S with type t = Calendar.Precise.t
(** Calendar printer. Default format is [%i %T].
@since 2.0 *)
module Calendar: S with type t = Calendar.t
(** @deprecated Replaced by {!Printer.Calendar}. *)
module CalendarPrinter: S with type t = Calendar.t
(** Precise Fcalendar printer.
Seconds are rounded to integers before pretty printing.
Default format is [%i %T].
@since 2.0 *)
module Precise_Fcalendar: S with type t = Fcalendar.Precise.t
(** Fcalendar printer. Seconds are rounded to integers before pretty printing.
Default format is [%i %T].
@since 2.0 *)
module Fcalendar: S with type t = Fcalendar.t
|