Mercurial > minori
annotate dep/fmt/doc/html/_sources/api.rst.txt @ 368:6d37a998cf91
gui/dialog: consolidate win32 dark theme cruft into a single class
| author | Paper <paper@tflc.us> | 
|---|---|
| date | Fri, 25 Jul 2025 10:05:23 -0400 | 
| parents | 1faa72660932 | 
| children | 
| rev | line source | 
|---|---|
| 343 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 1 .. _string-formatting-api: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 2 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 3 ************* | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 4 API Reference | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 5 ************* | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 6 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 7 The {fmt} library API consists of the following parts: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 8 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 9 * :ref:`fmt/core.h <core-api>`: the core API providing main formatting functions | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 10 for ``char``/UTF-8 with C++20 compile-time checks and minimal dependencies | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 11 * :ref:`fmt/format.h <format-api>`: the full format API providing additional | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 12 formatting functions and locale support | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 13 * :ref:`fmt/ranges.h <ranges-api>`: formatting of ranges and tuples | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 14 * :ref:`fmt/chrono.h <chrono-api>`: date and time formatting | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 15 * :ref:`fmt/std.h <std-api>`: formatters for standard library types | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 16 * :ref:`fmt/compile.h <compile-api>`: format string compilation | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 17 * :ref:`fmt/color.h <color-api>`: terminal color and text style | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 18 * :ref:`fmt/os.h <os-api>`: system APIs | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 19 * :ref:`fmt/ostream.h <ostream-api>`: ``std::ostream`` support | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 20 * :ref:`fmt/args.h <args-api>`: dynamic argument lists | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 21 * :ref:`fmt/printf.h <printf-api>`: ``printf`` formatting | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 22 * :ref:`fmt/xchar.h <xchar-api>`: optional ``wchar_t`` support | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 23 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 24 All functions and types provided by the library reside in namespace ``fmt`` and | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 25 macros have prefix ``FMT_``. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 26 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 27 .. _core-api: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 28 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 29 Core API | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 30 ======== | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 31 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 32 ``fmt/core.h`` defines the core API which provides main formatting functions | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 33 for ``char``/UTF-8 with C++20 compile-time checks. It has minimal include | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 34 dependencies for better compile times. This header is only beneficial when | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 35 using {fmt} as a library (the default) and not in the header-only mode. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 36 It also provides ``formatter`` specializations for built-in and string types. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 37 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 38 The following functions use :ref:`format string syntax <syntax>` | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 39 similar to that of Python's `str.format | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 40 <https://docs.python.org/3/library/stdtypes.html#str.format>`_. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 41 They take *fmt* and *args* as arguments. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 42 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 43 *fmt* is a format string that contains literal text and replacement fields | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 44 surrounded by braces ``{}``. The fields are replaced with formatted arguments | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 45 in the resulting string. `~fmt::format_string` is a format string which can be | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 46 implicitly constructed from a string literal or a ``constexpr`` string and is | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 47 checked at compile time in C++20. To pass a runtime format string wrap it in | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 48 `fmt::runtime`. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 49 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 50 *args* is an argument list representing objects to be formatted. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 51 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 52 I/O errors are reported as `std::system_error | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 53 <https://en.cppreference.com/w/cpp/error/system_error>`_ exceptions unless | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 54 specified otherwise. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 55 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 56 .. _format: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 57 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 58 .. doxygenfunction:: format(format_string<T...> fmt, T&&... args) -> std::string | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 59 .. doxygenfunction:: vformat(string_view fmt, format_args args) -> std::string | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 60 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 61 .. doxygenfunction:: format_to(OutputIt out, format_string<T...> fmt, T&&... args) -> OutputIt | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 62 .. doxygenfunction:: format_to_n(OutputIt out, size_t n, format_string<T...> fmt, T&&... args) -> format_to_n_result<OutputIt> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 63 .. doxygenfunction:: formatted_size(format_string<T...> fmt, T&&... args) -> size_t | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 64 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 65 .. doxygenstruct:: fmt::format_to_n_result | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 66 :members: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 67 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 68 .. _print: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 69 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 70 .. doxygenfunction:: fmt::print(format_string<T...> fmt, T&&... args) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 71 .. doxygenfunction:: fmt::vprint(string_view fmt, format_args args) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 72 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 73 .. doxygenfunction:: print(std::FILE *f, format_string<T...> fmt, T&&... args) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 74 .. doxygenfunction:: vprint(std::FILE *f, string_view fmt, format_args args) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 75 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 76 Compile-Time Format String Checks | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 77 --------------------------------- | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 78 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 79 Compile-time format string checks are enabled by default on compilers | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 80 that support C++20 ``consteval``. On older compilers you can use the | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 81 :ref:`FMT_STRING <legacy-checks>`: macro defined in ``fmt/format.h`` instead. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 82 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 83 Unused arguments are allowed as in Python's `str.format` and ordinary functions. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 84 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 85 .. doxygenclass:: fmt::basic_format_string | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 86 :members: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 87 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 88 .. doxygentypedef:: fmt::format_string | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 89 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 90 .. doxygenfunction:: fmt::runtime(string_view) -> runtime_format_string<> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 91 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 92 .. _udt: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 93 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 94 Formatting User-Defined Types | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 95 ----------------------------- | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 96 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 97 The {fmt} library provides formatters for many standard C++ types. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 98 See :ref:`fmt/ranges.h <ranges-api>` for ranges and tuples including standard | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 99 containers such as ``std::vector``, :ref:`fmt/chrono.h <chrono-api>` for date | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 100 and time formatting and :ref:`fmt/std.h <std-api>` for other standard library | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 101 types. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 102 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 103 There are two ways to make a user-defined type formattable: providing a | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 104 ``format_as`` function or specializing the ``formatter`` struct template. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 105 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 106 Use ``format_as`` if you want to make your type formattable as some other type | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 107 with the same format specifiers. The ``format_as`` function should take an | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 108 object of your type and return an object of a formattable type. It should be | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 109 defined in the same namespace as your type. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 110 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 111 Example (https://godbolt.org/z/nvME4arz8):: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 112 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 113 #include <fmt/format.h> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 114 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 115 namespace kevin_namespacy { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 116 enum class film { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 117 house_of_cards, american_beauty, se7en = 7 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 118 }; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 119 auto format_as(film f) { return fmt::underlying(f); } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 120 } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 121 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 122 int main() { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 123 fmt::print("{}\n", kevin_namespacy::film::se7en); // prints "7" | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 124 } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 125 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 126 Using specialization is more complex but gives you full control over parsing and | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 127 formatting. To use this method specialize the ``formatter`` struct template for | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 128 your type and implement ``parse`` and ``format`` methods. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 129 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 130 The recommended way of defining a formatter is by reusing an existing one via | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 131 inheritance or composition. This way you can support standard format specifiers | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 132 without implementing them yourself. For example:: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 133 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 134 // color.h: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 135 #include <fmt/core.h> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 136 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 137 enum class color {red, green, blue}; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 138 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 139 template <> struct fmt::formatter<color>: formatter<string_view> { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 140 // parse is inherited from formatter<string_view>. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 141 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 142 auto format(color c, format_context& ctx) const; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 143 }; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 144 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 145 // color.cc: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 146 #include "color.h" | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 147 #include <fmt/format.h> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 148 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 149 auto fmt::formatter<color>::format(color c, format_context& ctx) const { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 150 string_view name = "unknown"; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 151 switch (c) { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 152 case color::red: name = "red"; break; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 153 case color::green: name = "green"; break; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 154 case color::blue: name = "blue"; break; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 155 } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 156 return formatter<string_view>::format(name, ctx); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 157 } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 158 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 159 Note that ``formatter<string_view>::format`` is defined in ``fmt/format.h`` so | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 160 it has to be included in the source file. Since ``parse`` is inherited from | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 161 ``formatter<string_view>`` it will recognize all string format specifications, | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 162 for example | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 163 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 164 .. code-block:: c++ | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 165 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 166 fmt::format("{:>10}", color::blue) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 167 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 168 will return ``" blue"``. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 169 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 170 The experimental ``nested_formatter`` provides an easy way of applying a | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 171 formatter to one or more subobjects. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 172 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 173 For example:: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 174 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 175 #include <fmt/format.h> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 176 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 177 struct point { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 178 double x, y; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 179 }; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 180 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 181 template <> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 182 struct fmt::formatter<point> : nested_formatter<double> { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 183 auto format(point p, format_context& ctx) const { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 184 return write_padded(ctx, [=](auto out) { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 185 return format_to(out, "({}, {})", nested(p.x), nested(p.y)); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 186 }); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 187 } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 188 }; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 189 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 190 int main() { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 191 fmt::print("[{:>20.2f}]", point{1, 2}); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 192 } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 193 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 194 prints:: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 195 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 196 [ (1.00, 2.00)] | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 197 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 198 Notice that fill, align and width are applied to the whole object which is the | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 199 recommended behavior while the remaining specifiers apply to elements. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 200 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 201 In general the formatter has the following form:: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 202 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 203 template <> struct fmt::formatter<T> { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 204 // Parses format specifiers and stores them in the formatter. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 205 // | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 206 // [ctx.begin(), ctx.end()) is a, possibly empty, character range that | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 207 // contains a part of the format string starting from the format | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 208 // specifications to be parsed, e.g. in | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 209 // | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 210 // fmt::format("{:f} continued", ...); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 211 // | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 212 // the range will contain "f} continued". The formatter should parse | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 213 // specifiers until '}' or the end of the range. In this example the | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 214 // formatter should parse the 'f' specifier and return an iterator | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 215 // pointing to '}'. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 216 constexpr auto parse(format_parse_context& ctx) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 217 -> format_parse_context::iterator; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 218 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 219 // Formats value using the parsed format specification stored in this | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 220 // formatter and writes the output to ctx.out(). | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 221 auto format(const T& value, format_context& ctx) const | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 222 -> format_context::iterator; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 223 }; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 224 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 225 It is recommended to at least support fill, align and width that apply to the | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 226 whole object and have the same semantics as in standard formatters. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 227 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 228 You can also write a formatter for a hierarchy of classes:: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 229 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 230 // demo.h: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 231 #include <type_traits> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 232 #include <fmt/core.h> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 233 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 234 struct A { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 235 virtual ~A() {} | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 236 virtual std::string name() const { return "A"; } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 237 }; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 238 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 239 struct B : A { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 240 virtual std::string name() const { return "B"; } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 241 }; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 242 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 243 template <typename T> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 244 struct fmt::formatter<T, std::enable_if_t<std::is_base_of<A, T>::value, char>> : | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 245 fmt::formatter<std::string> { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 246 auto format(const A& a, format_context& ctx) const { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 247 return fmt::formatter<std::string>::format(a.name(), ctx); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 248 } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 249 }; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 250 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 251 // demo.cc: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 252 #include "demo.h" | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 253 #include <fmt/format.h> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 254 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 255 int main() { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 256 B b; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 257 A& a = b; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 258 fmt::print("{}", a); // prints "B" | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 259 } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 260 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 261 Providing both a ``formatter`` specialization and a ``format_as`` overload is | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 262 disallowed. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 263 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 264 Named Arguments | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 265 --------------- | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 266 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 267 .. doxygenfunction:: fmt::arg(const S&, const T&) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 268 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 269 Named arguments are not supported in compile-time checks at the moment. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 270 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 271 Argument Lists | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 272 -------------- | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 273 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 274 You can create your own formatting function with compile-time checks and small | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 275 binary footprint, for example (https://godbolt.org/z/vajfWEG4b): | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 276 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 277 .. code:: c++ | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 278 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 279 #include <fmt/core.h> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 280 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 281 void vlog(const char* file, int line, fmt::string_view format, | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 282 fmt::format_args args) { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 283 fmt::print("{}: {}: ", file, line); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 284 fmt::vprint(format, args); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 285 } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 286 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 287 template <typename... T> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 288 void log(const char* file, int line, fmt::format_string<T...> format, T&&... args) { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 289 vlog(file, line, format, fmt::make_format_args(args...)); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 290 } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 291 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 292 #define MY_LOG(format, ...) log(__FILE__, __LINE__, format, __VA_ARGS__) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 293 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 294 MY_LOG("invalid squishiness: {}", 42); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 295 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 296 Note that ``vlog`` is not parameterized on argument types which improves compile | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 297 times and reduces binary code size compared to a fully parameterized version. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 298 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 299 .. doxygenfunction:: fmt::make_format_args(const Args&...) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 300 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 301 .. doxygenclass:: fmt::format_arg_store | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 302 :members: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 303 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 304 .. doxygenclass:: fmt::basic_format_args | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 305 :members: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 306 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 307 .. doxygentypedef:: fmt::format_args | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 308 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 309 .. doxygenclass:: fmt::basic_format_arg | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 310 :members: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 311 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 312 .. doxygenclass:: fmt::basic_format_parse_context | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 313 :members: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 314 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 315 .. doxygenclass:: fmt::basic_format_context | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 316 :members: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 317 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 318 .. doxygentypedef:: fmt::format_context | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 319 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 320 .. _args-api: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 321 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 322 Dynamic Argument Lists | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 323 ---------------------- | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 324 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 325 The header ``fmt/args.h`` provides ``dynamic_format_arg_store``, a builder-like | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 326 API that can be used to construct format argument lists dynamically. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 327 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 328 .. doxygenclass:: fmt::dynamic_format_arg_store | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 329 :members: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 330 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 331 Compatibility | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 332 ------------- | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 333 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 334 .. doxygenclass:: fmt::basic_string_view | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 335 :members: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 336 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 337 .. doxygentypedef:: fmt::string_view | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 338 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 339 .. _format-api: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 340 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 341 Format API | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 342 ========== | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 343 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 344 ``fmt/format.h`` defines the full format API providing additional formatting | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 345 functions and locale support. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 346 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 347 Literal-Based API | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 348 ----------------- | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 349 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 350 The following user-defined literals are defined in ``fmt/format.h``. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 351 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 352 .. doxygenfunction:: operator""_a() | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 353 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 354 Utilities | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 355 --------- | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 356 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 357 .. doxygenfunction:: fmt::ptr(T p) -> const void* | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 358 .. doxygenfunction:: fmt::ptr(const std::unique_ptr<T, Deleter> &p) -> const void* | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 359 .. doxygenfunction:: fmt::ptr(const std::shared_ptr<T> &p) -> const void* | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 360 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 361 .. doxygenfunction:: fmt::underlying(Enum e) -> typename std::underlying_type<Enum>::type | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 362 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 363 .. doxygenfunction:: fmt::to_string(const T &value) -> std::string | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 364 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 365 .. doxygenfunction:: fmt::join(Range &&range, string_view sep) -> join_view<detail::iterator_t<Range>, detail::sentinel_t<Range>> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 366 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 367 .. doxygenfunction:: fmt::join(It begin, Sentinel end, string_view sep) -> join_view<It, Sentinel> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 368 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 369 .. doxygenfunction:: fmt::group_digits(T value) -> group_digits_view<T> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 370 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 371 .. doxygenclass:: fmt::detail::buffer | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 372 :members: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 373 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 374 .. doxygenclass:: fmt::basic_memory_buffer | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 375 :protected-members: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 376 :members: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 377 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 378 System Errors | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 379 ------------- | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 380 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 381 {fmt} does not use ``errno`` to communicate errors to the user, but it may call | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 382 system functions which set ``errno``. Users should not make any assumptions | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 383 about the value of ``errno`` being preserved by library functions. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 384 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 385 .. doxygenfunction:: fmt::system_error | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 386 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 387 .. doxygenfunction:: fmt::format_system_error | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 388 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 389 Custom Allocators | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 390 ----------------- | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 391 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 392 The {fmt} library supports custom dynamic memory allocators. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 393 A custom allocator class can be specified as a template argument to | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 394 :class:`fmt::basic_memory_buffer`:: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 395 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 396 using custom_memory_buffer = | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 397 fmt::basic_memory_buffer<char, fmt::inline_buffer_size, custom_allocator>; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 398 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 399 It is also possible to write a formatting function that uses a custom | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 400 allocator:: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 401 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 402 using custom_string = | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 403 std::basic_string<char, std::char_traits<char>, custom_allocator>; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 404 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 405 custom_string vformat(custom_allocator alloc, fmt::string_view format_str, | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 406 fmt::format_args args) { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 407 auto buf = custom_memory_buffer(alloc); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 408 fmt::vformat_to(std::back_inserter(buf), format_str, args); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 409 return custom_string(buf.data(), buf.size(), alloc); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 410 } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 411 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 412 template <typename ...Args> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 413 inline custom_string format(custom_allocator alloc, | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 414 fmt::string_view format_str, | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 415 const Args& ... args) { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 416 return vformat(alloc, format_str, fmt::make_format_args(args...)); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 417 } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 418 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 419 The allocator will be used for the output container only. Formatting functions | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 420 normally don't do any allocations for built-in and string types except for | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 421 non-default floating-point formatting that occasionally falls back on | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 422 ``sprintf``. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 423 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 424 Locale | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 425 ------ | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 426 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 427 All formatting is locale-independent by default. Use the ``'L'`` format | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 428 specifier to insert the appropriate number separator characters from the | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 429 locale:: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 430 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 431 #include <fmt/core.h> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 432 #include <locale> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 433 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 434 std::locale::global(std::locale("en_US.UTF-8")); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 435 auto s = fmt::format("{:L}", 1000000); // s == "1,000,000" | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 436 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 437 ``fmt/format.h`` provides the following overloads of formatting functions that | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 438 take ``std::locale`` as a parameter. The locale type is a template parameter to | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 439 avoid the expensive ``<locale>`` include. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 440 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 441 .. doxygenfunction:: format(const Locale& loc, format_string<T...> fmt, T&&... args) -> std::string | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 442 .. doxygenfunction:: format_to(OutputIt out, const Locale& loc, format_string<T...> fmt, T&&... args) -> OutputIt | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 443 .. doxygenfunction:: formatted_size(const Locale& loc, format_string<T...> fmt, T&&... args) -> size_t | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 444 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 445 .. _legacy-checks: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 446 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 447 Legacy Compile-Time Format String Checks | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 448 ---------------------------------------- | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 449 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 450 ``FMT_STRING`` enables compile-time checks on older compilers. It requires C++14 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 451 or later and is a no-op in C++11. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 452 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 453 .. doxygendefine:: FMT_STRING | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 454 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 455 To force the use of legacy compile-time checks, define the preprocessor variable | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 456 ``FMT_ENFORCE_COMPILE_STRING``. When set, functions accepting ``FMT_STRING`` | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 457 will fail to compile with regular strings. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 458 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 459 .. _ranges-api: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 460 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 461 Range and Tuple Formatting | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 462 ========================== | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 463 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 464 The library also supports convenient formatting of ranges and tuples:: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 465 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 466 #include <fmt/ranges.h> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 467 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 468 std::tuple<char, int, float> t{'a', 1, 2.0f}; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 469 // Prints "('a', 1, 2.0)" | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 470 fmt::print("{}", t); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 471 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 472 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 473 NOTE: currently, the overload of ``fmt::join`` for iterables exists in the main | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 474 ``format.h`` header, but expect this to change in the future. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 475 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 476 Using ``fmt::join``, you can separate tuple elements with a custom separator:: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 477 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 478 #include <fmt/ranges.h> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 479 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 480 std::tuple<int, char> t = {1, 'a'}; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 481 // Prints "1, a" | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 482 fmt::print("{}", fmt::join(t, ", ")); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 483 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 484 .. _chrono-api: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 485 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 486 Date and Time Formatting | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 487 ======================== | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 488 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 489 ``fmt/chrono.h`` provides formatters for | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 490 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 491 * `std::chrono::duration <https://en.cppreference.com/w/cpp/chrono/duration>`_ | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 492 * `std::chrono::time_point | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 493 <https://en.cppreference.com/w/cpp/chrono/time_point>`_ | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 494 * `std::tm <https://en.cppreference.com/w/cpp/chrono/c/tm>`_ | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 495 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 496 The format syntax is described in :ref:`chrono-specs`. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 497 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 498 **Example**:: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 499 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 500 #include <fmt/chrono.h> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 501 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 502 int main() { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 503 std::time_t t = std::time(nullptr); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 504 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 505 // Prints "The date is 2020-11-07." (with the current date): | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 506 fmt::print("The date is {:%Y-%m-%d}.", fmt::localtime(t)); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 507 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 508 using namespace std::literals::chrono_literals; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 509 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 510 // Prints "Default format: 42s 100ms": | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 511 fmt::print("Default format: {} {}\n", 42s, 100ms); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 512 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 513 // Prints "strftime-like format: 03:15:30": | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 514 fmt::print("strftime-like format: {:%H:%M:%S}\n", 3h + 15min + 30s); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 515 } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 516 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 517 .. doxygenfunction:: localtime(std::time_t time) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 518 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 519 .. doxygenfunction:: gmtime(std::time_t time) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 520 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 521 .. _std-api: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 522 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 523 Standard Library Types Formatting | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 524 ================================= | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 525 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 526 ``fmt/std.h`` provides formatters for: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 527 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 528 * `std::filesystem::path <https://en.cppreference.com/w/cpp/filesystem/path>`_ | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 529 * `std::thread::id <https://en.cppreference.com/w/cpp/thread/thread/id>`_ | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 530 * `std::monostate <https://en.cppreference.com/w/cpp/utility/variant/monostate>`_ | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 531 * `std::variant <https://en.cppreference.com/w/cpp/utility/variant/variant>`_ | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 532 * `std::optional <https://en.cppreference.com/w/cpp/utility/optional>`_ | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 533 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 534 Formatting Variants | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 535 ------------------- | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 536 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 537 A ``std::variant`` is only formattable if every variant alternative is formattable, and requires the | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 538 ``__cpp_lib_variant`` `library feature <https://en.cppreference.com/w/cpp/feature_test>`_. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 539 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 540 **Example**:: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 541 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 542 #include <fmt/std.h> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 543 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 544 std::variant<char, float> v0{'x'}; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 545 // Prints "variant('x')" | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 546 fmt::print("{}", v0); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 547 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 548 std::variant<std::monostate, char> v1; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 549 // Prints "variant(monostate)" | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 550 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 551 .. _compile-api: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 552 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 553 Format String Compilation | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 554 ========================= | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 555 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 556 ``fmt/compile.h`` provides format string compilation enabled via the | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 557 ``FMT_COMPILE`` macro or the ``_cf`` user-defined literal. Format strings | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 558 marked with ``FMT_COMPILE`` or ``_cf`` are parsed, checked and converted into | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 559 efficient formatting code at compile-time. This supports arguments of built-in | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 560 and string types as well as user-defined types with ``format`` functions taking | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 561 the format context type as a template parameter in their ``formatter`` | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 562 specializations. For example:: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 563 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 564 template <> struct fmt::formatter<point> { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 565 constexpr auto parse(format_parse_context& ctx); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 566 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 567 template <typename FormatContext> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 568 auto format(const point& p, FormatContext& ctx) const; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 569 }; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 570 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 571 Format string compilation can generate more binary code compared to the default | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 572 API and is only recommended in places where formatting is a performance | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 573 bottleneck. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 574 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 575 .. doxygendefine:: FMT_COMPILE | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 576 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 577 .. doxygenfunction:: operator""_cf() | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 578 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 579 .. _color-api: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 580 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 581 Terminal Color and Text Style | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 582 ============================= | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 583 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 584 ``fmt/color.h`` provides support for terminal color and text style output. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 585 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 586 .. doxygenfunction:: print(const text_style &ts, const S &format_str, const Args&... args) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 587 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 588 .. doxygenfunction:: fg(detail::color_type) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 589 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 590 .. doxygenfunction:: bg(detail::color_type) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 591 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 592 .. doxygenfunction:: styled(const T& value, text_style ts) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 593 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 594 .. _os-api: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 595 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 596 System APIs | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 597 =========== | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 598 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 599 .. doxygenclass:: fmt::ostream | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 600 :members: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 601 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 602 .. doxygenfunction:: fmt::windows_error | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 603 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 604 .. _ostream-api: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 605 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 606 ``std::ostream`` Support | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 607 ======================== | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 608 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 609 ``fmt/ostream.h`` provides ``std::ostream`` support including formatting of | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 610 user-defined types that have an overloaded insertion operator (``operator<<``). | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 611 In order to make a type formattable via ``std::ostream`` you should provide a | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 612 ``formatter`` specialization inherited from ``ostream_formatter``:: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 613 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 614 #include <fmt/ostream.h> | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 615 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 616 struct date { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 617 int year, month, day; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 618 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 619 friend std::ostream& operator<<(std::ostream& os, const date& d) { | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 620 return os << d.year << '-' << d.month << '-' << d.day; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 621 } | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 622 }; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 623 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 624 template <> struct fmt::formatter<date> : ostream_formatter {}; | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 625 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 626 std::string s = fmt::format("The date is {}", date{2012, 12, 9}); | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 627 // s == "The date is 2012-12-9" | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 628 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 629 .. doxygenfunction:: streamed(const T &) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 630 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 631 .. doxygenfunction:: print(std::ostream &os, format_string<T...> fmt, T&&... args) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 632 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 633 .. _printf-api: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 634 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 635 ``printf`` Formatting | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 636 ===================== | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 637 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 638 The header ``fmt/printf.h`` provides ``printf``-like formatting functionality. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 639 The following functions use `printf format string syntax | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 640 <https://pubs.opengroup.org/onlinepubs/009695399/functions/fprintf.html>`_ with | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 641 the POSIX extension for positional arguments. Unlike their standard | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 642 counterparts, the ``fmt`` functions are type-safe and throw an exception if an | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 643 argument type doesn't match its format specification. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 644 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 645 .. doxygenfunction:: printf(string_view fmt, const T&... args) -> int | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 646 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 647 .. doxygenfunction:: fprintf(std::FILE *f, const S &fmt, const T&... args) -> int | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 648 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 649 .. doxygenfunction:: sprintf(const S&, const T&...) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 650 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 651 .. _xchar-api: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 652 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 653 ``wchar_t`` Support | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 654 =================== | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 655 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 656 The optional header ``fmt/xchar.h`` provides support for ``wchar_t`` and exotic | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 657 character types. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 658 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 659 .. doxygenstruct:: fmt::is_char | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 660 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 661 .. doxygentypedef:: fmt::wstring_view | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 662 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 663 .. doxygentypedef:: fmt::wformat_context | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 664 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 665 .. doxygenfunction:: fmt::to_wstring(const T &value) | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 666 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 667 Compatibility with C++20 ``std::format`` | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 668 ======================================== | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 669 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 670 {fmt} implements nearly all of the `C++20 formatting library | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 671 <https://en.cppreference.com/w/cpp/utility/format>`_ with the following | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 672 differences: | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 673 | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 674 * Names are defined in the ``fmt`` namespace instead of ``std`` to avoid | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 675 collisions with standard library implementations. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 676 * Width calculation doesn't use grapheme clusterization. The latter has been | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 677 implemented in a separate branch but hasn't been integrated yet. | 
| 
1faa72660932
*: transfer back to cmake from autotools
 Paper <paper@paper.us.eu.org> parents: diff
changeset | 678 * Most C++20 chrono types are not supported yet. | 
