Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:24921 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 90940 invoked by uid 1010); 24 Jul 2006 08:32:59 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 90925 invoked from network); 24 Jul 2006 08:32:59 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 24 Jul 2006 08:32:59 -0000 X-PHP-List-Original-Sender: php_lists@realplain.com X-Host-Fingerprint: 209.142.136.132 msa2-mx.centurytel.net Linux 2.4/2.6 Received: from ([209.142.136.132:59220] helo=msa2-mx.centurytel.net) by pb1.pair.com (ecelerity 2.1.1.3 r(11751M)) with ESMTP id 03/77-04178-80184C44 for ; Mon, 24 Jul 2006 04:12:57 -0400 Received: from pc1 (dsl-193-1.jax.centurytel.net [69.179.193.1]) by msa2-mx.centurytel.net (8.13.6/8.13.6) with SMTP id k6O8Crkd006725; Mon, 24 Jul 2006 03:12:53 -0500 Message-ID: <00d001c6aef8$f68dac00$0201a8c0@pc1> To: , "Gwynne" References: <018101c6abf6$ee273810$0201a8c0@pc1> <105846538.20060720212112@marcus-boerger.de> <532686B2-88F2-4FCE-BAE1-31AE208FFE12@skytag.com> <00a301c6ae3b$d23e2770$0201a8c0@pc1> Date: Mon, 24 Jul 2006 03:12:53 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2800.1807 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1807 Subject: Re: [PHP-DEV] [v][sf]printf additions (#, E, g, G) From: php_lists@realplain.com ("Matt W") Hi Gwynne, ----- Original Message ----- From: "Gwynne" Sent: Sunday, July 23, 2006 > On Jul 23, 2006, at 5:38 AM, Matt W wrote: > >> While we're on the subject, one of my favorite personal patches to > >> PHP is one that adds the %n specifier. The parameter to %n is a > >> reference which recieves the total length of the string with all > >> replacements so far. %n itself is replaced by nothing at all. You > >> could do this with $n = strlen( $s = sprintf( blah blah blah ) ) + > >> strlen( $s .= sprintf( the rest of the blah ) );, but it's a very > >> nice shortcut if you need the replaced length in the middle of the > >> conversion or for a situation like this (and the above doesn't work > >> too well if you have positional params!): > >> > >> printf( "Some processing message with %s replacements...%n", > >> 'some', & > >> $n ); > >> // do some stuff here > >> print str_repeat( ' ', $n ) . "\rSome status text here that doesn't > >> worry about whether the replaced text was longer."; > >> > >> Here's the printf(3) manpage description for %n (MacOS X system, BSD > >> manpage): > >> > >> n The number of characters written so far is stored into > >> the inte- > >> ger indicated by the int * (or variant) pointer > >> argument. No > >> argument is converted. > >> > >> Any chance of getting this into PHP? I can provide a patch. > > I had thought about adding %n too, but didn't know what the > > reaction would > > be or if it'd be used. (And the length thing would have to be changed > > [later] for Unicode length or such, I assume?) Also, wasn't sure > > about the > > internals code for the reference and writing to it, etc. :-) > > I'm completely unversed in the current Unicode stuff; I can only > provide a patch against 5.2. Someone who knows the Unicode crud would > have to update it for HEAD, and given the recent loud argument about > HEAD vs branch commits, I don't know how well a 5.2-only patch would > go over. Any advice on that point? The formatted_print.c code is currently the same for both versions, so I'd submit the patch for both. Not to dump the work on someone else then, but I'm pretty sure the existing code will need updating for Unicode, and I think updating the %n length stuff would be a fairly simple thing overall. :-) Matt