Xml: module { PATH: con "/dis/lib/xmhell.dis"; Data : adt { txt : string; ptr : int; seek: fn(b: self ref Data, n, where: int): int; offset: fn(b: self ref Data): int; getc: fn(b: self ref Data): int; gets: fn(b: self ref Data, sep: int): string; ungetc: fn(b: self ref Data): int; }; 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; } to_string : fn(i : self ref Item) : 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 Data; 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; init_io: fn(ml: string, warning: chan of (Locator, string), preelem: string): ref Parser; };