diff --git a/doc/Text Formatting.html b/doc/Text Formatting.html new file mode 100644 index 00000000..e066313e --- /dev/null +++ b/doc/Text Formatting.html @@ -0,0 +1,136 @@ + + +
+ ++2016-08-19 +
+ + +Victor Zverovich, victor.zverovich@gmail.com + + +
+Introduction
+Design
+ Format String Syntax
+ Locale Support
+Wording
+References
+
+This paper proposes a new text formatting functionality that can be used as a
+safe and extensible alternative to the printf
family of functions.
+It is intended to complement the existing C++ I/O streams library and reuse
+some of its infrastructure such as overloaded insertion operators for
+user-defined types.
+
+Example: + +
+std::string message = std::format("The answer is {}.", 42)
+
+
+
+Variations of the printf format string syntax are arguably the most popular
+among the programming languages and C++ itself inherits printf
+from C [1]. The advantage of the printf syntax is that many
+programmers are familiar with it. However, in its current form it has a number
+of issues:
+
hh
, h
, l
,
+ j
, etc. are used only to convey type information.
+ They are redundant in type-safe formatting and would unnecessarily
+ complicate specification and parsing.'%'
in a custom format specifier, e.g. for
+ put_time
-like time formatting, poses difficulties.+Although it is possible to address these issues, this will break compatibility +and can potentially be more confusing to users than introducing a different +syntax. +
+ + +Therefore we propose a new syntax based on the ones used in Python +[3], the .NET family of languages [4], +and Rust [5]. This syntax uses'{'
and
+'}'
as replacement field delimiters instead of '%'
+and it is described in details in TODO:link. Here are some of the advantages:
+
+
++The syntax is expressive enough to enable translation, possibly automated, +of most printf format strings. TODO: table of correspondence between +printf and the new syntax +
+ +TODO
+ +TODO
+ ++The ideas proposed in this paper have been implemented in the open-source fmt +library. TODO: link +
+ +
+[1]
+The fprintf
function. ISO/IEC 9899:2011. 7.21.6.1.
+[2]
+
+fprintf, printf, snprintf, sprintf - print formatted output. The Open
+Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition.
+[3]
+
+6.1.3. Format String Syntax. Python 3.5.2 documentation.
+[4]
+
+String.Format Method. .NET Framework Class Library.
+[5]
+
+Module std::fmt
. The Rust Standard Library.
+