import com.vaadin.sass.internal.handler.SCSSDocumentHandler;
import com.vaadin.sass.internal.handler.SCSSDocumentHandlerImpl;
import com.vaadin.sass.internal.handler.SCSSErrorHandler;
+import com.vaadin.sass.internal.parser.ParseException;
import com.vaadin.sass.internal.parser.Parser;
+import com.vaadin.sass.internal.parser.SCSSParseException;
import com.vaadin.sass.internal.resolver.ScssStylesheetResolver;
import com.vaadin.sass.internal.resolver.VaadinResolver;
import com.vaadin.sass.internal.tree.BlockNode;
* imported children scss node will have the same encoding as their
* parent, ultimately the root scss file. The root scss node has this
* "encoding" parameter to be null. Its encoding is determined by the
+ *
* @charset declaration, the default one is ASCII.
*/
File file = new File(identifier);
Parser parser = new Parser();
parser.setErrorHandler(new SCSSErrorHandler());
parser.setDocumentHandler(handler);
- parser.parseStyleSheet(source);
+
+ try {
+ parser.parseStyleSheet(source);
+ } catch (ParseException e) {
+ // catch ParseException, re-throw a SCSSParseException which has
+ // file name info.
+ throw new SCSSParseException(e, identifier);
+ }
stylesheet.setCharset(parser.getInputSource().getEncoding());
return stylesheet;
--- /dev/null
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * 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 com.vaadin.sass.internal.parser;
+
+public class SCSSParseException extends ParseException {
+ private ParseException parseException;
+ private String fileName;
+
+ public SCSSParseException(ParseException parseException, String fileName) {
+ this.parseException = parseException;
+ this.fileName = fileName;
+ }
+
+ @Override
+ public String getMessage() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("Error when parsing file ").append(fileName)
+ .append("\n").append(parseException.getMessage());
+ return builder.toString();
+ }
+}