ytalwar     2005/03/16 15:24:47

  Modified:    java/src/org/apache/xalan/xsltc/compiler Text.java
  Log:
  This is a fix for XALANJ-2081.
  In class org.apache.xalan.xsltc.compiler.Text, a check was being done to find 
out if a given text string is all whitespaces.
  In case, a given text string is all whitespace, a call to serializer is not 
made.
  The code was using trim() method from java.lang.String.  trim() method 
trimmed characters as whitespaces 
  that are not considered as whitespace in XML.
  
  The code logic is changed to check if a given string is all whitespace 
accoding to XML specifications.
  
  I would like to thank Michael Glavassevich and Brian Minchau for their input 
to resolve this issue.
  
  Revision  Changes    Path
  1.18      +28 -4     
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Text.java
  
  Index: Text.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Text.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- Text.java 16 Feb 2004 22:25:10 -0000      1.17
  +++ Text.java 16 Mar 2005 23:24:47 -0000      1.18
  @@ -103,10 +103,29 @@
            LiteralElement element = (LiteralElement)getParent();
            String space = element.getAttribute("xml:space");
            if ((space == null) || (!space.equals("preserve")))
  -             if (_text.trim().length() == 0) _ignore = true;
  +        {
  +            int i;
  +            final int textLength = _text.length();
  +            for (i = 0; i < textLength; i++) {
  +                char c = _text.charAt(i);
  +                if (!isWhitespace(c))
  +                    break;
  +            }
  +            if (i == textLength)
  +                _ignore = true;
  +        }
        }
        else {
  -         if (_text.trim().length() == 0) _ignore = true;
  +        int i;
  +        final int textLength = _text.length();
  +        for (i = 0; i < textLength; i++) 
  +        {
  +            char c = _text.charAt(i);
  +            if (!isWhitespace(c))
  +                break;
  +        }
  +        if (i == textLength)
  +            _ignore = true;
        }
       }
   
  @@ -125,7 +144,12 @@
       protected boolean contextDependent() {
        return false;
       }
  -
  + 
  +    private static boolean isWhitespace(char c)
  +    {
  +     return (c == 0x20 || c == 0x09 || c == 0x0A || c == 0x0D);
  +    }
  + 
       public void translate(ClassGenerator classGen, MethodGenerator 
methodGen) {
        final ConstantPoolGen cpg = classGen.getConstantPool();
        final InstructionList il = methodGen.getInstructionList();
  
  
  

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

Reply via email to