/* * 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; } }