1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* Copyright (C) 2005-2012, International Business Machines 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* file name: writesrc.c 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* encoding: US-ASCII 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* tab size: 8 (not used) 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* indentation:4 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created on: 2005apr23 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created by: Markus W. Scherer 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Helper functions for writing source code for data. 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdio.h> 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <time.h> 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/putil.h" 23b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "utrie2.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "writesrc.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic FILE * 2883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliususrc_createWithHeader(const char *path, const char *filename, 2983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius const char *generator, const char *header) { 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[1024]; 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *p; 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *q; 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FILE *f; 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char c; 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(path==NULL) { 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p=filename; 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* concatenate path and filename, with U_FILE_SEP_CHAR in between if necessary */ 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_strcpy(buffer, path); 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru q=buffer+uprv_strlen(buffer); 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(q>buffer && (c=*(q-1))!=U_FILE_SEP_CHAR && c!=U_FILE_ALT_SEP_CHAR) { 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *q++=U_FILE_SEP_CHAR; 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_strcpy(q, filename); 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p=buffer; 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f=fopen(p, "w"); 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(f!=NULL) { 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char year[8]; 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const struct tm *lt; 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru time_t t; 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru time(&t); 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lt=localtime(&t); 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strftime(year, sizeof(year), "%Y", lt); 5883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if(generator==NULL) { 5983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius strftime(buffer, sizeof(buffer), "%Y-%m-%d", lt); 6083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius fprintf(f, header, year, filename, buffer); 6183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } else { 6283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius fprintf(f, header, year, filename, generator); 6383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf( 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru stderr, 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "usrc_create(%s, %s): unable to create file\n", 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru path!=NULL ? path : "", filename); 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return f; 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 7350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI FILE * U_EXPORT2 7483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliususrc_create(const char *path, const char *filename, const char *generator) { 7583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius static const char *header= 7650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "/*\n" 7750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho " * Copyright (C) 1999-%s, International Business Machines\n" 7850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho " * Corporation and others. All Rights Reserved.\n" 7950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho " *\n" 8050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho " * file name: %s\n" 8150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho " *\n" 8283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius " * machine-generated by: %s\n" 8350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho " */\n\n"; 8483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius return usrc_createWithHeader(path, filename, generator, header); 8550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 8750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CAPI FILE * U_EXPORT2 8883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliususrc_createTextData(const char *path, const char *filename, const char *generator) { 8983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius static const char *header= 9050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "# Copyright (C) 1999-%s, International Business Machines\n" 9150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "# Corporation and others. All Rights Reserved.\n" 9250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "#\n" 9350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "# file name: %s\n" 9450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "#\n" 9583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius "# machine-generated by: %s\n" 9650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "#\n\n"; 9783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius return usrc_createWithHeader(path, filename, generator, header); 9850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 9950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruusrc_writeArray(FILE *f, 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *prefix, 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const void *p, int32_t width, int32_t length, 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *postfix) { 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const uint8_t *p8; 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const uint16_t *p16; 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const uint32_t *p32; 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t value; 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i, col; 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p8=NULL; 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p16=NULL; 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p32=NULL; 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch(width) { 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 8: 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p8=(const uint8_t *)p; 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 16: 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p16=(const uint16_t *)p; 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 32: 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p32=(const uint32_t *)p; 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stderr, "usrc_writeArray(width=%ld) unrecognized width\n", (long)width); 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(prefix!=NULL) { 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(f, prefix, (long)length); 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=col=0; i<length; ++i, ++col) { 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(i>0) { 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(col<16) { 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fputc(',', f); 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fputs(",\n", f); 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru col=0; 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch(width) { 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 8: 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value=p8[i]; 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 16: 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value=p16[i]; 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 32: 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value=p32[i]; 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value=0; /* unreachable */ 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(f, value<=9 ? "%lu" : "0x%lx", (unsigned long)value); 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(postfix!=NULL) { 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fputs(postfix, f); 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruusrc_writeUTrie2Arrays(FILE *f, 163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *indexPrefix, const char *data32Prefix, 164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UTrie2 *pTrie, 165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *postfix) { 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(pTrie->data32==NULL) { 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 16-bit trie */ 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usrc_writeArray(f, indexPrefix, pTrie->index, 16, pTrie->indexLength+pTrie->dataLength, postfix); 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 32-bit trie */ 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usrc_writeArray(f, indexPrefix, pTrie->index, 16, pTrie->indexLength, postfix); 172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru usrc_writeArray(f, data32Prefix, pTrie->data32, 32, pTrie->dataLength, postfix); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruusrc_writeUTrie2Struct(FILE *f, 178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *prefix, 179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UTrie2 *pTrie, 180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *indexName, const char *data32Name, 181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *postfix) { 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(prefix!=NULL) { 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fputs(prefix, f); 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(pTrie->data32==NULL) { 186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* 16-bit trie */ 187b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fprintf( 188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru f, 189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " %s,\n" /* index */ 190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " %s+%ld,\n" /* data16 */ 191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " NULL,\n", /* data32 */ 192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru indexName, 193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru indexName, 194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (long)pTrie->indexLength); 195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* 32-bit trie */ 197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fprintf( 198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru f, 199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " %s,\n" /* index */ 200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " NULL,\n" /* data16 */ 201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " %s,\n", /* data32 */ 202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru indexName, 203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru data32Name); 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf( 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f, 207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " %ld,\n" /* indexLength */ 208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " %ld,\n" /* dataLength */ 209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " 0x%hx,\n" /* index2NullOffset */ 210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " 0x%hx,\n" /* dataNullOffset */ 211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " 0x%lx,\n" /* initialValue */ 212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " 0x%lx,\n" /* errorValue */ 213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " 0x%lx,\n" /* highStart */ 214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " 0x%lx,\n" /* highValueIndex */ 215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " NULL, 0, FALSE, FALSE, 0, NULL\n", 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (long)pTrie->indexLength, (long)pTrie->dataLength, 217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (short)pTrie->index2NullOffset, (short)pTrie->dataNullOffset, 218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (long)pTrie->initialValue, (long)pTrie->errorValue, 219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (long)pTrie->highStart, (long)pTrie->highValueIndex); 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(postfix!=NULL) { 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fputs(postfix, f); 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 224b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 225b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoU_CAPI void U_EXPORT2 226b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehousrc_writeArrayOfMostlyInvChars(FILE *f, 227b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char *prefix, 228b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char *p, int32_t length, 229b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char *postfix) { 230b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t i, col; 231b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int prev2, prev, c; 232b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 233b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(prefix!=NULL) { 234b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho fprintf(f, prefix, (long)length); 235b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 236b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho prev2=prev=-1; 237b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for(i=col=0; i<length; ++i, ++col) { 238b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho c=(uint8_t)p[i]; 239b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(i>0) { 240b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* Break long lines. Try to break at interesting places, to minimize revision diffs. */ 241b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if( 242b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* Very long line. */ 243b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho col>=32 || 244b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* Long line, break after terminating NUL. */ 245b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho (col>=24 && prev2>=0x20 && prev==0) || 246b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* Medium-long line, break before non-NUL, non-character byte. */ 247b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho (col>=16 && (prev==0 || prev>=0x20) && 0<c && c<0x20) 248b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ) { 249b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho fputs(",\n", f); 250b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho col=0; 251b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 252b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho fputc(',', f); 253b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 254b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 255b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho fprintf(f, c<0x20 ? "%u" : "'%c'", c); 256b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho prev2=prev; 257b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho prev=c; 258b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 259b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(postfix!=NULL) { 260b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho fputs(postfix, f); 261b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 262b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 263