changeset 616:56b0b9018319

improve ThemeParser error handling
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 29 Dec 2015 22:19:11 -0700
parents abc3198c86dd
children e54c1646eed0
files core/src/luan/impl/ThemeParser.java
diffstat 1 files changed, 12 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
diff -r abc3198c86dd -r 56b0b9018319 core/src/luan/impl/ThemeParser.java
--- a/core/src/luan/impl/ThemeParser.java	Thu Dec 17 01:53:48 2015 -0700
+++ b/core/src/luan/impl/ThemeParser.java	Tue Dec 29 22:19:11 2015 -0700
@@ -176,13 +176,13 @@
 	}
 
 	private Stmt parseDef() throws ParseException {
-		int start = parser.currentIndex();
+		int start = parser.begin();
 		if( !parser.match("{define:") )
-			return null;
+			return parser.failure(null);
 		String name = parseName();
 		if( name==null )
 			throw parser.exception("invalid block name");
-		if( !parser.match("}") )
+		if( !parser.match('}') )
 			throw parser.exception("unclosed define tag");
 		String spaces = "";
 		boolean indent = BlankLine();
@@ -199,7 +199,7 @@
 		FnDef fnDef = newFnDef(start,block);
 		frame = frame.parent;
 		Stmt rtn = new SetStmt(fnName,fnDef);
-		return rtn;
+		return parser.success(rtn);
 	}
 
 	private Stmt parseBody(String tagName,final String spaces,boolean afterIndent) throws ParseException {
@@ -316,7 +316,7 @@
 		String name = parseName();
 		if( name==null )
 			throw exception("invalid block name");
-		if( !parser.match("}") )
+		if( !parser.match('}') )
 			return null;
 		if( tagSpaces != null ) {
 			parser.begin();
@@ -351,12 +351,12 @@
 
 	private Stmt parseSimpleTag(String spaces) throws ParseException {
 		int start = parser.begin();
-		if( !parser.match("{") )
+		if( !parser.match('{') )
 			return parser.failure(null);
 		String name = parseName();
 		if( name==null )
 			return parser.failure(null);
-		if( !parser.match("}") )
+		if( !parser.match('}') )
 			return parser.failure(null);
 //		rtn = "<% env." + name + (attrs.isEmpty() ? "()" : table(attrs)) + " %>";
 		Expr env = env();
@@ -397,8 +397,12 @@
 		return parser.match( "\r\n" ) || parser.match( '\r' ) || parser.match( '\n' );
 	}
 
-	private String parseName() {
+	private String parseName() throws ParseException {
 		int start = parser.begin();
+		if( parser.match('/') )
+			throw exception("bad closing tag");
+		if( parser.match("define:") )
+			throw exception("unexpected definition");
 		if( !NameChar() )
 			return parser.failure(null);
 		while( NameChar() );