summaryrefslogtreecommitdiff
path: root/scripts
Side-by-side diff
Diffstat (limited to 'scripts') (more/less context) (ignore whitespace changes)
-rwxr-xr-xscripts/qdebug-odebug.py116
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 @@
+#!/usr/bin/env python
+
+"""
+qdebug-odebug.py (C) 2004 Michael 'Mickey' Lauer <mickey@Vanille.de>
+This script helps to convert from the Qt debugging framework to the Opie debugging framework
+Though it will take care of the most common usages, it may not recognize uncommon ones, hence
+manual work may be needed after applying the script.
+"""
+
+import sys, sre
+
+qDebugExpression = sre.compile( '(.*)(qDebug)\(\s*(.*)\s*\);(.*)' )
+qWarningExpression = sre.compile( '(.*)(qWarning)\(\s*(.*)\s*\);(.*)' )
+qErrorExpression = sre.compile( '(.*)(qError)\(\s*(.*)\s*\);(.*)' )
+qFatalExpression = sre.compile( '(.*)(qFatal)\(\s*(.*)\s*\);(.*)' )
+
+debugTable = { "qDebug" : "odebug",
+ "qWarning" : "owarn",
+ "qError" : "oerr",
+ "qFatal" : "ofatal" }
+
+allExpressions = ( qDebugExpression, qWarningExpression, qErrorExpression, qFatalExpression )
+
+####################################################################################################
+
+def convert( fname ):
+ print >>sys.stderr, "<NOTE>: Dealing with %s..." % fname
+
+ for line in file( fname ):
+ match = False
+ for expr in allExpressions:
+ m = expr.match( line )
+ if m is None:
+ continue
+ else:
+ match = True
+ head, debug, content, tail = m.groups()
+ print >>sys.stderr, "<NOTE>: Groups = ", m.groups()
+ sys.stdout.write( head.strip() )
+ sys.stdout.write( debugTable[debug.strip()] )
+ sys.stdout.write( " << " )
+ sys.stdout.write( transform( content ).strip() )
+ sys.stdout.write( " << oendl; " )
+ sys.stdout.write( tail + "\n" )
+ continue
+ # nothing applies
+ if not match:
+ sys.stdout.write( line + "\n" )
+
+####################################################################################################
+
+def transform( s ):
+ print >>sys.stderr, "<NOTE>: Transforming '%s'..." % s
+
+ # check if there is one or more comma's outside of strings
+ groups = []
+ i = 0
+ instring = False
+ group = ""
+ while i < len( s ):
+ if s[i] == '"':
+ instring = not instring
+ elif s[i] == "," and not instring:
+ groups.append( group.strip() )
+ group = ""
+ i += 1
+ continue
+ group += s[i]
+ i += 1
+ continue
+
+ groups.append( group.strip() )
+
+ # check for easy case
+ if len( groups ) < 2: return s.replace( "%%", "%" )
+
+ # damn. it gets complicated...
+ print >>sys.stderr, "<NOTE>: Comma's outside of strings = %d" % ( len( groups ) -1 )
+
+ formatstring, substitutions = groups[0], groups[1:]
+ result = ""
+
+ # iterator over formatstring and substitute format directives (e.g. '%d') with the substitutions
+ subst = 0
+ i = 0
+ indirective = False
+ while i < len( formatstring ):
+ if formatstring[i] != "%":
+ result += formatstring[i]
+ i += 1
+ continue
+ else: # % in formatstring
+ indirective = True
+ i += 1
+ while i < len( formatstring ) and formatstring[i] not in "%dDiouxXfegEscpn":
+ i += 1
+ if formatstring[i] == "%":
+ result += "%"
+ else:
+ result += '" << %s << "' % substitutions[0]
+ del substitutions[0]
+ indirective = False
+ i += 1
+
+ print >>sys.stderr, "<NOTE>: Result seems to be '%s'" % result
+ return result.replace( "%%", "%" )
+
+####################################################################################################
+
+if __name__ == "__main__":
+ try:
+ fname = sys.argv[1]
+ except:
+ print >>sys.stderr, "Usage: %s <filename>\n" % sys.argv[0]
+ else:
+ convert( fname )