ref: 94443daf8e248e65afc8d3f17f26efea22748b51
dir: /module/xml.m/
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);
fopen: fn(f: ref Bufio->Iobuf, srcname: string, warning: chan of (Locator, string), preelem: string): (ref Parser, string);
};