text: // © 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/ucptrie.h"
  #include "utrie2.h"
  
  /**
   * 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, const char *generator);
  
  /**
   * Writes the contents of an array of 8/16/32-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 *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);
  
  /**
   * 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);
  
  /**
   * Writes the UCPTrie arrays and struct values.
   */
  U_CAPI void U_EXPORT2
  usrc_writeUCPTrie(FILE *f, const char *name, const UCPTrie *pTrie);
  
  /**
   * 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);
  
  #endif
  