146 lines
3.6 KiB
Java
146 lines
3.6 KiB
Java
/*
|
|
* 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;
|
|
|
|
import java.net.MalformedURLException;
|
|
import java.net.URL;
|
|
|
|
import org.apache.jasper.JspCompilationContext;
|
|
|
|
/**
|
|
* Mark represents a point in the JSP input.
|
|
*
|
|
* @author Anil K. Vijendran
|
|
*/
|
|
final class Mark {
|
|
|
|
// position within current stream
|
|
int cursor, line, col;
|
|
|
|
// current stream
|
|
char[] stream = null;
|
|
|
|
// name of the current file
|
|
private String fileName;
|
|
|
|
private JspCompilationContext ctxt;
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @param reader JspReader this mark belongs to
|
|
* @param inStream current stream for this mark
|
|
* @param name JSP file name
|
|
*/
|
|
Mark(JspReader reader, char[] inStream, String name) {
|
|
this.ctxt = reader.getJspCompilationContext();
|
|
this.stream = inStream;
|
|
this.cursor = 0;
|
|
this.line = 1;
|
|
this.col = 1;
|
|
this.fileName = name;
|
|
}
|
|
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
Mark(Mark other) {
|
|
init(other, false);
|
|
}
|
|
|
|
void update(int cursor, int line, int col) {
|
|
this.cursor = cursor;
|
|
this.line = line;
|
|
this.col = col;
|
|
}
|
|
|
|
void init(Mark other, boolean singleFile) {
|
|
this.cursor = other.cursor;
|
|
this.line = other.line;
|
|
this.col = other.col;
|
|
|
|
if (!singleFile) {
|
|
this.ctxt = other.ctxt;
|
|
this.stream = other.stream;
|
|
this.fileName = other.fileName;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
Mark(JspCompilationContext ctxt, String filename, int line, int col) {
|
|
this.ctxt = ctxt;
|
|
this.stream = null;
|
|
this.cursor = 0;
|
|
this.line = line;
|
|
this.col = col;
|
|
this.fileName = filename;
|
|
}
|
|
|
|
|
|
public int getLineNumber() {
|
|
return line;
|
|
}
|
|
|
|
public int getColumnNumber() {
|
|
return col;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return getFile()+"("+line+","+col+")";
|
|
}
|
|
|
|
public String getFile() {
|
|
return this.fileName;
|
|
}
|
|
|
|
/**
|
|
* Gets the URL of the resource with which this Mark is associated
|
|
*
|
|
* @return URL of the resource with which this Mark is associated
|
|
*
|
|
* @exception MalformedURLException if the resource pathname is incorrect
|
|
*/
|
|
public URL getURL() throws MalformedURLException {
|
|
return ctxt.getResource(getFile());
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object other) {
|
|
if (other instanceof Mark) {
|
|
Mark m = (Mark) other;
|
|
return this.cursor == m.cursor && this.line == m.line && this.col == m.col;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
final int prime = 31;
|
|
int result = 1;
|
|
result = prime * result + col;
|
|
result = prime * result + cursor;
|
|
result = prime * result + line;
|
|
return result;
|
|
}
|
|
}
|