"Fossies" - the Fresh Open Source Software Archive

Member "tnftp-20200705/libedit/chartype.h" (4 Jul 2020, 5016 Bytes) of package /linux/privat/tnftp-20200705.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "chartype.h" see the Fossies "Dox" file reference documentation.

    1 /*  $NetBSD: chartype.h,v 1.1.1.2 2020/07/04 12:41:18 lukem Exp $   */
    2 /*  from    NetBSD: chartype.h,v 1.36 2019/09/15 21:09:11 christos Exp  */
    3 
    4 /*-
    5  * Copyright (c) 2009 The NetBSD Foundation, Inc.
    6  * All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in the
   15  *    documentation and/or other materials provided with the distribution.
   16  *
   17  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   18  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   19  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   20  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   21  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   22  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   24  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   25  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   27  * POSSIBILITY OF SUCH DAMAGE.
   28  */
   29 
   30 #ifndef _h_chartype_f
   31 #define _h_chartype_f
   32 
   33 /* Ideally we should also test the value of the define to see if it
   34  * supports non-BMP code points without requiring UTF-16, but nothing
   35  * seems to actually advertise this properly, despite Unicode 3.1 having
   36  * been around since 2001... */
   37 #if !defined(__NetBSD__) && \
   38     !defined(__sun) && \
   39     !(defined(__APPLE__) && defined(__MACH__)) && \
   40     !defined(__OpenBSD__) && \
   41     !defined(__FreeBSD__) && \
   42     !defined(__DragonFly__)
   43 #ifndef __STDC_ISO_10646__
   44 /* In many places it is assumed that the first 127 code points are ASCII
   45  * compatible, so ensure wchar_t indeed does ISO 10646 and not some other
   46  * funky encoding that could break us in weird and wonderful ways. */
   47     #error wchar_t must store ISO 10646 characters
   48 #endif
   49 #endif
   50 
   51 /* Oh for a <uchar.h> with char32_t and __STDC_UTF_32__ in it...
   52  * ref: ISO/IEC DTR 19769
   53  */
   54 #if WCHAR_MAX < INT32_MAX
   55 #warning Build environment does not support non-BMP characters
   56 #endif
   57 
   58 /*
   59  * Conversion buffer
   60  */
   61 typedef struct ct_buffer_t {
   62         char    *cbuff;
   63         size_t  csize;
   64         wchar_t *wbuff;
   65         size_t  wsize;
   66 } ct_buffer_t;
   67 
   68 /* Encode a wide-character string and return the UTF-8 encoded result. */
   69 char *ct_encode_string(const wchar_t *, ct_buffer_t *);
   70 
   71 /* Decode a (multi)?byte string and return the wide-character string result. */
   72 wchar_t *ct_decode_string(const char *, ct_buffer_t *);
   73 
   74 /* Decode a (multi)?byte argv string array.
   75  * The pointer returned must be free()d when done. */
   76 libedit_private wchar_t **ct_decode_argv(int, const char *[],  ct_buffer_t *);
   77 
   78 /* Encode a character into the destination buffer, provided there is sufficient
   79  * buffer space available. Returns the number of bytes used up (zero if the
   80  * character cannot be encoded, -1 if there was not enough space available). */
   81 libedit_private ssize_t ct_encode_char(char *, size_t, wchar_t);
   82 libedit_private size_t ct_enc_width(wchar_t);
   83 
   84 /* The maximum buffer size to hold the most unwieldy visual representation,
   85  * in this case \U+nnnnn. */
   86 #define VISUAL_WIDTH_MAX ((size_t)8)
   87 
   88 /* The terminal is thought of in terms of X columns by Y lines. In the cases
   89  * where a wide character takes up more than one column, the adjacent
   90  * occupied column entries will contain this faux character. */
   91 #define MB_FILL_CHAR ((wint_t)-1)
   92 
   93 /* Visual width of character c, taking into account ^? , \0177 and \U+nnnnn
   94  * style visual expansions. */
   95 libedit_private int ct_visual_width(wchar_t);
   96 
   97 /* Turn the given character into the appropriate visual format, matching
   98  * the width given by ct_visual_width(). Returns the number of characters used
   99  * up, or -1 if insufficient space. Buffer length is in count of wchar_t's. */
  100 libedit_private ssize_t ct_visual_char(wchar_t *, size_t, wchar_t);
  101 
  102 /* Convert the given string into visual format, using the ct_visual_char()
  103  * function. Uses a static buffer, so not threadsafe. */
  104 libedit_private const wchar_t *ct_visual_string(const wchar_t *, ct_buffer_t *);
  105 
  106 
  107 /* printable character, use ct_visual_width() to find out display width */
  108 #define CHTYPE_PRINT        ( 0)
  109 /* control character found inside the ASCII portion of the charset */
  110 #define CHTYPE_ASCIICTL     (-1)
  111 /* a \t */
  112 #define CHTYPE_TAB          (-2)
  113 /* a \n */
  114 #define CHTYPE_NL           (-3)
  115 /* non-printable character */
  116 #define CHTYPE_NONPRINT     (-4)
  117 /* classification of character c, as one of the above defines */
  118 libedit_private int ct_chr_class(wchar_t c);
  119 
  120 #endif /* _chartype_f */