Skip to content

Commit 9a42a99

Browse files
committed
refine regex and extend test
refine regex and extend test remove test of negative value for %u adjust test for %u fix %s -> %u
1 parent 63b9cad commit 9a42a99

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

_test/types/DecimalTest.php

+20-3
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public function test_validate_success($value, $min, $max, $decpoint = '.')
102102
public function valueProvider()
103103
{
104104
return [
105-
// $value, $expect, $roundto, $decpoint, $thousands, $trimzeros, $prefix='', $postfix='', $engineering = false
105+
// $value, $expect, $roundto, $decpoint, $thousands, $trimzeros, $prefix='', $postfix='', $engineering = false, $format = ''
106106
['5000', '5 000,00', '2', ',', ' ', false],
107107
['5000', '5 000', '2', ',', ' ', true],
108108
['5000', '5 000', '0', ',', ' ', false],
@@ -149,6 +149,21 @@ public function valueProvider()
149149
['1e15', '1000' . "\xE2\x80\xAF" . 'T', '-1', ',', ' ', true, '', '', true],
150150
['1e-21', '0.001' . "\xE2\x80\xAF" . 'a', '-1', ',', ' ', true, '', '', true],
151151

152+
// test format string
153+
// invalid or empty format (ignored)
154+
['5000', '5 000', '-1', '.', ' ', true, '', '', false, ''],
155+
['5000', '5 000.00', '2', '.', ' ', false, '', '', false, '%s'],
156+
['5000', '5 000.00', '2', '.', ' ', false, '', '', false, '%1$d'],
157+
['5000', '5 000.00', '2', '.', ' ', false, '', '', false, '%04d%02d%02d'],
158+
// valid format
159+
['1.7', '1.70', '-1', '.', ' ', true, '', '', false, '%01.2f'],
160+
['1.7', '1.70' , '-1', '.', ' ', true, '', '', false, '%01.2F'],
161+
['1.7', '0001' , '-1', '.', ' ', true, '', '', false, "%'.04d"],
162+
['15', '1111' , '-1', '.', ' ', true, '', '', false, '%04b'],
163+
['362525200', '3.625e+8' , '-1', '.', ' ', true, '', '', false, '%.3e'],
164+
['362525200', '3.625E+8' , '-1', '.', ' ', true, '', '', false, '%.3E'],
165+
['1.7', '1' , '2', '.', ' ', false, '', '', false, '%u'],
166+
152167
];
153168
}
154169

@@ -158,7 +173,8 @@ public function valueProvider()
158173
public function test_renderValue(
159174
$value, $expect, $roundto, $decpoint,
160175
$thousands, $trimzeros,
161-
$prefix = '', $postfix = '', $engineering = false
176+
$prefix = '', $postfix = '', $engineering = false,
177+
$format = ''
162178
)
163179
{
164180
$decimal = new Decimal([
@@ -168,7 +184,8 @@ public function test_renderValue(
168184
'trimzeros' => $trimzeros,
169185
'prefix' => $prefix,
170186
'postfix' => $postfix,
171-
'engineering' => $engineering
187+
'engineering' => $engineering,
188+
'format' => $format
172189
]);
173190
$R = new \Doku_Renderer_xhtml();
174191
$R->doc = '';

types/Decimal.php

+5
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class Decimal extends AbstractMultiBaseType
2525
'prefix' => '',
2626
'postfix' => '',
2727
'engineering' => false,
28+
'format' => '',
2829
];
2930

3031
/**
@@ -37,6 +38,10 @@ class Decimal extends AbstractMultiBaseType
3738
*/
3839
public function renderValue($value, \Doku_Renderer $R, $mode)
3940
{
41+
if (preg_match("/^%(?:['+\-:.]?\D?\d*\.?\d*)?[bdeEfFu]$/", $this->config['format'])) {
42+
$R->cdata($this->config['prefix'] . sprintf($this->config['format'], $value) . $this->config['postfix']);
43+
return true;
44+
}
4045

4146
if ($this->config['engineering']) {
4247
$unitsh = ['', 'k', 'M', 'G', 'T'];

0 commit comments

Comments
 (0)