@@ -25,12 +25,12 @@ discard block |
||
25 | 25 | |
26 | 26 | function GetInt4d($data, $pos) |
27 | 27 | { |
28 | - $value = ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | (ord($data[$pos+3]) << 24); |
|
29 | - if ($value>=4294967294) |
|
30 | - { |
|
31 | - $value=-2; |
|
32 | - } |
|
33 | - return $value; |
|
28 | + $value = ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | (ord($data[$pos+3]) << 24); |
|
29 | + if ($value>=4294967294) |
|
30 | + { |
|
31 | + $value=-2; |
|
32 | + } |
|
33 | + return $value; |
|
34 | 34 | } |
35 | 35 | |
36 | 36 | |
@@ -45,30 +45,30 @@ discard block |
||
45 | 45 | |
46 | 46 | function read($sFileName){ |
47 | 47 | |
48 | - // check if file exist and is readable (Darko Miljanovic) |
|
49 | - if(!is_readable($sFileName)) { |
|
50 | - $this->error = 1; |
|
51 | - return false; |
|
52 | - } |
|
48 | + // check if file exist and is readable (Darko Miljanovic) |
|
49 | + if(!is_readable($sFileName)) { |
|
50 | + $this->error = 1; |
|
51 | + return false; |
|
52 | + } |
|
53 | 53 | |
54 | - $this->data = @file_get_contents($sFileName); |
|
55 | - if (!$this->data) { |
|
56 | - $this->error = 1; |
|
57 | - return false; |
|
58 | - } |
|
59 | - //echo IDENTIFIER_OLE; |
|
60 | - //echo 'start'; |
|
61 | - if (substr($this->data, 0, 8) != IDENTIFIER_OLE) { |
|
62 | - $this->error = 1; |
|
63 | - return false; |
|
64 | - } |
|
54 | + $this->data = @file_get_contents($sFileName); |
|
55 | + if (!$this->data) { |
|
56 | + $this->error = 1; |
|
57 | + return false; |
|
58 | + } |
|
59 | + //echo IDENTIFIER_OLE; |
|
60 | + //echo 'start'; |
|
61 | + if (substr($this->data, 0, 8) != IDENTIFIER_OLE) { |
|
62 | + $this->error = 1; |
|
63 | + return false; |
|
64 | + } |
|
65 | 65 | $this->numBigBlockDepotBlocks = GetInt4d($this->data, NUM_BIG_BLOCK_DEPOT_BLOCKS_POS); |
66 | 66 | $this->sbdStartBlock = GetInt4d($this->data, SMALL_BLOCK_DEPOT_BLOCK_POS); |
67 | 67 | $this->rootStartBlock = GetInt4d($this->data, ROOT_START_BLOCK_POS); |
68 | 68 | $this->extensionBlock = GetInt4d($this->data, EXTENSION_BLOCK_POS); |
69 | 69 | $this->numExtensionBlocks = GetInt4d($this->data, NUM_EXTENSION_BLOCK_POS); |
70 | 70 | |
71 | - /* |
|
71 | + /* |
|
72 | 72 | echo $this->numBigBlockDepotBlocks." "; |
73 | 73 | echo $this->sbdStartBlock." "; |
74 | 74 | echo $this->rootStartBlock." "; |
@@ -78,16 +78,16 @@ discard block |
||
78 | 78 | //echo "sbdStartBlock = $this->sbdStartBlock\n"; |
79 | 79 | $bigBlockDepotBlocks = array(); |
80 | 80 | $pos = BIG_BLOCK_DEPOT_BLOCKS_POS; |
81 | - // echo "pos = $pos"; |
|
82 | - $bbdBlocks = $this->numBigBlockDepotBlocks; |
|
81 | + // echo "pos = $pos"; |
|
82 | + $bbdBlocks = $this->numBigBlockDepotBlocks; |
|
83 | 83 | |
84 | 84 | if ($this->numExtensionBlocks != 0) { |
85 | 85 | $bbdBlocks = (BIG_BLOCK_SIZE - BIG_BLOCK_DEPOT_BLOCKS_POS)/4; |
86 | 86 | } |
87 | 87 | |
88 | 88 | for ($i = 0; $i < $bbdBlocks; $i++) { |
89 | - $bigBlockDepotBlocks[$i] = GetInt4d($this->data, $pos); |
|
90 | - $pos += 4; |
|
89 | + $bigBlockDepotBlocks[$i] = GetInt4d($this->data, $pos); |
|
90 | + $pos += 4; |
|
91 | 91 | } |
92 | 92 | |
93 | 93 | |
@@ -106,7 +106,7 @@ discard block |
||
106 | 106 | } |
107 | 107 | } |
108 | 108 | |
109 | - // var_dump($bigBlockDepotBlocks); |
|
109 | + // var_dump($bigBlockDepotBlocks); |
|
110 | 110 | |
111 | 111 | // readBigBlockDepot |
112 | 112 | $pos = 0; |
@@ -123,26 +123,26 @@ discard block |
||
123 | 123 | } |
124 | 124 | } |
125 | 125 | |
126 | - //var_dump($this->bigBlockChain); |
|
126 | + //var_dump($this->bigBlockChain); |
|
127 | 127 | //echo '=====2'; |
128 | 128 | // readSmallBlockDepot(); |
129 | 129 | $pos = 0; |
130 | - $index = 0; |
|
131 | - $sbdBlock = $this->sbdStartBlock; |
|
132 | - $this->smallBlockChain = array(); |
|
130 | + $index = 0; |
|
131 | + $sbdBlock = $this->sbdStartBlock; |
|
132 | + $this->smallBlockChain = array(); |
|
133 | 133 | |
134 | - while ($sbdBlock != -2) { |
|
134 | + while ($sbdBlock != -2) { |
|
135 | 135 | |
136 | - $pos = ($sbdBlock + 1) * BIG_BLOCK_SIZE; |
|
136 | + $pos = ($sbdBlock + 1) * BIG_BLOCK_SIZE; |
|
137 | 137 | |
138 | - for ($j = 0; $j < BIG_BLOCK_SIZE / 4; $j++) { |
|
139 | - $this->smallBlockChain[$index] = GetInt4d($this->data, $pos); |
|
140 | - $pos += 4; |
|
141 | - $index++; |
|
142 | - } |
|
138 | + for ($j = 0; $j < BIG_BLOCK_SIZE / 4; $j++) { |
|
139 | + $this->smallBlockChain[$index] = GetInt4d($this->data, $pos); |
|
140 | + $pos += 4; |
|
141 | + $index++; |
|
142 | + } |
|
143 | 143 | |
144 | - $sbdBlock = $this->bigBlockChain[$sbdBlock]; |
|
145 | - } |
|
144 | + $sbdBlock = $this->bigBlockChain[$sbdBlock]; |
|
145 | + } |
|
146 | 146 | |
147 | 147 | |
148 | 148 | // readData(rootStartBlock) |
@@ -162,7 +162,7 @@ discard block |
||
162 | 162 | |
163 | 163 | } |
164 | 164 | |
165 | - function __readData($bl) { |
|
165 | + function __readData($bl) { |
|
166 | 166 | $block = $bl; |
167 | 167 | $pos = 0; |
168 | 168 | $data = ''; |
@@ -171,28 +171,28 @@ discard block |
||
171 | 171 | $pos = ($block + 1) * BIG_BLOCK_SIZE; |
172 | 172 | $data = $data.substr($this->data, $pos, BIG_BLOCK_SIZE); |
173 | 173 | //echo "pos = $pos data=$data\n"; |
174 | - $block = $this->bigBlockChain[$block]; |
|
174 | + $block = $this->bigBlockChain[$block]; |
|
175 | + } |
|
176 | + return $data; |
|
175 | 177 | } |
176 | - return $data; |
|
177 | - } |
|
178 | 178 | |
179 | 179 | function __readPropertySets(){ |
180 | 180 | $offset = 0; |
181 | 181 | //var_dump($this->entry); |
182 | 182 | while ($offset < strlen($this->entry)) { |
183 | - $d = substr($this->entry, $offset, PROPERTY_STORAGE_BLOCK_SIZE); |
|
183 | + $d = substr($this->entry, $offset, PROPERTY_STORAGE_BLOCK_SIZE); |
|
184 | 184 | |
185 | - $nameSize = ord($d[SIZE_OF_NAME_POS]) | (ord($d[SIZE_OF_NAME_POS+1]) << 8); |
|
185 | + $nameSize = ord($d[SIZE_OF_NAME_POS]) | (ord($d[SIZE_OF_NAME_POS+1]) << 8); |
|
186 | 186 | |
187 | - $type = ord($d[TYPE_POS]); |
|
188 | - //$maxBlock = strlen($d) / BIG_BLOCK_SIZE - 1; |
|
187 | + $type = ord($d[TYPE_POS]); |
|
188 | + //$maxBlock = strlen($d) / BIG_BLOCK_SIZE - 1; |
|
189 | 189 | |
190 | - $startBlock = GetInt4d($d, START_BLOCK_POS); |
|
191 | - $size = GetInt4d($d, SIZE_POS); |
|
190 | + $startBlock = GetInt4d($d, START_BLOCK_POS); |
|
191 | + $size = GetInt4d($d, SIZE_POS); |
|
192 | 192 | |
193 | 193 | $name = ''; |
194 | 194 | for ($i = 0; $i < $nameSize ; $i++) { |
195 | - $name .= $d[$i]; |
|
195 | + $name .= $d[$i]; |
|
196 | 196 | } |
197 | 197 | |
198 | 198 | $name = str_replace("\x00", "", $name); |
@@ -221,50 +221,50 @@ discard block |
||
221 | 221 | |
222 | 222 | |
223 | 223 | function getWorkBook(){ |
224 | - if ($this->props[$this->wrkbook]['size'] < SMALL_BLOCK_THRESHOLD){ |
|
224 | + if ($this->props[$this->wrkbook]['size'] < SMALL_BLOCK_THRESHOLD){ |
|
225 | 225 | // getSmallBlockStream(PropertyStorage ps) |
226 | 226 | |
227 | - $rootdata = $this->__readData($this->props[$this->rootentry]['startBlock']); |
|
227 | + $rootdata = $this->__readData($this->props[$this->rootentry]['startBlock']); |
|
228 | 228 | |
229 | - $streamData = ''; |
|
230 | - $block = $this->props[$this->wrkbook]['startBlock']; |
|
231 | - //$count = 0; |
|
232 | - $pos = 0; |
|
233 | - while ($block != -2) { |
|
234 | - $pos = $block * SMALL_BLOCK_SIZE; |
|
235 | - $streamData .= substr($rootdata, $pos, SMALL_BLOCK_SIZE); |
|
229 | + $streamData = ''; |
|
230 | + $block = $this->props[$this->wrkbook]['startBlock']; |
|
231 | + //$count = 0; |
|
232 | + $pos = 0; |
|
233 | + while ($block != -2) { |
|
234 | + $pos = $block * SMALL_BLOCK_SIZE; |
|
235 | + $streamData .= substr($rootdata, $pos, SMALL_BLOCK_SIZE); |
|
236 | 236 | |
237 | - $block = $this->smallBlockChain[$block]; |
|
238 | - } |
|
237 | + $block = $this->smallBlockChain[$block]; |
|
238 | + } |
|
239 | 239 | |
240 | - return $streamData; |
|
240 | + return $streamData; |
|
241 | 241 | |
242 | 242 | |
243 | - }else{ |
|
243 | + }else{ |
|
244 | 244 | |
245 | - $numBlocks = $this->props[$this->wrkbook]['size'] / BIG_BLOCK_SIZE; |
|
246 | - if ($this->props[$this->wrkbook]['size'] % BIG_BLOCK_SIZE != 0) { |
|
247 | - $numBlocks++; |
|
248 | - } |
|
245 | + $numBlocks = $this->props[$this->wrkbook]['size'] / BIG_BLOCK_SIZE; |
|
246 | + if ($this->props[$this->wrkbook]['size'] % BIG_BLOCK_SIZE != 0) { |
|
247 | + $numBlocks++; |
|
248 | + } |
|
249 | 249 | |
250 | - if ($numBlocks == 0) return ''; |
|
250 | + if ($numBlocks == 0) return ''; |
|
251 | 251 | |
252 | - //echo "numBlocks = $numBlocks\n"; |
|
253 | - //byte[] streamData = new byte[numBlocks * BIG_BLOCK_SIZE]; |
|
254 | - //print_r($this->wrkbook); |
|
255 | - $streamData = ''; |
|
256 | - $block = $this->props[$this->wrkbook]['startBlock']; |
|
257 | - //$count = 0; |
|
258 | - $pos = 0; |
|
259 | - //echo "block = $block"; |
|
260 | - while ($block != -2) { |
|
261 | - $pos = ($block + 1) * BIG_BLOCK_SIZE; |
|
262 | - $streamData .= substr($this->data, $pos, BIG_BLOCK_SIZE); |
|
263 | - $block = $this->bigBlockChain[$block]; |
|
264 | - } |
|
265 | - //echo 'stream'.$streamData; |
|
266 | - return $streamData; |
|
267 | - } |
|
252 | + //echo "numBlocks = $numBlocks\n"; |
|
253 | + //byte[] streamData = new byte[numBlocks * BIG_BLOCK_SIZE]; |
|
254 | + //print_r($this->wrkbook); |
|
255 | + $streamData = ''; |
|
256 | + $block = $this->props[$this->wrkbook]['startBlock']; |
|
257 | + //$count = 0; |
|
258 | + $pos = 0; |
|
259 | + //echo "block = $block"; |
|
260 | + while ($block != -2) { |
|
261 | + $pos = ($block + 1) * BIG_BLOCK_SIZE; |
|
262 | + $streamData .= substr($this->data, $pos, BIG_BLOCK_SIZE); |
|
263 | + $block = $this->bigBlockChain[$block]; |
|
264 | + } |
|
265 | + //echo 'stream'.$streamData; |
|
266 | + return $streamData; |
|
267 | + } |
|
268 | 268 | } |
269 | 269 | |
270 | 270 | } |
@@ -464,10 +464,10 @@ discard block |
||
464 | 464 | case SPREADSHEET_EXCEL_READER_TYPE_SST: |
465 | 465 | //echo "Type_SST\n"; |
466 | 466 | $spos = $pos + 4; |
467 | - $limitpos = $spos + $length; |
|
468 | - $uniqueStrings = $this->_GetInt4d($this->data, $spos+4); |
|
467 | + $limitpos = $spos + $length; |
|
468 | + $uniqueStrings = $this->_GetInt4d($this->data, $spos+4); |
|
469 | 469 | $spos += 8; |
470 | - for ($i = 0; $i < $uniqueStrings; $i++) { |
|
470 | + for ($i = 0; $i < $uniqueStrings; $i++) { |
|
471 | 471 | // Read in the number of characters |
472 | 472 | if ($spos == $limitpos) { |
473 | 473 | $opcode = ord($this->data[$spos]) | ord($this->data[$spos+1])<<8; |
@@ -496,9 +496,9 @@ discard block |
||
496 | 496 | } |
497 | 497 | |
498 | 498 | if ($extendedString) { |
499 | - // Read in cchExtRst |
|
500 | - $extendedRunLength = $this->_GetInt4d($this->data, $spos); |
|
501 | - $spos += 4; |
|
499 | + // Read in cchExtRst |
|
500 | + $extendedRunLength = $this->_GetInt4d($this->data, $spos); |
|
501 | + $spos += 4; |
|
502 | 502 | } |
503 | 503 | |
504 | 504 | $len = ($asciiEncoding)? $numChars : $numChars*2; |
@@ -512,7 +512,7 @@ discard block |
||
512 | 512 | $charsLeft = $numChars - (($asciiEncoding) ? $bytesRead : ($bytesRead / 2)); |
513 | 513 | $spos = $limitpos; |
514 | 514 | |
515 | - while ($charsLeft > 0){ |
|
515 | + while ($charsLeft > 0){ |
|
516 | 516 | $opcode = ord($this->data[$spos]) | ord($this->data[$spos+1])<<8; |
517 | 517 | $conlength = ord($this->data[$spos+2]) | ord($this->data[$spos+3])<<8; |
518 | 518 | if ($opcode != 0x3c) { |
@@ -522,29 +522,29 @@ discard block |
||
522 | 522 | $limitpos = $spos + $conlength; |
523 | 523 | $option = ord($this->data[$spos]); |
524 | 524 | $spos += 1; |
525 | - if ($asciiEncoding && ($option == 0)) { |
|
525 | + if ($asciiEncoding && ($option == 0)) { |
|
526 | 526 | $len = min($charsLeft, $limitpos - $spos); // min($charsLeft, $conlength); |
527 | 527 | $retstr .= substr($this->data, $spos, $len); |
528 | 528 | $charsLeft -= $len; |
529 | 529 | $asciiEncoding = true; |
530 | - }elseif (!$asciiEncoding && ($option != 0)){ |
|
530 | + }elseif (!$asciiEncoding && ($option != 0)){ |
|
531 | 531 | $len = min($charsLeft * 2, $limitpos - $spos); // min($charsLeft, $conlength); |
532 | 532 | $retstr .= substr($this->data, $spos, $len); |
533 | 533 | $charsLeft -= $len/2; |
534 | 534 | $asciiEncoding = false; |
535 | - }elseif (!$asciiEncoding && ($option == 0)) { |
|
535 | + }elseif (!$asciiEncoding && ($option == 0)) { |
|
536 | 536 | // Bummer - the string starts off as Unicode, but after the |
537 | 537 | // continuation it is in straightforward ASCII encoding |
538 | 538 | $len = min($charsLeft, $limitpos - $spos); // min($charsLeft, $conlength); |
539 | 539 | for ($j = 0; $j < $len; $j++) { |
540 | - $retstr .= $this->data[$spos + $j].chr(0); |
|
540 | + $retstr .= $this->data[$spos + $j].chr(0); |
|
541 | 541 | } |
542 | 542 | $charsLeft -= $len; |
543 | 543 | $asciiEncoding = false; |
544 | - }else{ |
|
544 | + }else{ |
|
545 | 545 | $newstr = ''; |
546 | 546 | for ($j = 0; $j < strlen($retstr); $j++) { |
547 | - $newstr = $retstr[$j].chr(0); |
|
547 | + $newstr = $retstr[$j].chr(0); |
|
548 | 548 | } |
549 | 549 | $retstr = $newstr; |
550 | 550 | $len = min($charsLeft * 2, $limitpos - $spos); // min($charsLeft, $conlength); |
@@ -552,28 +552,28 @@ discard block |
||
552 | 552 | $charsLeft -= $len/2; |
553 | 553 | $asciiEncoding = false; |
554 | 554 | //echo "Izavrat\n"; |
555 | - } |
|
556 | - $spos += $len; |
|
555 | + } |
|
556 | + $spos += $len; |
|
557 | 557 | |
558 | - } |
|
558 | + } |
|
559 | 559 | } |
560 | 560 | //We check the string before send it check the _encodeUTF16 |
561 | 561 | //$retstr = ($asciiEncoding) ? $retstr : $this->_encodeUTF16($retstr); |
562 | 562 | $retstr = ($asciiEncoding) ? $this->_encodeUTF16($retstr, true) : $this->_encodeUTF16($retstr); |
563 | 563 | // echo "Str $i = $retstr\n"; |
564 | 564 | if ($richString){ |
565 | - $spos += 4 * $formattingRuns; |
|
565 | + $spos += 4 * $formattingRuns; |
|
566 | 566 | } |
567 | 567 | |
568 | 568 | // For extended strings, skip over the extended string data |
569 | 569 | if ($extendedString) { |
570 | - $spos += $extendedRunLength; |
|
570 | + $spos += $extendedRunLength; |
|
571 | 571 | } |
572 | 572 | //if ($retstr == 'Derby'){ |
573 | 573 | // echo "bb\n"; |
574 | 574 | //} |
575 | 575 | $this->sst[]=$retstr; |
576 | - } |
|
576 | + } |
|
577 | 577 | /*$continueRecords = array(); |
578 | 578 | while ($this->getNextCode() == Type_CONTINUE) { |
579 | 579 | $continueRecords[] = &$this->nextRecord(); |
@@ -582,7 +582,7 @@ discard block |
||
582 | 582 | $this->shareStrings = new SSTRecord($r, $continueRecords); |
583 | 583 | //print_r($this->shareStrings->strings); |
584 | 584 | */ |
585 | - // echo 'SST read: '.($time_end-$time_start)."\n"; |
|
585 | + // echo 'SST read: '.($time_end-$time_start)."\n"; |
|
586 | 586 | break; |
587 | 587 | |
588 | 588 | case SPREADSHEET_EXCEL_READER_TYPE_FILEPASS: |
@@ -607,7 +607,7 @@ discard block |
||
607 | 607 | } |
608 | 608 | |
609 | 609 | $this->formatRecords[$indexCode] = $formatString; |
610 | - // echo "Type.FORMAT\n"; |
|
610 | + // echo "Type.FORMAT\n"; |
|
611 | 611 | break; |
612 | 612 | case SPREADSHEET_EXCEL_READER_TYPE_XF: |
613 | 613 | //global $dateFormats, $numberFormats; |
@@ -678,7 +678,7 @@ discard block |
||
678 | 678 | $rec_name = substr($this->data, $pos+11, $rec_length); |
679 | 679 | } |
680 | 680 | $this->boundsheets[] = array('name'=>$rec_name, |
681 | - 'offset'=>$rec_offset); |
|
681 | + 'offset'=>$rec_offset); |
|
682 | 682 | |
683 | 683 | break; |
684 | 684 | |
@@ -820,14 +820,14 @@ discard block |
||
820 | 820 | } |
821 | 821 | $string = sprintf($this->curformat, $numValue * $this->multiplier); |
822 | 822 | } |
823 | - //$rec['rknumbers'][$i]['xfindex'] = ord($rec['data'][$pos]) | ord($rec['data'][$pos+1]) << 8; |
|
824 | - $tmppos += 6; |
|
825 | - $this->addcell($row, $colFirst + $i, $string, $raw); |
|
826 | - //echo "MULRK $row ".($colFirst + $i)." $string\n"; |
|
823 | + //$rec['rknumbers'][$i]['xfindex'] = ord($rec['data'][$pos]) | ord($rec['data'][$pos+1]) << 8; |
|
824 | + $tmppos += 6; |
|
825 | + $this->addcell($row, $colFirst + $i, $string, $raw); |
|
826 | + //echo "MULRK $row ".($colFirst + $i)." $string\n"; |
|
827 | 827 | } |
828 | - //MulRKRecord($r); |
|
828 | + //MulRKRecord($r); |
|
829 | 829 | // Get the individual cell records from the multiple record |
830 | - //$num = ; |
|
830 | + //$num = ; |
|
831 | 831 | |
832 | 832 | break; |
833 | 833 | case SPREADSHEET_EXCEL_READER_TYPE_NUMBER: |
@@ -836,7 +836,7 @@ discard block |
||
836 | 836 | $tmp = unpack("ddouble", substr($this->data, $spos + 6, 8)); // It machine machine dependent |
837 | 837 | if ($this->isDate($spos)) { |
838 | 838 | list($string, $raw) = $this->createDate($tmp['double']); |
839 | - // $this->addcell(DateRecord($r, 1)); |
|
839 | + // $this->addcell(DateRecord($r, 1)); |
|
840 | 840 | }else{ |
841 | 841 | //$raw = $tmp['']; |
842 | 842 | if (isset($this->_columnsFormat[$column + 1])){ |
@@ -845,7 +845,7 @@ discard block |
||
845 | 845 | $raw = $this->createNumber($spos); |
846 | 846 | $string = sprintf($this->curformat, $raw * $this->multiplier); |
847 | 847 | |
848 | - // $this->addcell(NumberRecord($r)); |
|
848 | + // $this->addcell(NumberRecord($r)); |
|
849 | 849 | } |
850 | 850 | $this->addcell($row, $column, $string, $raw); |
851 | 851 | //echo "Number $row $column $string\n"; |
@@ -868,7 +868,7 @@ discard block |
||
868 | 868 | $tmp = unpack("ddouble", substr($this->data, $spos + 6, 8)); // It machine machine dependent |
869 | 869 | if ($this->isDate($spos)) { |
870 | 870 | list($string, $raw) = $this->createDate($tmp['double']); |
871 | - // $this->addcell(DateRecord($r, 1)); |
|
871 | + // $this->addcell(DateRecord($r, 1)); |
|
872 | 872 | }else{ |
873 | 873 | //$raw = $tmp['']; |
874 | 874 | if (isset($this->_columnsFormat[$column + 1])){ |
@@ -877,7 +877,7 @@ discard block |
||
877 | 877 | $raw = $this->createNumber($spos); |
878 | 878 | $string = sprintf($this->curformat, $raw * $this->multiplier); |
879 | 879 | |
880 | - // $this->addcell(NumberRecord($r)); |
|
880 | + // $this->addcell(NumberRecord($r)); |
|
881 | 881 | } |
882 | 882 | $this->addcell($row, $column, $string, $raw); |
883 | 883 | //echo "Number $row $column $string\n"; |
@@ -899,7 +899,7 @@ discard block |
||
899 | 899 | $column = ord($this->data[$spos+2]) | ord($this->data[$spos+3])<<8; |
900 | 900 | $this->addcell($row, $column, substr($this->data, $spos + 8, ord($this->data[$spos + 6]) | ord($this->data[$spos + 7])<<8)); |
901 | 901 | |
902 | - // $this->addcell(LabelRecord($r)); |
|
902 | + // $this->addcell(LabelRecord($r)); |
|
903 | 903 | break; |
904 | 904 | |
905 | 905 | case SPREADSHEET_EXCEL_READER_TYPE_EOF: |
@@ -914,9 +914,9 @@ discard block |
||
914 | 914 | } |
915 | 915 | |
916 | 916 | if (!isset($this->sheets[$this->sn]['numRows'])) |
917 | - $this->sheets[$this->sn]['numRows'] = $this->sheets[$this->sn]['maxrow']; |
|
917 | + $this->sheets[$this->sn]['numRows'] = $this->sheets[$this->sn]['maxrow']; |
|
918 | 918 | if (!isset($this->sheets[$this->sn]['numCols'])) |
919 | - $this->sheets[$this->sn]['numCols'] = $this->sheets[$this->sn]['maxcol']; |
|
919 | + $this->sheets[$this->sn]['numCols'] = $this->sheets[$this->sn]['maxcol']; |
|
920 | 920 | |
921 | 921 | } |
922 | 922 | |
@@ -1033,7 +1033,7 @@ discard block |
||
1033 | 1033 | // The RK format calls for using only the most significant 30 bits of the |
1034 | 1034 | // 64 bit floating point value. The other 34 bits are assumed to be 0 |
1035 | 1035 | // So, we use the upper 30 bits of $rknum as follows... |
1036 | - $sign = ($rknum & 0x80000000) >> 31; |
|
1036 | + $sign = ($rknum & 0x80000000) >> 31; |
|
1037 | 1037 | $exp = ($rknum & 0x7ff00000) >> 20; |
1038 | 1038 | $mantissa = (0x100000 | ($rknum & 0x000ffffc)); |
1039 | 1039 | $value = $mantissa / pow( 2 , (20- ($exp - 1023))); |
@@ -141,7 +141,7 @@ |
||
141 | 141 | if (is_array($attributes)) { |
142 | 142 | $charset = HTML_Common::charset(); |
143 | 143 | foreach ($attributes as $key => $value) { |
144 | - // Modified by Ivan Tcholakov, 16-MAR-2010 |
|
144 | + // Modified by Ivan Tcholakov, 16-MAR-2010 |
|
145 | 145 | $value = @htmlspecialchars($value, ENT_COMPAT, $charset); |
146 | 146 | $strAttr .= ' ' . $key . '= "' . $value. '"'; |
147 | 147 | } |
@@ -71,13 +71,13 @@ |
||
71 | 71 | // }}} |
72 | 72 | // {{{ accept() |
73 | 73 | |
74 | - /** |
|
75 | - * Accepts a renderer |
|
76 | - * |
|
77 | - * @param HTML_QuickForm_Renderer renderer object |
|
78 | - * @access public |
|
79 | - * @return void |
|
80 | - */ |
|
74 | + /** |
|
75 | + * Accepts a renderer |
|
76 | + * |
|
77 | + * @param HTML_QuickForm_Renderer renderer object |
|
78 | + * @access public |
|
79 | + * @return void |
|
80 | + */ |
|
81 | 81 | //function accept(&$renderer) |
82 | 82 | function accept(&$renderer, $required=false, $error=null) |
83 | 83 | { |
@@ -259,13 +259,13 @@ discard block |
||
259 | 259 | // }}} |
260 | 260 | // {{{ unfreeze() |
261 | 261 | |
262 | - /** |
|
263 | - * Unfreezes the element so that it becomes editable |
|
264 | - * |
|
265 | - * @access public |
|
266 | - * @return void |
|
267 | - * @since 3.2.4 |
|
268 | - */ |
|
262 | + /** |
|
263 | + * Unfreezes the element so that it becomes editable |
|
264 | + * |
|
265 | + * @access public |
|
266 | + * @return void |
|
267 | + * @since 3.2.4 |
|
268 | + */ |
|
269 | 269 | function unfreeze() |
270 | 270 | { |
271 | 271 | $this->_flagFrozen = false; |
@@ -289,7 +289,7 @@ discard block |
||
289 | 289 | // $this->_getPersistantData(); |
290 | 290 | |
291 | 291 | $value = ('' != $value ? @htmlspecialchars($value, ENT_COMPAT, HTML_Common::charset()): ' ') . |
292 | - $this->_getPersistantData(); |
|
292 | + $this->_getPersistantData(); |
|
293 | 293 | return '<span class="freeze">'.$value.'</span>'; |
294 | 294 | // |
295 | 295 | } //end func getFrozenHtml |
@@ -297,12 +297,12 @@ discard block |
||
297 | 297 | // }}} |
298 | 298 | // {{{ _getPersistantData() |
299 | 299 | |
300 | - /** |
|
301 | - * Used by getFrozenHtml() to pass the element's value if _persistantFreeze is on |
|
302 | - * |
|
303 | - * @access private |
|
304 | - * @return string |
|
305 | - */ |
|
300 | + /** |
|
301 | + * Used by getFrozenHtml() to pass the element's value if _persistantFreeze is on |
|
302 | + * |
|
303 | + * @access private |
|
304 | + * @return string |
|
305 | + */ |
|
306 | 306 | function _getPersistantData() |
307 | 307 | { |
308 | 308 | if (!$this->_persistantFreeze) { |
@@ -310,10 +310,10 @@ discard block |
||
310 | 310 | } else { |
311 | 311 | $id = $this->getAttribute('id'); |
312 | 312 | return '<input' . $this->_getAttrString(array( |
313 | - 'type' => 'hidden', |
|
314 | - 'name' => $this->getName(), |
|
315 | - 'value' => $this->getValue() |
|
316 | - ) + (isset($id)? array('id' => $id): array())) . ' />'; |
|
313 | + 'type' => 'hidden', |
|
314 | + 'name' => $this->getName(), |
|
315 | + 'value' => $this->getValue() |
|
316 | + ) + (isset($id)? array('id' => $id): array())) . ' />'; |
|
317 | 317 | } |
318 | 318 | } |
319 | 319 | |
@@ -415,9 +415,9 @@ discard block |
||
415 | 415 | return $values[$elementName]; |
416 | 416 | } elseif (strpos($elementName, '[')) { |
417 | 417 | $myVar = "['" . str_replace( |
418 | - array('\\', '\'', ']', '['), array('\\\\', '\\\'', '', "']['"), |
|
419 | - $elementName |
|
420 | - ) . "']"; |
|
418 | + array('\\', '\'', ']', '['), array('\\\\', '\\\'', '', "']['"), |
|
419 | + $elementName |
|
420 | + ) . "']"; |
|
421 | 421 | return eval("return (isset(\$values$myVar)) ? \$values$myVar : null;"); |
422 | 422 | } else { |
423 | 423 | return null; |
@@ -471,29 +471,29 @@ discard block |
||
471 | 471 | return true; |
472 | 472 | } |
473 | 473 | |
474 | - /** |
|
475 | - * Accepts a renderer |
|
476 | - * |
|
477 | - * @param HTML_QuickForm_Renderer renderer object |
|
478 | - * @param bool Whether an element is required |
|
479 | - * @param string An error message associated with an element |
|
480 | - * @access public |
|
481 | - * @return void |
|
482 | - */ |
|
474 | + /** |
|
475 | + * Accepts a renderer |
|
476 | + * |
|
477 | + * @param HTML_QuickForm_Renderer renderer object |
|
478 | + * @param bool Whether an element is required |
|
479 | + * @param string An error message associated with an element |
|
480 | + * @access public |
|
481 | + * @return void |
|
482 | + */ |
|
483 | 483 | function accept(&$renderer, $required=false, $error=null) |
484 | 484 | { |
485 | 485 | $renderer->renderElement($this, $required, $error); |
486 | 486 | } |
487 | 487 | |
488 | - /** |
|
489 | - * Automatically generates and assigns an 'id' attribute for the element. |
|
490 | - * |
|
491 | - * Currently used to ensure that labels work on radio buttons and |
|
492 | - * checkboxes. Per idea of Alexander Radivanovich. |
|
493 | - * |
|
494 | - * @access private |
|
495 | - * @return void |
|
496 | - */ |
|
488 | + /** |
|
489 | + * Automatically generates and assigns an 'id' attribute for the element. |
|
490 | + * |
|
491 | + * Currently used to ensure that labels work on radio buttons and |
|
492 | + * checkboxes. Per idea of Alexander Radivanovich. |
|
493 | + * |
|
494 | + * @access private |
|
495 | + * @return void |
|
496 | + */ |
|
497 | 497 | function _generateId() |
498 | 498 | { |
499 | 499 | static $idx = 1; |
@@ -503,14 +503,14 @@ discard block |
||
503 | 503 | } |
504 | 504 | } |
505 | 505 | |
506 | - /** |
|
507 | - * Returns a 'safe' element's value |
|
508 | - * |
|
509 | - * @param array array of submitted values to search |
|
510 | - * @param bool whether to return the value as associative array |
|
511 | - * @access public |
|
512 | - * @return mixed |
|
513 | - */ |
|
506 | + /** |
|
507 | + * Returns a 'safe' element's value |
|
508 | + * |
|
509 | + * @param array array of submitted values to search |
|
510 | + * @param bool whether to return the value as associative array |
|
511 | + * @access public |
|
512 | + * @return mixed |
|
513 | + */ |
|
514 | 514 | function exportValue(&$submitValues, $assoc = false) |
515 | 515 | { |
516 | 516 | $value = $this->_findValue($submitValues); |
@@ -523,14 +523,14 @@ discard block |
||
523 | 523 | // }}} |
524 | 524 | // {{{ _prepareValue() |
525 | 525 | |
526 | - /** |
|
527 | - * Used by exportValue() to prepare the value for returning |
|
528 | - * |
|
529 | - * @param mixed the value found in exportValue() |
|
530 | - * @param bool whether to return the value as associative array |
|
531 | - * @access private |
|
532 | - * @return mixed |
|
533 | - */ |
|
526 | + /** |
|
527 | + * Used by exportValue() to prepare the value for returning |
|
528 | + * |
|
529 | + * @param mixed the value found in exportValue() |
|
530 | + * @param bool whether to return the value as associative array |
|
531 | + * @access private |
|
532 | + * @return mixed |
|
533 | + */ |
|
534 | 534 | function _prepareValue($value, $assoc) |
535 | 535 | { |
536 | 536 | if (null === $value) { |
@@ -434,8 +434,8 @@ discard block |
||
434 | 434 | $jsParts[] = $this->_convertArrayToJavascript($this->_options[$i]); |
435 | 435 | } |
436 | 436 | $this->_js .= "\n_hs_options['" . $this->_escapeString($this->getName()) . "'] = [\n" . |
437 | - implode(",\n", $jsParts) . |
|
438 | - "\n];\n"; |
|
437 | + implode(",\n", $jsParts) . |
|
438 | + "\n];\n"; |
|
439 | 439 | // default value; if we don't actually have any values yet just use |
440 | 440 | // the first option (for single selects) or empty array (for multiple) |
441 | 441 | $values = array(); |
@@ -450,7 +450,7 @@ discard block |
||
450 | 450 | } |
451 | 451 | } |
452 | 452 | $this->_js .= "_hs_defaults['" . $this->_escapeString($this->getName()) . "'] = " . |
453 | - $this->_convertArrayToJavascript($values, false) . ";\n"; |
|
453 | + $this->_convertArrayToJavascript($values, false) . ";\n"; |
|
454 | 454 | } |
455 | 455 | include_once('HTML/QuickForm/Renderer/Default.php'); |
456 | 456 | $renderer =& new HTML_QuickForm_Renderer_Default(); |
@@ -464,7 +464,7 @@ discard block |
||
464 | 464 | } |
465 | 465 | } |
466 | 466 | return (empty($this->_js)? '': "<script type=\"text/javascript\">\n//<![CDATA[\n" . $this->_js . "//]]>\n</script>") . |
467 | - $renderer->toHtml(); |
|
467 | + $renderer->toHtml(); |
|
468 | 468 | } // end func toHtml |
469 | 469 | |
470 | 470 | // }}} |
@@ -506,14 +506,14 @@ discard block |
||
506 | 506 | // }}} |
507 | 507 | // {{{ _convertArrayToJavascript() |
508 | 508 | |
509 | - /** |
|
510 | - * Converts PHP array to its Javascript analog |
|
511 | - * |
|
512 | - * @access private |
|
513 | - * @param array PHP array to convert |
|
514 | - * @param bool Generate Javascript object literal (default, works like PHP's associative array) or array literal |
|
515 | - * @return string Javascript representation of the value |
|
516 | - */ |
|
509 | + /** |
|
510 | + * Converts PHP array to its Javascript analog |
|
511 | + * |
|
512 | + * @access private |
|
513 | + * @param array PHP array to convert |
|
514 | + * @param bool Generate Javascript object literal (default, works like PHP's associative array) or array literal |
|
515 | + * @return string Javascript representation of the value |
|
516 | + */ |
|
517 | 517 | function _convertArrayToJavascript($array, $assoc = true) |
518 | 518 | { |
519 | 519 | if (!is_array($array)) { |
@@ -537,13 +537,13 @@ discard block |
||
537 | 537 | // }}} |
538 | 538 | // {{{ _convertScalarToJavascript() |
539 | 539 | |
540 | - /** |
|
541 | - * Converts PHP's scalar value to its Javascript analog |
|
542 | - * |
|
543 | - * @access private |
|
544 | - * @param mixed PHP value to convert |
|
545 | - * @return string Javascript representation of the value |
|
546 | - */ |
|
540 | + /** |
|
541 | + * Converts PHP's scalar value to its Javascript analog |
|
542 | + * |
|
543 | + * @access private |
|
544 | + * @param mixed PHP value to convert |
|
545 | + * @return string Javascript representation of the value |
|
546 | + */ |
|
547 | 547 | function _convertScalarToJavascript($val) |
548 | 548 | { |
549 | 549 | if (is_bool($val)) { |
@@ -563,13 +563,13 @@ discard block |
||
563 | 563 | // }}} |
564 | 564 | // {{{ _escapeString() |
565 | 565 | |
566 | - /** |
|
567 | - * Quotes the string so that it can be used in Javascript string constants |
|
568 | - * |
|
569 | - * @access private |
|
570 | - * @param string |
|
571 | - * @return string |
|
572 | - */ |
|
566 | + /** |
|
567 | + * Quotes the string so that it can be used in Javascript string constants |
|
568 | + * |
|
569 | + * @access private |
|
570 | + * @param string |
|
571 | + * @return string |
|
572 | + */ |
|
573 | 573 | function _escapeString($str) |
574 | 574 | { |
575 | 575 | return strtr($str,array( |
@@ -68,12 +68,12 @@ discard block |
||
68 | 68 | */ |
69 | 69 | private $_required = array(); |
70 | 70 | |
71 | - /** |
|
72 | - * Whether to change elements' names to $groupName[$elementName] or leave them as is |
|
73 | - * @var bool |
|
74 | - * @since 3.0 |
|
75 | - * @access private |
|
76 | - */ |
|
71 | + /** |
|
72 | + * Whether to change elements' names to $groupName[$elementName] or leave them as is |
|
73 | + * @var bool |
|
74 | + * @since 3.0 |
|
75 | + * @access private |
|
76 | + */ |
|
77 | 77 | private $_appendName = true; |
78 | 78 | |
79 | 79 | /** |
@@ -378,15 +378,15 @@ discard block |
||
378 | 378 | return true; |
379 | 379 | } |
380 | 380 | |
381 | - /** |
|
382 | - * Accepts a renderer |
|
383 | - * |
|
384 | - * @param HTML_QuickForm_Renderer renderer object |
|
385 | - * @param bool Whether a group is required |
|
386 | - * @param string An error message associated with a group |
|
387 | - * @access public |
|
388 | - * @return void |
|
389 | - */ |
|
381 | + /** |
|
382 | + * Accepts a renderer |
|
383 | + * |
|
384 | + * @param HTML_QuickForm_Renderer renderer object |
|
385 | + * @param bool Whether a group is required |
|
386 | + * @param string An error message associated with a group |
|
387 | + * @access public |
|
388 | + * @return void |
|
389 | + */ |
|
390 | 390 | function accept(&$renderer, $required = false, $error = null) |
391 | 391 | { |
392 | 392 | $this->_createElementsIfNotExist(); |
@@ -416,10 +416,10 @@ discard block |
||
416 | 416 | $renderer->finishGroup($this); |
417 | 417 | } |
418 | 418 | |
419 | - /** |
|
420 | - * As usual, to get the group's value we access its elements and call |
|
421 | - * their exportValue() methods |
|
422 | - */ |
|
419 | + /** |
|
420 | + * As usual, to get the group's value we access its elements and call |
|
421 | + * their exportValue() methods |
|
422 | + */ |
|
423 | 423 | function exportValue(&$submitValues, $assoc = false) |
424 | 424 | { |
425 | 425 | $value = null; |
@@ -462,31 +462,31 @@ discard block |
||
462 | 462 | return $value; |
463 | 463 | } |
464 | 464 | |
465 | - /** |
|
466 | - * Creates the group's elements. |
|
467 | - * |
|
468 | - * This should be overriden by child classes that need to create their |
|
469 | - * elements. The method will be called automatically when needed, calling |
|
470 | - * it from the constructor is discouraged as the constructor is usually |
|
471 | - * called _twice_ on element creation, first time with _no_ parameters. |
|
472 | - * |
|
473 | - * @access private |
|
474 | - * @abstract |
|
475 | - */ |
|
465 | + /** |
|
466 | + * Creates the group's elements. |
|
467 | + * |
|
468 | + * This should be overriden by child classes that need to create their |
|
469 | + * elements. The method will be called automatically when needed, calling |
|
470 | + * it from the constructor is discouraged as the constructor is usually |
|
471 | + * called _twice_ on element creation, first time with _no_ parameters. |
|
472 | + * |
|
473 | + * @access private |
|
474 | + * @abstract |
|
475 | + */ |
|
476 | 476 | function _createElements() |
477 | 477 | { |
478 | 478 | // abstract |
479 | 479 | } |
480 | 480 | |
481 | - /** |
|
482 | - * A wrapper around _createElements() |
|
483 | - * |
|
484 | - * This method calls _createElements() if the group's _elements array |
|
485 | - * is empty. It also performs some updates, e.g. freezes the created |
|
486 | - * elements if the group is already frozen. |
|
487 | - * |
|
488 | - * @access private |
|
489 | - */ |
|
481 | + /** |
|
482 | + * A wrapper around _createElements() |
|
483 | + * |
|
484 | + * This method calls _createElements() if the group's _elements array |
|
485 | + * is empty. It also performs some updates, e.g. freezes the created |
|
486 | + * elements if the group is already frozen. |
|
487 | + * |
|
488 | + * @access private |
|
489 | + */ |
|
490 | 490 | function _createElementsIfNotExist() |
491 | 491 | { |
492 | 492 | if (empty($this->_elements)) { |
@@ -31,13 +31,13 @@ discard block |
||
31 | 31 | */ |
32 | 32 | class HTML_QuickForm_Action_Jump extends HTML_QuickForm_Action |
33 | 33 | { |
34 | - /** |
|
35 | - * Splits (part of) the URI into path and query components |
|
36 | - * |
|
37 | - * @param string String of the form 'foo?bar' |
|
38 | - * @return array Array of the form array('foo', '?bar) |
|
39 | - * @access private |
|
40 | - */ |
|
34 | + /** |
|
35 | + * Splits (part of) the URI into path and query components |
|
36 | + * |
|
37 | + * @param string String of the form 'foo?bar' |
|
38 | + * @return array Array of the form array('foo', '?bar) |
|
39 | + * @access private |
|
40 | + */ |
|
41 | 41 | function _splitUri($uri) |
42 | 42 | { |
43 | 43 | if (false === ($qm = strpos($uri, '?'))) { |
@@ -47,13 +47,13 @@ discard block |
||
47 | 47 | } |
48 | 48 | } |
49 | 49 | |
50 | - /** |
|
51 | - * Removes the '..' and '.' segments from the path component |
|
52 | - * |
|
53 | - * @param string Path component of the URL, possibly with '.' and '..' segments |
|
54 | - * @return string Path component of the URL with '.' and '..' segments removed |
|
55 | - * @access private |
|
56 | - */ |
|
50 | + /** |
|
51 | + * Removes the '..' and '.' segments from the path component |
|
52 | + * |
|
53 | + * @param string Path component of the URL, possibly with '.' and '..' segments |
|
54 | + * @return string Path component of the URL with '.' and '..' segments removed |
|
55 | + * @access private |
|
56 | + */ |
|
57 | 57 | function _normalizePath($path) |
58 | 58 | { |
59 | 59 | $pathAry = explode('/', $path); |
@@ -84,17 +84,17 @@ discard block |
||
84 | 84 | return implode('/', $pathAry); |
85 | 85 | } |
86 | 86 | |
87 | - /** |
|
88 | - * Resolves relative URL using current page's URL as base |
|
89 | - * |
|
90 | - * The method follows procedure described in section 4 of RFC 1808 and |
|
91 | - * passes the examples provided in section 5 of said RFC. Values from |
|
92 | - * $_SERVER array are used for calculation of "current URL" |
|
93 | - * |
|
94 | - * @param string Relative URL, probably from form's action attribute |
|
95 | - * @return string Absolute URL |
|
96 | - * @access private |
|
97 | - */ |
|
87 | + /** |
|
88 | + * Resolves relative URL using current page's URL as base |
|
89 | + * |
|
90 | + * The method follows procedure described in section 4 of RFC 1808 and |
|
91 | + * passes the examples provided in section 5 of said RFC. Values from |
|
92 | + * $_SERVER array are used for calculation of "current URL" |
|
93 | + * |
|
94 | + * @param string Relative URL, probably from form's action attribute |
|
95 | + * @return string Absolute URL |
|
96 | + * @access private |
|
97 | + */ |
|
98 | 98 | function _resolveRelativeURL($url) |
99 | 99 | { |
100 | 100 | $https = !empty($_SERVER['HTTPS']) && ('off' != strtolower($_SERVER['HTTPS'])); |
@@ -104,7 +104,7 @@ discard block |
||
104 | 104 | |
105 | 105 | } else { |
106 | 106 | $host = $scheme . '//' . $_SERVER['SERVER_NAME'] . |
107 | - (($https && 443 == $_SERVER['SERVER_PORT'] || |
|
107 | + (($https && 443 == $_SERVER['SERVER_PORT'] || |
|
108 | 108 | !$https && 80 == $_SERVER['SERVER_PORT'])? '': ':' . $_SERVER['SERVER_PORT']); |
109 | 109 | if ('' == $url) { |
110 | 110 | return $host . $_SERVER['REQUEST_URI']; |
@@ -148,8 +148,8 @@ discard block |
||
148 | 148 | $action = $this->_resolveRelativeURL($action); |
149 | 149 | } |
150 | 150 | $url = $action . (false === strpos($action, '?')? '?': '&') . |
151 | - $current->getButtonName('display') . '=true' . |
|
152 | - ((!defined('SID') || '' == SID || ini_get('session.use_only_cookies'))? '': '&' . SID); |
|
151 | + $current->getButtonName('display') . '=true' . |
|
152 | + ((!defined('SID') || '' == SID || ini_get('session.use_only_cookies'))? '': '&' . SID); |
|
153 | 153 | header('Location: ' . $url); |
154 | 154 | exit; |
155 | 155 | } |
@@ -73,15 +73,15 @@ |
||
73 | 73 | } |
74 | 74 | |
75 | 75 | |
76 | - /** |
|
77 | - * Actually outputs the form. |
|
78 | - * |
|
79 | - * If you want to customize the form's appearance (you most certainly will), |
|
80 | - * then you should override this method. There is no need to override perform() |
|
81 | - * |
|
82 | - * @access private |
|
83 | - * @param HTML_QuickForm_Page the page being processed |
|
84 | - */ |
|
76 | + /** |
|
77 | + * Actually outputs the form. |
|
78 | + * |
|
79 | + * If you want to customize the form's appearance (you most certainly will), |
|
80 | + * then you should override this method. There is no need to override perform() |
|
81 | + * |
|
82 | + * @access private |
|
83 | + * @param HTML_QuickForm_Page the page being processed |
|
84 | + */ |
|
85 | 85 | function _renderForm(&$page) |
86 | 86 | { |
87 | 87 | $page->display(); |