source: specdomain/trunk/src/specdomain/test/tester4.py @ 982

Last change on this file since 982 was 982, checked in by jemian, 10 years ago

also match cdef() embedded within an if(){} block, as in standard.mac

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 3.4 KB
Line 
1#!/usr/bin/env python
2
3
4'''
5$Id: tester4.py 982 2012-06-27 19:33:01Z jemian $
6
7develop regular expression to match macro declarations
8'''
9
10
11import re
12import os
13
14# TODO: consider multiline declaration signtures
15# This test module only considers single line declarations
16
17spec_macro_declaration_match_re = re.compile(
18                              r'^'                      # line start
19                            + r'\s*?'                   # optional blank space
20                            + r'(r?def)'                # 0: def_type (rdef | def)
21                            + r'\s*?'                   # optional blank space
22                            + r'([a-zA-Z_][\w_]*)'      # 1: macro_name
23                            + r'(.*?)'                  # 2: optional arguments
24                            + r'(#.*?)?'                # 3: optional comment
25                            + r'$'                      # line end
26                        )
27
28spec_cdef_declaration_match_re = re.compile(
29                              r'^'                      # line start
30                            + r'.*?'                    # optional any kind of preceding stuff, was \s*? (optional blank space)
31                            + r'(cdef)'                 # 0: cdef
32                            + r'\('                     # opening parenthesis
33                            + r'(.*?)'                  # 1: args (anything between the parentheses)
34                            + r'\)'                     # closing parenthesis
35                            + r'.*?'                    # optional blank space
36                            + r'(#.*?)?'                # 2: optional comment
37                            + r'$'                      # line end
38                        )
39
40spec_function_declaration_match_re = re.compile(
41                              r'^'                      # line start
42                            + r'\s*?'                   # optional blank space
43                            + r'(r?def)'                # 0: def_type (rdef | def)
44                            + r'\s*?'                   # optional blank space
45                            + r'([a-zA-Z_][\w_]*)'      # 1: function_name
46                            + r'\('                     # opening parenthesis
47                            + r'(.*?)'                  # 2: args (anything between the parentheses)
48                            + r'\)'                     # closing parenthesis
49                            + r'\s*?'                   # optional blank space
50                            + r'\''                     # open macro content
51                            + r'(.*?)'                  # 3: args (anything between the parentheses)
52                            + r'(#.*?)?'                # 4: more_content
53                            + r'$'                      # line end
54                        )
55
56TEST_DIR = os.path.join('..', 'macros')
57
58tests = {
59    'macro':    spec_macro_declaration_match_re,
60    'cdef':     spec_cdef_declaration_match_re,
61    'function': spec_function_declaration_match_re,
62}
63
64for name, test in tests.items():
65    print "%10s  %s" % (name, test.pattern)
66
67for f in sorted(os.listdir(TEST_DIR)):
68    if f.endswith('.mac'):
69        print '\n', f
70        for linenumber, line in enumerate(open(os.path.join(TEST_DIR, f)).readlines()):
71            for name in ('cdef', 'function', 'macro'):
72                m = tests[name].match(line)
73                if m is not None:
74                    print name, linenumber+1, m.groups()
75                    break
Note: See TracBrowser for help on using the repository browser.