comparison src/luan/modules/parsers/Xml.java @ 1790:a8c685a894b4

start xml work
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 25 Dec 2023 23:07:59 -0700
parents 8fbcc4747091
children
comparison
equal deleted inserted replaced
1789:bac27b119ff2 1790:a8c685a894b4
50 return list.toArray(new XmlElement[0]); 50 return list.toArray(new XmlElement[0]);
51 } 51 }
52 52
53 private static XmlElement element(String name,Object obj) throws LuanException { 53 private static XmlElement element(String name,Object obj) throws LuanException {
54 if( obj instanceof String ) { 54 if( obj instanceof String ) {
55 return new XmlElement( name, Collections.emptyMap(), (String)obj ); 55 XmlElement element = new XmlElement( name, Collections.emptyMap() );
56 element.setContent( (String)obj );
57 return element;
56 } 58 }
57 LuanTable t = (LuanTable)obj; 59 LuanTable t = (LuanTable)obj;
58 Map<String,String> attributes = attributes(t); 60 Map<String,String> attributes = attributes(t);
59 String s = (String)t.rawGet(TEXT); 61 String s = (String)t.rawGet(TEXT);
60 if( s != null ) { 62 if( s != null ) {
61 return new XmlElement(name,attributes,s); 63 XmlElement element = new XmlElement(name,attributes);
64 element.setContent(s);
65 return element;
62 } else { 66 } else {
63 XmlElement[] elements = elements(t); 67 XmlElement[] elements = elements(t);
64 if( elements.length==0 ) { 68 if( elements.length==0 ) {
65 return new XmlElement(name,attributes); 69 return new XmlElement(name,attributes);
66 } else { 70 } else {
67 return new XmlElement(name,attributes,elements); 71 XmlElement element = new XmlElement(name,attributes);
72 element.setContent(elements);
73 return element;
68 } 74 }
69 } 75 }
70 } 76 }
71 77
72 private static Map<String,String> attributes(LuanTable tbl) throws LuanException { 78 private static Map<String,String> attributes(LuanTable tbl) throws LuanException {
83 return map; 89 return map;
84 } 90 }
85 91
86 92
87 public static LuanTable parse(String s) throws ParseException, LuanException { 93 public static LuanTable parse(String s) throws ParseException, LuanException {
88 XmlElement element = XmlParser.parse(s); 94 XmlElement element = XmlParser.parse(s).getElement();
89 LuanTable tbl = new LuanTable(); 95 LuanTable tbl = new LuanTable();
90 addElements(tbl,new XmlElement[]{element}); 96 addElements(tbl,new XmlElement[]{element});
91 return tbl; 97 return tbl;
92 } 98 }
93 99
99 for( Map.Entry<String,String> entry : element.attributes.entrySet() ) { 105 for( Map.Entry<String,String> entry : element.attributes.entrySet() ) {
100 attrs.rawPut(entry.getKey(),entry.getValue()); 106 attrs.rawPut(entry.getKey(),entry.getValue());
101 } 107 }
102 t.rawPut( ATTRIBUTES, attrs ); 108 t.rawPut( ATTRIBUTES, attrs );
103 } 109 }
104 if( element.content == null ) { 110 Object content = element.getContent();
111 if( content == null ) {
105 // nothing 112 // nothing
106 } else if( element.content instanceof String ) { 113 } else if( content instanceof String ) {
107 t.rawPut( TEXT, element.content ); 114 t.rawPut( TEXT, content );
108 } else { 115 } else {
109 XmlElement[] els = (XmlElement[])element.content; 116 XmlElement[] els = (XmlElement[])content;
110 addElements(t,els); 117 addElements(t,els);
111 } 118 }
112 LuanTable old = (LuanTable)tbl.rawGet(element.name); 119 LuanTable old = (LuanTable)tbl.rawGet(element.name);
113 if( old==null ) { 120 if( old==null ) {
114 tbl.rawPut(element.name,t); 121 tbl.rawPut(element.name,t);