Overview

Packages

  • JAMA
  • None
  • PHP
  • PHPExcel
    • CachedObjectStorage
    • Calculation
    • Cell
    • Chart
      • Renderer
    • Reader
      • Excel2007
      • Excel5
    • RichText
    • Settings
    • Shared
      • Escher
      • OLE
      • Trend
      • ZipArchive
    • Style
    • Worksheet
      • Drawing
    • Writer
      • 2007
      • CSV
      • Excel2007
      • Excel5
      • HTML
      • PDF

Classes

  • CholeskyDecomposition
  • Dao
  • DateTime
  • DateTimeZone
  • DOMNode
  • EigenvalueDecomposition
  • Elemento
  • Historial
  • Irradiacion
  • Latitud
  • MotorPhp
  • Panel
  • PclZip
  • Periodo
  • PHPExcel
  • PHPExcel_Autoloader
  • PHPExcel_Best_Fit
  • PHPExcel_CachedObjectStorage_APC
  • PHPExcel_CachedObjectStorage_CacheBase
  • PHPExcel_CachedObjectStorage_DiscISAM
  • PHPExcel_CachedObjectStorage_Igbinary
  • PHPExcel_CachedObjectStorage_Memcache
  • PHPExcel_CachedObjectStorage_Memory
  • PHPExcel_CachedObjectStorage_MemoryGZip
  • PHPExcel_CachedObjectStorage_MemorySerialized
  • PHPExcel_CachedObjectStorage_PHPTemp
  • PHPExcel_CachedObjectStorage_SQLite
  • PHPExcel_CachedObjectStorage_SQLite3
  • PHPExcel_CachedObjectStorage_Wincache
  • PHPExcel_CachedObjectStorageFactory
  • PHPExcel_CalcEngine_CyclicReferenceStack
  • PHPExcel_CalcEngine_Logger
  • PHPExcel_Calculation
  • PHPExcel_Calculation_Database
  • PHPExcel_Calculation_DateTime
  • PHPExcel_Calculation_Engineering
  • PHPExcel_Calculation_ExceptionHandler
  • PHPExcel_Calculation_Financial
  • PHPExcel_Calculation_FormulaParser
  • PHPExcel_Calculation_FormulaToken
  • PHPExcel_Calculation_Function
  • PHPExcel_Calculation_Functions
  • PHPExcel_Calculation_Logical
  • PHPExcel_Calculation_LookupRef
  • PHPExcel_Calculation_MathTrig
  • PHPExcel_Calculation_Statistical
  • PHPExcel_Calculation_TextData
  • PHPExcel_Calculation_Token_Stack
  • PHPExcel_Cell
  • PHPExcel_Cell_AdvancedValueBinder
  • PHPExcel_Cell_DataType
  • PHPExcel_Cell_DataValidation
  • PHPExcel_Cell_DefaultValueBinder
  • PHPExcel_Cell_Hyperlink
  • PHPExcel_Chart
  • PHPExcel_Chart_DataSeries
  • PHPExcel_Chart_DataSeriesValues
  • PHPExcel_Chart_Layout
  • PHPExcel_Chart_Legend
  • PHPExcel_Chart_PlotArea
  • PHPExcel_Chart_Renderer_jpgraph
  • PHPExcel_Chart_Title
  • PHPExcel_Comment
  • PHPExcel_DocumentProperties
  • PHPExcel_DocumentSecurity
  • PHPExcel_Exponential_Best_Fit
  • PHPExcel_HashTable
  • PHPExcel_IOFactory
  • PHPExcel_Linear_Best_Fit
  • PHPExcel_Logarithmic_Best_Fit
  • PHPExcel_NamedRange
  • PHPExcel_Polynomial_Best_Fit
  • PHPExcel_Power_Best_Fit
  • PHPExcel_Reader_Abstract
  • PHPExcel_Reader_CSV
  • PHPExcel_Reader_DefaultReadFilter
  • PHPExcel_Reader_Excel2003XML
  • PHPExcel_Reader_Excel2007
  • PHPExcel_Reader_Excel2007_Chart
  • PHPExcel_Reader_Excel2007_Theme
  • PHPExcel_Reader_Excel5
  • PHPExcel_Reader_Excel5_Escher
  • PHPExcel_Reader_Excel5_MD5
  • PHPExcel_Reader_Excel5_RC4
  • PHPExcel_Reader_Gnumeric
  • PHPExcel_Reader_HTML
  • PHPExcel_Reader_OOCalc
  • PHPExcel_Reader_SYLK
  • PHPExcel_ReferenceHelper
  • PHPExcel_RichText
  • PHPExcel_RichText_Run
  • PHPExcel_RichText_TextElement
  • PHPExcel_Settings
  • PHPExcel_Shared_CodePage
  • PHPExcel_Shared_Date
  • PHPExcel_Shared_Drawing
  • PHPExcel_Shared_Escher
  • PHPExcel_Shared_Escher_DgContainer
  • PHPExcel_Shared_Escher_DgContainer_SpgrContainer
  • PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
  • PHPExcel_Shared_Escher_DggContainer
  • PHPExcel_Shared_Escher_DggContainer_BstoreContainer
  • PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE
  • PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip
  • PHPExcel_Shared_Excel5
  • PHPExcel_Shared_File
  • PHPExcel_Shared_Font
  • PHPExcel_Shared_JAMA_LUDecomposition
  • PHPExcel_Shared_JAMA_Matrix
  • PHPExcel_Shared_JAMA_QRDecomposition
  • PHPExcel_Shared_OLE
  • PHPExcel_Shared_OLE_ChainedBlockStream
  • PHPExcel_Shared_OLE_PPS
  • PHPExcel_Shared_OLE_PPS_File
  • PHPExcel_Shared_OLE_PPS_Root
  • PHPExcel_Shared_OLERead
  • PHPExcel_Shared_PasswordHasher
  • PHPExcel_Shared_String
  • PHPExcel_Shared_TimeZone
  • PHPExcel_Shared_XMLWriter
  • PHPExcel_Shared_ZipArchive
  • PHPExcel_Shared_ZipStreamWrapper
  • PHPExcel_Style
  • PHPExcel_Style_Alignment
  • PHPExcel_Style_Border
  • PHPExcel_Style_Borders
  • PHPExcel_Style_Color
  • PHPExcel_Style_Conditional
  • PHPExcel_Style_Fill
  • PHPExcel_Style_Font
  • PHPExcel_Style_NumberFormat
  • PHPExcel_Style_Protection
  • PHPExcel_Style_Supervisor
  • PHPExcel_Worksheet
  • PHPExcel_Worksheet_AutoFilter
  • PHPExcel_Worksheet_AutoFilter_Column
  • PHPExcel_Worksheet_AutoFilter_Column_Rule
  • PHPExcel_Worksheet_BaseDrawing
  • PHPExcel_Worksheet_CellIterator
  • PHPExcel_Worksheet_ColumnDimension
  • PHPExcel_Worksheet_Drawing
  • PHPExcel_Worksheet_Drawing_Shadow
  • PHPExcel_Worksheet_HeaderFooter
  • PHPExcel_Worksheet_HeaderFooterDrawing
  • PHPExcel_Worksheet_MemoryDrawing
  • PHPExcel_Worksheet_PageMargins
  • PHPExcel_Worksheet_PageSetup
  • PHPExcel_Worksheet_Protection
  • PHPExcel_Worksheet_Row
  • PHPExcel_Worksheet_RowDimension
  • PHPExcel_Worksheet_RowIterator
  • PHPExcel_Worksheet_SheetView
  • PHPExcel_WorksheetIterator
  • PHPExcel_Writer_Abstract
  • PHPExcel_Writer_CSV
  • PHPExcel_Writer_Excel2007
  • PHPExcel_Writer_Excel2007_Chart
  • PHPExcel_Writer_Excel2007_Comments
  • PHPExcel_Writer_Excel2007_ContentTypes
  • PHPExcel_Writer_Excel2007_DocProps
  • PHPExcel_Writer_Excel2007_Drawing
  • PHPExcel_Writer_Excel2007_Rels
  • PHPExcel_Writer_Excel2007_RelsRibbon
  • PHPExcel_Writer_Excel2007_RelsVBA
  • PHPExcel_Writer_Excel2007_StringTable
  • PHPExcel_Writer_Excel2007_Style
  • PHPExcel_Writer_Excel2007_Theme
  • PHPExcel_Writer_Excel2007_Workbook
  • PHPExcel_Writer_Excel2007_Worksheet
  • PHPExcel_Writer_Excel2007_WriterPart
  • PHPExcel_Writer_Excel5
  • PHPExcel_Writer_Excel5_BIFFwriter
  • PHPExcel_Writer_Excel5_Escher
  • PHPExcel_Writer_Excel5_Font
  • PHPExcel_Writer_Excel5_Parser
  • PHPExcel_Writer_Excel5_Workbook
  • PHPExcel_Writer_Excel5_Worksheet
  • PHPExcel_Writer_Excel5_Xf
  • PHPExcel_Writer_HTML
  • PHPExcel_Writer_PDF
  • PHPExcel_Writer_PDF_Core
  • PHPExcel_Writer_PDF_DomPDF
  • PHPExcel_Writer_PDF_mPDF
  • PHPExcel_Writer_PDF_tcPDF
  • Provincia
  • Radiacion
  • SingularValueDecomposition
  • Sistema
  • trendClass
  • xajax
  • xajaxArgumentManager
  • xajaxCallableObject
  • xajaxCallableObjectPlugin
  • xajaxControl
  • xajaxControlContainer
  • xajaxCustomRequest
  • xajaxCustomResponse
  • xajaxEvent
  • xajaxEventPlugin
  • xajaxFunctionPlugin
  • xajaxIncludeClientScriptPlugin
  • xajaxLanguageManager
  • xajaxPlugin
  • xajaxPluginManager
  • xajaxRequest
  • xajaxRequestPlugin
  • xajaxResponse
  • xajaxResponseManager
  • xajaxResponsePlugin
  • xajaxScriptPlugin
  • xajaxUserFunction
  • XMLWriter

