xref: /inferno-os/module/xpointers.m (revision 46439007cf417cbd9ac8049bb4122c890097a0fa)
1*46439007SCharles.ForsythXpointers: module
2*46439007SCharles.Forsyth{
3*46439007SCharles.Forsyth	PATH: con "/dis/lib/w3c/xpointers.dis";
4*46439007SCharles.Forsyth
5*46439007SCharles.Forsyth	One, Ole, Oge, Omul, Odiv, Omod, Oand, Oor, Oneg,
6*46439007SCharles.Forsyth	Onodetype, Onametest, Ofilter, Opath: con 'A'+iota;
7*46439007SCharles.Forsyth
8*46439007SCharles.Forsyth	# axis types
9*46439007SCharles.Forsyth	Aancestor,
10*46439007SCharles.Forsyth	Aancestor_or_self,
11*46439007SCharles.Forsyth	Aattribute,
12*46439007SCharles.Forsyth	Achild,
13*46439007SCharles.Forsyth	Adescendant,
14*46439007SCharles.Forsyth	Adescendant_or_self,
15*46439007SCharles.Forsyth	Afollowing,
16*46439007SCharles.Forsyth	Afollowing_sibling,
17*46439007SCharles.Forsyth	Anamespace,
18*46439007SCharles.Forsyth	Aparent,
19*46439007SCharles.Forsyth	Apreceding,
20*46439007SCharles.Forsyth	Apreceding_sibling,
21*46439007SCharles.Forsyth	Aself: con iota;
22*46439007SCharles.Forsyth
23*46439007SCharles.Forsyth	Xstep: adt {
24*46439007SCharles.Forsyth		axis:	int;	# Aancestor, ... (above)
25*46439007SCharles.Forsyth		op:	int;	# Onametest or Onodetype
26*46439007SCharles.Forsyth		ns:	string;
27*46439007SCharles.Forsyth		name:	string;
28*46439007SCharles.Forsyth		arg:	string;	# optional parameter to processing-instruction
29*46439007SCharles.Forsyth		preds:	cyclic list of ref Xpath;
30*46439007SCharles.Forsyth
31*46439007SCharles.Forsyth		text:	fn(nil: self ref Xstep): string;
32*46439007SCharles.Forsyth		axisname:	fn(i: int): string;
33*46439007SCharles.Forsyth	};
34*46439007SCharles.Forsyth
35*46439007SCharles.Forsyth	Xpath: adt {
36*46439007SCharles.Forsyth		pick{
37*46439007SCharles.Forsyth		E =>
38*46439007SCharles.Forsyth			op: int;
39*46439007SCharles.Forsyth			l, r: cyclic ref Xpath;
40*46439007SCharles.Forsyth		Fn =>
41*46439007SCharles.Forsyth			ns:	string;
42*46439007SCharles.Forsyth			name:	string;
43*46439007SCharles.Forsyth			args:	cyclic list of ref Xpath;
44*46439007SCharles.Forsyth		Var =>
45*46439007SCharles.Forsyth			ns: string;
46*46439007SCharles.Forsyth			name: string;
47*46439007SCharles.Forsyth		Path =>
48*46439007SCharles.Forsyth			abs:	int;
49*46439007SCharles.Forsyth			steps:	list of ref Xstep;
50*46439007SCharles.Forsyth		Int =>
51*46439007SCharles.Forsyth			val: big;
52*46439007SCharles.Forsyth		Real =>
53*46439007SCharles.Forsyth			val: real;
54*46439007SCharles.Forsyth		Str =>
55*46439007SCharles.Forsyth			s: string;
56*46439007SCharles.Forsyth		}
57*46439007SCharles.Forsyth		text:	fn(nil: self ref Xpath): string;
58*46439007SCharles.Forsyth	};
59*46439007SCharles.Forsyth
60*46439007SCharles.Forsyth	init:	fn();
61*46439007SCharles.Forsyth	framework:	fn(s: string): (string, list of (string, string, string), string);
62*46439007SCharles.Forsyth
63*46439007SCharles.Forsyth	# predefined schemes
64*46439007SCharles.Forsyth	element:	fn(s: string): (string, list of int, string);
65*46439007SCharles.Forsyth	xmlns:	fn(s: string): (string, string, string);
66*46439007SCharles.Forsyth	xpointer:	fn(s: string): (ref Xpath, string);
67*46439007SCharles.Forsyth};
68