summaryrefslogtreecommitdiff
path: root/module/xml.m
diff options
context:
space:
mode:
Diffstat (limited to 'module/xml.m')
-rw-r--r--module/xml.m78
1 files changed, 78 insertions, 0 deletions
diff --git a/module/xml.m b/module/xml.m
new file mode 100644
index 00000000..ee83a0c1
--- /dev/null
+++ b/module/xml.m
@@ -0,0 +1,78 @@
+Xml: module {
+ PATH: con "/dis/lib/xml.dis";
+ Item: adt {
+ fileoffset: int;
+ pick {
+ Tag =>
+ name: string;
+ attrs: Attributes;
+ Text =>
+ ch: string;
+ ws1, ws2: int;
+ Process =>
+ target: string;
+ data: string;
+ Doctype =>
+ name: string;
+ public: int;
+ params: list of string;
+ Stylesheet =>
+ attrs: Attributes;
+ Error =>
+ loc: Locator;
+ msg: string;
+ }
+ };
+
+ Locator: adt {
+ line: int;
+ systemid: string;
+ publicid: string;
+ };
+
+ Attribute: adt {
+ name: string;
+ value: string;
+ };
+
+ Attributes: adt {
+ attrs: list of Attribute;
+
+ all: fn(a: self Attributes): list of Attribute;
+ get: fn(a: self Attributes, name: string): string;
+ };
+
+ Mark: adt {
+ estack: list of string;
+ line: int;
+ offset: int;
+ readdepth: int;
+
+ str: fn(m: self ref Mark): string;
+ };
+
+ Parser: adt {
+ in: ref Bufio->Iobuf;
+ eof: int;
+ lastnl: int;
+ estack: list of string;
+ loc: Locator;
+ warning: chan of (Locator, string);
+ errormsg: string;
+ actdepth: int;
+ readdepth: int;
+ fileoffset: int;
+ preelem: string;
+ ispre: int;
+
+ next: fn(p: self ref Parser): ref Item;
+ up: fn(p: self ref Parser);
+ down: fn(p: self ref Parser);
+ mark: fn(p: self ref Parser): ref Mark;
+ atmark: fn(p: self ref Parser, m: ref Mark): int;
+ goto: fn(p: self ref Parser, m: ref Mark);
+ str2mark: fn(p: self ref Parser, s: string): ref Mark;
+ };
+ init: fn(): string;
+ open: fn(f: string, warning: chan of (Locator, string), preelem: string): (ref Parser, string);
+};