summaryrefslogtreecommitdiff
path: root/support/dktools/dk4tspwx.cpt
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/dktools/dk4tspwx.cpt
Initial commit
Diffstat (limited to 'support/dktools/dk4tspwx.cpt')
-rw-r--r--support/dktools/dk4tspwx.cpt383
1 files changed, 383 insertions, 0 deletions
diff --git a/support/dktools/dk4tspwx.cpt b/support/dktools/dk4tspwx.cpt
new file mode 100644
index 0000000000..b9b6e8cb59
--- /dev/null
+++ b/support/dktools/dk4tspwx.cpt
@@ -0,0 +1,383 @@
+%% options
+
+copyright owner = Dirk Krause
+copyright year = 2015-xxxx
+license = bsd
+
+
+%% header
+
+/** @file dk4tspwx.h Text stream processing for wxChar.
+*/
+
+#ifndef DK4CONF_H_INCLUDED
+#include "dk4conf.h"
+#endif
+
+#ifndef DK4TYPES_H_INCLUDED
+#include "dk4types.h"
+#endif
+
+#ifndef DK4ERROR_H_INCLUDED
+#include "dk4error.h"
+#endif
+
+#ifndef DK4WXCS_H_INCLUDED
+#include "dk4wxcs.h"
+#endif
+
+
+#ifndef WX_WXPREC_H_INCLUDED
+#include <wx/wxprec.h>
+#define WX_WXPREC_H_INCLUDED 1
+#endif
+#ifdef __BORLANDC__
+#pragma hdrstop
+#endif
+#ifndef WX_PRECOMP
+#if DK4_HAVE_WX_CHARTYPE_H
+#ifndef WX_CHARTYPE_H_INCLUDED
+#include <wx/chartype.h>
+#define WX_CHARTYPE_H_INCLUDED 1
+#endif
+#else
+#if DK4_HAVE_WX_WXCHAR_H
+#ifndef WX_WXCHAR_H_INCLUDED
+#include <wx/wxchar.h>
+#define WX_WXCHAR_H_INCLUDED 1
+#endif
+#else
+#ifndef WX_WX_H_INCLUDED
+#include <wx/wx.h>
+#define WX_WX_H_INCLUDED
+#endif
+#endif
+#endif
+#endif
+
+
+#if DK4_SIZEOF_WXCHAR > 1
+#if DK4_SIZEOF_WXCHAR > 2
+/* +++++ dkChar 4 bytes */
+
+#ifndef DK4TSP32_H_INCLUDED
+#include "dk4tsp32.h"
+#endif
+
+/** Handler function to process a single character.
+*/
+typedef dk4_c32_handler_t dk4_wx_handler_t;
+
+/** Handler function to process an input line.
+*/
+typedef dk4_c32_line_handler_t dk4_wx_line_handler_t;
+
+/** Text stream processor.
+*/
+typedef dk4_tsp32_t dk4_tspwx_t;
+
+/* ----- dkChar 4 bytes */
+#else
+/* +++++ dkChar 2 bytes */
+
+#ifndef DK4TSP16_H_INCLUDED
+#include "dk4tsp16.h"
+#endif
+
+/** Handler function to process a single character.
+*/
+typedef dk4_c16_handler_t dk4_wx_handler_t;
+
+/** Handler function to process an input line.
+*/
+typedef dk4_c16_line_handler_t dk4_wx_line_handler_t;
+
+/** Text stream processor.
+*/
+typedef dk4_tsp16_t dk4_tspwx_t;
+
+/* ----- dkChar 2 bytes */
+#endif
+#else
+/* +++++ dkChar 1 byte */
+
+#ifndef DK4TSP08_H_INCLUDED
+#include "dk4tsp08.h"
+#endif
+
+/** Handler function to process a single character.
+*/
+typedef dk4_c8_handler_t dk4_wx_handler_t;
+
+/** Handler function to process an input line.
+*/
+typedef dk4_c8_line_handler_t dk4_wx_line_handler_t;
+
+/** Text stream processor.
+*/
+typedef dk4_tsp08_t dk4_tspwx_t;
+
+/* ----- dkChar 1 byte */
+#endif
+
+
+
+extern "C" {
+
+/** Set up processor for char by char processing.
+ @param tsp Processor to set up.
+ @param obj Object to modify when processing input, may be NULL.
+ @param fct Handler function to call for each character.
+ @param pre Encoding required for processing.
+ @param eie Expected input encoding.
+ @param erp Error report, may be NULL.
+ @return 1 on success, 0 on error.
+*/
+int
+dk4tspwx_setup_char(
+ dk4_tspwx_t *tsp,
+ void *obj,
+ dk4_wx_handler_t *fct,
+ int pre,
+ int eie,
+ dk4_er_t *erp
+);
+
+/** Set up processor for line processing.
+ @param tsp Processor to set up.
+ @param obj Object to modify when processing input, may be NULL.
+ @param fct Handler function to invoke for each line.
+ @param inbuf Input line buffer.
+ @param szin Size of input line buffer (number of wxChar).
+ @param pre Encoding required for processing.
+ @param eie Expected input encoding.
+ @param erp Error report, may be NULL.
+ @return 1 on success, 0 on error.
+*/
+int
+dk4tspwx_setup_line(
+ dk4_tspwx_t *tsp,
+ void *obj,
+ dk4_wx_line_handler_t *fct,
+ wxChar *inbuf,
+ size_t szin,
+ int pre,
+ int eie,
+ dk4_er_t *erp
+);
+
+/** Allow pass-through of UTF-8 encoded data.
+ @param tsp Text stream processor to set up.
+ @param fl Flag: Enable pass-through of UTF-8 encoded data.
+*/
+void
+dk4tspwx_enable_utf8_pass_through(dk4_tspwx_t *tsp, int fl);
+
+/** Add one single byte.
+ @param tsp Text stream processor.
+ @param inbyte Byte to process.
+ @return DK4_TSP_RES_OK if the character was processed
+ successfully,
+ DK4_TSP_RES_ERROR if there was an error but we can
+ continue,
+ DK4_TSP_RES_FATAL if there was a fatal error so we
+ should abort processing.
+*/
+int
+dk4tspwx_add_one_byte(
+ dk4_tspwx_t *tsp,
+ unsigned char inbyte
+);
+
+/** Add multiple bytes.
+ @param tsp Text stream processor.
+ @param buffer Buffer start address.
+ @param sz Number of bytes in buffer.
+ @return DK4_TSP_RES_OK if the character was processed
+ successfully,
+ DK4_TSP_RES_ERROR if there was an error but we can
+ continue,
+ DK4_TSP_RES_FATAL if there was a fatal error so we
+ should abort processing.
+*/
+int
+dk4tspwx_add_bytes(
+ dk4_tspwx_t *tsp,
+ const unsigned char *buffer,
+ size_t sz
+);
+
+/** Finish processing.
+ @param tsp Text stream processor.
+ @return DK4_TSP_RES_OK if processing was finished
+ successfully,
+ DK4_TSP_RES_ERROR if there was an error,
+ DK4_TSP_RES_FATAL if there was a fatal error.
+*/
+int
+dk4tspwx_finish(dk4_tspwx_t *tsp);
+
+/** Retrieve error reports for encoding/decoding and processing.
+ @param er_en Destination error report buffer for encoding/decoding.
+ @param er_pr Destination error report buffer for processing.
+ @param tsp Text stream processor to retrieve errors from.
+*/
+void
+dk4tspwx_get_errors(dk4_er_t *er_en, dk4_er_t *er_pr, dk4_tspwx_t *tsp);
+
+}
+
+
+
+%% module
+
+#include "dk4tspwx.h"
+
+
+
+$!trace-include
+
+
+
+int
+dk4tspwx_setup_char(
+ dk4_tspwx_t *tsp,
+ void *obj,
+ dk4_wx_handler_t *fct,
+ int pre,
+ int eie,
+ dk4_er_t *erp
+)
+{
+#if DK4_SIZEOF_WXCHAR > 1
+#if DK4_SIZEOF_WXCHAR > 2
+ return (dk4tsp32_setup_char(tsp, obj, fct, eie, erp));
+#else
+ return (dk4tsp16_setup_char(tsp, obj, fct, eie, erp));
+#endif
+#else
+ return (dk4tsp08_setup_char(tsp, obj, fct, pre, eie, erp));
+#endif
+}
+
+
+
+int
+dk4tspwx_setup_line(
+ dk4_tspwx_t *tsp,
+ void *obj,
+ dk4_wx_line_handler_t *fct,
+ wxChar *inbuf,
+ size_t szin,
+ int pre,
+ int eie,
+ dk4_er_t *erp
+)
+{
+#if DK4_SIZEOF_WXCHAR > 1
+#if DK4_SIZEOF_WXCHAR > 2
+ return (dk4tsp32_setup_line(tsp,obj,fct,(dk4_c32_t *)inbuf,szin,eie,erp));
+#else
+ return (dk4tsp16_setup_line(tsp,obj,fct,(dk4_c16_t *)inbuf,szin,eie,erp));
+#endif
+#else
+ return (dk4tsp08_setup_line(tsp,obj,fct,(char *)inbuf,szin,pre,eie,erp));
+#endif
+}
+
+
+
+void
+dk4tspwx_enable_utf8_pass_through(dk4_tspwx_t *tsp, int fl)
+{
+#if DK4_SIZEOF_WXCHAR == 1
+ dk4tsp08_enable_utf8_pass_through(tsp, fl);
+#endif
+}
+
+
+
+#if TRACE_DEBUG
+static unsigned long byteno = 0UL;
+#endif
+
+
+int
+dk4tspwx_add_one_byte(
+ dk4_tspwx_t *tsp,
+ unsigned char inbyte
+)
+{
+ $? "= dk4tspwx_add_one_byte index=%lu '%!8c' 0x%02x", byteno++, inbyte, inbyte
+#if DK4_SIZEOF_WXCHAR > 1
+#if DK4_SIZEOF_WXCHAR > 2
+ return (dk4tsp32_add_one_byte(tsp, inbyte));
+#else
+ return (dk4tsp16_add_one_byte(tsp, inbyte));
+#endif
+#else
+ return (dk4tsp08_add_one_byte(tsp, inbyte));
+#endif
+}
+
+
+
+int
+dk4tspwx_add_bytes(
+ dk4_tspwx_t *tsp,
+ const unsigned char *buffer,
+ size_t sz
+)
+{
+ $? "= dk4tspwx_add_bytes %lu", (unsigned long)sz
+#if TRACE_DEBUG
+ if (NULL != dktrace_file()) {
+ fputc('"', dktrace_file());
+ fwrite(buffer, sizeof(char), sz, dktrace_file());
+ fputc('"', dktrace_file());
+ }
+#endif
+
+#if DK4_SIZEOF_WXCHAR > 1
+#if DK4_SIZEOF_WXCHAR > 2
+ return (dk4tsp32_add_bytes(tsp, buffer, sz));
+#else
+ return (dk4tsp16_add_bytes(tsp, buffer, sz));
+#endif
+#else
+ return (dk4tsp08_add_bytes(tsp, buffer, sz));
+#endif
+}
+
+
+
+int
+dk4tspwx_finish(dk4_tspwx_t *tsp)
+{
+#if DK4_SIZEOF_WXCHAR > 1
+#if DK4_SIZEOF_WXCHAR > 2
+ return (dk4tsp32_finish(tsp));
+#else
+ return (dk4tsp16_finish(tsp));
+#endif
+#else
+ return (dk4tsp08_finish(tsp));
+#endif
+}
+
+
+
+void
+dk4tspwx_get_errors(dk4_er_t *er_en, dk4_er_t *er_pr, dk4_tspwx_t *tsp)
+{
+#if DK4_SIZEOF_WXCHAR > 1
+#if DK4_SIZEOF_WXCHAR > 2
+ dk4tsp32_get_errors(er_en, er_pr, tsp);
+#else
+ dk4tsp16_get_errors(er_en, er_pr, tsp);
+#endif
+#else
+ dk4tsp08_get_errors(er_en, er_pr, tsp);
+#endif
+}
+