diff core/src/luan/modules/HtmlLuan.java @ 426:23a93c118042

fix LuanTable.get() to use metatables
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 01 May 2015 18:44:20 -0600
parents 23b99a5039b5
children dae264ad6a7b
line wrap: on
line diff
--- a/core/src/luan/modules/HtmlLuan.java	Fri May 01 17:18:23 2015 -0600
+++ b/core/src/luan/modules/HtmlLuan.java	Fri May 01 18:44:20 2015 -0600
@@ -99,7 +99,7 @@
 				String tagText = text.substring(i2+1,i);
 				try {
 					LuanTable tag = parseTag(tagText);
-					String tagName = (String)tag.get("name");
+					String tagName = (String)tag.rawGet("name");
 					if( containerTags.contains(tagName) ) {
 						i2 = i;
 						String endTagName = '/' + tagName;
@@ -200,7 +200,7 @@
 		while( i<len ) {
 			i2 = toEndName(text,i,len);
 			String attrName = unquote(text.substring(i,i2).toLowerCase());
-			if( attributes.get(attrName) != null )
+			if( attributes.rawGet(attrName) != null )
 				throw new BadTag("duplicate attribute: "+attrName);
 			i = i2;
 			while( i<len && Character.isWhitespace(text.charAt(i)) )  i++;
@@ -282,20 +282,20 @@
 				buf.append( o );
 			} else if( o instanceof LuanTable ) {
 				LuanTable t = (LuanTable)o;
-				String type = (String)t.get("type");
+				String type = (String)t.get(luan,"type");
 				if( type==null )
 					throw luan.exception( "no type in element of table for 'Html.to_string'" );
 				if( type.equals("comment") ) {
-					buf.append( "<!--" ).append( t.get("text") ).append( "-->" );
+					buf.append( "<!--" ).append( t.get(luan,"text") ).append( "-->" );
 				} else if( type.equals("cdata") ) {
-					buf.append( "<![CDATA[" ).append( t.get("text") ).append( "]]" );
+					buf.append( "<![CDATA[" ).append( t.get(luan,"text") ).append( "]]" );
 				} else if( type.equals("tag") ) {
-					buf.append( tagToString(t) );
+					buf.append( tagToString(luan,t) );
 				} else if( type.equals("container") ) {
-					LuanTable tag  = (LuanTable)t.get("tag");
-					buf.append( tagToString(tag) );
-					buf.append( t.get("text") );
-					buf.append( "</" ).append( tag.get("name") ).append( ">" );
+					LuanTable tag  = (LuanTable)t.get(luan,"tag");
+					buf.append( tagToString(luan,tag) );
+					buf.append( t.get(luan,"text") );
+					buf.append( "</" ).append( tag.get(luan,"name") ).append( ">" );
 				} else {
 					throw luan.exception( "invalid element type for 'Html.to_string'" );
 				}
@@ -305,11 +305,11 @@
 		return buf.toString();
 	}
 
-	private static String tagToString(LuanTable tbl) {
+	private static String tagToString(LuanState luan,LuanTable tbl) throws LuanException {
 		StringBuilder buf = new StringBuilder();
 		buf.append('<');
-		buf.append(tbl.get("name"));
-		LuanTable attributes = (LuanTable)tbl.get("attributes");
+		buf.append(tbl.get(luan,"name"));
+		LuanTable attributes = (LuanTable)tbl.get(luan,"attributes");
 		for( Map.Entry<Object,Object> attr : attributes ) {
 			buf.append( ' ' );
 			buf.append( attr.getKey() );
@@ -319,7 +319,7 @@
 				buf.append( quote((String)val) );
 			}
 		}
-		if( tbl.get("is_empty").equals(Boolean.TRUE) )
+		if( tbl.get(luan,"is_empty").equals(Boolean.TRUE) )
 			buf.append('/');
 		buf.append('>');
 		return buf.toString();