-rwxr-xr-x | scripts/qdebug-odebug.py | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/scripts/qdebug-odebug.py b/scripts/qdebug-odebug.py new file mode 100755 index 0000000..cc1b7ca --- a/dev/null +++ b/scripts/qdebug-odebug.py | |||
@@ -0,0 +1,116 @@ | |||
1 | #!/usr/bin/env python | ||
2 | |||
3 | """ | ||
4 | qdebug-odebug.py (C) 2004 Michael 'Mickey' Lauer <mickey@Vanille.de> | ||
5 | This script helps to convert from the Qt debugging framework to the Opie debugging framework | ||
6 | Though it will take care of the most common usages, it may not recognize uncommon ones, hence | ||
7 | manual work may be needed after applying the script. | ||
8 | """ | ||
9 | |||
10 | import sys, sre | ||
11 | |||
12 | qDebugExpression = sre.compile( '(.*)(qDebug)\(\s*(.*)\s*\);(.*)' ) | ||
13 | qWarningExpression = sre.compile( '(.*)(qWarning)\(\s*(.*)\s*\);(.*)' ) | ||
14 | qErrorExpression = sre.compile( '(.*)(qError)\(\s*(.*)\s*\);(.*)' ) | ||
15 | qFatalExpression = sre.compile( '(.*)(qFatal)\(\s*(.*)\s*\);(.*)' ) | ||
16 | |||
17 | debugTable = { "qDebug" : "odebug", | ||
18 | "qWarning" : "owarn", | ||
19 | "qError" : "oerr", | ||
20 | "qFatal" : "ofatal" } | ||
21 | |||
22 | allExpressions = ( qDebugExpression, qWarningExpression, qErrorExpression, qFatalExpression ) | ||
23 | |||
24 | #################################################################################################### | ||
25 | |||
26 | def convert( fname ): | ||
27 | print >>sys.stderr, "<NOTE>: Dealing with %s..." % fname | ||
28 | |||
29 | for line in file( fname ): | ||
30 | match = False | ||
31 | for expr in allExpressions: | ||
32 | m = expr.match( line ) | ||
33 | if m is None: | ||
34 | continue | ||
35 | else: | ||
36 | match = True | ||
37 | head, debug, content, tail = m.groups() | ||
38 | print >>sys.stderr, "<NOTE>: Groups = ", m.groups() | ||
39 | sys.stdout.write( head.strip() ) | ||
40 | sys.stdout.write( debugTable[debug.strip()] ) | ||
41 | sys.stdout.write( " << " ) | ||
42 | sys.stdout.write( transform( content ).strip() ) | ||
43 | sys.stdout.write( " << oendl; " ) | ||
44 | sys.stdout.write( tail + "\n" ) | ||
45 | continue | ||
46 | # nothing applies | ||
47 | if not match: | ||
48 | sys.stdout.write( line + "\n" ) | ||
49 | |||
50 | #################################################################################################### | ||
51 | |||
52 | def transform( s ): | ||
53 | print >>sys.stderr, "<NOTE>: Transforming '%s'..." % s | ||
54 | |||
55 | # check if there is one or more comma's outside of strings | ||
56 | groups = [] | ||
57 | i = 0 | ||
58 | instring = False | ||
59 | group = "" | ||
60 | while i < len( s ): | ||
61 | if s[i] == '"': | ||
62 | instring = not instring | ||
63 | elif s[i] == "," and not instring: | ||
64 | groups.append( group.strip() ) | ||
65 | group = "" | ||
66 | i += 1 | ||
67 | continue | ||
68 | group += s[i] | ||
69 | i += 1 | ||
70 | continue | ||
71 | |||
72 | groups.append( group.strip() ) | ||
73 | |||
74 | # check for easy case | ||
75 | if len( groups ) < 2: return s.replace( "%%", "%" ) | ||
76 | |||
77 | # damn. it gets complicated... | ||
78 | print >>sys.stderr, "<NOTE>: Comma's outside of strings = %d" % ( len( groups ) -1 ) | ||
79 | |||
80 | formatstring, substitutions = groups[0], groups[1:] | ||
81 | result = "" | ||
82 | |||
83 | # iterator over formatstring and substitute format directives (e.g. '%d') with the substitutions | ||
84 | subst = 0 | ||
85 | i = 0 | ||
86 | indirective = False | ||
87 | while i < len( formatstring ): | ||
88 | if formatstring[i] != "%": | ||
89 | result += formatstring[i] | ||
90 | i += 1 | ||
91 | continue | ||
92 | else: # % in formatstring | ||
93 | indirective = True | ||
94 | i += 1 | ||
95 | while i < len( formatstring ) and formatstring[i] not in "%dDiouxXfegEscpn": | ||
96 | i += 1 | ||
97 | if formatstring[i] == "%": | ||
98 | result += "%" | ||
99 | else: | ||
100 | result += '" << %s << "' % substitutions[0] | ||
101 | del substitutions[0] | ||
102 | indirective = False | ||
103 | i += 1 | ||
104 | |||
105 | print >>sys.stderr, "<NOTE>: Result seems to be '%s'" % result | ||
106 | return result.replace( "%%", "%" ) | ||
107 | |||
108 | #################################################################################################### | ||
109 | |||
110 | if __name__ == "__main__": | ||
111 | try: | ||
112 | fname = sys.argv[1] | ||
113 | except: | ||
114 | print >>sys.stderr, "Usage: %s <filename>\n" % sys.argv[0] | ||
115 | else: | ||
116 | convert( fname ) | ||