annotate src/luan/modules/Xml.luan @ 1790:a8c685a894b4

start xml work
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 25 Dec 2023 23:07:59 -0700
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1790
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 require "java"
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2 local XmlParser = require "java:goodjava.xml.XmlParser"
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 local XmlElement = require "java:goodjava.xml.XmlElement"
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
4 local Luan = require "luan:Luan.luan"
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
5 local error = Luan.error
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
6 local set_metatable = Luan.set_metatable or error()
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
7
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9 local Xml = {}
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11 Xml.encode = XmlElement.encode
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
13 local function new(java,mt)
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 local t = {}
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15 t.java = java
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16 set_metatable(t,mt)
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17 return t
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18 end
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20 local element_mt = {}
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22 local xml_mt = {}
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23 function xml_mt.__index(xml,key)
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24 if key == "element" then
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 return new( xml.java.element, element_mt )
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26 end
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27 if key == "declaration" then
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28 return xml.java.declaration
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29 end
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
30 return nil
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
31 end
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
32 function xml_mt.__new_index(xml,key,value)
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33 if key == "element" then
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34 xml.java.setElement( value.java )
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 elseif key == "declaration" then
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36 xml.java.declaration = value
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 else
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 error("invalid key: "..key)
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
39 end
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 end
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 function xml_mt.__to_string(xml)
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
42 return xml.java.toString()
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
43 end
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
44
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
45 function Xml.parse(text)
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
46 return new( XmlParser.parse(text), xml_mt )
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
47 end
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
48
a8c685a894b4 start xml work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
49 return Xml