Index: src/libcfa/iostream
===================================================================
--- src/libcfa/iostream	(revision 2781e65c359cf1977f2538da573898134135ea2b)
+++ src/libcfa/iostream	(revision c443d1d3435a17963bd6f81fa826d1d31a83512a)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Feb 24 21:09:09 2017
-// Update Count     : 94
+// Last Modified On : Mon Mar  6 17:48:01 2017
+// Update Count     : 97
 //
 
@@ -68,6 +68,9 @@
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const void * );
 
+// tuples
+forall( dtype ostype, otype T, ttype Params | ostream( ostype ) | writeable( T ) | { ostype * ?|?( ostype *, Params ); } ) ostype * ?|?( ostype * os, T arg, Params rest );
+
+// manipulators
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, ostype * (*)( ostype * ) );
-// manipulators
 forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype * );
 forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * );
Index: src/libcfa/iostream.c
===================================================================
--- src/libcfa/iostream.c	(revision 2781e65c359cf1977f2538da573898134135ea2b)
+++ src/libcfa/iostream.c	(revision c443d1d3435a17963bd6f81fa826d1d31a83512a)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Feb 24 21:09:59 2017
-// Update Count     : 307
+// Last Modified On : Mon Mar  6 17:48:05 2017
+// Update Count     : 312
 //
 
@@ -155,13 +155,13 @@
 	enum { Open = 1, Close, OpenClose };
 	static const unsigned char mask[256] = {
-		// opening delimiters
+		// opening delimiters, no space after
 		['('] : Open, ['['] : Open, ['{'] : Open,
-		['$'] : Open, [(unsigned char)'£'] : Open, [(unsigned char)'¥'] : Open,
+		['$'] : Open, ['='] : Open, [(unsigned char)'£'] : Open, [(unsigned char)'¥'] : Open,
 		[(unsigned char)'¡'] : Open, [(unsigned char)'¿'] : Open, [(unsigned char)'«'] : Open,
-		// closing delimiters
+		// closing delimiters, no space before
 		[','] : Close, ['.'] : Close, [':'] : Close, [';'] : Close, ['!'] : Close, ['?'] : Close,
 		[')'] : Close, [']'] : Close, ['}'] : Close,
 		['%'] : Close, [(unsigned char)'¢'] : Close, [(unsigned char)'»'] : Close,
-		// opening-closing delimiters
+		// opening-closing delimiters, no space before or after
 		['\''] : OpenClose, ['`'] : OpenClose, ['"'] : OpenClose,
 		[' '] : OpenClose, ['\f'] : OpenClose, ['\n'] : OpenClose, ['\r'] : OpenClose, ['\t'] : OpenClose, ['\v'] : OpenClose, // isspace
@@ -198,4 +198,13 @@
 
 
+// tuples
+forall( dtype ostype, otype T, ttype Params | ostream( ostype ) | writeable( T ) | { ostype * ?|?( ostype *, Params ); } )
+ostype * ?|?( ostype * os, T arg, Params rest ) {
+	os | arg | ", ";
+	os | rest;
+} // ?|?
+
+
+// manipulators
 forall( dtype ostype | ostream( ostype ) )
 ostype * ?|?( ostype * os, ostype * (* manip)( ostype * ) ) {
