Mercurial > python-cmd2
comparison lineend.py @ 61:82891de09dbf
before splicing new terminator parsing in
author | catherine@Elli.myhome.westell.com |
---|---|
date | Fri, 20 Jun 2008 20:41:19 -0400 |
parents | 682588392eaf |
children | 95e239c87010 |
comparison
equal
deleted
inserted
replaced
60:682588392eaf | 61:82891de09dbf |
---|---|
1 import pyparsing, sys, doctest | 1 import pyparsing, sys, doctest |
2 | 2 |
3 pattern = pyparsing.Optional(pyparsing.CharsNotIn(';')) + ';' | 3 terminators = (';', 'EOF') |
4 pattern.ignore(pyparsing.sglQuotedString) | 4 |
5 pattern.ignore(pyparsing.sglQuotedString) | 5 #pattern = pyparsing.Optional(pyparsing.CharsNotIn(terminators)) + pyparsing.oneOf(';') |
6 complete_pattern = pyparsing.SkipTo(pyparsing.oneOf(terminators)) | |
7 complete_pattern.ignore(pyparsing.sglQuotedString) | |
8 complete_pattern.ignore(pyparsing.sglQuotedString) | |
6 | 9 |
7 redirect_pattern = pyparsing.Optional(pyparsing.CharsNotIn('<>')) + pyparsing.oneOf('< >') + pyparsing.Word(pyparsing.printables) | 10 redirect_pattern = pyparsing.Optional(pyparsing.CharsNotIn('<>')) + pyparsing.oneOf('< >') + pyparsing.Word(pyparsing.printables) |
8 redirect_pattern.ignore(pyparsing.sglQuotedString) | 11 redirect_pattern.ignore(pyparsing.sglQuotedString) |
9 redirect_pattern.ignore(pyparsing.sglQuotedString) | 12 redirect_pattern.ignore(pyparsing.sglQuotedString) |
10 | 13 |
14 pipe_pattern = pyparsing.Optional(pyparsing.CharsNotIn('|')) + '|' + pyparsing.SkipTo(pyparsing.StringEnd()) | |
15 pipe_pattern.ignore(pyparsing.sglQuotedString) | |
16 pipe_pattern.ignore(pyparsing.sglQuotedString) | |
17 | |
11 def parse(txt, mustBeTerminated=False): | 18 def parse(txt, mustBeTerminated=False): |
12 """ | 19 """ |
13 >>> sorted(parse('select * from dual;', True).items()) | 20 >>> sorted(parse('select * from dual;', True).items()) |
14 [('complete', True), ('inputFrom', None), ('outputTo', None), ('pipeTo', None)] | 21 [('complete', True), ('inputFrom', None), ('outputTo', None), ('pipeTo', None)] |
22 >>> sorted(parse('select * from dual E', True).items()) | |
23 [('complete', False), ('inputFrom', None), ('outputTo', None), ('pipeTo', None)] | |
15 >>> sorted(parse('select * from', True).items()) | 24 >>> sorted(parse('select * from', True).items()) |
16 [('complete', False), ('inputFrom', None), ('outputTo', None), ('pipeTo', None)] | 25 [('complete', False), ('inputFrom', None), ('outputTo', None), ('pipeTo', None)] |
17 >>> sorted(parse('select * from dual; > result.txt', True).items()) | 26 >>> sorted(parse('select * from dual; > result.txt', True).items()) |
18 [('complete', True), ('inputFrom', None), ('outputTo', 'result.txt'), ('pipeTo', None)] | 27 [('complete', True), ('inputFrom', None), ('outputTo', 'result.txt'), ('pipeTo', None)] |
28 >>> sorted(parse("select * from dual where val = 'x > y'", True).items()) | |
29 [('complete', False), ('inputFrom', None), ('outputTo', None), ('pipeTo', None)] | |
30 >>> sorted(parse('select * from dual; | wc -c', True).items()) | |
31 [('complete', True), ('inputFrom', None), ('outputTo', None), ('pipeTo', 'wc -c')] | |
19 """ | 32 """ |
20 result = {'complete': not mustBeTerminated, 'inputFrom': None, 'outputTo': None, 'pipeTo': None} | 33 result = {'complete': not mustBeTerminated, 'inputFrom': None, 'outputTo': None, 'pipeTo': None} |
21 if mustBeTerminated: | 34 if mustBeTerminated: |
22 try: | 35 try: |
23 pattern.parseString(txt) | 36 complete_pattern.parseString(txt) |
24 result['complete'] = True | 37 result['complete'] = True |
25 except pyparsing.ParseException: | 38 except pyparsing.ParseException: |
26 pass | 39 pass |
27 | 40 |
28 if result['complete']: | 41 if result['complete']: |
32 result['outputTo'] = parsed[2] | 45 result['outputTo'] = parsed[2] |
33 else: | 46 else: |
34 result['inputFrom'] = parsed[2] | 47 result['inputFrom'] = parsed[2] |
35 except pyparsing.ParseException: | 48 except pyparsing.ParseException: |
36 pass | 49 pass |
50 try: | |
51 parsed = pipe_pattern.parseString(txt) | |
52 result['pipeTo'] = parsed[2] | |
53 except pyparsing.ParseException: | |
54 pass | |
55 | |
37 return result | 56 return result |
38 | 57 |
39 if __name__ == '__main__': | 58 if __name__ == '__main__': |
40 doctest.testmod() | 59 doctest.testmod() |
41 | 60 |