diff src/luan/modules/parsers/Xml.java @ 1562:b89212fd04b5

remove table.luan
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 08 Nov 2020 16:50:59 -0700
parents 2e8a5df45d56
children 8fbcc4747091
line wrap: on
line diff
--- a/src/luan/modules/parsers/Xml.java	Thu Nov 05 20:24:09 2020 -0700
+++ b/src/luan/modules/parsers/Xml.java	Sun Nov 08 16:50:59 2020 -0700
@@ -16,8 +16,8 @@
 
 public final class Xml {
 
-	public static String toString(LuanTable tbl) throws LuanException {
-		XmlElement[] elements = elements(tbl);
+	public static String toString(Luan luan,LuanTable tbl) throws LuanException {
+		XmlElement[] elements = elements(luan,tbl);
 		if( elements.length != 1 )
 			throw new LuanException("XML must have 1 root element");
 		return elements[0].toString();
@@ -26,7 +26,7 @@
 	private static final String ATTRIBUTES = "xml_attributes";
 	private static final String TEXT = "xml_text";
 
-	private static XmlElement[] elements(LuanTable tbl) throws LuanException {
+	private static XmlElement[] elements(Luan luan,LuanTable tbl) throws LuanException {
 		List<XmlElement> list = new ArrayList<XmlElement>();
 		for( Map.Entry entry : tbl.iterable() ) {
 			Object key = entry.getKey();
@@ -40,27 +40,27 @@
 				throw new LuanException("Can't mix text and elements");
 			LuanTable t = (LuanTable)value;
 			if( t.isMap() ) {
-				list.add( element(name,t) );
+				list.add( element(luan,name,t) );
 			} else {
 				for( Object obj : t.asList() ) {
-					list.add( element(name,obj) );
+					list.add( element(luan,name,obj) );
 				}
 			}
 		}
 		return list.toArray(new XmlElement[0]);
 	}
 
-	private static XmlElement element(String name,Object obj) throws LuanException {
+	private static XmlElement element(Luan luan,String name,Object obj) throws LuanException {
 		if( obj instanceof String ) {
 			return new XmlElement( name, Collections.emptyMap(), (String)obj );
 		}
 		LuanTable t = (LuanTable)obj;
-		Map<String,String> attributes = attributes(t);
-		String s = (String)t.get(TEXT);
+		Map<String,String> attributes = attributes(luan,t);
+		String s = (String)t.get(luan,TEXT);
 		if( s != null ) {
 			return new XmlElement(name,attributes,s);
 		} else {
-			XmlElement[] elements = elements(t);
+			XmlElement[] elements = elements(luan,t);
 			if( elements.length==0 ) {
 				return new XmlElement(name,attributes);
 			} else {
@@ -69,8 +69,8 @@
 		}
 	}
 
-	private static Map<String,String> attributes(LuanTable tbl) throws LuanException {
-		Object obj = tbl.get(ATTRIBUTES);
+	private static Map<String,String> attributes(Luan luan,LuanTable tbl) throws LuanException {
+		Object obj = tbl.get(luan,ATTRIBUTES);
 		if( obj==null )
 			return Collections.emptyMap();
 		LuanTable t = (LuanTable)obj;
@@ -84,40 +84,40 @@
 	}
 
 
-	public static LuanTable parse(Luan luan,String s) throws ParseException, LuanException {
+	public static LuanTable parse(String s) throws ParseException, LuanException {
 		XmlElement element = XmlParser.parse(s);
-		LuanTable tbl = new LuanTable(luan);
+		LuanTable tbl = new LuanTable();
 		addElements(tbl,new XmlElement[]{element});
 		return tbl;
 	}
 
 	private static LuanTable addElements(LuanTable tbl,XmlElement[] elements) throws LuanException {
 		for( XmlElement element : elements ) {
-			LuanTable t = new LuanTable(tbl.luan());
+			LuanTable t = new LuanTable();
 			if( !element.attributes.isEmpty() ) {
-				LuanTable attrs = new LuanTable(tbl.luan());
+				LuanTable attrs = new LuanTable();
 				for( Map.Entry<String,String> entry : element.attributes.entrySet() ) {
-					attrs.put(entry.getKey(),entry.getValue());
+					attrs.rawPut(entry.getKey(),entry.getValue());
 				}
-				t.put( ATTRIBUTES, attrs );
+				t.rawPut( ATTRIBUTES, attrs );
 			}
 			if( element.content == null ) {
 				// nothing
 			} else if( element.content instanceof String ) {
-				t.put( TEXT, element.content );
+				t.rawPut( TEXT, element.content );
 			} else {
 				XmlElement[] els = (XmlElement[])element.content;
 				addElements(t,els);
 			}
-			LuanTable old = (LuanTable)tbl.get(element.name);
+			LuanTable old = (LuanTable)tbl.rawGet(element.name);
 			if( old==null ) {
-				tbl.put(element.name,t);
+				tbl.rawPut(element.name,t);
 			} else {
 				if( !old.isList() ) {
-					LuanTable list = new LuanTable(tbl.luan());
+					LuanTable list = new LuanTable();
 					list.rawAdd(old);
 					old = list;
-					tbl.put(element.name,old);
+					tbl.rawPut(element.name,old);
 				}
 				old.rawAdd(t);
 			}