Mercurial Hosting > luan
comparison src/luan/modules/parsers/Xml.java @ 1563:8fbcc4747091
remove LuanFunction.luan
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 09 Nov 2020 01:37:57 -0700 |
parents | b89212fd04b5 |
children | a8c685a894b4 |
comparison
equal
deleted
inserted
replaced
1562:b89212fd04b5 | 1563:8fbcc4747091 |
---|---|
14 import luan.modules.BasicLuan; | 14 import luan.modules.BasicLuan; |
15 | 15 |
16 | 16 |
17 public final class Xml { | 17 public final class Xml { |
18 | 18 |
19 public static String toString(Luan luan,LuanTable tbl) throws LuanException { | 19 public static String toString(LuanTable tbl) throws LuanException { |
20 XmlElement[] elements = elements(luan,tbl); | 20 XmlElement[] elements = elements(tbl); |
21 if( elements.length != 1 ) | 21 if( elements.length != 1 ) |
22 throw new LuanException("XML must have 1 root element"); | 22 throw new LuanException("XML must have 1 root element"); |
23 return elements[0].toString(); | 23 return elements[0].toString(); |
24 } | 24 } |
25 | 25 |
26 private static final String ATTRIBUTES = "xml_attributes"; | 26 private static final String ATTRIBUTES = "xml_attributes"; |
27 private static final String TEXT = "xml_text"; | 27 private static final String TEXT = "xml_text"; |
28 | 28 |
29 private static XmlElement[] elements(Luan luan,LuanTable tbl) throws LuanException { | 29 private static XmlElement[] elements(LuanTable tbl) throws LuanException { |
30 List<XmlElement> list = new ArrayList<XmlElement>(); | 30 List<XmlElement> list = new ArrayList<XmlElement>(); |
31 for( Map.Entry entry : tbl.iterable() ) { | 31 for( Map.Entry entry : tbl.rawIterable() ) { |
32 Object key = entry.getKey(); | 32 Object key = entry.getKey(); |
33 if( !(key instanceof String) ) | 33 if( !(key instanceof String) ) |
34 throw new LuanException("XML key must be string"); | 34 throw new LuanException("XML key must be string"); |
35 String name = (String)key; | 35 String name = (String)key; |
36 Object value = entry.getValue(); | 36 Object value = entry.getValue(); |
38 continue; | 38 continue; |
39 if( name.equals(TEXT) ) | 39 if( name.equals(TEXT) ) |
40 throw new LuanException("Can't mix text and elements"); | 40 throw new LuanException("Can't mix text and elements"); |
41 LuanTable t = (LuanTable)value; | 41 LuanTable t = (LuanTable)value; |
42 if( t.isMap() ) { | 42 if( t.isMap() ) { |
43 list.add( element(luan,name,t) ); | 43 list.add( element(name,t) ); |
44 } else { | 44 } else { |
45 for( Object obj : t.asList() ) { | 45 for( Object obj : t.asList() ) { |
46 list.add( element(luan,name,obj) ); | 46 list.add( element(name,obj) ); |
47 } | 47 } |
48 } | 48 } |
49 } | 49 } |
50 return list.toArray(new XmlElement[0]); | 50 return list.toArray(new XmlElement[0]); |
51 } | 51 } |
52 | 52 |
53 private static XmlElement element(Luan luan,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 return new XmlElement( name, Collections.emptyMap(), (String)obj ); |
56 } | 56 } |
57 LuanTable t = (LuanTable)obj; | 57 LuanTable t = (LuanTable)obj; |
58 Map<String,String> attributes = attributes(luan,t); | 58 Map<String,String> attributes = attributes(t); |
59 String s = (String)t.get(luan,TEXT); | 59 String s = (String)t.rawGet(TEXT); |
60 if( s != null ) { | 60 if( s != null ) { |
61 return new XmlElement(name,attributes,s); | 61 return new XmlElement(name,attributes,s); |
62 } else { | 62 } else { |
63 XmlElement[] elements = elements(luan,t); | 63 XmlElement[] elements = elements(t); |
64 if( elements.length==0 ) { | 64 if( elements.length==0 ) { |
65 return new XmlElement(name,attributes); | 65 return new XmlElement(name,attributes); |
66 } else { | 66 } else { |
67 return new XmlElement(name,attributes,elements); | 67 return new XmlElement(name,attributes,elements); |
68 } | 68 } |
69 } | 69 } |
70 } | 70 } |
71 | 71 |
72 private static Map<String,String> attributes(Luan luan,LuanTable tbl) throws LuanException { | 72 private static Map<String,String> attributes(LuanTable tbl) throws LuanException { |
73 Object obj = tbl.get(luan,ATTRIBUTES); | 73 Object obj = tbl.rawGet(ATTRIBUTES); |
74 if( obj==null ) | 74 if( obj==null ) |
75 return Collections.emptyMap(); | 75 return Collections.emptyMap(); |
76 LuanTable t = (LuanTable)obj; | 76 LuanTable t = (LuanTable)obj; |
77 Map<String,String> map = new LinkedHashMap<String,String>(); | 77 Map<String,String> map = new LinkedHashMap<String,String>(); |
78 for( Map.Entry entry : t.iterable() ) { | 78 for( Map.Entry entry : t.rawIterable() ) { |
79 String name =(String)entry.getKey(); | 79 String name =(String)entry.getKey(); |
80 String value =(String)entry.getValue(); | 80 String value =(String)entry.getValue(); |
81 map.put(name,value); | 81 map.put(name,value); |
82 } | 82 } |
83 return map; | 83 return map; |