cal/cal1.jsp from the jsp-examples webapp starts like this:

<HTML>
<!-- 
  Copyright (c) 1999 The Apache Software Foundation. All rights 
  reserved.
-->
<HEAD><TITLE> 

Before this commit, cal1.jsp's SMAP started like this:

*L
1,2:41
3:42
4:42
5:42
6:43,2

Now it starts like this:

*L
1,2:41
6:43,2

I think the reason lines 3, 4, and 5 aren't being SMAPped is that you only add 
LineInfos inside "if (breakAtLF || count < 0) {".  This adds LineInfos when the output 
line advances, but not when the input line alone advances.  To SMAP template text 
fully, you have to add a LineInfo every time the line number advances in the input 
file or the output file.

Eric


----- Original Message ----- 
From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, September 16, 2003 10:46 AM
Subject: cvs commit: 
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler Generator.java 
Node.java SmapStratum.java SmapUtil.java


> kinman      2003/09/16 10:46:44
> 
>   Modified:    jasper2/src/share/org/apache/jasper/compiler Generator.java
>                         Node.java SmapStratum.java SmapUtil.java
>   Log:
>   - For template texts that generate multiple Java lines, addidtional mapping
>     informantion are kept in the TemplateText node, to aide SMAP generation.
>   
>   Revision  Changes    Path
>   1.208     +23 -14    
> jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java
>   
>   Index: Generator.java
>   ===================================================================
>   RCS file: 
> /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
>   retrieving revision 1.207
>   retrieving revision 1.208
>   diff -u -r1.207 -r1.208
>   --- Generator.java 15 Sep 2003 13:43:54 -0000 1.207
>   +++ Generator.java 16 Sep 2003 17:46:43 -0000 1.208
>   @@ -1867,21 +1867,25 @@
>                    return;
>                }
>    
>   -            if (ctxt.getOptions().genStringAsCharArray()) {
>   -                if (textSize <= 3) {
>   -                   // Spcial case small text strings
>   -                   n.setBeginJavaLine(out.getJavaLine());
>   -                   out.printil("out.write(" + quote(text.charAt(0)) + ");");
>   -                   if (textSize > 1) {
>   -                       out.printil("out.write(" + quote(text.charAt(1)) + ");");
>   +            if (textSize <= 3) {
>   +               // Special case small text strings
>   +               n.setBeginJavaLine(out.getJavaLine());
>   +               int lineInc = 0;
>   +               for (int i = 0; i < textSize; i++) {
>   +                   char ch = text.charAt(i);
>   +                   out.printil("out.write(" + quote(ch) + ");");
>   +                   if (i > 0) {
>   +                       n.addSmap(lineInc);
>                       }
>   -                   if (textSize > 2) {
>   -                       out.printil("out.write(" + quote(text.charAt(2)) + ");");
>   +                   if (ch == '\n') {
>   +                       lineInc++;
>                       }
>   -                   n.setEndJavaLine(out.getJavaLine());
>   -                   return;
>                   }
>   +               n.setEndJavaLine(out.getJavaLine());
>   +               return;
>   +           }
>    
>   +            if (ctxt.getOptions().genStringAsCharArray()) {
>                   // Generate Strings as char arrays, for performance
>                    ServletWriter caOut;
>                    if (charArrayBuffer == null) {
>   @@ -1915,6 +1919,7 @@
>                StringBuffer sb = new StringBuffer("out.write(\"");
>                int initLength = sb.length();
>                int count = JspUtil.CHUNKSIZE;
>   +            int srcLine = 0; // relative to starting srouce line
>                for (int i = 0; i < text.length(); i++) {
>                    char ch = text.charAt(i);
>                    --count;
>   @@ -1930,6 +1935,7 @@
>                            break;
>                        case '\n' :
>                            sb.append('\\').append('n');
>   +                        srcLine++;
>    
>                            if (breakAtLF || count < 0) {
>                                // Generate an out.write() when see a '\n' in template
>   @@ -1940,6 +1946,9 @@
>                                }
>                                sb.setLength(initLength);
>                                count = JspUtil.CHUNKSIZE;
>   +
>   +                            // add a Smap for this line
>   +                            n.addSmap(srcLine);
>                            }
>                            break;
>                        case '\t' : // Not sure we need this
>   
>   
>   
>   1.77      +24 -4     
> jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Node.java
>   
>   Index: Node.java
>   ===================================================================
>   RCS file: 
> /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Node.java,v
>   retrieving revision 1.76
>   retrieving revision 1.77
>   diff -u -r1.76 -r1.77
>   --- Node.java 2 Sep 2003 21:39:59 -0000 1.76
>   +++ Node.java 16 Sep 2003 17:46:43 -0000 1.77
>   @@ -63,6 +63,7 @@
>    import java.util.Iterator;
>    import java.util.List;
>    import java.util.Vector;
>   +import java.util.ArrayList;
>    
>    import javax.servlet.jsp.tagext.BodyTag;
>    import javax.servlet.jsp.tagext.DynamicAttributes;
>   @@ -1921,6 +1922,8 @@
>         */
>        public static class TemplateText extends Node {
>    
>   +        private ArrayList extraSmap = null;
>   +
>    public TemplateText(String text, Mark start, Node parent) {
>        super(null, null, text, start, parent);
>    }
>   @@ -1957,13 +1960,30 @@
>    public boolean isAllSpace() {
>        boolean isAllSpace = true;
>        for (int i=0; i<text.length(); i++) {
>   - if (!Character.isSpace(text.charAt(i))) {
>   + if (!Character.isWhitespace(text.charAt(i))) {
>        isAllSpace = false;
>        break;
>    }
>        }
>        return isAllSpace;
>    }
>   +
>   +        /**
>   +         * Add a source to Java line mapping
>   +         * @param srcLine The postion of the source line, relative to the line
>   +         *        at the start of this node.  The corresponding java line is
>   +         *        assumed to be consecutive, i.e. one more than the last.
>   +         */
>   +        public void addSmap(int srcLine) {
>   +            if (extraSmap == null) {
>   +                extraSmap = new ArrayList();
>   +            }
>   +            extraSmap.add(new Integer(srcLine));
>   +        }
>   +
>   +        public ArrayList getExtraSmap() {
>   +            return extraSmap;
>   +        }
>        }
>    
>        /*********************************************************************
>   
>   
>   
>   1.11      +6 -0      
> jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/SmapStratum.java
>   
>   Index: SmapStratum.java
>   ===================================================================
>   RCS file: 
> /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/SmapStratum.java,v
>   retrieving revision 1.10
>   retrieving revision 1.11
>   diff -u -r1.10 -r1.11
>   --- SmapStratum.java 31 Aug 2003 03:46:29 -0000 1.10
>   +++ SmapStratum.java 16 Sep 2003 17:46:43 -0000 1.11
>   @@ -210,6 +210,12 @@
>         */
>        public void optimizeLineSection() {
>    
>   +/* Some debugging code
>   +        for (int i = 0; i < lineData.size(); i++) {
>   +            LineInfo li = (LineInfo)lineData.get(i);
>   +            System.out.print(li.toString());
>   +        }
>   +*/
>            //Incorporate each LineInfo into the previous LineInfo's 
>            //outputLineIncrement, if possible
>            int i = 0;
>   
>   
>   
>   1.19      +8 -16     
> jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/SmapUtil.java
>   
>   Index: SmapUtil.java
>   ===================================================================
>   RCS file: 
> /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/SmapUtil.java,v
>   retrieving revision 1.18
>   retrieving revision 1.19
>   diff -u -r1.18 -r1.19
>   --- SmapUtil.java 25 Aug 2003 03:58:48 -0000 1.18
>   +++ SmapUtil.java 16 Sep 2003 17:46:43 -0000 1.19
>   @@ -77,6 +77,7 @@
>     * @author Shawn Bayern
>     * @author Robert Field (inner SDEInstaller class)
>     * @author Mark Roth
>   + * @author Kin-man Chung
>     */
>    public class SmapUtil {
>    
>   @@ -613,25 +614,16 @@
>                int iOutputStartLine = n.getBeginJavaLine();
>                smap.addLineData(iInputStartLine, fileName, 1, iOutputStartLine, 1);
>    
>   -            //Walk through the node text the same way Generator.java's 
>   -            //visit(Node.TemplateText n) does.  Every time the 
>   -            //line number advances in the input file or the output file, 
>   -            //add a LineInfo with the new line numbers.
>   -            String text = n.getText();
>   -            int count = JspUtil.CHUNKSIZE;
>   -            for (int i = 0; i < text.length() - 1; i++) {
>   -                --count;
>   -                if (text.charAt(i) == '\n') {
>   -                    iInputStartLine++;
>   -                    if (breakAtLF || count < 0) {
>   -                        iOutputStartLine++;
>   -                        count = JspUtil.CHUNKSIZE;
>   -                    }
>   +            // Output additional mappings in the text
>   +            java.util.ArrayList extraSmap = n.getExtraSmap();
>   +
>   +            if (extraSmap != null) {
>   +                for (int i = 0; i < extraSmap.size(); i++) {
>                        smap.addLineData(
>   -                        iInputStartLine,
>   +                        iInputStartLine+((Integer)extraSmap.get(i)).intValue(),
>                            fileName,
>                            1,
>   -                        iOutputStartLine,
>   +                        ++iOutputStartLine,
>                            1);
>                    }
>                }
>   
>   
>   
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 

Reply via email to