Some logging callback updates and way for logging widechar buffers

git-svn-id: http://liblouis.googlecode.com/svn/trunk@1154 24698d54-e344-0410-af24-25bd253c2c7b
diff --git a/liblouis/compileTranslationTable.c b/liblouis/compileTranslationTable.c
index dc6e853..9571503 100644
--- a/liblouis/compileTranslationTable.c
+++ b/liblouis/compileTranslationTable.c
@@ -5163,7 +5163,12 @@
   printf ("%s\n", hook);
 }
 
-static logcallback logCallbackFunction;
+static void defaultLogCallback(int level, const char *message)
+{
+  lou_logPrint(message);
+}
+
+static logcallback logCallbackFunction = defaultLogCallback;
 void EXPORT_CALL lou_registerLogCallback(logcallback callback)
 {
   logCallbackFunction = callback;
@@ -5199,3 +5204,30 @@
         }
     }
 }
+
+void EXPORT_CALL lou_setDefaultLogCallback()
+{
+  logCallbackFunction = defaultLogCallback;
+}
+
+void logWidecharBuf(int level, const char *msg, widechar *wbuf, int wlen)
+{
+  int logBufSize = (wlen * ((sizeof(widechar) * 2) + 3)) + 1 + strlen(msg);
+  char *logMessage = malloc(logBufSize);
+  char *p = logMessage;
+  char *formatString;
+  if (sizeof(widechar) == 2)
+    formatString = "0x%04X ";
+  else
+    formatString = "0x%08X ";
+  for (int i = 0; i < strlen(msg); i++)
+    logMessage[i] = msg[i];
+  p += strlen(msg);
+  for (int i = 0; i < wlen; i++)
+    {
+      p += sprintf(p, formatString, wbuf[i]);
+    }
+  p = '\0';
+  lou_log(level, logMessage);
+  free(logMessage);
+}
diff --git a/liblouis/liblouis.h.in b/liblouis/liblouis.h.in
index 307677b..2f80a42 100644
--- a/liblouis/liblouis.h.in
+++ b/liblouis/liblouis.h.in
@@ -168,6 +168,7 @@
     LOG_OFF = 2147483647
   } logLevels;
   void EXPORT_CALL lou_setLogLevel(int level);
+  void EXPORT_CALL lou_setDefaultCallback();
   void EXPORT_CALL lou_log(int level, const char *format, ...);
 /* General log function for callback logging */
 
diff --git a/liblouis/lou_translateString.c b/liblouis/lou_translateString.c
index 9706d63..7a1010a 100644
--- a/liblouis/lou_translateString.c
+++ b/liblouis/lou_translateString.c
@@ -78,6 +78,8 @@
   if (tableList == NULL || inbufx == NULL || inlen == NULL || outbuf ==
       NULL || outlen == NULL)
     return 0;
+  lou_log(LOG_INFO, "Performing translation: tableList=%s, inlen=%d", tableList, *inlen);
+  logWidecharBuf(LOG_INFO, "Inbuf=", inbufx, *inlen);
   if ((modex & otherTrans))
     return other_translate (tableList, inbufx,
 			    inlen, outbuf, outlen,
@@ -271,6 +273,8 @@
     }
   if (rulesLen != NULL)
     *rulesLen = appliedRulesCount;
+  lou_log(LOG_INFO, "Translation complete: outlen=%d", *outlen);
+  logWidecharBuf(LOG_INFO, "Outbuf=", outbuf, *outlen);
   return goodTrans;
 }
 
diff --git a/liblouis/louis.h b/liblouis/louis.h
index 885d39f..4d3abe3 100644
--- a/liblouis/louis.h
+++ b/liblouis/louis.h
@@ -565,6 +565,9 @@
 void outOfMemory ();
 /* Priknts an out-of-memory message and exits*/
 
+void logWidecharBuf(int level, const char *msg, widechar *wbuf, int wlen);
+/* Helper for logging a widechar buffer */
+
 #ifdef __cplusplus
 }
 #endif				/* __cplusplus */