diff src/luan/modules/parsers/Html.java @ 1289:8d54bcc0b6d3

add css style parser
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 31 Dec 2018 20:59:08 -0700
parents 323743a7f317
children f41919741100
line wrap: on
line diff
--- a/src/luan/modules/parsers/Html.java	Mon Dec 31 18:39:04 2018 -0700
+++ b/src/luan/modules/parsers/Html.java	Mon Dec 31 20:59:08 2018 -0700
@@ -7,14 +7,11 @@
 import luan.LuanState;
 import luan.LuanTable;
 import luan.lib.parser.Parser;
-import luan.lib.parser.ParseException;
 
 
 public final class Html {
 
-	public static LuanTable toList(LuanState luan,String text,LuanTable containerTagsTbl)
-		throws ParseException
-	{
+	public static LuanTable toList(LuanState luan,String text,LuanTable containerTagsTbl) {
 		return new Html(luan,text,containerTagsTbl).parse();
 	}
 
@@ -30,7 +27,7 @@
 		}
 	}
 
-	private LuanTable parse() throws ParseException {
+	private LuanTable parse() {
 		List list = new ArrayList();
 		StringBuilder sb = new StringBuilder();
 		while( !parser.endOfInput() ) {
@@ -120,6 +117,8 @@
 	}
 
 	private LuanTable parseTag() {
+		LuanTable tbl = new LuanTable(luan);
+		tbl.rawPut("type","tag");
 		int tagStart = parser.begin();
 		if( !parser.match('<') )
 			return parser.failure(null);
@@ -129,22 +128,25 @@
 			return parser.failure(null);
 		while( matchNameChar() );
 		String name = parser.textFrom(start).toLowerCase();
+		tbl.rawPut("name",name);
 		LuanTable attributes = new LuanTable(luan);
+		tbl.rawPut("attributes",attributes);
 		String attrName;
 		while( (attrName = parseAttrName()) != null ) {
 			String attrValue = parseAttrValue();
 			attributes.rawPut( attrName, attrValue!=null ? attrValue : true );
+			if( attrName.equals("style") && attrValue!=null ) {
+				LuanTable style = Css.style(luan,attrValue);
+				if( style!=null )
+					tbl.rawPut("style",style);
+			}
 		}
 		while( matchSpace() );
 		boolean isEmpty = parser.match('/');
+		tbl.rawPut("is_empty",isEmpty);
 		if( !parser.match('>') )
 			return parser.failure(null);
 		String raw = parser.textFrom(tagStart);
-		LuanTable tbl = new LuanTable(luan);
-		tbl.rawPut("type","tag");
-		tbl.rawPut("name",name);
-		tbl.rawPut("attributes",attributes);
-		tbl.rawPut("is_empty",isEmpty);
 		tbl.rawPut("raw",raw);
 		return parser.success(tbl);
 	}
@@ -158,7 +160,7 @@
 		if( !matchNameChar() )
 			return parser.failure(null);
 		while( matchNameChar() );
-		String name = parser.textFrom(start);
+		String name = parser.textFrom(start).toLowerCase();
 		return parser.success(name);
 	}