Interfaces

  • DateTimeInterface
  • Iterator
  • PHPExcel_CachedObjectStorage_ICache
  • PHPExcel_Cell_IValueBinder
  • PHPExcel_IComparable
  • PHPExcel_Reader_IReader
  • PHPExcel_Reader_IReadFilter
  • PHPExcel_RichText_ITextElement
  • PHPExcel_Writer_IWriter
  • Throwable
  • Traversable

Exceptions

  • Exception
  • PHPExcel_Calculation_Exception
  • PHPExcel_Chart_Exception
  • PHPExcel_Exception
  • PHPExcel_Reader_Exception
  • PHPExcel_Writer_Exception

Functions

  • acosh
  • agregar_elemento
  • asinh
  • atanh
  • borrar_elementos
  • borrar_gdm_ab
  • borrar_irradiacion
  • borrar_latitud
  • borrar_panel
  • borrar_periodo
  • borrar_pmp_min_pmp_max
  • borrar_radiacion
  • borrar_resumen
  • borrar_sistema
  • borrar_sombra
  • gdm_ab
  • grabar_resumen
  • historial
  • hypo
  • irradiacion
  • JAMAError
  • latitud
  • limpiar_historial
  • login
  • mb_str_replace
  • mostrar_energia_total_ch
  • mostrar_panel_md_th
  • mostrar_panel_th
  • mostrar_radiacion_md_th
  • mostrar_radiacion_th
  • mostrar_resumen_th
  • panel
  • PclZipUtilCopyBlock
  • PclZipUtilOptionText
  • PclZipUtilPathInclusion
  • PclZipUtilPathReduction
  • PclZipUtilRename
  • PclZipUtilTranslateWinPath
  • periodo
  • pmp_min_pmp_max
  • preparar_panel
  • preparar_radiacion
  • preparar_radiacion_media
  • radiacion
  • resumen
  • sistema
  • sombra
  • xajaxCompressFile
  • xajaxErrorHandler
  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  • Todo
  • Download
  1: <?php
  2: /**
  3:  * PHPExcel
  4:  *
  5:  * Copyright (c) 2006 - 2014 PHPExcel
  6:  *
  7:  * This library is free software; you can redistribute it and/or
  8:  * modify it under the terms of the GNU Lesser General Public
  9:  * License as published by the Free Software Foundation; either
 10:  * version 2.1 of the License, or (at your option) any later version.
 11:  *
 12:  * This library is distributed in the hope that it will be useful,
 13:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 14:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 15:  * Lesser General Public License for more details.
 16:  *
 17:  * You should have received a copy of the GNU Lesser General Public
 18:  * License along with this library; if not, write to the Free Software
 19:  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 20:  *
 21:  * @category   PHPExcel
 22:  * @package    PHPExcel_Calculation
 23:  * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
 24:  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
 25:  * @version    1.8.0, 2014-03-02
 26:  */
 27: 
 28: 
 29: /*
 30: PARTLY BASED ON:
 31:     Copyright (c) 2007 E. W. Bachtal, Inc.
 32: 
 33:     Permission is hereby granted, free of charge, to any person obtaining a copy of this software
 34:     and associated documentation files (the "Software"), to deal in the Software without restriction,
 35:     including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
 36:     and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
 37:     subject to the following conditions:
 38: 
 39:       The above copyright notice and this permission notice shall be included in all copies or substantial
 40:       portions of the Software.
 41: 
 42:     The software is provided "as is", without warranty of any kind, express or implied, including but not
 43:     limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In
 44:     no event shall the authors or copyright holders be liable for any claim, damages or other liability,
 45:     whether in an action of contract, tort or otherwise, arising from, out of or in connection with the
 46:     software or the use or other dealings in the software.
 47: 
 48:     http://ewbi.blogs.com/develops/2007/03/excel_formula_p.html
 49:     http://ewbi.blogs.com/develops/2004/12/excel_formula_p.html
 50: */
 51: 
 52: /**
 53:  * PHPExcel_Calculation_FormulaParser
 54:  *
 55:  * @category   PHPExcel
 56:  * @package    PHPExcel_Calculation
 57:  * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
 58:  */
 59: class PHPExcel_Calculation_FormulaParser {
 60:     /* Character constants */
 61:     const QUOTE_DOUBLE  = '"';
 62:     const QUOTE_SINGLE  = '\'';
 63:     const BRACKET_CLOSE = ']';
 64:     const BRACKET_OPEN  = '[';
 65:     const BRACE_OPEN    = '{';
 66:     const BRACE_CLOSE   = '}';
 67:     const PAREN_OPEN    = '(';
 68:     const PAREN_CLOSE   = ')';
 69:     const SEMICOLON     = ';';
 70:     const WHITESPACE    = ' ';
 71:     const COMMA         = ',';
 72:     const ERROR_START   = '#';
 73: 
 74:     const OPERATORS_SN          = "+-";
 75:     const OPERATORS_INFIX       = "+-*/^&=><";
 76:     const OPERATORS_POSTFIX     = "%";
 77: 
 78:     /**
 79:      * Formula
 80:      *
 81:      * @var string
 82:      */
 83:     private $_formula;
 84: 
 85:     /**
 86:      * Tokens
 87:      *
 88:      * @var PHPExcel_Calculation_FormulaToken[]
 89:      */
 90:     private $_tokens = array();
 91: 
 92:     /**
 93:      * Create a new PHPExcel_Calculation_FormulaParser
 94:      *
 95:      * @param   string      $pFormula   Formula to parse
 96:      * @throws  PHPExcel_Calculation_Exception
 97:      */
 98:     public function __construct($pFormula = '')
 99:     {
100:         // Check parameters
101:         if (is_null($pFormula)) {
102:             throw new PHPExcel_Calculation_Exception("Invalid parameter passed: formula");
103:         }
104: 
105:         // Initialise values
106:         $this->_formula = trim($pFormula);
107:         // Parse!
108:         $this->_parseToTokens();
109:     }
110: 
111:     /**
112:      * Get Formula
113:      *
114:      * @return string
115:      */
116:     public function getFormula() {
117:         return $this->_formula;
118:     }
119: 
120:     /**
121:      * Get Token
122:      *
123:      * @param   int     $pId    Token id
124:      * @return  string
125:      * @throws  PHPExcel_Calculation_Exception
126:      */
127:     public function getToken($pId = 0) {
128:         if (isset($this->_tokens[$pId])) {
129:             return $this->_tokens[$pId];
130:         } else {
131:             throw new PHPExcel_Calculation_Exception("Token with id $pId does not exist.");
132:         }
133:     }
134: 
135:     /**
136:      * Get Token count
137:      *
138:      * @return string
139:      */
140:     public function getTokenCount() {
141:         return count($this->_tokens);
142:     }
143: 
144:     /**
145:      * Get Tokens
146:      *
147:      * @return PHPExcel_Calculation_FormulaToken[]
148:      */
149:     public function getTokens() {
150:         return $this->_tokens;
151:     }
152: 
153:     /**
154:      * Parse to tokens
155:      */
156:     private function _parseToTokens() {
157:         // No attempt is made to verify formulas; assumes formulas are derived from Excel, where
158:         // they can only exist if valid; stack overflows/underflows sunk as nulls without exceptions.
159: 
160:         // Check if the formula has a valid starting =
161:         $formulaLength = strlen($this->_formula);
162:         if ($formulaLength < 2 || $this->_formula{0} != '=') return;
163: 
164:         // Helper variables
165:         $tokens1    = $tokens2  = $stack = array();
166:         $inString   = $inPath   = $inRange  = $inError = false;
167:         $token      = $previousToken    = $nextToken    = null;
168: 
169:         $index  = 1;
170:         $value  = '';
171: 
172:         $ERRORS             = array("#NULL!", "#DIV/0!", "#VALUE!", "#REF!", "#NAME?", "#NUM!", "#N/A");
173:         $COMPARATORS_MULTI  = array(">=", "<=", "<>");
174: 
175:         while ($index < $formulaLength) {
176:             // state-dependent character evaluation (order is important)
177: 
178:             // double-quoted strings
179:             // embeds are doubled
180:             // end marks token
181:             if ($inString) {
182:                 if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE) {
183:                     if ((($index + 2) <= $formulaLength) && ($this->_formula{$index + 1} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE)) {
184:                         $value .= PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE;
185:                         ++$index;
186:                     } else {
187:                         $inString = false;
188:                         $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_TEXT);
189:                         $value = "";
190:                     }
191:                 } else {
192:                     $value .= $this->_formula{$index};
193:                 }
194:                 ++$index;
195:                 continue;
196:             }
197: 
198:             // single-quoted strings (links)
199:             // embeds are double
200:             // end does not mark a token
201:             if ($inPath) {
202:                 if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE) {
203:                     if ((($index + 2) <= $formulaLength) && ($this->_formula{$index + 1} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE)) {
204:                         $value .= PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE;
205:                         ++$index;
206:                     } else {
207:                         $inPath = false;
208:                     }
209:                 } else {
210:                     $value .= $this->_formula{$index};
211:                 }
212:                 ++$index;
213:                 continue;
214:             }
215: 
216:             // bracked strings (R1C1 range index or linked workbook name)
217:             // no embeds (changed to "()" by Excel)
218:             // end does not mark a token
219:             if ($inRange) {
220:                 if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::BRACKET_CLOSE) {
221:                     $inRange = false;
222:                 }
223:                 $value .= $this->_formula{$index};
224:                 ++$index;
225:                 continue;
226:             }
227: 
228:             // error values
229:             // end marks a token, determined from absolute list of values
230:             if ($inError) {
231:                 $value .= $this->_formula{$index};
232:                 ++$index;
233:                 if (in_array($value, $ERRORS)) {
234:                     $inError = false;
235:                     $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_ERROR);
236:                     $value = "";
237:                 }
238:                 continue;
239:             }
240: 
241:             // scientific notation check
242:             if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_SN, $this->_formula{$index}) !== false) {
243:                 if (strlen($value) > 1) {
244:                     if (preg_match("/^[1-9]{1}(\.[0-9]+)?E{1}$/", $this->_formula{$index}) != 0) {
245:                         $value .= $this->_formula{$index};
246:                         ++$index;
247:                         continue;
248:                     }
249:                 }
250:             }
251: 
252:             // independent character evaluation (order not important)
253: 
254:             // establish state-dependent character evaluations
255:             if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE) {
256:                 if (strlen($value > 0)) {  // unexpected
257:                     $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN);
258:                     $value = "";
259:                 }
260:                 $inString = true;
261:                 ++$index;
262:                 continue;
263:             }
264: 
265:             if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE) {
266:                 if (strlen($value) > 0) { // unexpected
267:                     $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN);
268:                     $value = "";
269:                 }
270:                 $inPath = true;
271:                 ++$index;
272:                 continue;
273:             }
274: 
275:             if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::BRACKET_OPEN) {
276:                 $inRange = true;
277:                 $value .= PHPExcel_Calculation_FormulaParser::BRACKET_OPEN;
278:                 ++$index;
279:                 continue;
280:             }
281: 
282:             if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::ERROR_START) {
283:                 if (strlen($value) > 0) { // unexpected
284:                     $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN);
285:                     $value = "";
286:                 }
287:                 $inError = true;
288:                 $value .= PHPExcel_Calculation_FormulaParser::ERROR_START;
289:                 ++$index;
290:                 continue;
291:             }
292: 
293:             // mark start and end of arrays and array rows
294:             if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::BRACE_OPEN) {
295:                 if (strlen($value) > 0) { // unexpected
296:                     $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN);
297:                     $value = "";
298:                 }
299: 
300:                 $tmp = new PHPExcel_Calculation_FormulaToken("ARRAY", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START);
301:                 $tokens1[] = $tmp;
302:                 $stack[] = clone $tmp;
303: 
304:                 $tmp = new PHPExcel_Calculation_FormulaToken("ARRAYROW", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START);
305:                 $tokens1[] = $tmp;
306:                 $stack[] = clone $tmp;
307: 
308:                 ++$index;
309:                 continue;
310:             }
311: 
312:             if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::SEMICOLON) {
313:                 if (strlen($value) > 0) {
314:                     $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
315:                     $value = "";
316:                 }
317: 
318:                 $tmp = array_pop($stack);
319:                 $tmp->setValue("");
320:                 $tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP);
321:                 $tokens1[] = $tmp;
322: 
323:                 $tmp = new PHPExcel_Calculation_FormulaToken(",", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_ARGUMENT);
324:                 $tokens1[] = $tmp;
325: 
326:                 $tmp = new PHPExcel_Calculation_FormulaToken("ARRAYROW", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START);
327:                 $tokens1[] = $tmp;
328:                 $stack[] = clone $tmp;
329: 
330:                 ++$index;
331:                 continue;
332:             }
333: 
334:             if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::BRACE_CLOSE) {
335:                 if (strlen($value) > 0) {
336:                     $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
337:                     $value = "";
338:                 }
339: 
340:                 $tmp = array_pop($stack);
341:                 $tmp->setValue("");
342:                 $tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP);
343:                 $tokens1[] = $tmp;
344: 
345:                 $tmp = array_pop($stack);
346:                 $tmp->setValue("");
347:                 $tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP);
348:                 $tokens1[] = $tmp;
349: 
350:                 ++$index;
351:                 continue;
352:             }
353: 
354:             // trim white-space
355:             if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::WHITESPACE) {
356:                 if (strlen($value) > 0) {
357:                     $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
358:                     $value = "";
359:                 }
360:                 $tokens1[] = new PHPExcel_Calculation_FormulaToken("", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_WHITESPACE);
361:                 ++$index;
362:                 while (($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::WHITESPACE) && ($index < $formulaLength)) {
363:                     ++$index;
364:                 }
365:                 continue;
366:             }
367: 
368:             // multi-character comparators
369:             if (($index + 2) <= $formulaLength) {
370:                 if (in_array(substr($this->_formula, $index, 2), $COMPARATORS_MULTI)) {
371:                     if (strlen($value) > 0) {
372:                         $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
373:                         $value = "";
374:                     }
375:                     $tokens1[] = new PHPExcel_Calculation_FormulaToken(substr($this->_formula, $index, 2), PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL);
376:                     $index += 2;
377:                     continue;
378:                 }
379:             }
380: 
381:             // standard infix operators
382:             if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_INFIX, $this->_formula{$index}) !== false) {
383:                 if (strlen($value) > 0) {
384:                     $tokens1[] =new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
385:                     $value = "";
386:                 }
387:                 $tokens1[] = new PHPExcel_Calculation_FormulaToken($this->_formula{$index}, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX);
388:                 ++$index;
389:                 continue;
390:             }
391: 
392:             // standard postfix operators (only one)
393:             if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_POSTFIX, $this->_formula{$index}) !== false) {
394:                 if (strlen($value) > 0) {
395:                     $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
396:                     $value = "";
397:                 }
398:                 $tokens1[] = new PHPExcel_Calculation_FormulaToken($this->_formula{$index}, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX);
399:                 ++$index;
400:                 continue;
401:             }
402: 
403:             // start subexpression or function
404:             if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::PAREN_OPEN) {
405:                 if (strlen($value) > 0) {
406:                     $tmp = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START);
407:                     $tokens1[] = $tmp;
408:                     $stack[] = clone $tmp;
409:                     $value = "";
410:                 } else {
411:                     $tmp = new PHPExcel_Calculation_FormulaToken("", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START);
412:                     $tokens1[] = $tmp;
413:                     $stack[] = clone $tmp;
414:                 }
415:                 ++$index;
416:                 continue;
417:             }
418: 
419:             // function, subexpression, or array parameters, or operand unions
420:             if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::COMMA) {
421:                 if (strlen($value) > 0) {
422:                     $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
423:                     $value = "";
424:                 }
425: 
426:                 $tmp = array_pop($stack);
427:                 $tmp->setValue("");
428:                 $tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP);
429:                 $stack[] = $tmp;
430: 
431:                 if ($tmp->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) {
432:                     $tokens1[] = new PHPExcel_Calculation_FormulaToken(",", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_UNION);
433:                 } else {
434:                     $tokens1[] = new PHPExcel_Calculation_FormulaToken(",", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_ARGUMENT);
435:                 }
436:                 ++$index;
437:                 continue;
438:             }
439: 
440:             // stop subexpression
441:             if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::PAREN_CLOSE) {
442:                 if (strlen($value) > 0) {
443:                     $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
444:                     $value = "";
445:                 }
446: 
447:                 $tmp = array_pop($stack);
448:                 $tmp->setValue("");
449:                 $tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP);
450:                 $tokens1[] = $tmp;
451: 
452:                 ++$index;
453:                 continue;
454:             }
455: 
456:             // token accumulation
457:             $value .= $this->_formula{$index};
458:             ++$index;
459:         }
460: 
461:         // dump remaining accumulation
462:         if (strlen($value) > 0) {
463:             $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
464:         }
465: 
466:         // move tokenList to new set, excluding unnecessary white-space tokens and converting necessary ones to intersections
467:         $tokenCount = count($tokens1);
468:         for ($i = 0; $i < $tokenCount; ++$i) {
469:             $token = $tokens1[$i];
470:             if (isset($tokens1[$i - 1])) {
471:                 $previousToken = $tokens1[$i - 1];
472:             } else {
473:                 $previousToken = null;
474:             }
475:             if (isset($tokens1[$i + 1])) {
476:                 $nextToken = $tokens1[$i + 1];
477:             } else {
478:                 $nextToken = null;
479:             }
480: 
481:             if (is_null($token)) {
482:                 continue;
483:             }
484: 
485:             if ($token->getTokenType() != PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_WHITESPACE) {
486:                 $tokens2[] = $token;
487:                 continue;
488:             }
489: 
490:             if (is_null($previousToken)) {
491:                 continue;
492:             }
493: 
494:             if (! (
495:                     (($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
496:                     (($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
497:                     ($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND)
498:                   ) ) {
499:                 continue;
500:             }
501: 
502:             if (is_null($nextToken)) {
503:                 continue;
504:             }
505: 
506:             if (! (
507:                     (($nextToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) && ($nextToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START)) ||
508:                     (($nextToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) && ($nextToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START)) ||
509:                     ($nextToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND)
510:                   ) ) {
511:                 continue;
512:             }
513: 
514:             $tokens2[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_INTERSECTION);
515:         }
516: 
517:         // move tokens to final list, switching infix "-" operators to prefix when appropriate, switching infix "+" operators
518:         // to noop when appropriate, identifying operand and infix-operator subtypes, and pulling "@" from function names
519:         $this->_tokens = array();
520: 
521:         $tokenCount = count($tokens2);
522:         for ($i = 0; $i < $tokenCount; ++$i) {
523:             $token = $tokens2[$i];
524:             if (isset($tokens2[$i - 1])) {
525:                 $previousToken = $tokens2[$i - 1];
526:             } else {
527:                 $previousToken = null;
528:             }
529:             if (isset($tokens2[$i + 1])) {
530:                 $nextToken = $tokens2[$i + 1];
531:             } else {
532:                 $nextToken = null;
533:             }
534: 
535:             if (is_null($token)) {
536:                 continue;
537:             }
538: 
539:             if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX && $token->getValue() == "-") {
540:                 if ($i == 0) {
541:                     $token->setTokenType(PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPREFIX);
542:                 } else if (
543:                             (($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
544:                             (($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
545:                             ($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX) ||
546:                             ($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND)
547:                         ) {
548:                     $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH);
549:                 } else {
550:                     $token->setTokenType(PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPREFIX);
551:                 }
552: 
553:                 $this->_tokens[] = $token;
554:                 continue;
555:             }
556: 
557:             if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX && $token->getValue() == "+") {
558:                 if ($i == 0) {
559:                     continue;
560:                 } else if (
561:                             (($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
562:                             (($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
563:                             ($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX) ||
564:                             ($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND)
565:                         ) {
566:                     $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH);
567:                 } else {
568:                     continue;
569:                 }
570: 
571:                 $this->_tokens[] = $token;
572:                 continue;
573:             }
574: 
575:             if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX && $token->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING) {
576:                 if (strpos("<>=", substr($token->getValue(), 0, 1)) !== false) {
577:                     $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL);
578:                 } else if ($token->getValue() == "&") {
579:                     $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_CONCATENATION);
580:                 } else {
581:                     $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH);
582:                 }
583: 
584:                 $this->_tokens[] = $token;
585:                 continue;
586:             }
587: 
588:             if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND && $token->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING) {
589:                 if (!is_numeric($token->getValue())) {
590:                     if (strtoupper($token->getValue()) == "TRUE" || strtoupper($token->getValue() == "FALSE")) {
591:                         $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL);
592:                     } else {
593:                         $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_RANGE);
594:                     }
595:                 } else {
596:                     $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NUMBER);
597:                 }
598: 
599:                 $this->_tokens[] = $token;
600:                 continue;
601:             }
602: 
603:             if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) {
604:                 if (strlen($token->getValue() > 0)) {
605:                     if (substr($token->getValue(), 0, 1) == "@") {
606:                         $token->setValue(substr($token->getValue(), 1));
607:                     }
608:                 }
609:             }
610: 
611:             $this->_tokens[] = $token;
612:         }
613:     }
614: }
615: 
Autene API documentation generated by ApiGen