avik        2003/08/30 23:16:57

  Modified:    src/java/org/apache/poi/hssf/dev FormulaViewer.java
               src/java/org/apache/poi/hssf/model FormulaParser.java
               src/java/org/apache/poi/hssf/record NameRecord.java
               src/java/org/apache/poi/hssf/record/formula
                        AbstractFunctionPtg.java AddPtg.java Area3DPtg.java
                        AreaPtg.java AttrPtg.java BoolPtg.java
                        ConcatPtg.java DividePtg.java EqualPtg.java
                        ExpPtg.java GreaterEqualPtg.java
                        GreaterThanPtg.java IntPtg.java LessEqualPtg.java
                        LessThanPtg.java MemErrPtg.java MemFuncPtg.java
                        MissingArgPtg.java MultiplyPtg.java NamePtg.java
                        NameXPtg.java NotEqualPtg.java NumberPtg.java
                        ParenthesisPtg.java PowerPtg.java Ptg.java
                        Ref3DPtg.java ReferencePtg.java StringPtg.java
                        SubtractPtg.java UnaryMinusPtg.java
                        UnaryPlusPtg.java UnionPtg.java UnknownPtg.java
               src/java/org/apache/poi/hssf/usermodel HSSFCell.java
                        HSSFName.java HSSFWorkbook.java
               src/testcases/org/apache/poi/hssf/model
                        TestFormulaParser.java
               src/testcases/org/apache/poi/hssf/usermodel
                        TestFormulas.java
  Added:       src/testcases/org/apache/poi/hssf/data SquareMacro.xls
  Log:
  Syncing to REL_2_BR: Macro functions and related fixes, by Paul Krause bug id:21444
  
  Revision  Changes    Path
  1.8       +3 -4      jakarta-poi/src/java/org/apache/poi/hssf/dev/FormulaViewer.java
  
  Index: FormulaViewer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/dev/FormulaViewer.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- FormulaViewer.java        30 Apr 2003 04:39:11 -0000      1.7
  +++ FormulaViewer.java        31 Aug 2003 06:16:56 -0000      1.8
  @@ -77,7 +77,6 @@
   import org.apache.poi.hssf.record.formula.*;
   import org.apache.poi.hssf.model.*;
   import org.apache.poi.hssf.usermodel.*;
  -import org.apache.poi.hssf.util.SheetReferences;
   
   /**
    * FormulaViewer - finds formulas in a BIFF8 file and attempts to read them/display
  @@ -144,7 +143,7 @@
               StringBuffer buf = new StringBuffer();
               
               if (token instanceof ExpPtg) return;
  -            buf.append(name=((OperationPtg) 
token).toFormulaString((SheetReferences)null));
  +            buf.append(name=((OperationPtg) token).toFormulaString((Workbook)null));
               buf.append(sep);
               switch (token.getPtgClass()) {
                   case Ptg.CLASS_REF :
  @@ -213,7 +212,7 @@
           StringBuffer buf = new StringBuffer();
              for (int i=0;i<numptgs;i++) {
              token = (Ptg) tokens.get(i);
  -            buf.append( token.toFormulaString((SheetReferences)null));
  +            buf.append( token.toFormulaString((Workbook)null));
               switch (token.getPtgClass()) {
                   case Ptg.CLASS_REF :
                       buf.append("(R)");
  @@ -233,7 +232,7 @@
       
       private String composeFormula(FormulaRecord record)
       {
  -       return  
org.apache.poi.hssf.model.FormulaParser.toFormulaString((SheetReferences)null,record.getParsedExpression());
  +       return  
org.apache.poi.hssf.model.FormulaParser.toFormulaString((Workbook)null,record.getParsedExpression());
       }
   
       /**
  
  
  
  1.14      +62 -45    
jakarta-poi/src/java/org/apache/poi/hssf/model/FormulaParser.java
  
  Index: FormulaParser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/model/FormulaParser.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- FormulaParser.java        7 May 2003 03:40:52 -0000       1.13
  +++ FormulaParser.java        31 Aug 2003 06:16:56 -0000      1.14
  @@ -64,7 +64,6 @@
   //import PTG's .. since we need everything, import *
   import org.apache.poi.hssf.record.formula.*;
   
  -import org.apache.poi.hssf.util.SheetReferences;
   
   
   /**
  @@ -335,10 +334,14 @@
           int numArgs = Arguments();
           Match(')');
                   
  -        Ptg functionPtg = getFunction(name,(byte)numArgs);
  +        AbstractFunctionPtg functionPtg = getFunction(name,(byte)numArgs);
           
                tokens.add(functionPtg);
    
  +        if (functionPtg.getName().equals("externalflag")) {
  +            tokens.add(new NamePtg(name, this.book));
  +        }
  +
                //remove what we just put in
                this.functionTokens.remove(0);
       }
  @@ -382,8 +385,8 @@
        * @param numArgs
        * @return Ptg a null is returned if we're in an IF formula, it needs extreme 
manipulation and is handled in this function
        */
  -    private Ptg getFunction(String name,byte numArgs) {
  -        Ptg retval = null;
  +    private AbstractFunctionPtg getFunction(String name, byte numArgs) {
  +        AbstractFunctionPtg retval = null;
           
           if (name.equals("IF")) {
               retval = new FuncVarPtg(AbstractFunctionPtg.ATTR_NAME, numArgs);
  @@ -795,69 +798,85 @@
       /**
        * Convience method which takes in a list then passes it to the other 
toFormulaString
        * signature. 
  -     * @param lptgs - list of ptgs, can be null
  +     * @param book   workbook for 3D and named references
  +     * @param lptgs  list of Ptg, can be null or empty
  +     * @return a human readable String
        */
  -    public static String toFormulaString(SheetReferences refs, List lptgs) {
  +    public static String toFormulaString(Workbook book, List lptgs) {
           String retval = null;
           if (lptgs == null || lptgs.size() == 0) return "#NAME";
           Ptg[] ptgs = new Ptg[lptgs.size()];
           ptgs = (Ptg[])lptgs.toArray(ptgs);
  -        retval = toFormulaString(refs, ptgs);
  +        retval = toFormulaString(book, ptgs);
           return retval;
       }
       
  -    /** Static method to convert an array of Ptgs in RPN order 
  -     *  to a human readable string format in infix mode
  -     *  @param ptgs - array of ptgs, can be null or empty
  +    /**
  +     * Static method to convert an array of Ptgs in RPN order
  +     * to a human readable string format in infix mode.
  +     * @param book  workbook for named and 3D references
  +     * @param ptgs  array of Ptg, can be null or empty
  +     * @return a human readable String
        */
  -    public static String toFormulaString(SheetReferences refs, Ptg[] ptgs) {
  +    public static String toFormulaString(Workbook book, Ptg[] ptgs) {
           if (ptgs == null || ptgs.length == 0) return "#NAME";
           java.util.Stack stack = new java.util.Stack();
  -        int numPtgs = ptgs.length;
  -        OperationPtg o;
  -        int numOperands;
  -        String result=null;
  -        String[] operands;
           AttrPtg ifptg = null;
  -        for (int i=0;i<numPtgs;i++) {
  +
              // Excel allows to have AttrPtg at position 0 (such as Blanks) which
              // do not have any operands. Skip them.
  -            if (ptgs[i] instanceof OperationPtg && i>0) {
  -                  o = (OperationPtg) ptgs[i];
  +        stack.push(ptgs[0].toFormulaString(book));
                     
  -                  if (o instanceof AttrPtg && ((AttrPtg)o).isOptimizedIf()) {
  -                        ifptg=(AttrPtg)o;
  -                  } else {
  +        for (int i = 1; i < ptgs.length; i++) {
  +            if (! (ptgs[i] instanceof OperationPtg)) {
  +                stack.push(ptgs[i].toFormulaString(book));
  +                continue;
  +            }
                         
  -                      numOperands = o.getNumberOfOperands();
  -                      operands = new String[numOperands];
  +            if (ptgs[i] instanceof AttrPtg && ((AttrPtg) ptgs[i]).isOptimizedIf()) {
  +                ifptg = (AttrPtg) ptgs[i];
  +                continue;
  +            }
                         
  -                      for (int j=0;j<numOperands;j++) {
  -                          operands[numOperands-j-1] = (String) stack.pop(); //TODO: 
catch stack underflow and throw parse exception. 
  +            final OperationPtg o = (OperationPtg) ptgs[i];
  +            final String[] operands = new String[o.getNumberOfOperands()];
  +
  +            for (int j = operands.length; j > 0; j--) {
  +                //TODO: catch stack underflow and throw parse exception.
  +                operands[j - 1] = (String) stack.pop();
                         }  
   
  -                      if ( (o instanceof AbstractFunctionPtg) && 
  -                            
((AbstractFunctionPtg)o).getName().equals("specialflag") &&
  -                            ifptg != null
  -                            ) {
  +            stack.push(o.toFormulaString(operands));
  +            if (!(o instanceof AbstractFunctionPtg)) continue;
  +
  +            final AbstractFunctionPtg f = (AbstractFunctionPtg) o;
  +            final String fname = f.getName();
  +            if (fname == null) continue;
  +
  +            if ((ifptg != null) && (fname.equals("specialflag"))) {
                                // this special case will be way different.
  -                             result = ifptg.toFormulaString(
  -                                  new String[] {(o.toFormulaString(operands))}
  -                                                           );
  -                             ifptg = null;
  -                      } else {                      
  -                        result = o.toFormulaString(operands);                       
                       
  +                stack.push(ifptg.toFormulaString(new String[]{(String) 
stack.pop()}));
  +                continue;
                         }
  -                      stack.push(result);                                        
  +            if (fname.equals("externalflag")) {
  +                final String top = (String) stack.pop();
  +                final int paren = top.indexOf('(');
  +                final int comma = top.indexOf(',');
  +                if (comma == -1) {
  +                    final int rparen = top.indexOf(')');
  +                    stack.push(top.substring(paren + 1, rparen) + "()");
                     }
  -                      
  -                  
  -            } else {
  -                stack.push(ptgs[i].toFormulaString(refs));
  +                else {
  +                    stack.push(top.substring(paren + 1, comma) + '(' +
  +                               top.substring(comma + 1));
               }
           }
  -        return (String) stack.pop(); //TODO: catch stack underflow and throw parse 
exception. 
       }
  +        // TODO: catch stack underflow and throw parse exception.
  +        return (String) stack.pop();
  +    }
  +
  +
       /** Create a tree representation of the RPN token array
        *used to run the class(RVA) change algo
        */
  @@ -890,11 +909,9 @@
        *   Useful for testing
        */
       public String toString() {
  -        SheetReferences refs = null;
  -        if (book!=null)  book.getSheetReferences();
           StringBuffer buf = new StringBuffer();
              for (int i=0;i<tokens.size();i++) {
  -            buf.append( ( (Ptg)tokens.get(i)).toFormulaString(refs));
  +            buf.append( ( (Ptg)tokens.get(i)).toFormulaString(book));
               buf.append(' ');
           } 
           return buf.toString();
  
  
  
  1.14      +62 -9     jakarta-poi/src/java/org/apache/poi/hssf/record/NameRecord.java
  
  Index: NameRecord.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/NameRecord.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- NameRecord.java   27 Jul 2003 19:15:15 -0000      1.13
  +++ NameRecord.java   31 Aug 2003 06:16:56 -0000      1.14
  @@ -58,11 +58,11 @@
   import java.util.List;
   import java.util.Stack;
   
  +import org.apache.poi.hssf.model.Workbook;
   import org.apache.poi.hssf.record.formula.Area3DPtg;
   import org.apache.poi.hssf.record.formula.Ptg;
   import org.apache.poi.hssf.record.formula.Ref3DPtg;
   import org.apache.poi.hssf.util.RangeAddress;
  -import org.apache.poi.hssf.util.SheetReferences;
   import org.apache.poi.util.HexDump;
   import org.apache.poi.util.LittleEndian;
   import org.apache.poi.util.StringUtil;
  @@ -127,6 +127,14 @@
         */
        public final static byte  BUILTIN_SHEET_TITLE           = (byte)12;
       
  +    public static final short OPT_HIDDEN_NAME =   (short) 0x0001;
  +    public static final short OPT_FUNCTION_NAME = (short) 0x0002;
  +    public static final short OPT_COMMAND_NAME =  (short) 0x0004;
  +    public static final short OPT_MACRO =         (short) 0x0008;
  +    public static final short OPT_COMPLEX =       (short) 0x0010;
  +    public static final short OPT_BUILTIN =       (short) 0x0020;
  +    public static final short OPT_BINDATA =       (short) 0x1000;
  +
       
       private short             field_1_option_flag;
       private byte              field_2_keyboard_shortcut;
  @@ -192,7 +200,7 @@
        {
            this();         
            this.field_12_builtIn_name = builtin;
  -         this.setOptionFlag((short)(this.getOptionFlag() | (short)0x20));
  +         this.setOptionFlag((short)(this.getOptionFlag() | OPT_BUILTIN));
            this.setNameTextLength((byte)1);
            this.setEqualsToIndexToSheet(index); //the extern sheets are set through 
references
            
  @@ -252,13 +260,22 @@
   
        /**
         * Convenience method to retrieve the index the name refers to.
  -      * @see getEqualsToIndexToSheet()
  +      * @see #getEqualsToIndexToSheet()
         * @return short
         */
        public short getIndexToSheet() {
                return getEqualsToIndexToSheet();
        }
   
  +    /**
  +     * @return function group
  +     * @see FnGroupCountRecord
  +     */
  +    public byte getFnGroup() {
  +        int masked = field_1_option_flag & 0x0fc0;
  +        return (byte) (masked >> 4);
  +    }
  +
       public void setEqualsToIndexToSheet(short value)
       {
           field_6_equals_to_index_to_sheet = value;
  @@ -409,11 +426,47 @@
           return field_11_compressed_unicode_flag;
       }
   
  +    /**
  +     * @return true if name is hidden
  +     */
  +    public boolean isHiddenName() {
  +        return (field_1_option_flag & OPT_HIDDEN_NAME) != 0;
  +    }
  +
  +    /**
  +     * @return true if name is a function
  +     */
  +    public boolean isFunctionName() {
  +        return (field_1_option_flag & OPT_FUNCTION_NAME) != 0;
  +    }
  +
  +    /**
  +     * @return true if name is a command
  +     */
  +    public boolean isCommandName() {
  +        return (field_1_option_flag & OPT_COMMAND_NAME) != 0;
  +    }
  +
  +    /**
  +     * @return true if function macro or command macro
  +     */
  +    public boolean isMacro() {
  +        return (field_1_option_flag & OPT_MACRO) != 0;
  +    }
  +
  +    /**
  +     * @return true if array formula or user defined
  +     */
  +    public boolean isComplexFunction() {
  +        return (field_1_option_flag & OPT_COMPLEX) != 0;
  +    }
  +
  +
        /**Convenience Function to determine if the name is a built-in name
         */
        public boolean isBuiltInName()
        {
  -         return ((this.getOptionFlag() & (short)0x20) != 0);
  +         return ((this.getOptionFlag() & OPT_BUILTIN) != 0);
        }
   
   
  @@ -511,7 +564,7 @@
           data[18 + offset] = getCompressedUnicodeFlag();
   
           /* temp: gjs
  -        if ( ( field_1_option_flag & (short) 0x20 ) != 0 )
  +        if (isBuiltInName())
           {
               LittleEndian.putShort( data, 2 + offset, (short) ( 16 + 
field_13_raw_name_definition.length ) );
   
  @@ -647,16 +700,16 @@
       /** gets the reference , the area only (range)
        * @return area reference
        */
  -    public String getAreaReference(SheetReferences refs){
  +    public String getAreaReference(Workbook book){
           if (field_13_name_definition == null) return "#REF!";
           Ptg ptg = (Ptg) field_13_name_definition.peek();
           String result = "";
   
           if (ptg.getClass() == Area3DPtg.class){
  -            result = ptg.toFormulaString(refs);
  +            result = ptg.toFormulaString(book);
   
           } else if (ptg.getClass() == Ref3DPtg.class){
  -            result = ptg.toFormulaString(refs);
  +            result = ptg.toFormulaString(book);
           }
   
           return result;
  @@ -727,7 +780,7 @@
   
           /*
           temp: gjs
  -        if ( ( field_1_option_flag & (short)0x20 ) != 0 ) {
  +        if (isBuiltInName()) {
               // DEBUG
               // System.out.println( "Built-in name" );
   
  
  
  
  1.11      +7 -5      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java
  
  Index: AbstractFunctionPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- AbstractFunctionPtg.java  6 May 2003 15:30:52 -0000       1.10
  +++ AbstractFunctionPtg.java  31 Aug 2003 06:16:56 -0000      1.11
  @@ -54,9 +54,8 @@
   package org.apache.poi.hssf.record.formula;
   
   import org.apache.poi.util.BinaryTree;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
  -import java.util.Stack;
   
   /**
    * This class provides the base functionality for Excel sheet functions 
  @@ -69,7 +68,7 @@
        //constant used allow a ptgAttr to be mapped properly for its functionPtg
        public static final String ATTR_NAME = "specialflag";
            
  -      
  +    public static final short INDEX_EXTERNAL = 255;
       
       private static BinaryTree map = produceHash(); 
       protected static Object[][] functionData = produceFunctionData();
  @@ -104,7 +103,7 @@
           return lookupName(field_2_fnc_index);
       }
       
  -    public String toFormulaString(SheetReferences refs) {
  +    public String toFormulaString(Workbook book) {
           return getName();
       }
       
  @@ -140,7 +139,9 @@
       }
       
       protected short lookupIndex(String name) {
  -        return (short)((Integer)map.getKeyForValue(name)).intValue();
  +        Integer index = (Integer) map.getKeyForValue(name);
  +        if (index != null) return index.shortValue();
  +        return INDEX_EXTERNAL;
       }
       
       /**
  @@ -389,6 +390,7 @@
           dmap.put(new Integer(252),"FREQUENCY");
           dmap.put(new Integer(253),"ADDTOOLBAR");
           dmap.put(new Integer(254),"DELETETOOLBAR");
  +        dmap.put(new Integer(255),"externalflag");
           dmap.put(new Integer(256),"RESETTOOLBAR");
           dmap.put(new Integer(257),"EVALUATE");
           dmap.put(new Integer(258),"GETTOOLBAR");
  
  
  
  1.14      +2 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/AddPtg.java
  
  Index: AddPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/AddPtg.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- AddPtg.java       30 Apr 2003 04:39:02 -0000      1.13
  +++ AddPtg.java       31 Aug 2003 06:16:56 -0000      1.14
  @@ -62,7 +62,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Addition operator PTG the "+" binomial operator.  If you need more 
  @@ -113,7 +113,7 @@
       }
       
       /** Implementation of method from Ptg */
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "+";
       }
  
  
  
  1.15      +2 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java
  
  Index: Area3DPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- Area3DPtg.java    27 Jul 2003 18:49:52 -0000      1.14
  +++ Area3DPtg.java    31 Aug 2003 06:16:56 -0000      1.15
  @@ -291,8 +291,9 @@
   
        }
   
  -     public String toFormulaString( SheetReferences refs )
  +     public String toFormulaString(Workbook book)
        {
  +             SheetReferences refs = book == null ? null : book.getSheetReferences();
                StringBuffer retval = new StringBuffer();
                if ( refs != null )
                {
  @@ -352,4 +353,3 @@
   
   
   }
  -
  
  
  
  1.16      +2 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java
  
  Index: AreaPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- AreaPtg.java      27 Jul 2003 18:49:52 -0000      1.15
  +++ AreaPtg.java      31 Aug 2003 06:16:56 -0000      1.16
  @@ -65,7 +65,7 @@
   
   import org.apache.poi.hssf.util.AreaReference;
   import org.apache.poi.hssf.util.CellReference;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Specifies a rectangular area of cells A1:A4 for instance.
  @@ -305,7 +305,7 @@
           field_4_last_column = column;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
            return (new 
CellReference(getFirstRow(),getFirstColumn(),!isFirstRowRelative(),!isFirstColRelative())).toString()
 + ":" +
                   (new 
CellReference(getLastRow(),getLastColumn(),!isLastRowRelative(),!isLastColRelative())).toString();
  
  
  
  1.17      +5 -5      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/AttrPtg.java
  
  Index: AttrPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/AttrPtg.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- AttrPtg.java      30 Apr 2003 04:39:02 -0000      1.16
  +++ AttrPtg.java      31 Aug 2003 06:16:56 -0000      1.17
  @@ -60,7 +60,7 @@
    */
   package org.apache.poi.hssf.record.formula;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   import org.apache.poi.util.LittleEndian;
   import org.apache.poi.util.BitField;
  @@ -207,11 +207,11 @@
           if(space.isSet(field_1_options)) {
               return operands[ 0 ];
           } else if (optiIf.isSet(field_1_options)) {
  -            return toFormulaString((SheetReferences)null) + "(" + operands[ 0 ]     
        +")"; 
  +            return toFormulaString((Workbook)null) + "(" + operands[ 0 ]            
 +")";
           } else if (optGoto.isSet(field_1_options)) {
  -            return toFormulaString((SheetReferences)null) + operands[0];   //goto 
isn't a real formula element should not show up
  +            return toFormulaString((Workbook)null) + operands[0];   //goto isn't a 
real formula element should not show up
           } else {
  -            return toFormulaString((SheetReferences)null) + "(" + operands[ 0 ] + 
")";
  +            return toFormulaString((Workbook)null) + "(" + operands[ 0 ] + ")";
           }
       }
     
  @@ -226,7 +226,7 @@
           return -1;
       }
           
  -   public String toFormulaString(SheetReferences refs) {
  +   public String toFormulaString(Workbook book) {
         if(semiVolatile.isSet(field_1_options)) {
           return "ATTR(semiVolatile)";
         }
  
  
  
  1.4       +2 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/BoolPtg.java
  
  Index: BoolPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/BoolPtg.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- BoolPtg.java      1 May 2003 12:43:37 -0000       1.3
  +++ BoolPtg.java      31 Aug 2003 06:16:56 -0000      1.4
  @@ -60,7 +60,7 @@
   package org.apache.poi.hssf.record.formula;
   
   import org.apache.poi.util.LittleEndian;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Boolean (boolean)
  @@ -114,7 +114,7 @@
           return SIZE;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return field_1_value ? "TRUE" : "FALSE";
       }
  
  
  
  1.6       +2 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ConcatPtg.java
  
  Index: ConcatPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ConcatPtg.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ConcatPtg.java    30 Apr 2003 04:39:02 -0000      1.5
  +++ ConcatPtg.java    31 Aug 2003 06:16:56 -0000      1.6
  @@ -62,7 +62,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -108,7 +108,7 @@
           return 2;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return CONCAT;
       }    
  
  
  
  1.10      +3 -3      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/DividePtg.java
  
  Index: DividePtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/DividePtg.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- DividePtg.java    30 Apr 2003 04:39:02 -0000      1.9
  +++ DividePtg.java    31 Aug 2003 06:16:56 -0000      1.10
  @@ -62,7 +62,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * This PTG implements the standard binomial divide "/"
  @@ -108,7 +108,7 @@
           return 2;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "/";
       }
  @@ -117,7 +117,7 @@
           StringBuffer buffer = new StringBuffer();
   
           buffer.append(operands[ 0 ]);
  -        buffer.append(toFormulaString((SheetReferences)null));
  +        buffer.append(toFormulaString((Workbook)null));
           buffer.append(operands[ 1 ]);
           return buffer.toString();
       }      
  
  
  
  1.4       +3 -3      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/EqualPtg.java
  
  Index: EqualPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/EqualPtg.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- EqualPtg.java     30 Apr 2003 04:39:02 -0000      1.3
  +++ EqualPtg.java     31 Aug 2003 06:16:56 -0000      1.4
  @@ -62,7 +62,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -107,7 +107,7 @@
           return 2;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "=";
       }
  @@ -117,7 +117,7 @@
   
           
           buffer.append(operands[ 0 ]);
  -        buffer.append(toFormulaString((SheetReferences)null));
  +        buffer.append(toFormulaString((Workbook)null));
           buffer.append(operands[ 1 ]);
           return buffer.toString();
       }       
  
  
  
  1.9       +2 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ExpPtg.java
  
  Index: ExpPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ExpPtg.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- ExpPtg.java       2 Jun 2003 02:47:44 -0000       1.8
  +++ ExpPtg.java       31 Aug 2003 06:16:56 -0000      1.9
  @@ -60,7 +60,7 @@
    */
   package org.apache.poi.hssf.record.formula;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -102,7 +102,7 @@
           return SIZE;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "NO IDEA SHARED FORMULA EXP PTG";
       }
  
  
  
  1.3       +3 -3      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/GreaterEqualPtg.java
  
  Index: GreaterEqualPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/GreaterEqualPtg.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- GreaterEqualPtg.java      31 Jul 2003 17:55:36 -0000      1.2
  +++ GreaterEqualPtg.java      31 Aug 2003 06:16:56 -0000      1.3
  @@ -54,7 +54,7 @@
   package org.apache.poi.hssf.record.formula;
   
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * PTG class to implement greater or equal to
  @@ -98,7 +98,7 @@
           return 2;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return ">=";
       }
  @@ -108,7 +108,7 @@
   
           
           buffer.append(operands[ 0 ]);
  -        buffer.append(toFormulaString((SheetReferences)null));
  +        buffer.append(toFormulaString((Workbook)null));
           buffer.append(operands[ 1 ]);
           return buffer.toString();
       }       
  
  
  
  1.2       +2 -4      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/GreaterThanPtg.java
  
  Index: GreaterThanPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/GreaterThanPtg.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- GreaterThanPtg.java       4 May 2003 18:22:08 -0000       1.1
  +++ GreaterThanPtg.java       31 Aug 2003 06:16:56 -0000      1.2
  @@ -61,7 +61,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Greater than operator PTG ">"
  @@ -133,7 +133,7 @@
        * Implementation of method from Ptg 
        * @param refs the Sheet References
        */
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return this.GREATERTHAN;
       }
  @@ -171,5 +171,3 @@
           return new GreaterThanPtg();
       }
   }
  -
  -
  
  
  
  1.11      +2 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/IntPtg.java
  
  Index: IntPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/IntPtg.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- IntPtg.java       30 Apr 2003 04:39:02 -0000      1.10
  +++ IntPtg.java       31 Aug 2003 06:16:56 -0000      1.11
  @@ -61,7 +61,7 @@
   package org.apache.poi.hssf.record.formula;
   
   import org.apache.poi.util.LittleEndian;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Integer (short intger)
  @@ -116,7 +116,7 @@
           return SIZE;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "" + getValue();
       }
  
  
  
  1.3       +3 -3      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/LessEqualPtg.java
  
  Index: LessEqualPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/LessEqualPtg.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- LessEqualPtg.java 31 Jul 2003 17:55:36 -0000      1.2
  +++ LessEqualPtg.java 31 Aug 2003 06:16:56 -0000      1.3
  @@ -53,7 +53,7 @@
    */
   package org.apache.poi.hssf.record.formula;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   
   /**
  @@ -99,7 +99,7 @@
                  return 2;
         }
   
  -      public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
         {
                  return "<=";
         }
  @@ -109,7 +109,7 @@
   
           
                  buffer.append(operands[ 0 ]);
  -               buffer.append(toFormulaString((SheetReferences)null));
  +               buffer.append(toFormulaString((Workbook)null));
                  buffer.append(operands[ 1 ]);
                  return buffer.toString();
         }       
  
  
  
  1.2       +2 -5      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/LessThanPtg.java
  
  Index: LessThanPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/LessThanPtg.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- LessThanPtg.java  4 May 2003 18:22:08 -0000       1.1
  +++ LessThanPtg.java  31 Aug 2003 06:16:56 -0000      1.2
  @@ -63,7 +63,7 @@
   import java.util.List;
   
   //POI
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Less than operator PTG "<". The SID is taken from the 
  @@ -142,7 +142,7 @@
        * Implementation of method from Ptg 
        * @param refs the Sheet References
        */
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return this.LESSTHAN;
       }
  @@ -180,6 +180,3 @@
       }
   
   }
  -
  -
  -
  
  
  
  1.6       +2 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/MemErrPtg.java
  
  Index: MemErrPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/MemErrPtg.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- MemErrPtg.java    30 Apr 2003 04:39:02 -0000      1.5
  +++ MemErrPtg.java    31 Aug 2003 06:16:56 -0000      1.6
  @@ -61,7 +61,7 @@
   package org.apache.poi.hssf.record.formula;
   
   import org.apache.poi.util.LittleEndian;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -118,7 +118,7 @@
           return SIZE;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "ERR#";
       }
  
  
  
  1.3       +2 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/MemFuncPtg.java
  
  Index: MemFuncPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/MemFuncPtg.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MemFuncPtg.java   30 Apr 2003 04:39:02 -0000      1.2
  +++ MemFuncPtg.java   31 Aug 2003 06:16:56 -0000      1.3
  @@ -60,7 +60,7 @@
   package org.apache.poi.hssf.record.formula;
   
   import org.apache.poi.util.LittleEndian;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * @author Glen Stampoultzis (glens at apache.org)
  @@ -96,7 +96,7 @@
           LittleEndian.putShort( array, offset + 1, 
(short)field_1_len_ref_subexpression );
       }
   
  -    public String toFormulaString( SheetReferences refs )
  +    public String toFormulaString(Workbook book)
       {
           return "";
       }
  
  
  
  1.5       +2 -4      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/MissingArgPtg.java
  
  Index: MissingArgPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/MissingArgPtg.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- MissingArgPtg.java        30 Apr 2003 04:39:02 -0000      1.4
  +++ MissingArgPtg.java        31 Aug 2003 06:16:56 -0000      1.5
  @@ -54,7 +54,7 @@
   
   package org.apache.poi.hssf.record.formula;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Missing Function Arguments
  @@ -91,7 +91,7 @@
       }
   
      
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return " ";
       }
  @@ -103,5 +103,3 @@
       }
   
   }
  -
  -
  
  
  
  1.11      +5 -5      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/MultiplyPtg.java
  
  Index: MultiplyPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/MultiplyPtg.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- MultiplyPtg.java  30 Apr 2003 04:39:02 -0000      1.10
  +++ MultiplyPtg.java  31 Aug 2003 06:16:56 -0000      1.11
  @@ -61,7 +61,7 @@
   package org.apache.poi.hssf.record.formula;
   
   import java.util.List;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Implements the standard mathmatical multiplication - *
  @@ -114,7 +114,7 @@
       }
       
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "*";
       }
  @@ -123,9 +123,9 @@
       {
           StringBuffer buffer = new StringBuffer();
   
  -        buffer.append(operands[ 0 ].toFormulaString((SheetReferences)null));
  +        buffer.append(operands[ 0 ].toFormulaString((Workbook)null));
           buffer.append("*");
  -        buffer.append(operands[ 1 ].toFormulaString((SheetReferences)null));
  +        buffer.append(operands[ 1 ].toFormulaString((Workbook)null));
           return buffer.toString();
       }
       
  @@ -133,7 +133,7 @@
           StringBuffer buffer = new StringBuffer();
   
           buffer.append(operands[ 0 ]);
  -        buffer.append(toFormulaString((SheetReferences)null));
  +        buffer.append(toFormulaString((Workbook)null));
           buffer.append(operands[ 1 ]);
           return buffer.toString();
       }                  
  
  
  
  1.9       +21 -6     
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/NamePtg.java
  
  Index: NamePtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/NamePtg.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- NamePtg.java      27 Jul 2003 19:15:15 -0000      1.8
  +++ NamePtg.java      31 Aug 2003 06:16:56 -0000      1.9
  @@ -61,7 +61,8 @@
   package org.apache.poi.hssf.record.formula;
   
   import org.apache.poi.util.LittleEndian;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
  +import org.apache.poi.hssf.record.NameRecord;
   
   /**
    *
  @@ -85,9 +86,22 @@
   
       /** Creates new NamePtg */
   
  -    public NamePtg(String name)
  +    public NamePtg(String name, Workbook book)
       {
  -        //TODO
  +        final short n = (short) (book.getNumNames() + 1);
  +        NameRecord rec;
  +        for (short i = 1; i < n; i++) {
  +            rec = book.getNameRecord(i - 1);
  +            if (name.equals(rec.getNameText())) {
  +                field_1_label_index = i;
  +                return;
  +            }
  +        }
  +        rec = new NameRecord();
  +        rec.setNameText(name);
  +        rec.setNameTextLength((byte) name.length());
  +        book.addName(rec);
  +        field_1_label_index = n;
       }
   
       /** Creates new NamePtg */
  @@ -113,12 +127,13 @@
           return SIZE;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
  -        return "NAMED RANGE";
  +        NameRecord rec = book.getNameRecord(field_1_label_index - 1);
  +        return rec.getNameText();
       }
       
  -    public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;}
  +    public byte getDefaultOperandClass() {return Ptg.CLASS_REF;}
   
       public Object clone() {
         NamePtg ptg = new NamePtg();
  
  
  
  1.3       +2 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/NameXPtg.java
  
  Index: NameXPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/NameXPtg.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- NameXPtg.java     27 Jul 2003 18:49:52 -0000      1.2
  +++ NameXPtg.java     31 Aug 2003 06:16:56 -0000      1.3
  @@ -61,7 +61,7 @@
   package org.apache.poi.hssf.record.formula;
   
   import org.apache.poi.util.LittleEndian;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -113,7 +113,7 @@
           return SIZE;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "NO IDEA - NAME";
       }
  
  
  
  1.3       +3 -3      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/NotEqualPtg.java
  
  Index: NotEqualPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/NotEqualPtg.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- NotEqualPtg.java  31 Jul 2003 17:55:36 -0000      1.2
  +++ NotEqualPtg.java  31 Aug 2003 06:16:56 -0000      1.3
  @@ -56,7 +56,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Ptg class to implement not equal
  @@ -101,7 +101,7 @@
                  return 2;
         }
   
  -      public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
         {
                  return "<>";
         }
  @@ -111,7 +111,7 @@
   
           
                  buffer.append(operands[ 0 ]);
  -               buffer.append(toFormulaString((SheetReferences)null));
  +               buffer.append(toFormulaString((Workbook)null));
                  buffer.append(operands[ 1 ]);
                  return buffer.toString();
         }       
  
  
  
  1.7       +2 -3      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/NumberPtg.java
  
  Index: NumberPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/NumberPtg.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- NumberPtg.java    30 Apr 2003 04:39:02 -0000      1.6
  +++ NumberPtg.java    31 Aug 2003 06:16:56 -0000      1.7
  @@ -55,7 +55,7 @@
   package org.apache.poi.hssf.record.formula;
   
   import org.apache.poi.util.LittleEndian;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   /**
    * Number
    * Stores a floating point value in a formula
  @@ -113,7 +113,7 @@
           return SIZE;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "" + getValue();
       }
  @@ -125,4 +125,3 @@
         return ptg;
       }
   }
  -
  
  
  
  1.11      +2 -3      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ParenthesisPtg.java
  
  Index: ParenthesisPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ParenthesisPtg.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- ParenthesisPtg.java       30 Apr 2003 04:39:02 -0000      1.10
  +++ ParenthesisPtg.java       31 Aug 2003 06:16:56 -0000      1.11
  @@ -57,7 +57,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * While formula tokens are stored in RPN order and thus do not need parenthesis 
for 
  @@ -107,7 +107,7 @@
           return 1;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "()";
       }
  @@ -124,4 +124,3 @@
       }
   
   }
  -
  
  
  
  1.12      +3 -3      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/PowerPtg.java
  
  Index: PowerPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/PowerPtg.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- PowerPtg.java     30 Apr 2003 04:39:02 -0000      1.11
  +++ PowerPtg.java     31 Aug 2003 06:16:56 -0000      1.12
  @@ -62,7 +62,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -108,7 +108,7 @@
           return 2;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "^";
       }
  @@ -118,7 +118,7 @@
   
           
           buffer.append(operands[ 0 ]);
  -        buffer.append(toFormulaString((SheetReferences)null));
  +        buffer.append(toFormulaString((Workbook)null));
           buffer.append(operands[ 1 ]);
           return buffer.toString();
       }       
  
  
  
  1.32      +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Ptg.java
  
  Index: Ptg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Ptg.java,v
  retrieving revision 1.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- Ptg.java  27 Jul 2003 18:24:33 -0000      1.31
  +++ Ptg.java  31 Aug 2003 06:16:56 -0000      1.32
  @@ -63,7 +63,7 @@
   import java.util.List;
   import java.util.ArrayList;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -347,7 +347,7 @@
       /**
        * return a string representation of this token alone
        */
  -    public abstract String toFormulaString(SheetReferences refs);
  +    public abstract String toFormulaString(Workbook book);
       /**
        * dump a debug representation (hexdump) to a string
        */
  
  
  
  1.13      +3 -1      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Ref3DPtg.java
  
  Index: Ref3DPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Ref3DPtg.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Ref3DPtg.java     27 Jul 2003 18:49:52 -0000      1.12
  +++ Ref3DPtg.java     31 Aug 2003 06:16:56 -0000      1.13
  @@ -61,6 +61,7 @@
   import org.apache.poi.hssf.util.RangeAddress;
   import org.apache.poi.hssf.util.CellReference;
   import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   import org.apache.poi.util.BitField;
   import org.apache.poi.hssf.model.Workbook;
   
  @@ -193,8 +194,9 @@
   
       }
   
  -    public String toFormulaString(SheetReferences refs) {
  +    public String toFormulaString(Workbook book) {
           StringBuffer retval = new StringBuffer();
  +        SheetReferences refs = book == null ? null : book.getSheetReferences();
           if (refs != null) {
               retval.append(refs.getSheetName((int)this.field_1_index_extern_sheet));
               retval.append('!');
  
  
  
  1.10      +2 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ReferencePtg.java
  
  Index: ReferencePtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ReferencePtg.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ReferencePtg.java 27 Jul 2003 18:49:52 -0000      1.9
  +++ ReferencePtg.java 31 Aug 2003 06:16:56 -0000      1.10
  @@ -64,7 +64,7 @@
   import org.apache.poi.util.BitField;
   
   import org.apache.poi.hssf.util.CellReference;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * ReferencePtg - handles references (such as A1, A2, IA4)
  @@ -179,7 +179,7 @@
           return SIZE;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           //TODO -- should we store a cellreference instance in this ptg?? but .. 
memory is an issue, i believe!
           return (new 
CellReference(getRow(),getColumn(),!isRowRelative(),!isColRelative())).toString();
  
  
  
  1.9       +2 -3      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/StringPtg.java
  
  Index: StringPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/StringPtg.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- StringPtg.java    19 Aug 2003 14:07:40 -0000      1.8
  +++ StringPtg.java    31 Aug 2003 06:16:56 -0000      1.9
  @@ -56,7 +56,7 @@
   
   import org.apache.poi.util.LittleEndian;
   import org.apache.poi.util.BitField;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   import org.apache.poi.util.StringUtil;
   
   /**
  @@ -145,7 +145,7 @@
           }
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "\""+getValue()+"\"";
       }
  @@ -162,4 +162,3 @@
      }
   
   }
  -
  
  
  
  1.10      +2 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/SubtractPtg.java
  
  Index: SubtractPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/SubtractPtg.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- SubtractPtg.java  30 Apr 2003 04:39:02 -0000      1.9
  +++ SubtractPtg.java  31 Aug 2003 06:16:56 -0000      1.10
  @@ -61,7 +61,7 @@
   package org.apache.poi.hssf.record.formula;
   
   import java.util.List;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -105,7 +105,7 @@
           return 2;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "-";
       }
  
  
  
  1.3       +2 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/UnaryMinusPtg.java
  
  Index: UnaryMinusPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/UnaryMinusPtg.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- UnaryMinusPtg.java        25 Jul 2003 20:11:27 -0000      1.2
  +++ UnaryMinusPtg.java        31 Aug 2003 06:16:56 -0000      1.3
  @@ -56,7 +56,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Unary Plus operator
  @@ -105,7 +105,7 @@
       }
       
       /** Implementation of method from Ptg */
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "+";
       }
  
  
  
  1.3       +2 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/UnaryPlusPtg.java
  
  Index: UnaryPlusPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/UnaryPlusPtg.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- UnaryPlusPtg.java 25 Jul 2003 20:11:27 -0000      1.2
  +++ UnaryPlusPtg.java 31 Aug 2003 06:16:56 -0000      1.3
  @@ -56,7 +56,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Unary Plus operator
  @@ -105,7 +105,7 @@
       }
       
       /** Implementation of method from Ptg */
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "+";
       }
  
  
  
  1.3       +2 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/UnionPtg.java
  
  Index: UnionPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/UnionPtg.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- UnionPtg.java     30 Apr 2003 04:39:02 -0000      1.2
  +++ UnionPtg.java     31 Aug 2003 06:16:56 -0000      1.3
  @@ -54,7 +54,7 @@
   
   package org.apache.poi.hssf.record.formula;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * @author Glen Stampoultzis (glens at apache.org)
  @@ -95,7 +95,7 @@
       }
   
       /** Implementation of method from Ptg */
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return ",";
       }
  
  
  
  1.6       +2 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/UnknownPtg.java
  
  Index: UnknownPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/UnknownPtg.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- UnknownPtg.java   30 Apr 2003 04:39:02 -0000      1.5
  +++ UnknownPtg.java   31 Aug 2003 06:16:56 -0000      1.6
  @@ -60,7 +60,7 @@
    */
   package org.apache.poi.hssf.record.formula;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -94,7 +94,7 @@
           return size;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "UNKNOWN";
       }
  
  
  
  1.24      +1 -2      jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
  
  Index: HSSFCell.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- HSSFCell.java     19 Jul 2003 02:48:16 -0000      1.23
  +++ HSSFCell.java     31 Aug 2003 06:16:57 -0000      1.24
  @@ -748,8 +748,7 @@
   
       public String getCellFormula() {
           //Workbook.currentBook=book;
  -        SheetReferences refs = book.getSheetReferences();
  -        String retval = FormulaParser.toFormulaString(refs,
  +        String retval = FormulaParser.toFormulaString(book,
                   
((FormulaRecordAggregate)sheet.getValueRecord(row,cellNum)).getFormulaRecord().getParsedExpression());
           //Workbook.currentBook=null;
           return retval;
  
  
  
  1.9       +1 -3      jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFName.java
  
  Index: HSSFName.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFName.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- HSSFName.java     30 Apr 2003 04:39:00 -0000      1.8
  +++ HSSFName.java     31 Aug 2003 06:16:57 -0000      1.9
  @@ -123,8 +123,7 @@
   
       public String getReference() {
           String result;
  -        SheetReferences refs = book.getSheetReferences();
  -        result = name.getAreaReference(refs);
  +        result = name.getAreaReference(book);
   
           return result;
       }
  @@ -167,4 +166,3 @@
       }
   
   }
  -
  
  
  
  1.27      +1 -1      
jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
  
  Index: HSSFWorkbook.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- HSSFWorkbook.java 25 Jul 2003 13:39:08 -0000      1.26
  +++ HSSFWorkbook.java 31 Aug 2003 06:16:57 -0000      1.27
  @@ -891,7 +891,7 @@
                if (name == null) return null;
                //adding one here because 0 indicates a global named region; doesnt 
make sense for print areas
      
  -             return name.getAreaReference(workbook.getSheetReferences());
  +             return name.getAreaReference(workbook);
        }    
       
       /**
  
  
  
  1.2       +89 -0     
jakarta-poi/src/testcases/org/apache/poi/hssf/data/SquareMacro.xls
  
        <<Binary file>>
  
  
  1.8       +14 -2     
jakarta-poi/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java
  
  Index: TestFormulaParser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- TestFormulaParser.java    7 May 2003 03:40:52 -0000       1.7
  +++ TestFormulaParser.java    31 Aug 2003 06:16:57 -0000      1.8
  @@ -56,7 +56,6 @@
   import junit.framework.TestCase;
   
   import org.apache.poi.hssf.record.formula.*;
  -import org.apache.poi.hssf.util.SheetReferences;
   
   /**
    * Test the low level formula parser functionality. High level tests are to 
  @@ -145,7 +144,7 @@
           assertEquals(true, flag.getValue());
           assertEquals("Y", y.getValue());
           assertEquals("N", n.getValue());
  -        assertEquals("IF", funif.toFormulaString(new SheetReferences()));
  +        assertEquals("IF", funif.toFormulaString((Workbook) null));
           assertTrue("Goto ptg exists", goto1.isGoto());
       }
   
  @@ -285,6 +284,19 @@
                
        }
            
  +    public void testMacroFunction() {
  +        Workbook w = new Workbook();
  +        FormulaParser fp = new FormulaParser("FOO()", w);
  +        fp.parse();
  +        Ptg[] ptg = fp.getRPNPtg();
  +
  +        AbstractFunctionPtg tfunc = (AbstractFunctionPtg) ptg[0];
  +        assertEquals("externalflag", tfunc.getName());
  +
  +        NamePtg tname = (NamePtg) ptg[1];
  +        assertEquals("FOO", tname.toFormulaString(w));
  +    }
  +
        public static void main(String [] args) {
           System.out.println("Testing 
org.apache.poi.hssf.record.formula.FormulaParser");
           junit.textui.TestRunner.run(TestFormulaParser.class);
  
  
  
  1.31      +52 -6     
jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java
  
  Index: TestFormulas.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- TestFormulas.java 4 May 2003 18:22:09 -0000       1.30
  +++ TestFormulas.java 31 Aug 2003 06:16:57 -0000      1.31
  @@ -744,7 +744,7 @@
       }
       
       public void testSheetFunctions()
  -        throws java.io.IOException
  +        throws IOException
       {
           String filename = System.getProperty("HSSF.testdata.path");
   
  @@ -818,7 +818,7 @@
       }
       
       public void testStringFormulas()
  -        throws java.io.IOException
  +        throws IOException
       {
           String readFilename = System.getProperty("HSSF.testdata.path");
   
  @@ -852,7 +852,7 @@
       
       
       public void testLogicalFormulas()
  -        throws java.io.IOException
  +        throws IOException
       {
   
               File file = File.createTempFile("testLogicalFormula",".xls");
  @@ -880,7 +880,7 @@
       }
       
       public void testDateFormulas()
  -        throws java.io.IOException
  +        throws IOException
       {
           String readFilename = System.getProperty("HSSF.testdata.path");
   
  @@ -918,7 +918,7 @@
   
       
       public void testIfFormulas()
  -        throws java.io.IOException
  +        throws IOException
       {
           String readFilename = System.getProperty("HSSF.testdata.path");
   
  @@ -1008,7 +1008,7 @@
       }
   
        public void testSumIf()
  -             throws java.io.IOException
  +             throws IOException
        {
                String readFilename = System.getProperty("HSSF.testdata.path");        
 
                String function ="SUMIF(A1:A5,\">4000\",B1:B5)";
  @@ -1060,6 +1060,52 @@
                assertTrue("sumif == 0 bytes", file.length() > 0);
        }
       
  +    public void testSquareMacro() throws IOException {
  +        File dir = new File(System.getProperty("HSSF.testdata.path"));
  +        File xls = new File(dir, "SquareMacro.xls");
  +        FileInputStream in = new FileInputStream(xls);
  +        HSSFWorkbook w;
  +        try {
  +            w = new HSSFWorkbook(in);
  +        } finally {
  +            in.close();
  +        }
  +        HSSFSheet s0 = w.getSheetAt(0);
  +        HSSFRow[] r = {s0.getRow(0), s0.getRow(1)};
  +
  +        HSSFCell a1 = r[0].getCell((short) 0);
  +        assertEquals("square(1)", a1.getCellFormula());
  +        assertEquals(1d, a1.getNumericCellValue(), 1e-9);
  +
  +        HSSFCell a2 = r[1].getCell((short) 0);
  +        assertEquals("square(2)", a2.getCellFormula());
  +        assertEquals(4d, a2.getNumericCellValue(), 1e-9);
  +
  +        HSSFCell b1 = r[0].getCell((short) 1);
  +        assertEquals("IF(TRUE,square(1))", b1.getCellFormula());
  +        assertEquals(1d, b1.getNumericCellValue(), 1e-9);
  +
  +        HSSFCell b2 = r[1].getCell((short) 1);
  +        assertEquals("IF(TRUE,square(2))", b2.getCellFormula());
  +        assertEquals(4d, b2.getNumericCellValue(), 1e-9);
  +
  +        HSSFCell c1 = r[0].getCell((short) 2);
  +        assertEquals("square(square(1))", c1.getCellFormula());
  +        assertEquals(1d, c1.getNumericCellValue(), 1e-9);
  +
  +        HSSFCell c2 = r[1].getCell((short) 2);
  +        assertEquals("square(square(2))", c2.getCellFormula());
  +        assertEquals(16d, c2.getNumericCellValue(), 1e-9);
  +
  +        HSSFCell d1 = r[0].getCell((short) 3);
  +        assertEquals("square(one())", d1.getCellFormula());
  +        assertEquals(1d, d1.getNumericCellValue(), 1e-9);
  +
  +        HSSFCell d2 = r[1].getCell((short) 3);
  +        assertEquals("square(two())", d2.getCellFormula());
  +        assertEquals(4d, d2.getNumericCellValue(), 1e-9);
  +    }
  +
       public static void main(String [] args) {
           System.out
           .println("Testing org.apache.poi.hssf.usermodel.TestFormulas");
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to