blob: 9c0be5a10077ff6201d626b194d3486792211408 [file] [log] [blame]
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
*
* Copyright (C) 2005-2012, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
* file name: writesrc.h
* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
* created on: 2005apr23
* created by: Markus W. Scherer
*
* Helper functions for writing source code for data.
*/
#ifndef __WRITESRC_H__
#define __WRITESRC_H__
#include <stdio.h>
#include "unicode/utypes.h"
#include "unicode/ucpmap.h"
#include "unicode/ucptrie.h"
#include "unicode/umutablecptrie.h"
#include "unicode/uset.h"
#include "utrie2.h"
/**
* An input to some of the functions in this file specifying whether to write data
* as C/C++ code initializers or as TOML.
*/
typedef enum UTargetSyntax {
UPRV_TARGET_SYNTAX_CCODE = 0,
UPRV_TARGET_SYNTAX_TOML = 1,
} UTargetSyntax;
/**
* Creates a source text file and writes a header comment with the ICU copyright.
* Writes a C/Java-style comment with the generator name.
*/
U_CAPI FILE * U_EXPORT2
usrc_create(const char *path, const char *filename, int32_t copyrightYear, const char *generator);
/**
* Creates a source text file and writes a header comment with the ICU copyright.
* Writes the comment with # lines, as used in scripts and text data.
*/
U_CAPI FILE * U_EXPORT2
usrc_createTextData(const char *path, const char *filename, int32_t copyrightYear, const char *generator);
/**
* Writes the ICU copyright to a file stream, with configurable year and comment style.
*/
U_CAPI void U_EXPORT2
usrc_writeCopyrightHeader(FILE *f, const char *prefix, int32_t copyrightYear);
/**
* Writes information about the file being machine-generated.
*/
U_CAPI void U_EXPORT2
usrc_writeFileNameGeneratedBy(
FILE *f,
const char *prefix,
const char *filename,
const char *generator);
/**
* Writes the contents of an array of 8/16/32/64-bit words.
* The prefix and postfix are optional (can be NULL) and are written first/last.
* The prefix may contain a %ld or similar field for the array length.
* The {} and declaration etc. need to be included in prefix/postfix or
* printed before and after the array contents.
*/
U_CAPI void U_EXPORT2
usrc_writeArray(FILE *f,
const char *prefix,
const void *p, int32_t width, int32_t length,
const char *indent,
const char *postfix);
/**
* Calls usrc_writeArray() for the index and data arrays of a frozen UTrie2.
* Only the index array is written for a 16-bit UTrie2. In this case, dataPrefix
* is ignored and can be NULL.
*/
U_CAPI void U_EXPORT2
usrc_writeUTrie2Arrays(FILE *f,
const char *indexPrefix, const char *dataPrefix,
const UTrie2 *pTrie,
const char *postfix);
/**
* Writes the UTrie2 struct values.
* The {} and declaration etc. need to be included in prefix/postfix or
* printed before and after the array contents.
*/
U_CAPI void U_EXPORT2
usrc_writeUTrie2Struct(FILE *f,
const char *prefix,
const UTrie2 *pTrie,
const char *indexName, const char *dataName,
const char *postfix);
/**
* Calls usrc_writeArray() for the index and data arrays of a UCPTrie.
*/
U_CAPI void U_EXPORT2
usrc_writeUCPTrieArrays(FILE *f,
const char *indexPrefix, const char *dataPrefix,
const UCPTrie *pTrie,
const char *postfix,
UTargetSyntax syntax);
/**
* Writes the UCPTrie struct values.
* The {} and declaration etc. need to be included in prefix/postfix or
* printed before and after the array contents.
*/
U_CAPI void U_EXPORT2
usrc_writeUCPTrieStruct(FILE *f,
const char *prefix,
const UCPTrie *pTrie,
const char *indexName, const char *dataName,
const char *postfix,
UTargetSyntax syntax);
/**
* Writes the UCPTrie arrays and struct values.
*/
U_CAPI void U_EXPORT2
usrc_writeUCPTrie(FILE *f, const char *name, const UCPTrie *pTrie, UTargetSyntax syntax);
/**
* Writes the UnicodeSet range and string lists.
*/
U_CAPI void U_EXPORT2
usrc_writeUnicodeSet(
FILE *f,
const USet *pSet,
UTargetSyntax syntax);
#ifdef __cplusplus
U_NAMESPACE_BEGIN
class U_TOOLUTIL_API ValueNameGetter {
public:
virtual ~ValueNameGetter();
virtual const char *getName(uint32_t value) = 0;
};
U_NAMESPACE_END
/**
* Writes the UCPMap ranges list.
*
* The "valueNameGetter" argument is optional; ignored if nullptr.
* If present, it will be used to look up value name strings.
*/
U_CAPI void U_EXPORT2
usrc_writeUCPMap(
FILE *f,
const UCPMap *pMap,
icu::ValueNameGetter *valueNameGetter,
UTargetSyntax syntax);
#endif // __cplusplus
/**
* Writes the contents of an array of mostly invariant characters.
* Characters 0..0x1f are printed as numbers,
* others as characters with single quotes: '%c'.
*
* The prefix and postfix are optional (can be NULL) and are written first/last.
* The prefix may contain a %ld or similar field for the array length.
* The {} and declaration etc. need to be included in prefix/postfix or
* printed before and after the array contents.
*/
U_CAPI void U_EXPORT2
usrc_writeArrayOfMostlyInvChars(FILE *f,
const char *prefix,
const char *p, int32_t length,
const char *postfix);
/**
* Writes a syntactically valid Unicode string in all ASCII, escaping quotes
* and non-ASCII characters.
*/
U_CAPI void U_EXPORT2
usrc_writeStringAsASCII(FILE *f,
const UChar* ptr, int32_t length,
UTargetSyntax syntax);
#endif