Mercurial Hosting > luan
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); }