/* * Copyright 2004-2012 the Seasar Foundation and the Others. * * 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.seasar.mayaa.impl.cycle.script.rhino; import org.mozilla.javascript.EvaluatorException; /** * @author Taro Kato (Gluegent, Inc.) */ public class OffsetLineRhinoException extends EvaluatorException { private static final long serialVersionUID = 2330731436282320920L; int _offsetLine; public OffsetLineRhinoException(String detail, String sourceName, int lineNumber, String lineSource, int columnNumber, int offsetLine, Throwable cause) { super(detail, sourceName, lineNumber, lineSource, columnNumber); if (cause != null) { initCause(cause); } _offsetLine = offsetLine; } public int getOffsetLine() { return _offsetLine; } public String details() { return super.details(); } public String emphasizeDetails() { String message = super.details(); String[] lines = message.split("\n"); StringBuffer sb = new StringBuffer(); for (int i = 0; i < lines.length; i++) { if (i == _offsetLine) { lines[i] = decorate(lines[i]); } sb.append(lines[i]); sb.append("\n"); } return sb.toString(); } private String decorate(String line) { for (int j = 0; j < line.length(); j++) { if (line.charAt(j) != '\t' && line.charAt(j) != ' ') { return line.substring(0, j) + "<span style=\"color: red; text-decoration: underline\">" + line.substring(j) + "</span>"; } } return line; } }