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?

-- Gwynne, Daughter of the Code
"This whole world is an asylum for the incurable."

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to