|
Main sidebar
|
PITS /
00357Summary: Formating of
[-...-] doesn't work if locales are set to "de_DE" via i18nCreated: 2005-03-05 05:48
Status: Closed - fixed for 2.0.beta29
Category: Bug
From: Christian Schneider <mail(at)chrschn.de>
Assigned:
Priority: 2
Version: pmwiki-2.0.beta21 with german i18n
OS: Apache 1.3.26 (Unix) Debian GNU/Linux,PHP Version 4.1.2
Description:
The markup I have trackt this down to an issue of the numeric locales. Obviously the function to calculate the font size (stdmarkup.php:119) no longer can handle the '.' as decimal separator and thus only works with integer values. This could also be problem for other markups, I did not check this. This issue can be resolved by changing the numeric locale back to 'en_US' in pmwiki.php. I changed pmwiki.php:474 from: if ($xl['Locale']) setlocale(LC_ALL,$xl['Locale']); To: if ($xl['Locale']) {
setlocale(LC_ALL,$xl['Locale']);
setlocale(LC_NUMERIC,'en_US');
}
This is probably not the real intention of a complete i18n, so there might be other resultions. But at least it works for now. Christian Very odd. It seems to work on pmwiki.org, even with the german i18n enabled. See Test.TestDe. The stdmarkup.php file explicitly recognizes the problem of decimal points in other locales by always rounding the output to an integer value. So there must be something else going on here. It's equally bizarre that you were able to "fix" it by using setlocale above. Here's the code: ## big, small Markup('[+','inline', '/\\[(([-+])+)(.*?)\\1\\]/e', "'<span style=\'font-size:'.(round(pow(1.2,$2strlen('$1'))*100,0)).'%\'>'. PSS('$3</span>')"); This says we're converting any text surrounded by either [+...+] or [-...-] to have a <span style='font-size:...'> tag around it. The value of font-size is computed as a percentage value with: round(pow(1.2,$2strlen('$1'))*100,0)
Here, $1 is the sequence of +'s or -'s. $2 is a single + or -. Thus, for round(pow(1.2,-strlen('-'))*100,0)
which becomes round(pow(1.2, -1 )*100,0) which no matter how I look at it appears to me to be a straightforward numeric calculation -- i.e., no conversions between strings and numbers that would involve decimal points or any sort of locale information. The result of this would be round(0.833333333333 * 100,0) or round(83.33333333333,0) resulting in a value of 83 which should then be converted to a string. In fact, the only way we can end up with 100 is if the result of pow(1.2, -1) is somehow coming out as 1. Can it be that PHP is incorrectly treating 1.2 as "1" simply because it's a string argument to preg_replace? Totally bizarre. I suspect a PHP bug here, but I need to see it failing somewhere before I can easily fix it. In the meantime, could you try changing stdmarkup.php:119 to use "6/5" instead of "1.2" and see if that resolves the problem? --Pm First of all, sorry for my late response. I had analyzed the calculations of the I assume the PHP problem comes from the the PHP command being a string which is executed later. But it's strange that the test at pmwiki.org works. Which version of PHP is pmwiki.org running? The PHP-version of my server is already listed at the top of this site. Nevertheless I have tried your fix with "6/5" instead of "1.2" and it works fine! I have reverted my changes in Thanks for the help! --Christian I'm going to guess that it's indeed a bug in PHP 4.1.2. pmwiki.org is currently using 4.3.2. At any rate, I've changed the code for beta29 to use 6/5 instead of 1.2, since that seems to work. --Pm |