1 import string
2
3 import Martel
4 from Martel import LAX
5
7 fields = ( ["Andrew", "Dalke", "12"],
8 ["Liz", "Nelson", "22"],
9 ["Mandrake", "Moose", "23"],
10 ["Lisa", "Marie", "91"], )
11 text = ""
12 for line in fields:
13 text = text + string.join(line, " ") + "\n"
14
15 format = Martel.Rep1(
16 Martel.Group("line",
17 Martel.Word("name", {"type": "first"}) + \
18 Martel.Spaces() + \
19 Martel.Word("name", {"type": "last"}) + \
20 Martel.Spaces() + \
21 Martel.Integer("age") + \
22 Martel.AnyEol()
23 ))
24 iterator = format.make_iterator("line")
25 i = 0
26 for record in iterator.iterateString(text, LAX.LAX()):
27 assert record["name"] == fields[i][:2], (record["name"], fields[i][:2])
28 assert record["age"] == fields[i][2:3], (record["age"], fields[i][2:3])
29 i = i + 1
30
31 i = 0
32 for record in iterator.iterateString(text, LAX.LAXAttrs()):
33 assert [x[0] for x in record["name"]] == fields[i][:2], \
34 ([x[0] for x in record["name"]], fields[i][:2])
35 assert [x[0] for x in record["age"]] == fields[i][2:3], \
36 ([x[0] for x in record["age"]], fields[i][2:3])
37 assert record["name"][0][1]["type"] == "first"
38 assert record["name"][1][1]["type"] == "last"
39 assert record["age"][0][1].keys() == []
40 i = i + 1
41
43
44
45
46 data = "ababcbaaaababbbabccbaabcabcba"
47 format = Martel.Re("((?P<a>a+)|(?P<b>b+)|(?P<c>c+))+")
48 parser = format.make_parser()
49 lax = LAX.LAX(["b", "c"])
50 parser.setContentHandler(lax)
51 parser.parseString(data)
52 assert lax.has_key("a") == 0
53 assert len(lax["b"]) == 10
54 assert len(lax["c"]) == 4
55
56
60
61 if __name__ == "__main__":
62 test()
63