Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to You under the Apache License, Version 2.0
   * (the "License"); you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
  * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package org.apache.jasper.compiler;
 
 
 public class TextOptimizer {

    
A visitor to concatenate contiguous template texts.
 
     static class TextCatVisitor extends Node.Visitor {
 
         private Options options;
         private PageInfo pageInfo;
         private int textNodeCount = 0;
         private Node.TemplateText firstTextNode = null;
         private StringBuilder textBuffer;
         private final String emptyText = new String("");
 
         public TextCatVisitor(Compiler compiler) {
              = compiler.getCompilationContext().getOptions();
              = compiler.getPageInfo();
         }
 
         public void doVisit(Node nthrows JasperException {
             collectText();
         }
 
 	/*
          * The following directis are ignored in text concatenation
          */
 
         public void visit(Node.PageDirective nthrows JasperException {
         }
 
         public void visit(Node.TagDirective nthrows JasperException {
         }
 
         public void visit(Node.TaglibDirective nthrows JasperException {
         }
 
         public void visit(Node.AttributeDirective nthrows JasperException {
         }
 
         public void visit(Node.VariableDirective nthrows JasperException {
         }
 
         /*
          * Don't concatenate text across body boundaries
          */
         public void visitBody(Node nthrows JasperException {
             super.visitBody(n);
             collectText();
         }
 
         public void visit(Node.TemplateText nthrows JasperException {
             if ((.getTrimSpaces() || .isTrimDirectiveWhitespaces()) 
                     && n.isAllSpace()) {
                 n.setText();
                 return;
             }
 
             if (++ == 0) {
                  = n;
                  = new StringBuilder(n.getText());
             } else {
                 // Append text to text buffer
                 .append(n.getText());
                 n.setText();
             }
         }

        
This method breaks concatenation mode. As a side effect it copies the concatenated string to the first text node
 
         private void collectText() {
 
             if ( > 1) {
                 // Copy the text in buffer into the first template text node.
                 .setText(.toString());
            }
             = 0;
        }
    }
    public static void concatenate(Compiler compilerNode.Nodes page)
            throws JasperException {
        TextCatVisitor v = new TextCatVisitor(compiler);
        page.visit(v);
	// Cleanup, in case the page ends with a template text
        v.collectText();
    }
New to GrepCode? Check out our FAQ X