summaryrefslogtreecommitdiff
path: root/support/dktools/dk3se.ctr
diff options
context:
space:
mode:
Diffstat (limited to 'support/dktools/dk3se.ctr')
-rw-r--r--support/dktools/dk3se.ctr529
1 files changed, 0 insertions, 529 deletions
diff --git a/support/dktools/dk3se.ctr b/support/dktools/dk3se.ctr
deleted file mode 100644
index 056470392d..0000000000
--- a/support/dktools/dk3se.ctr
+++ /dev/null
@@ -1,529 +0,0 @@
-%% options
-
-copyright owner = Dirk Krause
-copyright year = 2013-xxxx
-SPDX-License-Identifier: BSD-3-Clause
-
-
-%% header
-
-#include <dk3conf.h>
-#include <dk3types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** Write ANSI character or check ANSI compatibility.
- @param c32 Character to write or check.
- @param fipo File to write to (NULL for check).
- @return 1 on success, 0 on error (No representation for this
- character in ANSI encoding).
-*/
-int
-dk3se_ansi_fputc(dk3_c32_t c32, FILE *fipo);
-
-/** Write URL character or check URL compatibility.
- @param c32 Character to write or check.
- @param fipo File to write to (NULL for check).
- @return 1 on success, 0 on error.
-*/
-int
-dk3se_url_fputc(dk3_c32_t c32, FILE *fipo);
-
-/** Convert to ANSI and write URL character or check URL compatibility.
- @param c32 Character to write or check.
- @param fipo File to write to (NULL for check).
- @return 1 on success, 0 on error.
-*/
-int
-dk3se_ansi_url_fputc(dk3_c32_t c32, FILE *fipo);
-
-/** Write ANSI string or check ANSI compatibility.
- @param str String to write.
- @param enc String encoding.
- @param fipo File to write to (NULL for compatibility check).
- @param app Application structure for diagnostics, may be NULL.
- @return 1 on success, 0 on error.
-*/
-int
-dk3se_ansi_fputs(dkChar const *str, int enc, FILE *fipo, dk3_app_t *app);
-
-/** Write URL string or check URL compatibility.
- @param str String to write.
- @param enc String encoding.
- @param fipo File to write to (NULL for compatibility check).
- @param app Application structure for diagnostics, may be NULL.
- @return 1 on success, 0 on error.
-*/
-int
-dk3se_url_fputs(dkChar const *str, int enc, FILE *fipo, dk3_app_t *app);
-
-/** Convert to ANSI and write URL string or check URL compatibility.
- @param str String to write.
- @param enc String encoding.
- @param fipo File to write to (NULL for compatibility check).
- @param app Application structure for diagnostics, may be NULL.
- @return 1 on success, 0 on error.
-*/
-int
-dk3se_ansi_url_fputs(dkChar const *str, int enc, FILE *fipo, dk3_app_t *app);
-
-/** Check whether a string can be converted to ANSI or URL.
- @param str String to test.
- @param enc String encoding.
- @param se Output encoding (DK3SE_ANSI and/or DK3SE_URL).
- @param ev Pointer to encoding violation variable.
- @param we Pointer to write error variable.
- @param app Application structure for diagnostics, may be NULL.
- @return 1 on success, 0 on error.
-*/
-int
-dk3se_check(dkChar const *str,int enc,int se,int *ev,int *we,dk3_app_t *app);
-
-#ifdef __cplusplus
-}
-#endif
-
-/** ANSI encoding.
-*/
-#define DK3SE_ANSI 1
-
-/** URL encoding.
-*/
-#define DK3SE_URL 2
-
-%% module
-
-
-
-#include "dk3all.h"
-#include "dk3se.h"
-#include "dk3enc.h"
-#include "dk3unused.h"
-
-
-$!trace-include
-
-
-
-/** Find ANSI character for 32-bit character.
- @param dp Pointer to destination variable.
- @param c32 32-bit character.
- @return 1 on success (character found), 0 on error (not available).
-*/
-static
-int
-dk3se_find_ansi_char(char *dp, dk3_c32_t c32)
-{
- int back = 0;
- unsigned u;
- unsigned char uc;
- char c = '\0';
- $? "+ dk3se_find_ansi_char 0x%lx %lu", dk3enc_uc_to_ul(c32), dk3enc_uc_to_ul(c32)
- if((dk3_c32_t)0x00010000UL > c32) {
- u = (unsigned)c32;
- if(((dk3_c32_t)0x00000019UL < c32) && ((dk3_c32_t)0x00000080UL > c32)) {
- uc = (unsigned char)u; c = (char)uc;
- back = 1;
- } else {
- if(((dk3_c32_t)0x0000009FUL < c32) && ((dk3_c32_t)0x00000100UL > c32)) {
- uc = (unsigned char)u; c = (char)uc;
- back = 1;
- } else {
- switch(u) {
- case 0x20AC: { c = '\x80'; back = 1; } break;
- case 0x0081: { c = '\x81'; back = 1; } break;
- case 0x201A: { c = '\x82'; back = 1; } break;
- case 0x0192: { c = '\x83'; back = 1; } break;
- case 0x201E: { c = '\x84'; back = 1; } break;
- case 0x2026: { c = '\x85'; back = 1; } break;
- case 0x2020: { c = '\x86'; back = 1; } break;
- case 0x2021: { c = '\x87'; back = 1; } break;
- case 0x02C6: { c = '\x88'; back = 1; } break;
- case 0x2030: { c = '\x89'; back = 1; } break;
- case 0x0160: { c = '\x8A'; back = 1; } break;
- case 0x2039: { c = '\x8B'; back = 1; } break;
- case 0x0152: { c = '\x8C'; back = 1; } break;
- case 0x008D: { c = '\x8D'; back = 1; } break;
- case 0x017D: { c = '\x8E'; back = 1; } break;
- case 0x008F: { c = '\x8F'; back = 1; } break;
- case 0x0090: { c = '\x90'; back = 1; } break;
- case 0x2018: { c = '\x91'; back = 1; } break;
- case 0x2019: { c = '\x92'; back = 1; } break;
- case 0x201C: { c = '\x93'; back = 1; } break;
- case 0x201D: { c = '\x94'; back = 1; } break;
- case 0x2022: { c = '\x95'; back = 1; } break;
- case 0x2013: { c = '\x96'; back = 1; } break;
- case 0x2014: { c = '\x97'; back = 1; } break;
- case 0x02DC: { c = '\x98'; back = 1; } break;
- case 0x2122: { c = '\x99'; back = 1; } break;
- case 0x0161: { c = '\x9A'; back = 1; } break;
- case 0x203A: { c = '\x9B'; back = 1; } break;
- case 0x0153: { c = '\x9C'; back = 1; } break;
- case 0x009D: { c = '\x9D'; back = 1; } break;
- case 0x017E: { c = '\x9E'; back = 1; } break;
- case 0x0178: { c = '\x9F'; back = 1; } break;
- }
- }
- }
- }
- if(back) { $? ". success \"%!8c\"", c
- *dp = c;
- } $? "- dk3se_find_ansi_char %d", back
- return back;
-}
-
-
-
-/** Check whether a character must be hex-encoded for output
- as URL.
- @param c Character to check.
- @return 1 for percent-hex encoding, 0 for direct output.
-*/
-static
-int
-dk3se_must_encode_for_url(char c)
-{
- int back = 1;
- $? "+ dk3se_must_encode_for_url %x \"%!8c\"", (int)c, c
- if(('a' <= c) && ('z' >= c)) {
- back = 0;
- } else {
- if(('A' <= c) && ('Z' >= c)) {
- back = 0;
- } else {
- if(('0' <= c) && ('9' >= c)) {
- back = 0;
- } else {
- switch(c) {
- case '-': case '_': case '.': case '~': {
- back = 0;
- } break;
- }
- }
- }
- } $? "- dk3se_must_encode_for_url %d", back
- return back;
-}
-
-
-
-/** Write one 32-bit character to 8-bit character file or check
- whether writing would be possible.
- @param c32 Character to write or test.
- @param fipo File to write to (NULL for check only).
- @param se Special encoding conditions.
- @param ev Pointer to variable to store encoding violations.
- @param we Pointer to write error variable.
- @param app Application structure for diagnostics, may be NULL.
-*/
-static
-int
-dk3se_fputc_checked(
- dk3_c32_t c32,
- FILE *fipo,
- int se,
- int *ev,
- int *we,
- dk3_app_t *app
-)
-{
- char buf[16];
- int back = 0;
- unsigned u;
- unsigned char uc = '\0';
- char c = '\0';
- $? "+ dk3se_fputc_checked 0x%lx %lu", dk3enc_uc_to_ul(c32), dk3enc_uc_to_ul(c32)
- if(se & DK3SE_ANSI) { $? ". ANSI required"
- back = dk3se_find_ansi_char(&c, c32);
- if(!(back)) {
- if(ev) { *ev = ((*ev) | DK3SE_ANSI); }
- if(app) {
- }
- }
- } else { $? ". ANSI not required"
- if((dk3_c32_t)0x00000100UL > c32) {
- u = (unsigned)c32; uc = (unsigned char)u; c = (char)uc;
- back = 1;
- } else {
- if(ev) { *ev = ((*ev) | DK3SE_URL); }
- if(app) {
- }
- }
- }
- if(back) { $? ". ok so far"
- if(fipo) {
- if(se & DK3SE_URL) { $? ". output as URL"
- if(dk3se_must_encode_for_url(c)) {
- buf[0] = '%'; $? ". percent/hex encoding"
- sprintf(&(buf[1]), "%02lx", dk3enc_uc_to_ul(c32));
- if(EOF == fputs(buf, fipo)) {
- back = 0;
- if(we) { *we = 1;}
- }
- } else { $? ". no percent/hex encoding necessary"
- if(EOF == fputc(c, fipo)) {
- back = 0;
- if(we) { *we = 1; }
- }
- }
- } else { $? ". output as is"
- if(EOF == fputc(c, fipo)) {
- back = 0;
- if(we) { *we = 1; }
- }
- }
- }
- } $? "- dk3se_fputc_checked %d", back
- return back;
-}
-
-
-
-/** Show results for testing or writing a string.
- @param str String to write or test.
- @param ev Pointer to result variable: Encoding violations.
- @param we Pointer to result variable: Write error.
- @param myev Found encoding violations.
- @param mywe Found write errors.
- @param myde Found decoding errors.
- @param app Application structure for diagnostics, may be NULL.
-*/
-static
-void
-dk3se_show_results(
- dkChar const *str,
- int *ev,
- int *we,
- int myev,
- int mywe,
- int myde,
- dk3_app_t *app
-)
-{
- if(ev) { *ev = myev; }
- if(we) { *we = mywe; }
- if(app) {
- if(myde) {
- dk3app_log_i3(app, DK3_LL_ERROR, 392, 367, str);
- }
- if(myev & DK3SE_ANSI) {
- dk3app_log_i3(app, DK3_LL_ERROR, 393, 367, str);
- }
- if(myev & DK3SE_URL) {
- dk3app_log_i3(app, DK3_LL_ERROR, 394, 367, str);
- }
- if(mywe) {
- dk3app_log_i3(app, DK3_LL_ERROR, 343, 344, str);
- }
- }
-}
-
-
-
-/** Write or test one string.
- @param str String to write or test.
- @param enc String encoding.
- @param fipo Output file.
- @param se Required encodings.
- @param ev Pointer to result variable: Encoding violations.
- @param we Pointer to result variable: Write error.
- @param app Application structure for diagnostics, may be NULL.
- @return 1 on success, 0 on errors.
-*/
-static
-int
-dk3se_fct
-(
- dkChar const *str,
-#if DK3_CHAR_SIZE == 1
- int enc,
-#else
- int DK3_ARG_UNUSED(enc),
-#endif
- FILE *fipo,
-#if DK3_CHAR_SIZE == 1
- int se,
-#else
- int DK3_ARG_UNUSED(se),
-#endif
- int *ev,
- int *we,
- dk3_app_t *app
-)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- dkChar const *ptr;
- int back = 1;
- int myev = 0;
- int mywe = 0;
- DK3_UNUSED_ARG(enc)
- DK3_UNUSED_ARG(se)
- $? "+ dk3se_fct (32 bit)"
- ptr = str;
- while(*ptr) {
- if(!dk3se_fputc_checked(*ptr, fipo, se, &myev, &mywe, app)) { back = 0; }
- ptr++;
- }
- if(!(back)) {
- dk3se_show_results(str, ev, we, myev, mywe, 0, app);
- } $? "- dk3se_fct %d", back
- return back;
-#else
- dk3_c16_t const *sp;
- dk3_c32_t c32;
- size_t sl;
- size_t used;
- int back = 1;
- int myev = 0;
- int mywe = 0;
- int myde = 0;
- DK3_UNUSED_ARG(enc)
- DK3_UNUSED_ARG(se)
- $? "+ dk3se_fct (16 bit)"
- sp = (dk3_c16_t const *)str;
- sl = dk3str_len(str);
- while(sl > 0) {
- used = 0;
- if(dk3enc_utf162uc(&c32, sp, sl, &used)) {
- if(!dk3se_fputc_checked(c32, fipo, se, &myev, &mywe, app)) { back = 0; }
- if(used > 0) {
- if(sl >= used) {
- sl = sl - used;
- sp = &(sp[used]);
- } else {
- sl = 0;
- back = 0;
- myde = 1;
- }
- } else {
- sl = 0;
- back = 0;
- myde = 1;
- }
- } else {
- sl = 0;
- back = 0;
- myde = 1;
- }
- }
- if(!(back)) {
- dk3se_show_results(str, ev, we, myev, mywe, myde, app);
- } $? "- dk3se_fct %d", back
- return back;
-#endif
-#else
- dk3_c32_t c32;
- unsigned char const *sp;
- size_t sl;
- size_t used;
- int back = 1;
- int myev = 0;
- int mywe = 0;
- int myde = 0;
- char c;
- $? "+ dk3se_fct (8 bit)"
- sp = (unsigned char const *)str;
- sl = dk3str_c8_len((char const *)sp);
- if(DK3_ENCODING_UTF8 == enc) {
- while(sl > 0) {
- used = 0;
- if(dk3enc_utf82uc(&c32, sp, sl, &used)) {
- if(!dk3se_fputc_checked(c32, fipo, se, &myev, &mywe, app)) { back = 0; }
- if(used > 0) {
- if(sl >= used) {
- sl = sl - used;
- sp = &(sp[used]);
- } else {
- sl = 0;
- back = 0;
- myde = 1;
- }
- } else {
- sl = 0;
- back = 0;
- myde = 1;
- }
- } else {
- sl = 0;
- back = 0;
- myde = 1;
- }
- }
- if(!(back)) {
- dk3se_show_results(str, ev, we, myev, mywe, myde, app);
- }
- } else {
- while(*sp) {
- c = *(sp++);
- c32 = (dk3_c32_t)c;
- c32 &= 0x000000FFUL;
- if(!dk3se_fputc_checked(c32, fipo, se, &myev, &mywe, app)) { back = 0; }
- }
- if(!(back)) {
- dk3se_show_results(str, ev, we, myev, mywe, 0, app);
- }
- } $? "- dk3se_fct %d", back
- return back;
-#endif
-}
-
-
-
-
-int
-dk3se_ansi_fputc(dk3_c32_t c32, FILE *fipo)
-{
- return(dk3se_fputc_checked(c32, fipo, DK3SE_ANSI, NULL, NULL, NULL));
-}
-
-
-
-int
-dk3se_url_fputc(dk3_c32_t c32, FILE *fipo)
-{
- return(dk3se_fputc_checked(c32, fipo, DK3SE_URL, NULL, NULL, NULL));
-}
-
-
-
-int
-dk3se_ansi_url_fputc(dk3_c32_t c32, FILE *fipo)
-{
- return(dk3se_fputc_checked(c32,fipo,(DK3SE_ANSI | DK3SE_URL),NULL,NULL,NULL));
-}
-
-
-
-int
-dk3se_ansi_fputs(dkChar const *str, int enc, FILE *fipo, dk3_app_t *app)
-{
- return(dk3se_fct(str, enc, fipo, DK3SE_ANSI, NULL, NULL, app));
-}
-
-
-
-int
-dk3se_url_fputs(dkChar const *str, int enc, FILE *fipo, dk3_app_t *app)
-{
- return(dk3se_fct(str, enc, fipo, DK3SE_URL, NULL, NULL, app));
-}
-
-
-int
-dk3se_ansi_url_fputs(dkChar const *str, int enc, FILE *fipo, dk3_app_t *app)
-{
- return(dk3se_fct(str, enc, fipo, (DK3SE_ANSI | DK3SE_URL), NULL, NULL, app));
-}
-
-
-
-int
-dk3se_check(dkChar const *str, int enc, int se, int *ev, int *we,dk3_app_t *app)
-{
- return(dk3se_fct(str, enc, NULL, se, ev, we, app));
-}
-
-