091ca2aa03
f5e54359d Update version a003ab93c Update changelog 9b7416081 `atomic_flag` formatting (#3594) a21690bdf Coding conventions c9efd8968 Merge branch 'MathewBensonCode-master' e78682405 Refactor Improvement on umul128 function 2b20d7be6 Refactor To remove friend function private access 1f38ebbdb Add condition to include friend function in win32 e41817969 Fix for FMT_MODULE not compiling on GCC 0bffed895 Bump actions/checkout from 3.1.0 to 3.5.3 (#3602) cc077a5e3 Fix `FMT_NO_UNIQUE_ADDRESS` warning with clang-cl. (#3600) a992b3d1f Fix for Compilation Error When Using FMT_MODULE (#3597) af1b768cc Update changelog 2a7c45b54 Update changelog bd868f3a5 Improve compatibility with GBK #3598 (#3599) bbb784fb1 Fix a gcc error about partial specialization after instantiation 6c845f57e Fix `formatted_size` with `FMT_COMPILE` and format specs (#3588) a379595c5 Bump actions/upload-artifact from 3.1.0 to 3.1.2 (#3593) 9dfde7871 Bump ossf/scorecard-action from 2.1.2 to 2.2.0 (#3592) e92a705bd Bump github/codeql-action from 2.2.4 to 2.21.4 (#3591) 5a866fe85 Add formatter for std::atomic (#3574) e150ea0cc to_string supports types with format_as 29ce2ff8a Update README.rst 2e1362add Create scorecard.yml e57ca2e36 Update version 4c56612c6 Update changelog e1acd5f4d Bump version 6ffee2f75 Handle new rst nodes ee475d640 Update changelog ecc914125 Update changelog d42486231 Fix fixed precision handling during rounding in long double 3c1b3337d Update changelog 35fb69ebe Update changelog f92be35c0 Update changelog 7a2f6ac21 Fix a comment 744ff5554 Fix docs 70ae48b00 Update changelog ebb10347c Merge branch 'master' of github.com:fmtlib/fmt 100572016 Clarify that visit_format_arg is deprecated aeb6ad4dd Added formatter for bit_reference-like types (#3570) 96d1fa22d Update changelog 8a4bec5cf fix ambiguous formatter lookup for flat_set (#3561) eacd51c24 cmake: fix FMT_PKGCONFIG_DIR path (#3563) 757564f5c add missing inline specifier (#3552) f4214ae8d Use the U literal for unsigned integer constants. (#3549) aecf80d30 Update a comment 503d49286 expose detail::throw_format_error (#3551) 4f46cb82f Remove std::copy usage. (#3550) 3dec65b7f Use replacement character in path dbabb305c Turn off error-producing NVCC workaround when using c++20 (#3544) ac0ab8eff Improve path formatter 40f35d6f0 Cleanup std formatters 31c2c5679 Cleanup formatters b2728a317 Improve path formatter 77e0b0e22 Cleanup chrono formatter e47585904 Fix overspecified tests 436c131d4 Optimize compiled format_to_n 388bc296b Fix fixed formatting of small long doubles 95e1ea573 Clarify requirement on compiled formatter fb97cb231 Suppress a bogus stringop-overflow warning dd5a9691f Clarify that data is not null-terminated 72dc4491e Fix format_string_checker initialisation order (#3542) 9bea6ec04 Don't use deprecated checked_array_iterator 661b23ede Call parse on empty specs at compile time 8e87d3a8b Fix include a47491656 Update CMakeLists.txt (#3523) de4705f84 Trying to improve errors in the unformattable case (#3478) e4c8cfe38 README: Add link to merged clang-tidy check (#3515) 606f85f8b Workaround brain-damaged conversions a331dbfb6 Fix type in assert message. (#3508) 13156e54b Revert "add ability to build Apple framework using CMAKE_FRAMEWORK" (#3496) 9158bea1e Remove old grisu tests dd17f89a1 Fix for issue #3492 (#3493) 1daae555b Optimize format string compilation 6ad301235 Optimize code unit output in compiled format 8732ad877 Update docs 5afb1821a Update docs a81135f2c Fix a link dfc34821a Update docs 0765e7284 Update docs 977d887a4 Suppress a bogus warning c86fe0b8d Give basic_memory_buffer allocator [[no_unique_address]] (#3485) 5dbe0ff95 Bump actions/checkout from 3.5.2 to 3.5.3 (#3486) de0757b57 Use FMT_TRY and FMT_CATCH in std.h (#3482) 8fe893c0a Update README.rst 0f823df46 Remove detail namespace hack 60fd9941c Use correct Char type in std::filesystem::path (#3476) 8abfc145b Fix MSVC warning in std::chrono::time_point formatter (#3475) 686b3353a Simplify typeid check b2106f363 Tweak comments 35547d600 Use const_check to silence MSVC warning 179c7e5a6 Use typeid() only if it's available 61fb3a15f Add VxWorks7 user space and kernel space support (#3467) bd393456e Remove FMT_*_DETAIL_NAMESPACE 6be36af0d Remove udl_formatter 2a35eeed8 Remove unused data 256a826d6 Consolidate formatters 6369af37d Simplify formatters 0b8404918 Remove get_cached_power 171a020c8 Pass correct Char to base format_as formatter (#3457) d8f04e399 Simplify ceil 5e988f8df Remove is_constant_evaluated() check 19b17618a Make constexpr ceil c684a06d5 New CI: macOS 13, Xcode 14.3, C++ 20 abdb7fdf8 Update api.rst 8b09fe2a0 Fix example for user-defined types in documentation for 10.0.0 (#3461) adad18a74 Update ChangeLog.rst 858e528ab Use dragon in constexpr a54cb108d CMake: Do not fail on unknown compiler features (#3453) ef55d4f52 Suppress a bogus gcc warning 70b6a6fa4 Update README.rst (#3454) 6fe895410 Remove invalid_arg_index d0652d225 Create dependabot.yml (#3452) de8d0171a Simplify FMT_FORMAT_AS 7401fe046 Hash pin Github Workflows (#3451) 08ef0d084 fix formatter<char*> (#3432) d60b907f8 Replace mod_inv_25 by explicit value (#3450) 4ce086f73 remove code duplication (#3448) 821f8cdb4 Detemplatize printf more 0bf6ed7e1 Cleanup printf e40e04fac Detemplatize printf_arg_formatter 0a1c27281 Detemplatize basic_printf_context 2f605cc89 Deprecate wide printf 1d54499ac Apply coding conventions 3c6053c53 Cleanup basic_printf_context 4a392adaa Remove basic_printf_parse_context b14913fae FMT_MODULE_EXPORT -> FMT_EXPORT 2117df299 format-inl.h: address implicit int to bool conversion (#3446) 616a49378 Revert Char* formatter removal 9a034b0d5 Always assert in FMT_THROW (#3439) e0fc0e85e Remove unneeded FMT_API 552c43aba Improve long formatters d6846f4ac Clarify why byte formatter is in core aeedac588 Remove unneeded specialization eaa630769 Make hex float test more stable (#3434) e82bf41a1 Update README.rst e077396f5 Update docs 861facad0 Fix a typo 75bfe5761 Improve docs 697e76ba3 Don't call init_named_args unnecessarily a425e0ff3 Cleanup xchar API c36dd825b Remove unnecessary forwarding 130b8fcdb Reduce template instantiations a47e8419b Cleanup the core API ea49c91cd Cleanup argument construction d7592ad8b Fix time_point formatting for durations with certain ratios (#3430) ebfb2e677 Remove unused alias 5780269d5 Improve API safety b47119216 Fix a comment 8f18e72df Improve API safety 93d7cb12f Fix formatting 0e4278717 Remove unused macro 93a30a074 unicode_to_utf8 -> to_utf8 since both sides of conversion are Unicode a08196b14 Update ChangeLog.rst 0398ba42c Update ChangeLog.rst a0b8a92e3 Update version 5cf2342aa Bump version fe9d39d7c Update changelog 4c9856197 Update changelog 403b271ed Update changelog 2c991e1af Update changelog c984df981 Remove an unused function from internal class fbf21ed22 Update changelog 575583144 Update changelog e7f6888c7 Update changelog 39db2dfd0 Update changelog 9b7829e26 Update changelog 1e0ce567e Fix formatting of paths containing invalid Unicode dde8cf3bb Unification utf16/utf32 to utf8 conversion e84b00e01 Workaround to error: variable 'n' set but not used [-Werror,-Wunused-but-set-variable] b12ffea4f Add filesystem_error test back f61f15cc5 Suppress a false positive in gcc 192df93d7 modules missing pieces (#3399) d8973bf16 Add FMT_STRING for format_to() call (#3413) d7a8e50cb Improve module testing (#3397) 02cae7e48 Improve handling of Unicode in paths 53162142b Remove .bazelrc mention from Bazel related readme (#3411) 5bcf0d7f9 Bazel support (#3406) f8c9fabd9 Fix spelling (#3404) 62ff4e1db Remove foonathan from maintainer list (#3402) f449ca052 Name `vfprintf` clashes with the identically named declaration in 'stdio.h' if that happens to be #included into the same TU. Fix this by using qualified name lookup instead of unqualified lookup that also enables ADL. (#3400) eafcd3c8e Optionally attach declarations to the `global module` rather than `module fmt` (#3387) 18154cc90 Simplify print 0de789cf2 Update changelog c03938922 export names only once (#3392) 93e81bb5d Fix C4365 (signed/unsigned mismatch) warning on 32-bit Windows (#3398) e7d6eb679 Update tests to use recommended MOCK_METHOD (#3395) 18e7a2532 Remove obsolete msvc workarounds (#3388) 0489c19dc fix and improve module (#3386) 8ec94ac6a Use full path to pcm d97d8cea6 Push module check to test d8a2698e6 Fix compilation as a C++20 module with gcc 13 d9c19940a Update add_module_library 4b5ae0b0e Remove unnecessary module support check 75f3b1c09 Use add_module_library faf83406a Workaround cmake issue 165814d57 Add module support to CMake 33f715077 Fix error C2668 on msvc (#3378) c98e5a08a Fix modular build on clang 119c6bd16 Move the modules check 77eeb7183 Remove unused headers 13bf99f9d Enable modules in clang 16 1d0257e4c FMT_MODULE_EXPORT_* -> FMT_EXPORT_* 4613d48fd FMT_EXPORT -> FMT_LIB_EXPORT 4a4a2a2bd Fix diagnostics fce74caa1 Disable problematic implicit conversions 02bf4d1c1 Disable to_string_view ADL 466e0650e Remove problematic workaround 029caa8ea Update changelog e406ddbfa Remove broken part of the config 909567953 Update changelog 7f46cb75b ranges: Fix extra semi (#3374) 4e3f38105 Update changelog d3c10f516 fix compilation for MSDOS (#3369) ab956f600 Update changelog 97aedeab4 Workaround a double-double hexfloat format (#3366) bce8d4ed0 Remove stray comment a91c7b286 Cleanup the core API 19c074e47 Remove deprecated fallback formatter 41cfc739f Generalize format_as f6276a2c2 Force use a signed char (On ARM char is unsigned by default) (#3362) 6002ddf82 Remove a deprecated option 6549ffde8 Improve format_as safety d9bc5f132 Fix code causing spurious Wstringop-overflow warning 9c5cd998d Remove unused functions 93bfa0538 %T is %H:%M:%S (#3349) d8e1c4265 fix case of variant which is valueless by exception (#3347) e1720c0e5 Fix CUDA nvcc warning fmt/include/fmt/core.h(295): warning #1675-D: unrecognized GCC pragma (#3352) 7f882918e `write_floating_seconds`: Fall back to `::round` (#3343) cbc7b8d5c Cleanup dead variable (#3338) 050293646 Path is not escaped twice in the debug mode (#3321) 3daf33837 Enable consteval for Xcode 14.0.1 and later (#3331) e0748e61d Fix recursion check in range formatting b94e1016f chore: set permission to cifuzz.yml (#3328) 98699719f Make # handling consistent with std::format 48dfbcaa9 Improve license and PR template wording c644c753d Add '🐙 userver framework' to the projects 73b7cee7f Fix for issue #3325 (#3326) 5b8302079 Add optional support (#3303) 3a69529e8 Fix various typos (#3312) 76f520835 Call element parse in tuple parse 507c3042d class -> typename 1741e90de Always call parse in range formatter d646fd0da Minor cleanup b5c2f74f4 change sopen_s to wsopen_s (fmtlib#3234) (#3293) e03753c4a Add ubuntu mirrors (#3302) 6e6eb6377 [msvc] fix warning about non-inline variable 3c5464ba1 Fix OpenBSD build error (#3295) 655046d24 Fix container adaptor formatting 581c6292c Add formatters for container adapters (#3279) 7718eeeac Implement glibc ext for sec, min, and hour (#3271) 44e0eea94 Use FMT_HAS_INCLUDE and apply clang-format 99070899b Fix errors setting of FMT_USE_FLOAT128 (#3259) 05e3a9233 Allowing formatting non-copyable ranges. (#3290) 70db193f0 Visual Studio 2022: fmt/format-inl.h(1145,60): warning C4310: cast truncates constant value #3287 (#3288) a2c05a10e Workaround a bug in MSVC <= 19.22 cae9bf45b Simplify apidoc comments 87c066a35 Implement `println` (#3267) 9409b2e4d Workaround for incompatibility between libstdc++ consteval-based std::is_constant_evaluated() implementation and clang-14 (#3281) f89cd276f Refactor countl_zero fallback (#3276) 240b728d8 Report an error on overflow dfbb952b2 Fix empty spec for time point (#3275) 39971eb33 Fix localized format for float-point numbers (#3272) 0f42c17d8 Implement a new formatting algorithm for small given precision (#3269) bfc0924ea Bugfix for fmt::printf on Power9 architecture with the XL compiler (#3256) 676c2a107 Fix negative subsec for time_point (#3261) 2c80cedc3 Fix standard default installation target presence (#3264) dda53082b Support fill, align & width for time point (#3260) 2622cd23e Simplify arg_mapper 9e4a54fa6 Disable remaining implicit conversions 9ce648067 Disble deprecated implicit enum conversions 9121f9b1d Enable format_as for classes b7535365b Enable format_as for non-integral types 09ed1ddb9 Cleanup tests 0ec65d99a Merge parse_presentation_type into parse_format_specs 71e4e0272 Cleanup vprintf aad546baa Simplify presentation type parsing 14a69fcc5 Use parse_align bf34ffd33 Refactor format string parsing 6056e0712 Simplify symbols aa99b8640 Minor cleanup 6ade2eb4e Inline all_int_set caa697494 Simplify parse functions a73a9b6a8 Refactor format string checks 72785a3ab Cleanup write 0c3dd5ddd Remove redundant check 739b600f4 Remove iterator shenanigans 3710c4d38 Link to dragonbox a05ba44df Simplify format string parsing ffb9b1d13 Improve handling of signed types 32190859e Fix handling of char 8fe4d97d5 Reduce template instantiations 7e5a95956 Fix build with MSVC C++20 modules (#3254) 9e6030486 Clarify that unused args are allowed 7ad48c1f6 Cleanup core.h a921a596e Cleanup core.h 3e762fdf5 Use ignore_unused 79981a252 Cleanup ranges formatting bd12aaa98 Simplify format string parsing b8f36207c Simplify format string parsing d907786f0 Move anchor to where it belongs f2355bbe5 Fix docs f398c9476 Fix docs 4841784e8 Simplify C99 strftime detection conditions cb72c23e9 Improve timezone tests 583f2d820 Set timezone for chrono tests 32c439070 Minor cleanup 3a5e19fbf Minor cleanup dfb857ebe Refactor format spec parsing 9ea9b6bcb Cleanup arg id parsing 2b0ff62a7 Remove unused template arg from format_string_checker d1745084e Simplify parse context 407e7b7b6 basic_format_specs -> format_specs 3cf979475 Cleanup format string parsing 934c8e5f7 Refactor precision parsing fc9693834 Remove empty semicolon f0ab112c3 Cleanup parsing 9660e5b95 Remove redundant tests a585571e9 Ignore 0 character with align 840ec8569 Cleanup width handlers 1dadeb8a3 Refactor width parsing 275b4b341 Remove obsolete parse-benchmark e004f1d69 Fix for issue #3241 bde1a6070 Simplify fill and alignment parsing 040dc2a5d small typo in syntax.rst 6a186bcd6 Localize FMT_USE_LOCAL_TIME 8c56919bd Check chrono spec starts with % 115001a3b Formatting of system clocks ought to be to UTC, not to local time. This improves standards conformance of fmt. b90895412 Fix formatting of named arguments with locale d072f1dc6 Fix for issue #3228 3999fd193 Workaround an ADL issue c06e0b4ed Extract timezone offset from timezone conversion functions 1bf302a4e Implement %Ez, %Oz for chrono formatter f1733afd4 Pin godbolt example to specific version f61dcccc6 Update README.rst f9bcbdcbc Update README.rst 1a854b4aa Clarify what mod_inv_5 is 62ceb181b fix #3105 - Compile-time error when mixing named argument with automatic indexing b0c8263cb include/fmt/core.h: copy constructors removal d24be2e95 Add countl_zero function 8d50d814d Fix a chrono formatting issue found by fuzzing 115ca96e0 Bump tested CMake version to 3.25 886491625 Remove workaround for GTest bug 74c51ff37 Skip only strptime dependent test in scan-test 69ffedfe5 Use `target_compile_features` to specify C++ standard requirement fae6f7e08 Optimize range formatter a69e43c9d Update benchmark results 91c024ed3 Rename leading_v -> leading_xdigit 649aa102d CI linux: add CIFuzz Github action 31364732d Replace snprintf-based hex float formatter with internal implementation 74d55a493 Add missing operators 8276f1a20 Fix warning: the implicit by-copy capture of "this" is deprecated (EDG frontend) 81ebe70b9 Fix warning: a class type that is not trivially copyable passed through ellipsis (EDG frontend) 3160847eb Enable C++17 tests on macOS 6a95f8c7e Add missing env CTEST_OUTPUT_ON_FAILURE c7980542d Skip the scan-test if strptime isn't defined (#3184) 7df30f91a Format unique_ptr with custom deleter (#3177) d2e89c8b0 Document more chrono specs bd1959320 Document more chrono specs fd0d0ec8d Document more chrono specs 8e93434ed Update README.rst fc07217d8 Make utf-8 detection compatible with gbk cb7373b46 Replace format with FMT_STRING. (#3162) 795ed8abf Add precision modifier for seconds in chrono format (#3148) 66d71a1b3 Fixing formatting of range of range of char. (#3158) 80f8d3442 fmt::ostream - aggregate buffer instead of inheriting it (#3139) 64965bdc9 Add locale getter in tm_writer (#3147) e1ffa7655 Fix warning: conditional expression is constant. (#3150) 8c19bf3f2 Mention MariaDB amongst the projects that use fmt (#3145) f67dbc981 Remove duplicate implementation (#3144) cd7202e03 Fix overflow error (#3143) 51d3685ef Remove duplicate template parameter. (#3142) 9254cfa6f Support formatting of subseconds (#3115) cfb34a060 Avoid using `uint` as a type name (#3137) 5ad7b7138 Fix options for C++20 experimental module in CMake (#3134) d2c47c0df Fix broken condition (#3129) 491c32cbd Workaround gcc bug 103879 662adf4f3 Move formatter<std::error_code> from fmt/os.h to fmt/std.h (#3125) ad91cab37 Normalization of stdlib inline namespace names (#3119) 0ccaed3a6 Set CMAKE_RUNTIME_OUTPUT_DIRECTORY relative to CMAKE_CURRENT_BINARY_DIR instead of CMAKE_BINARY_DIR (#3120) ad719619c Support formatting of std time_point with utc_clock (#3110) 6e0a5f7fb Update CI to Ubuntu 20.04 and to newer versions of actions 48f525d02 Add basic_format_string::get() 0b5cb18b7 Use buffering in to_string to avoid bloat 4c4f99a58 Update a godbolt link 3272a7a3c Update an example a48e3355a Improve docs afcf42429 Update docs ac85afaab Simplify format_error 3178bb9a2 Update docs cf58f64c5 Update docs e4e0ae391 Use fmt/core.h in examples d65acc4e6 Improve docs c9f790b06 Update docs 6b8144a5a Update locale docs 2d66ad5d3 Suppress -Wshadow 042af5332 Suppress -Wfloat-equal 192859c2b Optimize writing to buffers via back_insert_iterator e2f6d7665 fix gcc <= 7.1 compile errors 61844b6b6 Fix build error on GCC-9 7a752e75f New CI: GCC-9 94ceb38a0 Improve locale API 58c4c012f Disable slow windows build and simplify write_loc c3494ae36 Refactor float localization 8ae56161c Fix compilation with FMT_ENFORCE_COMPILE_STRING and FMT_WERROR (#3091) 76705fc2e Update doc 21c2137e7 Add class name output to formatter for std::exception (#3076) ecffca672 Don't parse '}' as fill 3176e0fad Add locale overload for formatted_size (#3084) (#3087) 1feb430fa Fix intellisense on Windows (#3082) b98ffb7db Improve locale handling bac53951b Add starts_with to basic_string_view. (#3080) d59b89e9c More locale 58a5563a9 Implement grouping 1b94271ff Add support for UTF-8 digit separators 768d79a83 Implement format_facet 91ecb38a3 Localize negative integers aec3bb5d0 Workaround C complex.h idiocy 29c600013 Simplify is_variant_like_ check, fix compile error before GCC 11 (#3072) fec5515c5 num_format_facet -> format_facet f187274d3 Add loc_value fc5e59fe4 Don't use stringstream d6a870460 Improve locale support 56c72a671 Reduce locale dependency 4191477b9 Add formatter for std::exception (#3062) 75383a87f Inline trivial functions 48327a82e Make format.h compile faster b79ed4105 Remove unnecessary type_identity 64e29893c Improve locale support 0b0f7cfbf hip workaround 40e414d82 Fix compilation error with gcc-7.2.0 33b4c33c5 Requires FMT_CONSTEXPR20 support a07411c2b Disable compile-time checks for dynamic width/precision test for LCC and compiler without std::is_constant_evaluated() 797d82b21 Disable non-type template args for LCC a553521d6 Disable "GCC optimize" pragma for LCC a33701196 Update version 1f575fd5c Bump version c7635288f Fix docs, take 2 c8ed78e31 Fix docs e07cfb206 Update changelog 1dc7af569 Fix markup f7d21c3a1 Update changelog a55bcb24b Update changelog 30cb2b312 Remove appveyor config cf8d3c322 Update changelog 3c3cb6f6b Update changelog 91481f255 Detemplatize code_point_length_impl f98048b62 Fix bugs in utf8 decoder (#3056) 4a8e2949b Fix formatting of ranges of code unit types 3a3b0709e Disable bogus -Wstringop-overflow on GCC 11 (#3054) e724bbea1 Fix wchar_t corner cases 665d9779e Disable non-type template args for nvhpc (#3053) 13d07c6a3 Apply doc fixes retroactively 391f922ac Improve error reporting in format string compilation dc59d3df3 Fix a warning in gtest 489dabbd3 Fix decoder on broken utf8 sequences. (#3044) 541cd2183 Fix locale name (thanks Mikhail Paulyshka) 1f95c3438 Fix sign handling with large code units 779449fd9 Belarusify test fbb568bce nvhpc/22.3: workaround for c++17 mode. (#3043) 36c23bd5f Prepare for deprecating FindPythonInterp module. (#3040) 9ff0f3a7d Fix docs fd41110d3 Add MinGW to CI fc23cfbf4 Fix testsuite on MinGW + MSVCRT fd93b633b Constexpr formatted_size (#3026) 7fb8d33f9 Fix compile-time width/precision type check 8bd02e93b Reduce conditional compilation d9c1c7353 Use is_utf8() in print(std::ostream&, ...) 682e097be Remove -Wl,--as-needed linker option b9087ee58 Suppress unused typedef warning df56fdf88 Clarify docs for compile-time checks 90c48b852 Remove double code execution 5a8b7cd74 Add comment 36a25d75b Reuse detail::string_literal in the chrono formatter 6c9304b2c Replace ParseContext with basic_format_parse_context 24ab9dd19 Remove duplicate method a95dc1701 Remove unused condition 5f774c0ae I shouldn't be there 6567df7f2 Update README.rst 6c6b1fbf6 Workaround a bug in MSVC 9beddd08f Improve CI on Windows 6452e3c9e Fix a typo in example 756822ba3 Fix Unicode handling for ostream under Windows with libc++. (#3001) 0b2862a1e Range formatter (#2983) 258000064 Add fmt:: namespace to doc (#3009) e9ca7ea47 Suppress a bogus warning 81f1cc74a Improve Unicode handling when writing to an ostream on Windows (#2994) bbcb129e0 Reduce filesize of the tests on MinGW (#2995) 48e0a5922 Implement compile-time checks for dynamic width/precision type bc5c7c50f Fixes IBM XLC behavior with uint128 fallback (#2985) 00adc7120 Add a regression test for here be dragons c48be439f Add additional search paths for doxygen on Windows 371f9c71c Fix even in format_dragon 91abfcd6c Suppress an msvc warning deeab54b4 Remove unused include 688a627d6 Remove unused constants. 9bb1605f1 Remove some branches 8061d9afb Simplify Dragonbox implementation d82e1a108 Make sure the correct fmod overload is called defa04e73 Fix for EDG frontend (Intel, NVHPC compilers) (#2982) 92d36e82c The n specifier for ranges (#2981) 0db43cf7f Pointless comparison warnings (#2971) 05be7a076 Use FMT_USE_FLOAT128 instead of __SIZEOF_FLOAT128__ 2a1b3ac62 Fix large shift in uint128_fallback e1d3d3a32 Exclude recursive ranges from the formatter specialization for ranges (#2974) b761f1279 Improve forward using the idea from Jonathan Müller cc1926942 Inline std::forward d5e9166f5 Fixed typo in changelog example. b31d1a75a Add xchar support for fmt::streamed(). git-subtree-dir: externals/fmt git-subtree-split: f5e54359df4c26b6230fc61d38aa294581393084
545 lines
20 KiB
ReStructuredText
545 lines
20 KiB
ReStructuredText
.. image:: https://user-images.githubusercontent.com/
|
||
576385/156254208-f5b743a9-88cf-439d-b0c0-923d53e8d551.png
|
||
:width: 25%
|
||
:alt: {fmt}
|
||
|
||
.. image:: https://github.com/fmtlib/fmt/workflows/linux/badge.svg
|
||
:target: https://github.com/fmtlib/fmt/actions?query=workflow%3Alinux
|
||
|
||
.. image:: https://github.com/fmtlib/fmt/workflows/macos/badge.svg
|
||
:target: https://github.com/fmtlib/fmt/actions?query=workflow%3Amacos
|
||
|
||
.. image:: https://github.com/fmtlib/fmt/workflows/windows/badge.svg
|
||
:target: https://github.com/fmtlib/fmt/actions?query=workflow%3Awindows
|
||
|
||
.. image:: https://oss-fuzz-build-logs.storage.googleapis.com/badges/fmt.svg
|
||
:alt: fmt is continuously fuzzed at oss-fuzz
|
||
:target: https://bugs.chromium.org/p/oss-fuzz/issues/list?\
|
||
colspec=ID%20Type%20Component%20Status%20Proj%20Reported%20Owner%20\
|
||
Summary&q=proj%3Dfmt&can=1
|
||
|
||
.. image:: https://img.shields.io/badge/stackoverflow-fmt-blue.svg
|
||
:alt: Ask questions at StackOverflow with the tag fmt
|
||
:target: https://stackoverflow.com/questions/tagged/fmt
|
||
|
||
.. image:: https://api.securityscorecards.dev/projects/github.com/fmtlib/fmt/badge
|
||
:target: https://securityscorecards.dev/viewer/?uri=github.com/fmtlib/fmt
|
||
|
||
**{fmt}** is an open-source formatting library providing a fast and safe
|
||
alternative to C stdio and C++ iostreams.
|
||
|
||
If you like this project, please consider donating to one of the funds that
|
||
help victims of the war in Ukraine: https://www.stopputin.net/.
|
||
|
||
`Documentation <https://fmt.dev>`__
|
||
|
||
`Cheat Sheets <https://hackingcpp.com/cpp/libs/fmt.html>`__
|
||
|
||
Q&A: ask questions on `StackOverflow with the tag fmt
|
||
<https://stackoverflow.com/questions/tagged/fmt>`_.
|
||
|
||
Try {fmt} in `Compiler Explorer <https://godbolt.org/z/Eq5763>`_.
|
||
|
||
Features
|
||
--------
|
||
|
||
* Simple `format API <https://fmt.dev/latest/api.html>`_ with positional arguments
|
||
for localization
|
||
* Implementation of `C++20 std::format
|
||
<https://en.cppreference.com/w/cpp/utility/format>`__
|
||
* `Format string syntax <https://fmt.dev/latest/syntax.html>`_ similar to Python's
|
||
`format <https://docs.python.org/3/library/stdtypes.html#str.format>`_
|
||
* Fast IEEE 754 floating-point formatter with correct rounding, shortness and
|
||
round-trip guarantees using the `Dragonbox <https://github.com/jk-jeon/dragonbox>`_
|
||
algorithm
|
||
* Portable Unicode support
|
||
* Safe `printf implementation
|
||
<https://fmt.dev/latest/api.html#printf-formatting>`_ including the POSIX
|
||
extension for positional arguments
|
||
* Extensibility: `support for user-defined types
|
||
<https://fmt.dev/latest/api.html#formatting-user-defined-types>`_
|
||
* High performance: faster than common standard library implementations of
|
||
``(s)printf``, iostreams, ``to_string`` and ``to_chars``, see `Speed tests`_
|
||
and `Converting a hundred million integers to strings per second
|
||
<http://www.zverovich.net/2020/06/13/fast-int-to-string-revisited.html>`_
|
||
* Small code size both in terms of source code with the minimum configuration
|
||
consisting of just three files, ``core.h``, ``format.h`` and ``format-inl.h``,
|
||
and compiled code; see `Compile time and code bloat`_
|
||
* Reliability: the library has an extensive set of `tests
|
||
<https://github.com/fmtlib/fmt/tree/master/test>`_ and is `continuously fuzzed
|
||
<https://bugs.chromium.org/p/oss-fuzz/issues/list?colspec=ID%20Type%20
|
||
Component%20Status%20Proj%20Reported%20Owner%20Summary&q=proj%3Dfmt&can=1>`_
|
||
* Safety: the library is fully type-safe, errors in format strings can be
|
||
reported at compile time, automatic memory management prevents buffer overflow
|
||
errors
|
||
* Ease of use: small self-contained code base, no external dependencies,
|
||
permissive MIT `license
|
||
<https://github.com/fmtlib/fmt/blob/master/LICENSE.rst>`_
|
||
* `Portability <https://fmt.dev/latest/index.html#portability>`_ with
|
||
consistent output across platforms and support for older compilers
|
||
* Clean warning-free codebase even on high warning levels such as
|
||
``-Wall -Wextra -pedantic``
|
||
* Locale independence by default
|
||
* Optional header-only configuration enabled with the ``FMT_HEADER_ONLY`` macro
|
||
|
||
See the `documentation <https://fmt.dev>`_ for more details.
|
||
|
||
Examples
|
||
--------
|
||
|
||
**Print to stdout** (`run <https://godbolt.org/z/Tevcjh>`_)
|
||
|
||
.. code:: c++
|
||
|
||
#include <fmt/core.h>
|
||
|
||
int main() {
|
||
fmt::print("Hello, world!\n");
|
||
}
|
||
|
||
**Format a string** (`run <https://godbolt.org/z/oK8h33>`_)
|
||
|
||
.. code:: c++
|
||
|
||
std::string s = fmt::format("The answer is {}.", 42);
|
||
// s == "The answer is 42."
|
||
|
||
**Format a string using positional arguments** (`run <https://godbolt.org/z/Yn7Txe>`_)
|
||
|
||
.. code:: c++
|
||
|
||
std::string s = fmt::format("I'd rather be {1} than {0}.", "right", "happy");
|
||
// s == "I'd rather be happy than right."
|
||
|
||
**Print chrono durations** (`run <https://godbolt.org/z/K8s4Mc>`_)
|
||
|
||
.. code:: c++
|
||
|
||
#include <fmt/chrono.h>
|
||
|
||
int main() {
|
||
using namespace std::literals::chrono_literals;
|
||
fmt::print("Default format: {} {}\n", 42s, 100ms);
|
||
fmt::print("strftime-like format: {:%H:%M:%S}\n", 3h + 15min + 30s);
|
||
}
|
||
|
||
Output::
|
||
|
||
Default format: 42s 100ms
|
||
strftime-like format: 03:15:30
|
||
|
||
**Print a container** (`run <https://godbolt.org/z/MxM1YqjE7>`_)
|
||
|
||
.. code:: c++
|
||
|
||
#include <vector>
|
||
#include <fmt/ranges.h>
|
||
|
||
int main() {
|
||
std::vector<int> v = {1, 2, 3};
|
||
fmt::print("{}\n", v);
|
||
}
|
||
|
||
Output::
|
||
|
||
[1, 2, 3]
|
||
|
||
**Check a format string at compile time**
|
||
|
||
.. code:: c++
|
||
|
||
std::string s = fmt::format("{:d}", "I am not a number");
|
||
|
||
This gives a compile-time error in C++20 because ``d`` is an invalid format
|
||
specifier for a string.
|
||
|
||
**Write a file from a single thread**
|
||
|
||
.. code:: c++
|
||
|
||
#include <fmt/os.h>
|
||
|
||
int main() {
|
||
auto out = fmt::output_file("guide.txt");
|
||
out.print("Don't {}", "Panic");
|
||
}
|
||
|
||
This can be `5 to 9 times faster than fprintf
|
||
<http://www.zverovich.net/2020/08/04/optimal-file-buffer-size.html>`_.
|
||
|
||
**Print with colors and text styles**
|
||
|
||
.. code:: c++
|
||
|
||
#include <fmt/color.h>
|
||
|
||
int main() {
|
||
fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold,
|
||
"Hello, {}!\n", "world");
|
||
fmt::print(fg(fmt::color::floral_white) | bg(fmt::color::slate_gray) |
|
||
fmt::emphasis::underline, "Hello, {}!\n", "мир");
|
||
fmt::print(fg(fmt::color::steel_blue) | fmt::emphasis::italic,
|
||
"Hello, {}!\n", "世界");
|
||
}
|
||
|
||
Output on a modern terminal:
|
||
|
||
.. image:: https://user-images.githubusercontent.com/
|
||
576385/88485597-d312f600-cf2b-11ea-9cbe-61f535a86e28.png
|
||
|
||
Benchmarks
|
||
----------
|
||
|
||
Speed tests
|
||
~~~~~~~~~~~
|
||
|
||
================= ============= ===========
|
||
Library Method Run Time, s
|
||
================= ============= ===========
|
||
libc printf 0.91
|
||
libc++ std::ostream 2.49
|
||
{fmt} 9.1 fmt::print 0.74
|
||
Boost Format 1.80 boost::format 6.26
|
||
Folly Format folly::format 1.87
|
||
================= ============= ===========
|
||
|
||
{fmt} is the fastest of the benchmarked methods, ~20% faster than ``printf``.
|
||
|
||
The above results were generated by building ``tinyformat_test.cpp`` on macOS
|
||
12.6.1 with ``clang++ -O3 -DNDEBUG -DSPEED_TEST -DHAVE_FORMAT``, and taking the
|
||
best of three runs. In the test, the format string ``"%0.10f:%04d:%+g:%s:%p:%c:%%\n"``
|
||
or equivalent is filled 2,000,000 times with output sent to ``/dev/null``; for
|
||
further details refer to the `source
|
||
<https://github.com/fmtlib/format-benchmark/blob/master/src/tinyformat-test.cc>`_.
|
||
|
||
{fmt} is up to 20-30x faster than ``std::ostringstream`` and ``sprintf`` on
|
||
IEEE754 ``float`` and ``double`` formatting (`dtoa-benchmark <https://github.com/fmtlib/dtoa-benchmark>`_)
|
||
and faster than `double-conversion <https://github.com/google/double-conversion>`_ and
|
||
`ryu <https://github.com/ulfjack/ryu>`_:
|
||
|
||
.. image:: https://user-images.githubusercontent.com/576385/
|
||
95684665-11719600-0ba8-11eb-8e5b-972ff4e49428.png
|
||
:target: https://fmt.dev/unknown_mac64_clang12.0.html
|
||
|
||
Compile time and code bloat
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
The script `bloat-test.py
|
||
<https://github.com/fmtlib/format-benchmark/blob/master/bloat-test.py>`_
|
||
from `format-benchmark <https://github.com/fmtlib/format-benchmark>`_
|
||
tests compile time and code bloat for nontrivial projects.
|
||
It generates 100 translation units and uses ``printf()`` or its alternative
|
||
five times in each to simulate a medium-sized project. The resulting
|
||
executable size and compile time (Apple LLVM version 8.1.0 (clang-802.0.42),
|
||
macOS Sierra, best of three) is shown in the following tables.
|
||
|
||
**Optimized build (-O3)**
|
||
|
||
============= =============== ==================== ==================
|
||
Method Compile Time, s Executable size, KiB Stripped size, KiB
|
||
============= =============== ==================== ==================
|
||
printf 2.6 29 26
|
||
printf+string 16.4 29 26
|
||
iostreams 31.1 59 55
|
||
{fmt} 19.0 37 34
|
||
Boost Format 91.9 226 203
|
||
Folly Format 115.7 101 88
|
||
============= =============== ==================== ==================
|
||
|
||
As you can see, {fmt} has 60% less overhead in terms of resulting binary code
|
||
size compared to iostreams and comes pretty close to ``printf``. Boost Format
|
||
and Folly Format have the largest overheads.
|
||
|
||
``printf+string`` is the same as ``printf`` but with an extra ``<string>``
|
||
include to measure the overhead of the latter.
|
||
|
||
**Non-optimized build**
|
||
|
||
============= =============== ==================== ==================
|
||
Method Compile Time, s Executable size, KiB Stripped size, KiB
|
||
============= =============== ==================== ==================
|
||
printf 2.2 33 30
|
||
printf+string 16.0 33 30
|
||
iostreams 28.3 56 52
|
||
{fmt} 18.2 59 50
|
||
Boost Format 54.1 365 303
|
||
Folly Format 79.9 445 430
|
||
============= =============== ==================== ==================
|
||
|
||
``libc``, ``lib(std)c++``, and ``libfmt`` are all linked as shared libraries to
|
||
compare formatting function overhead only. Boost Format is a
|
||
header-only library so it doesn't provide any linkage options.
|
||
|
||
Running the tests
|
||
~~~~~~~~~~~~~~~~~
|
||
|
||
Please refer to `Building the library`__ for instructions on how to build
|
||
the library and run the unit tests.
|
||
|
||
__ https://fmt.dev/latest/usage.html#building-the-library
|
||
|
||
Benchmarks reside in a separate repository,
|
||
`format-benchmarks <https://github.com/fmtlib/format-benchmark>`_,
|
||
so to run the benchmarks you first need to clone this repository and
|
||
generate Makefiles with CMake::
|
||
|
||
$ git clone --recursive https://github.com/fmtlib/format-benchmark.git
|
||
$ cd format-benchmark
|
||
$ cmake .
|
||
|
||
Then you can run the speed test::
|
||
|
||
$ make speed-test
|
||
|
||
or the bloat test::
|
||
|
||
$ make bloat-test
|
||
|
||
Migrating code
|
||
--------------
|
||
|
||
`clang-tidy <https://clang.llvm.org/extra/clang-tidy/>`_ v17 (not yet
|
||
released) provides the `modernize-use-std-print
|
||
<https://clang.llvm.org/extra/clang-tidy/checks/modernize/use-std-print.html>`_
|
||
check that is capable of converting occurrences of ``printf`` and
|
||
``fprintf`` to ``fmt::print`` if configured to do so. (By default it
|
||
converts to ``std::print``.)
|
||
|
||
Projects using this library
|
||
---------------------------
|
||
|
||
* `0 A.D. <https://play0ad.com/>`_: a free, open-source, cross-platform
|
||
real-time strategy game
|
||
|
||
* `AMPL/MP <https://github.com/ampl/mp>`_:
|
||
an open-source library for mathematical programming
|
||
|
||
* `Aseprite <https://github.com/aseprite/aseprite>`_:
|
||
animated sprite editor & pixel art tool
|
||
|
||
* `AvioBook <https://www.aviobook.aero/en>`_: a comprehensive aircraft
|
||
operations suite
|
||
|
||
* `Blizzard Battle.net <https://battle.net/>`_: an online gaming platform
|
||
|
||
* `Celestia <https://celestia.space/>`_: real-time 3D visualization of space
|
||
|
||
* `Ceph <https://ceph.com/>`_: a scalable distributed storage system
|
||
|
||
* `ccache <https://ccache.dev/>`_: a compiler cache
|
||
|
||
* `ClickHouse <https://github.com/ClickHouse/ClickHouse>`_: an analytical database
|
||
management system
|
||
|
||
* `Contour <https://github.com/contour-terminal/contour/>`_: a modern terminal emulator
|
||
|
||
* `CUAUV <https://cuauv.org/>`_: Cornell University's autonomous underwater
|
||
vehicle
|
||
|
||
* `Drake <https://drake.mit.edu/>`_: a planning, control, and analysis toolbox
|
||
for nonlinear dynamical systems (MIT)
|
||
|
||
* `Envoy <https://lyft.github.io/envoy/>`_: C++ L7 proxy and communication bus
|
||
(Lyft)
|
||
|
||
* `FiveM <https://fivem.net/>`_: a modification framework for GTA V
|
||
|
||
* `fmtlog <https://github.com/MengRao/fmtlog>`_: a performant fmtlib-style
|
||
logging library with latency in nanoseconds
|
||
|
||
* `Folly <https://github.com/facebook/folly>`_: Facebook open-source library
|
||
|
||
* `GemRB <https://gemrb.org/>`_: a portable open-source implementation of
|
||
Bioware’s Infinity Engine
|
||
|
||
* `Grand Mountain Adventure
|
||
<https://store.steampowered.com/app/1247360/Grand_Mountain_Adventure/>`_:
|
||
a beautiful open-world ski & snowboarding game
|
||
|
||
* `HarpyWar/pvpgn <https://github.com/pvpgn/pvpgn-server>`_:
|
||
Player vs Player Gaming Network with tweaks
|
||
|
||
* `KBEngine <https://github.com/kbengine/kbengine>`_: an open-source MMOG server
|
||
engine
|
||
|
||
* `Keypirinha <https://keypirinha.com/>`_: a semantic launcher for Windows
|
||
|
||
* `Kodi <https://kodi.tv/>`_ (formerly xbmc): home theater software
|
||
|
||
* `Knuth <https://kth.cash/>`_: high-performance Bitcoin full-node
|
||
|
||
* `libunicode <https://github.com/contour-terminal/libunicode/>`_: a modern C++17 Unicode library
|
||
|
||
* `MariaDB <https://mariadb.org/>`_: relational database management system
|
||
|
||
* `Microsoft Verona <https://github.com/microsoft/verona>`_:
|
||
research programming language for concurrent ownership
|
||
|
||
* `MongoDB <https://mongodb.com/>`_: distributed document database
|
||
|
||
* `MongoDB Smasher <https://github.com/duckie/mongo_smasher>`_: a small tool to
|
||
generate randomized datasets
|
||
|
||
* `OpenSpace <https://openspaceproject.com/>`_: an open-source
|
||
astrovisualization framework
|
||
|
||
* `PenUltima Online (POL) <https://www.polserver.com/>`_:
|
||
an MMO server, compatible with most Ultima Online clients
|
||
|
||
* `PyTorch <https://github.com/pytorch/pytorch>`_: an open-source machine
|
||
learning library
|
||
|
||
* `quasardb <https://www.quasardb.net/>`_: a distributed, high-performance,
|
||
associative database
|
||
|
||
* `Quill <https://github.com/odygrd/quill>`_: asynchronous low-latency logging library
|
||
|
||
* `QKW <https://github.com/ravijanjam/qkw>`_: generalizing aliasing to simplify
|
||
navigation, and executing complex multi-line terminal command sequences
|
||
|
||
* `redis-cerberus <https://github.com/HunanTV/redis-cerberus>`_: a Redis cluster
|
||
proxy
|
||
|
||
* `redpanda <https://vectorized.io/redpanda>`_: a 10x faster Kafka® replacement
|
||
for mission-critical systems written in C++
|
||
|
||
* `rpclib <http://rpclib.net/>`_: a modern C++ msgpack-RPC server and client
|
||
library
|
||
|
||
* `Salesforce Analytics Cloud
|
||
<https://www.salesforce.com/analytics-cloud/overview/>`_:
|
||
business intelligence software
|
||
|
||
* `Scylla <https://www.scylladb.com/>`_: a Cassandra-compatible NoSQL data store
|
||
that can handle 1 million transactions per second on a single server
|
||
|
||
* `Seastar <http://www.seastar-project.org/>`_: an advanced, open-source C++
|
||
framework for high-performance server applications on modern hardware
|
||
|
||
* `spdlog <https://github.com/gabime/spdlog>`_: super fast C++ logging library
|
||
|
||
* `Stellar <https://www.stellar.org/>`_: financial platform
|
||
|
||
* `Touch Surgery <https://www.touchsurgery.com/>`_: surgery simulator
|
||
|
||
* `TrinityCore <https://github.com/TrinityCore/TrinityCore>`_: open-source
|
||
MMORPG framework
|
||
|
||
* `🐙 userver framework <https://userver.tech/>`_: open-source asynchronous
|
||
framework with a rich set of abstractions and database drivers
|
||
|
||
* `Windows Terminal <https://github.com/microsoft/terminal>`_: the new Windows
|
||
terminal
|
||
|
||
`More... <https://github.com/search?q=fmtlib&type=Code>`_
|
||
|
||
If you are aware of other projects using this library, please let me know
|
||
by `email <mailto:victor.zverovich@gmail.com>`_ or by submitting an
|
||
`issue <https://github.com/fmtlib/fmt/issues>`_.
|
||
|
||
Motivation
|
||
----------
|
||
|
||
So why yet another formatting library?
|
||
|
||
There are plenty of methods for doing this task, from standard ones like
|
||
the printf family of function and iostreams to Boost Format and FastFormat
|
||
libraries. The reason for creating a new library is that every existing
|
||
solution that I found either had serious issues or didn't provide
|
||
all the features I needed.
|
||
|
||
printf
|
||
~~~~~~
|
||
|
||
The good thing about ``printf`` is that it is pretty fast and readily available
|
||
being a part of the C standard library. The main drawback is that it
|
||
doesn't support user-defined types. ``printf`` also has safety issues although
|
||
they are somewhat mitigated with `__attribute__ ((format (printf, ...))
|
||
<https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_ in GCC.
|
||
There is a POSIX extension that adds positional arguments required for
|
||
`i18n <https://en.wikipedia.org/wiki/Internationalization_and_localization>`_
|
||
to ``printf`` but it is not a part of C99 and may not be available on some
|
||
platforms.
|
||
|
||
iostreams
|
||
~~~~~~~~~
|
||
|
||
The main issue with iostreams is best illustrated with an example:
|
||
|
||
.. code:: c++
|
||
|
||
std::cout << std::setprecision(2) << std::fixed << 1.23456 << "\n";
|
||
|
||
which is a lot of typing compared to printf:
|
||
|
||
.. code:: c++
|
||
|
||
printf("%.2f\n", 1.23456);
|
||
|
||
Matthew Wilson, the author of FastFormat, called this "chevron hell". iostreams
|
||
don't support positional arguments by design.
|
||
|
||
The good part is that iostreams support user-defined types and are safe although
|
||
error handling is awkward.
|
||
|
||
Boost Format
|
||
~~~~~~~~~~~~
|
||
|
||
This is a very powerful library that supports both ``printf``-like format
|
||
strings and positional arguments. Its main drawback is performance. According to
|
||
various benchmarks, it is much slower than other methods considered here. Boost
|
||
Format also has excessive build times and severe code bloat issues (see
|
||
`Benchmarks`_).
|
||
|
||
FastFormat
|
||
~~~~~~~~~~
|
||
|
||
This is an interesting library that is fast, safe, and has positional arguments.
|
||
However, it has significant limitations, citing its author:
|
||
|
||
Three features that have no hope of being accommodated within the
|
||
current design are:
|
||
|
||
* Leading zeros (or any other non-space padding)
|
||
* Octal/hexadecimal encoding
|
||
* Runtime width/alignment specification
|
||
|
||
It is also quite big and has a heavy dependency, STLSoft, which might be too
|
||
restrictive for using it in some projects.
|
||
|
||
Boost Spirit.Karma
|
||
~~~~~~~~~~~~~~~~~~
|
||
|
||
This is not a formatting library but I decided to include it here for
|
||
completeness. As iostreams, it suffers from the problem of mixing verbatim text
|
||
with arguments. The library is pretty fast, but slower on integer formatting
|
||
than ``fmt::format_to`` with format string compilation on Karma's own benchmark,
|
||
see `Converting a hundred million integers to strings per second
|
||
<http://www.zverovich.net/2020/06/13/fast-int-to-string-revisited.html>`_.
|
||
|
||
License
|
||
-------
|
||
|
||
{fmt} is distributed under the MIT `license
|
||
<https://github.com/fmtlib/fmt/blob/master/LICENSE.rst>`_.
|
||
|
||
Documentation License
|
||
---------------------
|
||
|
||
The `Format String Syntax <https://fmt.dev/latest/syntax.html>`_
|
||
section in the documentation is based on the one from Python `string module
|
||
documentation <https://docs.python.org/3/library/string.html#module-string>`_.
|
||
For this reason, the documentation is distributed under the Python Software
|
||
Foundation license available in `doc/python-license.txt
|
||
<https://raw.github.com/fmtlib/fmt/master/doc/python-license.txt>`_.
|
||
It only applies if you distribute the documentation of {fmt}.
|
||
|
||
Maintainers
|
||
-----------
|
||
|
||
The {fmt} library is maintained by Victor Zverovich (`vitaut
|
||
<https://github.com/vitaut>`_) with contributions from many other people.
|
||
See `Contributors <https://github.com/fmtlib/fmt/graphs/contributors>`_ and
|
||
`Releases <https://github.com/fmtlib/fmt/releases>`_ for some of the names.
|
||
Let us know if your contribution is not listed or mentioned incorrectly and
|
||
we'll make it right.
|