pbwest      2002/11/11 08:47:01

  Modified:    src/org/apache/fop/fo/expr Tag: FOP_0-20-0_Alt-Design
                        PropertyParser.java
  Log:
  Extend handling of numeric args to functions to include IntegerType arguments.
  Add funcNumericErrorStr().
  Modified makeEms arg list.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.5.2.17  +100 -16   xml-fop/src/org/apache/fop/fo/expr/PropertyParser.java
  
  Index: PropertyParser.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/expr/PropertyParser.java,v
  retrieving revision 1.5.2.16
  retrieving revision 1.5.2.17
  diff -u -r1.5.2.16 -r1.5.2.17
  --- PropertyParser.java       21 Oct 2002 16:07:31 -0000      1.5.2.16
  +++ PropertyParser.java       11 Nov 2002 16:47:01 -0000      1.5.2.17
  @@ -240,6 +240,16 @@
                   + getExpr();
       }
   
  +
  +    /**
  +     * Generate an function numeric argument error string.
  +     * @return function numeric argument error message.
  +     */
  +    private String funcNumericErrorStr() {
  +        return "Function requires Numeric or integer argument: "
  +                + getExpr();
  +    }
  +
       /**
        * Try to parse an addition or subtraction expression and return the
        * resulting PropertyValue.
  @@ -558,7 +568,7 @@
                                Double.parseDouble(currentTokenValue));
               break;
           case RELATIVE_LENGTH:
  -            prop = Ems.makeEms(property,
  +            prop = Ems.makeEms(node, property,
                                  Double.parseDouble(currentTokenValue));
               break;
   
  @@ -607,45 +617,119 @@
                   // Numeric functions
                   if (function.equals("floor")) {
                       PropertyValue[] args = parseArgs(1);
  -                    prop = new Numeric
  -                            (property, ((Numeric)args[0]).floor());
  +                    switch (args[0].getType()) {
  +                    case PropertyValue.INTEGER:
  +                        args[0] =
  +                            new Numeric
  +                                (property, ((IntegerType)args[0]).getInt());
  +                    case PropertyValue.NUMERIC:
  +                        prop = new Numeric
  +                                (property, ((Numeric)args[0]).floor());
  +                        break;
  +                    default:
  +                        throw new PropertyException(funcNumericErrorStr());
  +                    }
                       break;
                   }
                   if (function.equals("ceiling")) {
                       PropertyValue[] args = parseArgs(1);
  -                    prop = new Numeric
  -                            (property, ((Numeric)args[0]).ceiling());
  +                    switch (args[0].getType()) {
  +                    case PropertyValue.INTEGER:
  +                        args[0] =
  +                            new Numeric
  +                                (property, ((IntegerType)args[0]).getInt());
  +                    case PropertyValue.NUMERIC:
  +                        prop = new Numeric
  +                                (property, ((Numeric)args[0]).ceiling());
  +                        break;
  +                    default:
  +                        throw new PropertyException(funcNumericErrorStr());
  +                    }
                       break;
                   }
                   if (function.equals("round")) {
                       PropertyValue[] args = parseArgs(1);
  -                    prop = new Numeric
  -                            (property, ((Numeric)args[0]).round());
  +                    switch (args[0].getType()) {
  +                    case PropertyValue.INTEGER:
  +                        args[0] =
  +                            new Numeric
  +                                (property, ((IntegerType)args[0]).getInt());
  +                    case PropertyValue.NUMERIC:
  +                        prop = new Numeric
  +                                (property, ((Numeric)args[0]).round());
  +                        break;
  +                    default:
  +                        throw new PropertyException(funcNumericErrorStr());
  +                    }
                       break;
                   }
                   if (function.equals("min")) {
                       PropertyValue[] args = parseArgs(2);
  -                    prop = ((Numeric)args[0]).min((Numeric)args[1]);
  +                    switch (args[0].getType()) {
  +                    case PropertyValue.INTEGER:
  +                        args[0] =
  +                            new Numeric
  +                                (property, ((IntegerType)args[0]).getInt());
  +                    case PropertyValue.NUMERIC:
  +                        prop = ((Numeric)args[0]).min((Numeric)args[1]);
  +                        break;
  +                    default:
  +                        throw new PropertyException(funcNumericErrorStr());
  +                    }
                       break;
                   }
                   if (function.equals("max")) {
                       PropertyValue[] args = parseArgs(2);
  -                    prop = ((Numeric)args[0]).max((Numeric)args[1]);
  +                    switch (args[0].getType()) {
  +                    case PropertyValue.INTEGER:
  +                        args[0] =
  +                            new Numeric
  +                                (property, ((IntegerType)args[0]).getInt());
  +                    case PropertyValue.NUMERIC:
  +                        prop = ((Numeric)args[0]).max((Numeric)args[1]);
  +                        break;
  +                    default:
  +                        throw new PropertyException(funcNumericErrorStr());
  +                    }
                       break;
                   }
                   if (function.equals("abs")) {
                       PropertyValue[] args = parseArgs(1);
  -                    prop = ((Numeric)args[0]).abs();
  +                    switch (args[0].getType()) {
  +                    case PropertyValue.INTEGER:
  +                        args[0] =
  +                            new Numeric
  +                                (property, ((IntegerType)args[0]).getInt());
  +                    case PropertyValue.NUMERIC:
  +                        prop = ((Numeric)args[0]).abs();
  +                        break;
  +                    default:
  +                        throw new PropertyException(funcNumericErrorStr());
  +                    }
                       break;
                   }
   
                   // Color functions
                   if (function.equals("rgb")) {
  +                    // Currently arguments must all be integers.
  +                    System.out.println("rgb: " + getExpr());
                       PropertyValue[] args = parseArgs(3);
  -                    prop = new ColorType
  -                            (property, ((Numeric)args[0]).asInt(),
  -                             ((Numeric)args[1]).asInt(),
  -                             ((Numeric)args[2]).asInt());
  +                    switch (args[0].getType()) {
  +                    case PropertyValue.INTEGER:
  +                        prop = new ColorType
  +                                (property, ((IntegerType)args[0]).getInt(),
  +                                 ((IntegerType)args[1]).getInt(),
  +                                 ((IntegerType)args[2]).getInt());
  +                        break;
  +                    case PropertyValue.NUMERIC:
  +                        prop = new ColorType
  +                                (property, ((Numeric)args[0]).asInt(),
  +                                 ((Numeric)args[1]).asInt(),
  +                                 ((Numeric)args[2]).asInt());
  +                        break;
  +                    default:
  +                        throw new PropertyException(funcNumericErrorStr());
  +                    }
                       break;
                   }
                   if (function.equals("rgb-icc")) {
  
  
  

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

Reply via email to