tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

writesrc.h (6126B)


      1 // © 2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 /*
      4 *******************************************************************************
      5 *
      6 *   Copyright (C) 2005-2012, International Business Machines
      7 *   Corporation and others.  All Rights Reserved.
      8 *
      9 *******************************************************************************
     10 *   file name:  writesrc.h
     11 *   encoding:   UTF-8
     12 *   tab size:   8 (not used)
     13 *   indentation:4
     14 *
     15 *   created on: 2005apr23
     16 *   created by: Markus W. Scherer
     17 *
     18 *   Helper functions for writing source code for data.
     19 */
     20 
     21 #ifndef __WRITESRC_H__
     22 #define __WRITESRC_H__
     23 
     24 #include <stdio.h>
     25 #include "unicode/utypes.h"
     26 #include "unicode/ucpmap.h"
     27 #include "unicode/ucptrie.h"
     28 #include "unicode/umutablecptrie.h"
     29 #include "unicode/uset.h"
     30 #include "utrie2.h"
     31 
     32 /**
     33 * An input to some of the functions in this file specifying whether to write data
     34 * as C/C++ code initializers or as TOML.
     35 */
     36 typedef enum UTargetSyntax {
     37    UPRV_TARGET_SYNTAX_CCODE = 0,
     38    UPRV_TARGET_SYNTAX_TOML = 1,
     39 } UTargetSyntax;
     40 
     41 /**
     42 * Creates a source text file and writes a header comment with the ICU copyright.
     43 * Writes a C/Java-style comment with the generator name.
     44 */
     45 U_CAPI FILE * U_EXPORT2
     46 usrc_create(const char *path, const char *filename, int32_t copyrightYear, const char *generator);
     47 
     48 /**
     49 * Creates a source text file and writes a header comment with the ICU copyright.
     50 * Writes the comment with # lines, as used in scripts and text data.
     51 */
     52 U_CAPI FILE * U_EXPORT2
     53 usrc_createTextData(const char *path, const char *filename, int32_t copyrightYear, const char *generator);
     54 
     55 /**
     56 * Writes the ICU copyright to a file stream, with configurable year and comment style.
     57 */
     58 U_CAPI void U_EXPORT2
     59 usrc_writeCopyrightHeader(FILE *f, const char *prefix, int32_t copyrightYear);
     60 
     61 /**
     62 * Writes information about the file being machine-generated.
     63 */
     64 U_CAPI void U_EXPORT2
     65 usrc_writeFileNameGeneratedBy(
     66        FILE *f,
     67        const char *prefix,
     68        const char *filename,
     69        const char *generator);
     70 
     71 /**
     72 * Writes the contents of an array of 8/16/32/64-bit words.
     73 * The prefix and postfix are optional (can be NULL) and are written first/last.
     74 * The prefix may contain a %ld or similar field for the array length.
     75 * The {} and declaration etc. need to be included in prefix/postfix or
     76 * printed before and after the array contents.
     77 */
     78 U_CAPI void U_EXPORT2
     79 usrc_writeArray(FILE *f,
     80                const char *prefix,
     81                const void *p, int32_t width, int32_t length,
     82                const char *indent,
     83                const char *postfix);
     84 
     85 /**
     86 * Calls usrc_writeArray() for the index and data arrays of a frozen UTrie2.
     87 * Only the index array is written for a 16-bit UTrie2. In this case, dataPrefix
     88 * is ignored and can be NULL.
     89 */
     90 U_CAPI void U_EXPORT2
     91 usrc_writeUTrie2Arrays(FILE *f,
     92                       const char *indexPrefix, const char *dataPrefix,
     93                       const UTrie2 *pTrie,
     94                       const char *postfix);
     95 
     96 /**
     97 * Writes the UTrie2 struct values.
     98 * The {} and declaration etc. need to be included in prefix/postfix or
     99 * printed before and after the array contents.
    100 */
    101 U_CAPI void U_EXPORT2
    102 usrc_writeUTrie2Struct(FILE *f,
    103                       const char *prefix,
    104                       const UTrie2 *pTrie,
    105                       const char *indexName, const char *dataName,
    106                       const char *postfix);
    107 
    108 /**
    109 * Calls usrc_writeArray() for the index and data arrays of a UCPTrie.
    110 */
    111 U_CAPI void U_EXPORT2
    112 usrc_writeUCPTrieArrays(FILE *f,
    113                        const char *indexPrefix, const char *dataPrefix,
    114                        const UCPTrie *pTrie,
    115                        const char *postfix,
    116                        UTargetSyntax syntax);
    117 
    118 /**
    119 * Writes the UCPTrie struct values.
    120 * The {} and declaration etc. need to be included in prefix/postfix or
    121 * printed before and after the array contents.
    122 */
    123 U_CAPI void U_EXPORT2
    124 usrc_writeUCPTrieStruct(FILE *f,
    125                        const char *prefix,
    126                        const UCPTrie *pTrie,
    127                        const char *indexName, const char *dataName,
    128                        const char *postfix,
    129                        UTargetSyntax syntax);
    130 
    131 /**
    132 * Writes the UCPTrie arrays and struct values.
    133 */
    134 U_CAPI void U_EXPORT2
    135 usrc_writeUCPTrie(FILE *f, const char *name, const UCPTrie *pTrie, UTargetSyntax syntax);
    136 
    137 /**
    138 * Writes the UnicodeSet range and string lists.
    139 */
    140 U_CAPI void U_EXPORT2
    141 usrc_writeUnicodeSet(
    142    FILE *f,
    143    const USet *pSet,
    144    UTargetSyntax syntax);
    145 
    146 #ifdef __cplusplus
    147 
    148 U_NAMESPACE_BEGIN
    149 
    150 class U_TOOLUTIL_API ValueNameGetter {
    151 public:
    152    virtual ~ValueNameGetter();
    153    virtual const char *getName(uint32_t value) = 0;
    154 };
    155 
    156 U_NAMESPACE_END
    157 
    158 /**
    159 * Writes the UCPMap ranges list.
    160 *
    161 * The "valueNameGetter" argument is optional; ignored if nullptr.
    162 * If present, it will be used to look up value name strings.
    163 */
    164 U_CAPI void U_EXPORT2
    165 usrc_writeUCPMap(
    166    FILE *f,
    167    const UCPMap *pMap,
    168    icu::ValueNameGetter *valueNameGetter,
    169    UTargetSyntax syntax);
    170 
    171 #endif  // __cplusplus
    172 
    173 /**
    174 * Writes the contents of an array of mostly invariant characters.
    175 * Characters 0..0x1f are printed as numbers,
    176 * others as characters with single quotes: '%c'.
    177 *
    178 * The prefix and postfix are optional (can be NULL) and are written first/last.
    179 * The prefix may contain a %ld or similar field for the array length.
    180 * The {} and declaration etc. need to be included in prefix/postfix or
    181 * printed before and after the array contents.
    182 */
    183 U_CAPI void U_EXPORT2
    184 usrc_writeArrayOfMostlyInvChars(FILE *f,
    185                                const char *prefix,
    186                                const char *p, int32_t length,
    187                                const char *postfix);
    188 
    189 /**
    190 * Writes a syntactically valid Unicode string in all ASCII, escaping quotes
    191 * and non-ASCII characters.
    192 */
    193 U_CAPI void U_EXPORT2
    194 usrc_writeStringAsASCII(FILE *f,
    195                        const UChar* ptr, int32_t length,
    196                        UTargetSyntax syntax);
    197 
    198 #endif