7 #ifndef BOOST_LOCALE_FORMATTING_HPP_INCLUDED 8 #define BOOST_LOCALE_FORMATTING_HPP_INCLUDED 10 #include <boost/locale/config.hpp> 11 #include <boost/locale/time_zone.hpp> 12 #include <boost/locale/util/string.hpp> 13 #include <boost/assert.hpp> 14 #include <boost/cstdint.hpp> 22 # pragma warning(push) 23 # pragma warning(disable : 4275 4251 4231 4660) 26 namespace boost {
namespace locale {
46 display_flags_mask = 31,
48 currency_default = 0 << 5,
49 currency_iso = 1 << 5,
50 currency_national = 2 << 5,
52 currency_flags_mask = 3 << 5,
54 time_default = 0 << 7,
59 time_flags_mask = 7 << 7,
61 date_default = 0 << 10,
63 date_medium = 2 << 10,
66 date_flags_mask = 7 << 10,
68 datetime_flags_mask = date_flags_mask | time_flags_mask
99 static ios_info& get(std::ios_base& ios);
102 void display_flags(uint64_t flags);
105 void currency_flags(uint64_t flags);
108 void date_flags(uint64_t flags);
111 void time_flags(uint64_t flags);
114 void datetime_flags(uint64_t flags);
123 template<
typename CharType>
126 string_set& s = date_time_pattern_set();
127 s.set<CharType>(str.c_str());
131 uint64_t display_flags()
const;
134 uint64_t currency_flags()
const;
137 uint64_t date_flags()
const;
140 uint64_t time_flags()
const;
143 uint64_t datetime_flags()
const;
146 int domain_id()
const;
152 template<
typename CharType>
155 const string_set& s = date_time_pattern_set();
156 return s.get<CharType>();
166 const string_set& date_time_pattern_set()
const;
167 string_set& date_time_pattern_set();
169 class BOOST_LOCALE_DECL string_set {
173 string_set(
const string_set& other);
174 string_set& operator=(string_set other);
175 void swap(string_set& other);
177 template<
typename Char>
178 void set(
const Char* s)
183 type = &
typeid(Char);
185 ptr =
new char[size];
186 memcpy(ptr, s, size);
189 template<
typename Char>
190 std::basic_string<Char> get()
const 192 if(type == 0 || *type !=
typeid(Char))
193 throw std::bad_cast();
194 std::basic_string<Char> result = reinterpret_cast<const Char*>(ptr);
199 const std::type_info* type;
206 std::string time_zone_;
207 string_set datetime_;
218 inline std::ios_base&
posix(std::ios_base& ios)
226 inline std::ios_base&
number(std::ios_base& ios)
240 inline std::ios_base&
percent(std::ios_base& ios)
247 inline std::ios_base&
date(std::ios_base& ios)
254 inline std::ios_base&
time(std::ios_base& ios)
283 inline std::ios_base&
ordinal(std::ios_base& ios)
382 template<
typename CharType>
384 std::basic_string<CharType>
ftime;
386 void apply(std::basic_ios<CharType>& ios)
const 393 template<
typename CharType>
394 std::basic_ostream<CharType>&
operator<<(std::basic_ostream<CharType>& out,
const add_ftime<CharType>& fmt)
400 template<
typename CharType>
401 std::basic_istream<CharType>&
operator>>(std::basic_istream<CharType>& in,
const add_ftime<CharType>& fmt)
444 template<
typename CharType>
445 #ifdef BOOST_LOCALE_DOXYGEN 448 detail::add_ftime<CharType>
452 detail::add_ftime<CharType> fmt;
458 template<
typename CharType>
459 #ifdef BOOST_LOCALE_DOXYGEN 462 detail::add_ftime<CharType>
466 detail::add_ftime<CharType> fmt;
473 struct set_timezone {
476 template<
typename CharType>
477 std::basic_ostream<CharType>&
operator<<(std::basic_ostream<CharType>& out,
const set_timezone& fmt)
483 template<
typename CharType>
484 std::basic_istream<CharType>&
operator>>(std::basic_istream<CharType>& in,
const set_timezone& fmt)
493 inline std::ios_base&
gmt(std::ios_base& ios)
508 #ifdef BOOST_LOCALE_DOXYGEN 515 detail::set_timezone tz;
522 #ifdef BOOST_LOCALE_DOXYGEN 529 detail::set_timezone tz;
541 # pragma warning(pop)
unspecified_type time_zone(const char *id)
Set time zone using id.
Definition: formatting.hpp:513
std::ios_base & date_long(std::ios_base &ios)
set long date formatting style
Definition: formatting.hpp:367
std::ios_base & time_default(std::ios_base &ios)
set default (medium) time formatting style
Definition: formatting.hpp:311
std::string global()
Get global time zone identifier. If empty, system time zone is used.
std::ios_base & strftime(std::ios_base &ios)
Definition: formatting.hpp:269
std::ios_base & date_medium(std::ios_base &ios)
set medium date formatting style
Definition: formatting.hpp:360
std::ios_base & currency(std::ios_base &ios)
Format currency, number is treated like amount of money.
Definition: formatting.hpp:233
std::ios_base & time_full(std::ios_base &ios)
set full time formatting style
Definition: formatting.hpp:339
std::ios_base & ordinal(std::ios_base &ios)
Write an order of the number like 4th.
Definition: formatting.hpp:283
std::ios_base & date_full(std::ios_base &ios)
set full date formatting style
Definition: formatting.hpp:374
std::ios_base & posix(std::ios_base &ios)
Definition: formatting.hpp:218
std::ios_base & currency_default(std::ios_base &ios)
Set default currency formatting style – national, like "$".
Definition: formatting.hpp:290
std::ios_base & time_medium(std::ios_base &ios)
set medium time formatting style
Definition: formatting.hpp:325
void date_flags(uint64_t flags)
Set a flags that define how to format date.
std::ios_base & time_long(std::ios_base &ios)
set long time formatting style
Definition: formatting.hpp:332
std::ios_base & gmt(std::ios_base &ios)
Set GMT time zone to stream.
Definition: formatting.hpp:493
display_flags_type
Definition: formatting.hpp:34
std::ios_base & number(std::ios_base &ios)
Definition: formatting.hpp:226
std::ios_base & percent(std::ios_base &ios)
Format percent, value 0.3 is treated as 30%.
Definition: formatting.hpp:240
std::ios_base & spellout(std::ios_base &ios)
Spell the number, like "one hundred and ten".
Definition: formatting.hpp:276
std::ios_base & currency_national(std::ios_base &ios)
Set national currency formatting style, like "$".
Definition: formatting.hpp:304
time zone name
Definition: formatting.hpp:74
std::ios_base & date(std::ios_base &ios)
Format a date, number is treated as POSIX time.
Definition: formatting.hpp:247
void display_flags(uint64_t flags)
Set a flags that define a way for format data like number, spell, currency etc.
static ios_info & get(std::ios_base &ios)
Get ios_info instance for specific stream object.
Char * str_end(Char *str)
Return the end of a C-string, i.e. the pointer to the trailing NULL byte.
Definition: string.hpp:15
This class holds an external data - beyond existing fmtflags that std::ios_base holds.
Definition: formatting.hpp:89
strftime like formatting
Definition: formatting.hpp:73
unspecified_type time_zone(const std::string &id)
Set time zone using id.
Definition: formatting.hpp:527
void time_flags(uint64_t flags)
Set a flags that define how to format time.
std::ios_base & date_default(std::ios_base &ios)
set default (medium) date formatting style
Definition: formatting.hpp:346
std::ios_base & datetime(std::ios_base &ios)
Format a date and time, number is treated as POSIX time.
Definition: formatting.hpp:261
std::basic_ostream< CharType > & operator<<(std::basic_ostream< CharType > &out, const date_time &t)
Definition: date_time.hpp:719
unspecified_type ftime(const std::basic_string< CharType > &format)
Definition: formatting.hpp:450
void date_time_pattern(const std::basic_string< CharType > &str)
Set date/time pattern (strftime like)
Definition: formatting.hpp:124
std::ios_base & time_short(std::ios_base &ios)
set short time formatting style
Definition: formatting.hpp:318
std::ios_base & date_short(std::ios_base &ios)
set short date formatting style
Definition: formatting.hpp:353
std::ios_base & local_time(std::ios_base &ios)
Set local time zone to stream.
Definition: formatting.hpp:500
std::basic_istream< CharType > & operator>>(std::basic_istream< CharType > &in, date_time &t)
Definition: date_time.hpp:739
std::basic_string< CharType > date_time_pattern() const
Get date/time pattern (strftime like)
Definition: formatting.hpp:153
std::ios_base & time(std::ios_base &ios)
Format a time, number is treated as POSIX time.
Definition: formatting.hpp:254
void time_zone(const std::string &)
Set time zone for formatting dates and time.
void currency_flags(uint64_t flags)
Set a flags that define how to format currency.
Domain code - for message formatting.
Definition: formatting.hpp:79
pattern_type
Special string patterns that can be used for text formatting.
Definition: formatting.hpp:72
value_type
Special integer values that can be used for formatting.
Definition: formatting.hpp:78
std::ios_base & currency_iso(std::ios_base &ios)
Set ISO currency formatting style, like "USD", (requires ICU >= 4.2)
Definition: formatting.hpp:297