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 @@ + + + + +Text Formatting + + +

Text Formatting

+ +

+2016-08-19 +

+ +
+Victor Zverovich, victor.zverovich@gmail.com +
+ +

+Introduction
+Design
+    Format String Syntax
+    Locale Support
+Wording
+References
+

+ +

Introduction

+ +

+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)
+
+ +

Design

+ +

Format String Syntax

+ +

+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: +

+ + + +

+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 +

+ +

Locale Support

+ +

TODO

+ +

Wording

+ +

TODO

+ +

References

+ +

Implementation

+ +

+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.
+

+ +