Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2003-2007 the original author or authors.
   *
   * Licensed 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.codehaus.groovy.antlr;
 
 import java.util.List;
A simple buffer that provides line/col access to chunks of source code held within itself.

Author(s):
Jeremy Rayner
Version:
$Revision: 7922 $
 
 public class SourceBuffer {
     private final List lines;
     private StringBuffer current;
 
     public SourceBuffer() {
          = new ArrayList();
         //lines.add(new StringBuffer()); // dummy row for position [0] in the List
 
          = new StringBuffer();
         .add();
     }

    
Obtains a snippet of the source code within the bounds specified

Parameters:
start (inclusive line/ inclusive column)
end (inclusive line / exclusive column)
Returns:
specified snippet of source code as a String, or null if no source available
 
     public String getSnippet(LineColumn startLineColumn end) {
         // preconditions
         if (start == null || end == null) { return null; } // no text to return
         if (start.equals(end)) { return null; } // no text to return
         if (.size() == 1 && .length() == 0) { return null; } // buffer hasn't been filled yet
 
         // working variables
         int startLine = start.getLine();
         int startColumn = start.getColumn();
         int endLine = end.getLine();
         int endColumn = end.getColumn();
 
         // reset any out of bounds requests
         if (startLine < 1) { startLine = 1;}
         if (endLine < 1) { endLine = 1;}
         if (startColumn < 1) { startColumn = 1;}
         if (endColumn < 1) { endColumn = 1;}
         if (startLine > .size()) { startLine = .size(); }
         if (endLine > .size()) { endLine = .size(); }
 
         // obtain the snippet from the buffer within specified bounds
         StringBuffer snippet = new StringBuffer();
         for (int i = startLine - 1; i < endLine;i++) {
             String line = ((StringBuffer).get(i)).toString();
             if (startLine == endLine) {
                 // reset any out of bounds requests (again)
                 if (startColumn > line.length()) { startColumn = line.length();}
                 if (startColumn < 1) { startColumn = 1;}
                 if (endColumn > line.length()) { endColumn = line.length() + 1;}
                 if (endColumn < 1) { endColumn = 1;}
 
                 line = line.substring(startColumn - 1, endColumn - 1);
             } else {
                 if (i == startLine - 1) {
                     if (startColumn - 1 < line.length()) {
                         line = line.substring(startColumn - 1);
                     }
                 }
                 if (i == endLine - 1) {
                     if (endColumn - 1 < line.length()) {
                         line = line.substring(0,endColumn - 1);
                     }
                 }
             }
             snippet.append(line);
         }
         return snippet.toString();
     }

    
Writes the specified character into the buffer

Parameters:
c
 
     public void write(int c) {
        if (c != -1) {
            .append((char)c);
        }
        if (c == '\n') {
             = new StringBuffer();
            .add();
        }
    }
New to GrepCode? Check out our FAQ X