summaryrefslogtreecommitdiff
path: root/support/dktools/dk4utf8.h
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/dk4utf8.h
Initial commit
Diffstat (limited to 'support/dktools/dk4utf8.h')
-rw-r--r--support/dktools/dk4utf8.h153
1 files changed, 153 insertions, 0 deletions
diff --git a/support/dktools/dk4utf8.h b/support/dktools/dk4utf8.h
new file mode 100644
index 0000000000..5ee7b4db87
--- /dev/null
+++ b/support/dktools/dk4utf8.h
@@ -0,0 +1,153 @@
+/*
+ WARNING: This file was generated by dkct.
+ Changes you make here will be lost if dkct is run again!
+ You should modify the original source and run dkct on it.
+ Original source: dk4utf8.ctr
+*/
+
+/*
+Copyright (C) 2015-2017, Dirk Krause
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above opyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+* Neither the name of the author nor the names of contributors may be used
+ to endorse or promote products derived from this software without specific
+ prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef DK4UTF8_H_INCLUDED
+/** Avoid multiple inclusions. */
+#define DK4UTF8_H_INCLUDED 1
+
+
+#line 10 "dk4utf8.ctr"
+
+/** @file
+ UTF-8 decoding and encoding.
+
+To decode an UTF-8 encoded data stream, use a dk4_utf8_decoder_t object.
+Use dk4utf8_init() to initialize the object before you start decoding.
+For each byte from the data stream use dk4utf8_add(). Possible
+return values are DK4_EDSTM_ACCEPT, DK4_EDSTM_FINISHED,
+and DK4_EDSTM_ERROR.
+DK4_EDSTM_ACCEPT indicates the byte was processed successfully,
+but more bytes are required to complete the UNICODE character.
+DK4_EDSTM_FINISHED indicates an UNICODE character was completed,
+use dk4utf8_get() to retrieve it.
+DK4_EDSTM_ERROR indicates an error, invalid input.
+
+The older RFC2279 allows a wider range of UNICODE characters,
+RFC3629 restricts the UNICODE character range to 0x0010FFFF.
+Routines in this module use the range defined by RFC2279.
+To be RFC3629 compliant, check UNICODE values and make sure
+to use the range 0...0x0010FFFF only.
+
+CRT on Windows: Not used.
+*/
+
+
+#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 DK4DEC_H_INCLUDED
+#include "dk4edstm.h"
+#endif
+
+
+/** State machine to decode UTF-8 encoded data byte by byte.
+*/
+typedef struct {
+ dk4_c32_t uc; /**< Unicode character to produce. */
+ int bfc; /**< Bytes needed for character. */
+ int bfn; /**< Bytes already found. */
+} dk4_utf8_decoder_t;
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Initialize the UTF-8 decoder.
+ @param ptr Decoder to initialize.
+*/
+void
+dk4utf8_init(dk4_utf8_decoder_t *ptr);
+
+/** Add one byte to the decoder.
+ @param ptr Decoder to use.
+ @param byte Byte to add.
+ @return Operation result, one from:
+ DK4_EDSTM_ACCEPT if the byte was added to the next output
+ without completing output,
+ DK4_EDSTM_FINISHED if the byte was added to the next output
+ completing the output, or
+ DK4_EDSTM_ERROR on error.
+*/
+int
+dk4utf8_add(dk4_utf8_decoder_t *ptr, unsigned char byte);
+
+/** Retrieve a completed Unicode character from the decoder.
+ @param ptr Decoder to obtain character from.
+*/
+dk4_c32_t
+dk4utf8_get(dk4_utf8_decoder_t *ptr);
+
+/** Check whether the decoder is empty.
+ @param ptr Decoder to check.
+ @return 1 on success, 0 on error.
+*/
+int
+dk4utf8_is_empty(dk4_utf8_decoder_t *ptr);
+
+/** UTF-8 encode UNICODE character.
+ @param rb Result buffer, at least 7 bytes.
+ @param pszrb Size of result buffer, in: available, out: used.
+ @param c Character to encode.
+ @param erp Error report, may be NULL.
+ @return 1 on success, 0 on error.
+
+ Error codes:
+ - DK4_E_INVALID_ARGUMENTS<br>
+ if rb or pszrb is NULL,
+ - DK4_E_BUFFER_TOO_SMALL<br>
+ if the size specified in pszrb is less than 7.
+*/
+int
+dk4utf8_encode(unsigned char *rb, size_t *pszrb, dk4_c32_t c, dk4_er_t *erp);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+
+#endif