8#ifndef BOOST_LOCALE_FORMATTING_HPP_INCLUDED
9#define BOOST_LOCALE_FORMATTING_HPP_INCLUDED
11#include <boost/locale/detail/any_string.hpp>
12#include <boost/locale/time_zone.hpp>
21# pragma warning(disable : 4275 4251 4231 4660)
24namespace boost {
namespace locale {
44 display_flags_mask = 31,
46 currency_default = 0 << 5,
47 currency_iso = 1 << 5,
48 currency_national = 2 << 5,
50 currency_flags_mask = 3 << 5,
52 time_default = 0 << 7,
57 time_flags_mask = 7 << 7,
59 date_default = 0 << 10,
61 date_medium = 2 << 10,
64 date_flags_mask = 7 << 10,
128 template<
typename CharType>
131 datetime_.set<CharType>(str);
134 template<
typename CharType>
137 return datetime_.get<CharType>();
147 std::string time_zone_;
148 detail::any_string datetime_;
159 inline std::ios_base&
posix(std::ios_base& ios)
167 inline std::ios_base&
number(std::ios_base& ios)
181 inline std::ios_base&
percent(std::ios_base& ios)
188 inline std::ios_base&
date(std::ios_base& ios)
195 inline std::ios_base&
time(std::ios_base& ios)
224 inline std::ios_base&
ordinal(std::ios_base& ios)
323 inline bool is_datetime_display_flags(
const uint64_t display_flags)
325 return (display_flags == flags::date || display_flags == flags::time || display_flags == flags::datetime
326 || display_flags == flags::strftime);
329 template<
typename CharType>
331 std::basic_string<CharType> ftime;
333 void apply(std::basic_ios<CharType>& ios)
const
335 ios_info::get(ios).date_time_pattern(ftime);
340 template<
typename CharType>
341 std::basic_ostream<CharType>&
operator<<(std::basic_ostream<CharType>& out,
const add_ftime<CharType>& fmt)
347 template<
typename CharType>
348 std::basic_istream<CharType>&
operator>>(std::basic_istream<CharType>& in,
const add_ftime<CharType>& fmt)
391 template<
typename CharType>
392#ifdef BOOST_LOCALE_DOXYGEN
395 detail::add_ftime<CharType>
399 detail::add_ftime<CharType> fmt;
405 template<
typename CharType>
406#ifdef BOOST_LOCALE_DOXYGEN
409 detail::add_ftime<CharType>
413 detail::add_ftime<CharType> fmt;
420 struct set_timezone {
423 template<
typename CharType>
424 std::basic_ostream<CharType>& operator<<(std::basic_ostream<CharType>& out,
const set_timezone& fmt)
426 ios_info::get(out).time_zone(fmt.id);
430 template<
typename CharType>
431 std::basic_istream<CharType>& operator>>(std::basic_istream<CharType>& in,
const set_timezone& fmt)
433 ios_info::get(in).time_zone(fmt.id);
440 inline std::ios_base&
gmt(std::ios_base& ios)
455#ifdef BOOST_LOCALE_DOXYGEN
462 detail::set_timezone tz;
469#ifdef BOOST_LOCALE_DOXYGEN
476 detail::set_timezone tz;
This class holds external data beyond existing fmtflags that std::ios_base holds.
Definition: formatting.hpp:85
void time_flags(uint64_t flags)
Set flags that define how to format time.
void domain_id(int)
Set special message domain identification.
void display_flags(uint64_t flags)
Set flags that define how to format data, e.g. number, spell, currency etc.
static ios_info & get(std::ios_base &ios)
Get ios_info instance for specific stream object.
void time_zone(const std::string &)
Set time zone for formatting dates and time.
uint64_t display_flags() const
Get flags that define how to format data, e.g. number, spell, currency etc.
int domain_id() const
Get special message domain identification.
uint64_t time_flags() const
Get flags that define how to format time.
uint64_t currency_flags() const
Get flags that define how to format currency.
std::string time_zone() const
Get time zone for formatting dates and time.
void date_time_pattern(const std::basic_string< CharType > &str)
Set date/time pattern (strftime like)
Definition: formatting.hpp:129
std::basic_string< CharType > date_time_pattern() const
Get date/time pattern (strftime like)
Definition: formatting.hpp:135
uint64_t date_flags() const
Get flags that define how to format date.
void currency_flags(uint64_t flags)
Set flags that define how to format currency.
void date_flags(uint64_t flags)
Set flags that define how to format date.
std::basic_ostream< CharType, TraitsType > & operator<<(std::basic_ostream< CharType, TraitsType > &out, const segment< Iterator > &seg)
Write the segment to the stream character by character.
Definition: segment.hpp:367
std::basic_istream< CharType > & operator>>(std::basic_istream< CharType > &in, date_time &t)
Definition: date_time.hpp:743
std::ios_base & posix(std::ios_base &ios)
Definition: formatting.hpp:159
std::ios_base & date_full(std::ios_base &ios)
set full date formatting style
Definition: formatting.hpp:315
unspecified_type ftime(const std::basic_string< CharType > &format)
Definition: formatting.hpp:397
std::ios_base & time_short(std::ios_base &ios)
set short time formatting style
Definition: formatting.hpp:259
std::ios_base & date_default(std::ios_base &ios)
set default (medium) date formatting style
Definition: formatting.hpp:287
std::ios_base & date_medium(std::ios_base &ios)
set medium date formatting style
Definition: formatting.hpp:301
std::ios_base & strftime(std::ios_base &ios)
Definition: formatting.hpp:210
std::ios_base & currency_national(std::ios_base &ios)
Set national currency formatting style, like "$".
Definition: formatting.hpp:245
std::ios_base & currency_iso(std::ios_base &ios)
Set ISO currency formatting style, like "USD", (requires ICU >= 4.2)
Definition: formatting.hpp:238
std::ios_base & currency_default(std::ios_base &ios)
Set default currency formatting style – national, like "$".
Definition: formatting.hpp:231
unspecified_type time_zone(const char *id)
Set time zone using id.
Definition: formatting.hpp:460
std::ios_base & date_long(std::ios_base &ios)
set long date formatting style
Definition: formatting.hpp:308
std::ios_base & datetime(std::ios_base &ios)
Format a date and time, number is treated as POSIX time.
Definition: formatting.hpp:202
std::ios_base & time_default(std::ios_base &ios)
set default (medium) time formatting style
Definition: formatting.hpp:252
std::ios_base & currency(std::ios_base &ios)
Format currency, number is treated like amount of money.
Definition: formatting.hpp:174
std::ios_base & time_long(std::ios_base &ios)
set long time formatting style
Definition: formatting.hpp:273
std::ios_base & number(std::ios_base &ios)
Definition: formatting.hpp:167
std::ios_base & local_time(std::ios_base &ios)
Set local time zone to stream.
Definition: formatting.hpp:447
std::ios_base & percent(std::ios_base &ios)
Format percent, value 0.3 is treated as 30%.
Definition: formatting.hpp:181
std::ios_base & spellout(std::ios_base &ios)
Spell the number, like "one hundred and ten".
Definition: formatting.hpp:217
std::ios_base & time(std::ios_base &ios)
Format a time, number is treated as POSIX time.
Definition: formatting.hpp:195
std::ios_base & date_short(std::ios_base &ios)
set short date formatting style
Definition: formatting.hpp:294
std::ios_base & ordinal(std::ios_base &ios)
Write an order of the number like 4th.
Definition: formatting.hpp:224
std::ios_base & time_full(std::ios_base &ios)
set full time formatting style
Definition: formatting.hpp:280
std::ios_base & time_medium(std::ios_base &ios)
set medium time formatting style
Definition: formatting.hpp:266
std::ios_base & date(std::ios_base &ios)
Format a date, number is treated as POSIX time.
Definition: formatting.hpp:188
std::ios_base & gmt(std::ios_base &ios)
Set GMT time zone to stream.
Definition: formatting.hpp:440
pattern_type
Special string patterns that can be used for text formatting.
Definition: formatting.hpp:68
@ datetime_pattern
strftime like formatting
Definition: formatting.hpp:69
@ time_zone_id
time zone name
Definition: formatting.hpp:70
value_type
Special integer values that can be used for formatting.
Definition: formatting.hpp:74
@ domain_id
Domain code - for message formatting.
Definition: formatting.hpp:75
display_flags_type
Definition: formatting.hpp:32
std::string global()
Get global time zone identifier. If empty, system time zone is used.