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