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 */