X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/73c04bcfe1096173b00431f0cdc742894b15eef0..3d1f044b704633e2e541231cd17ae9ecf9ad5c7a:/icuSources/io/unicode/ustdio.h?ds=sidebyside diff --git a/icuSources/io/unicode/ustdio.h b/icuSources/io/unicode/ustdio.h index 4675e77c..a2ad3c24 100644 --- a/icuSources/io/unicode/ustdio.h +++ b/icuSources/io/unicode/ustdio.h @@ -1,7 +1,9 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * -* Copyright (C) 1998-2006, International Business Machines +* Copyright (C) 1998-2015, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -28,6 +30,10 @@ #include "unicode/utypes.h" #include "unicode/ucnv.h" #include "unicode/utrans.h" +#include "unicode/localpointer.h" +#include "unicode/unum.h" + +#if !UCONFIG_NO_CONVERSION /* TODO @@ -180,6 +186,18 @@ printf modifier scanf modifier %* N/A This field is scanned, but not stored +

If you are using this C API instead of the ustream.h API for C++, +you can use one of the following u_fprintf examples to display a UnicodeString.

+ +

+    UFILE *out = u_finit(stdout, NULL, NULL);
+    UnicodeString string1("string 1");
+    UnicodeString string2("string 2");
+    u_fprintf(out, "%S\n", string1.getTerminatedBuffer());
+    u_fprintf(out, "%.*S\n", string2.length(), string2.getBuffer());
+    u_fclose(out);
+
+ */ @@ -193,11 +211,10 @@ scanf modifier /** Forward declaration of a Unicode-aware file @stable 3.0 */ typedef struct UFILE UFILE; -#ifndef U_HIDE_DRAFT_API /** * Enum for which direction of stream a transliterator applies to. * @see u_fsettransliterator - * @draft 3.0 + * @stable ICU 3.0 */ typedef enum { U_READ = 1, @@ -205,8 +222,6 @@ typedef enum { U_READWRITE =3 /* == (U_READ | U_WRITE) */ } UFileDirection; -#endif /* U_HIDE_DRAFT_API */ - /** * Open a UFILE. * A UFILE is a wrapper around a FILE* that is locale and codepage aware. @@ -222,17 +237,43 @@ typedef enum { * read from the file. If this paramter is NULL the system default codepage * will be used. * @return A new UFILE, or NULL if an error occurred. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT UFILE* U_EXPORT2 +U_STABLE UFILE* U_EXPORT2 u_fopen(const char *filename, const char *perm, const char *locale, const char *codepage); /** - * Open a UFILE on top of an existing FILE* stream. - * @param f The FILE* to which this UFILE will attach. + * Open a UFILE with a UChar* filename + * A UFILE is a wrapper around a FILE* that is locale and codepage aware. + * That is, data written to a UFILE will be formatted using the conventions + * specified by that UFILE's Locale; this data will be in the character set + * specified by that UFILE's codepage. + * @param filename The name of the file to open. + * @param perm The read/write permission for the UFILE; one of "r", "w", "rw" + * @param locale The locale whose conventions will be used to format + * and parse output. If this parameter is NULL, the default locale will + * be used. + * @param codepage The codepage in which data will be written to and + * read from the file. If this paramter is NULL the system default codepage + * will be used. + * @return A new UFILE, or NULL if an error occurred. + * @stable ICU 54 + */ +U_STABLE UFILE* U_EXPORT2 +u_fopen_u(const UChar *filename, + const char *perm, + const char *locale, + const char *codepage); + +/** + * Open a UFILE on top of an existing FILE* stream. The FILE* stream + * ownership remains with the caller. To have the UFILE take over + * ownership and responsibility for the FILE* stream, use the + * function u_fadopt. + * @param f The FILE* to which this UFILE will attach and use. * @param locale The locale whose conventions will be used to format * and parse output. If this parameter is NULL, the default locale will * be used. @@ -241,13 +282,34 @@ u_fopen(const char *filename, * read using the default codepage for locale, unless locale * is NULL, in which case the system default codepage will be used. * @return A new UFILE, or NULL if an error occurred. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT UFILE* U_EXPORT2 +U_STABLE UFILE* U_EXPORT2 u_finit(FILE *f, const char *locale, const char *codepage); +/** + * Open a UFILE on top of an existing FILE* stream. The FILE* stream + * ownership is transferred to the new UFILE. It will be closed when the + * UFILE is closed. + * @param f The FILE* which this UFILE will take ownership of. + * @param locale The locale whose conventions will be used to format + * and parse output. If this parameter is NULL, the default locale will + * be used. + * @param codepage The codepage in which data will be written to and + * read from the file. If this paramter is NULL, data will be written and + * read using the default codepage for locale, unless locale + * is NULL, in which case the system default codepage will be used. + * @return A new UFILE, or NULL if an error occurred. If an error occurs + * the ownership of the FILE* stream remains with the caller. + * @stable ICU 4.4 + */ +U_STABLE UFILE* U_EXPORT2 +u_fadopt(FILE *f, + const char *locale, + const char *codepage); + /** * Create a UFILE that can be used for localized formatting or parsing. * The u_sprintf and u_sscanf functions do not read or write numbers for a @@ -260,30 +322,50 @@ u_finit(FILE *f, * and parse output. If this parameter is NULL, the default locale will * be used. * @return A new UFILE, or NULL if an error occurred. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT UFILE* U_EXPORT2 +U_STABLE UFILE* U_EXPORT2 u_fstropen(UChar *stringBuf, int32_t capacity, const char *locale); /** - * Close a UFILE. + * Close a UFILE. Implies u_fflush first. * @param file The UFILE to close. - * @draft 3.0 + * @stable ICU 3.0 + * @see u_fflush */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 u_fclose(UFILE *file); +#if U_SHOW_CPLUSPLUS_API + +U_NAMESPACE_BEGIN + +/** + * \class LocalUFILEPointer + * "Smart pointer" class, closes a UFILE via u_fclose(). + * For most methods see the LocalPointerBase base class. + * + * @see LocalPointerBase + * @see LocalPointer + * @stable ICU 4.4 + */ +U_DEFINE_LOCAL_OPEN_POINTER(LocalUFILEPointer, UFILE, u_fclose); + +U_NAMESPACE_END + +#endif // U_SHOW_CPLUSPLUS_API + /** * Tests if the UFILE is at the end of the file stream. * @param f The UFILE from which to read. * @return Returns TRUE after the first read operation that attempts to * read past the end of the file. It returns FALSE if the current position is * not end of file. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 u_feof(UFILE *f); /** @@ -291,27 +373,29 @@ u_feof(UFILE *f); * converter/transliterator state. (That is, a logical break is * made in the output stream - for example if a different type of * output is desired.) The underlying OS level file is also flushed. + * Note that for a stateful encoding, the converter may write additional + * bytes to return the stream to default state. * @param file The UFILE to flush. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 u_fflush(UFILE *file); /** * Rewind the file pointer to the beginning of the file. * @param file The UFILE to rewind. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT void +U_STABLE void u_frewind(UFILE *file); /** * Get the FILE* associated with a UFILE. * @param f The UFILE - * @return A FILE*, owned by the UFILE. The FILE must not be closed. - * @draft 3.0 + * @return A FILE*, owned by the UFILE. (The FILE must not be modified or closed) + * @stable ICU 3.0 */ -U_DRAFT FILE* U_EXPORT2 +U_STABLE FILE* U_EXPORT2 u_fgetfile(UFILE *f); #if !UCONFIG_NO_FORMATTING @@ -322,9 +406,9 @@ u_fgetfile(UFILE *f); * or u_fopen. * @param file The UFILE to set. * @return The locale whose conventions are used to format and parse output. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT const char* U_EXPORT2 +U_STABLE const char* U_EXPORT2 u_fgetlocale(UFILE *file); /** @@ -333,9 +417,9 @@ u_fgetlocale(UFILE *file); * and parse output. * @param file The UFILE to query. * @return NULL if successful, otherwise a negative number. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_fsetlocale(UFILE *file, const char *locale); @@ -348,9 +432,9 @@ u_fsetlocale(UFILE *file, * @param file The UFILE to query. * @return The codepage in which data is written to and read from the UFILE, * or NULL if an error occurred. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT const char* U_EXPORT2 +U_STABLE const char* U_EXPORT2 u_fgetcodepage(UFILE *file); /** @@ -360,15 +444,15 @@ u_fgetcodepage(UFILE *file); * mix codepages within a file. This should only be called right * after opening the UFile, or after calling u_frewind. * @param codepage The codepage in which data will be written to - * and read from the file. For example "latin-1" or "ibm-943. + * and read from the file. For example "latin-1" or "ibm-943". * A value of NULL means the default codepage for the UFILE's current * locale will be used. * @param file The UFILE to set. * @return 0 if successful, otherwise a negative number. * @see u_frewind - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_fsetcodepage(const char *codepage, UFILE *file); @@ -376,24 +460,42 @@ u_fsetcodepage(const char *codepage, /** * Returns an alias to the converter being used for this file. * @param f The UFILE to get the value from - * @return alias to the converter - * @draft 3.0 + * @return alias to the converter (The converter must not be modified or closed) + * @stable ICU 3.0 */ -U_DRAFT UConverter* U_EXPORT2 u_fgetConverter(UFILE *f); +U_STABLE UConverter* U_EXPORT2 u_fgetConverter(UFILE *f); #if !UCONFIG_NO_FORMATTING +/** + * Returns an alias to the number formatter being used for this file. + * @param f The UFILE to get the value from + * @return alias to the number formatter (The formatter must not be modified or closed) + * @stable ICU 51 +*/ + U_STABLE const UNumberFormat* U_EXPORT2 u_fgetNumberFormat(UFILE *f); /* Output functions */ +/** + * Write formatted data to stdout. + * @param patternSpecification A pattern specifying how u_printf will + * interpret the variable arguments received and format the data. + * @return The number of Unicode characters written to stdout + * @stable ICU 49 + */ +U_STABLE int32_t U_EXPORT2 +u_printf(const char *patternSpecification, + ... ); + /** * Write formatted data to a UFILE. * @param f The UFILE to which to write. * @param patternSpecification A pattern specifying how u_fprintf will * interpret the variable arguments received and format the data. * @return The number of Unicode characters written to f. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_fprintf(UFILE *f, const char *patternSpecification, ... ); @@ -408,22 +510,41 @@ u_fprintf(UFILE *f, * @param ap The argument list to use. * @return The number of Unicode characters written to f. * @see u_fprintf - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_vfprintf(UFILE *f, const char *patternSpecification, va_list ap); +/** + * Write formatted data to stdout. + * @param patternSpecification A pattern specifying how u_printf_u will + * interpret the variable arguments received and format the data. + * @return The number of Unicode characters written to stdout + * @stable ICU 49 + */ +U_STABLE int32_t U_EXPORT2 +u_printf_u(const UChar *patternSpecification, + ... ); + +/** + * Get a UFILE for stdout. + * @return UFILE that writes to stdout + * @stable ICU 49 + */ +U_STABLE UFILE * U_EXPORT2 +u_get_stdout(void); + /** * Write formatted data to a UFILE. * @param f The UFILE to which to write. * @param patternSpecification A pattern specifying how u_fprintf will * interpret the variable arguments received and format the data. * @return The number of Unicode characters written to f. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_fprintf_u(UFILE *f, const UChar *patternSpecification, ... ); @@ -438,9 +559,9 @@ u_fprintf_u(UFILE *f, * @param ap The argument list to use. * @return The number of Unicode characters written to f. * @see u_fprintf_u - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_vfprintf_u(UFILE *f, const UChar *patternSpecification, va_list ap); @@ -453,9 +574,9 @@ u_vfprintf_u(UFILE *f, * @param f The UFILE to which to write. * @return A non-negative number if successful, EOF otherwise. * @see u_file_write - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_fputs(const UChar *s, UFILE *f); @@ -464,9 +585,9 @@ u_fputs(const UChar *s, * @param uc The UChar to write. * @param f The UFILE to which to write. * @return The character written if successful, EOF otherwise. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT UChar32 U_EXPORT2 +U_STABLE UChar32 U_EXPORT2 u_fputc(UChar32 uc, UFILE *f); @@ -479,9 +600,9 @@ u_fputc(UChar32 uc, * @param f The UFILE to which to write. * @return The number of Unicode characters written. * @see u_fputs - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_file_write(const UChar *ustring, int32_t count, UFILE *f); @@ -497,9 +618,9 @@ u_file_write(const UChar *ustring, * interpret the variable arguments received and parse the data. * @return The number of items successfully converted and assigned, or EOF * if an error occurred. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_fscanf(UFILE *f, const char *patternSpecification, ... ); @@ -515,9 +636,9 @@ u_fscanf(UFILE *f, * @return The number of items successfully converted and assigned, or EOF * if an error occurred. * @see u_fscanf - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_vfscanf(UFILE *f, const char *patternSpecification, va_list ap); @@ -529,9 +650,9 @@ u_vfscanf(UFILE *f, * interpret the variable arguments received and parse the data. * @return The number of items successfully converted and assigned, or EOF * if an error occurred. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_fscanf_u(UFILE *f, const UChar *patternSpecification, ... ); @@ -547,9 +668,9 @@ u_fscanf_u(UFILE *f, * @return The number of items successfully converted and assigned, or EOF * if an error occurred. * @see u_fscanf_u - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_vfscanf_u(UFILE *f, const UChar *patternSpecification, va_list ap); @@ -565,9 +686,9 @@ u_vfscanf_u(UFILE *f, * stored successively in s until a newline or EOF is * reached. A null character (U+0000) will be appended to s. * @return A pointer to s, or NULL if no characters were available. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT UChar* U_EXPORT2 +U_STABLE UChar* U_EXPORT2 u_fgets(UChar *s, int32_t n, UFILE *f); @@ -579,9 +700,9 @@ u_fgets(UChar *s, * * @param f The UFILE from which to read. * @return The UChar value read, or U+FFFF if no character was available. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT UChar U_EXPORT2 +U_STABLE UChar U_EXPORT2 u_fgetc(UFILE *f); /** @@ -592,9 +713,9 @@ u_fgetc(UFILE *f); * available, or U+FFFFFFFF if an ill-formed character was * encountered. * @see u_unescape() - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT UChar32 U_EXPORT2 +U_STABLE UChar32 U_EXPORT2 u_fgetcx(UFILE *f); /** @@ -606,9 +727,9 @@ u_fgetcx(UFILE *f); * @param c The UChar to put back on the stream. * @param f The UFILE to receive c. * @return The UChar32 value put back if successful, U_EOF otherwise. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT UChar32 U_EXPORT2 +U_STABLE UChar32 U_EXPORT2 u_fungetc(UChar32 c, UFILE *f); @@ -620,9 +741,9 @@ u_fungetc(UChar32 c, * @param count The number of Unicode characters to read. * @param f The UFILE from which to read. * @return The number of Unicode characters read. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_file_read(UChar *chars, int32_t count, UFILE *f); @@ -644,9 +765,9 @@ u_file_read(UChar *chars, * caller. If U_READWRITE is specified, only the WRITE transliterator * is returned. In most cases, the caller should call utrans_close() * on the result of this function. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT UTransliterator* U_EXPORT2 +U_STABLE UTransliterator* U_EXPORT2 u_fsettransliterator(UFILE *file, UFileDirection direction, UTransliterator *adopt, UErrorCode *status); @@ -665,9 +786,9 @@ u_fsettransliterator(UFILE *file, UFileDirection direction, * interpret the variable arguments received and format the data. * @return The number of Unicode code units written to buffer. This * does not include the terminating null character. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_sprintf(UChar *buffer, const char *patternSpecification, ... ); @@ -684,11 +805,12 @@ u_sprintf(UChar *buffer, * @param count The number of code units to read. * @param patternSpecification A pattern specifying how u_sprintf will * interpret the variable arguments received and format the data. - * @return The number of Unicode code units written to buffer. This - * does not include the terminating null character. - * @draft 3.0 + * @return The number of Unicode characters that would have been written to + * buffer had count been sufficiently large. This does not include + * the terminating null character. + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_snprintf(UChar *buffer, int32_t count, const char *patternSpecification, @@ -705,9 +827,9 @@ u_snprintf(UChar *buffer, * @param ap The argument list to use. * @return The number of Unicode characters written to buffer. * @see u_sprintf - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_vsprintf(UChar *buffer, const char *patternSpecification, va_list ap); @@ -727,11 +849,12 @@ u_vsprintf(UChar *buffer, * @param patternSpecification A pattern specifying how u_sprintf will * interpret the variable arguments received and format the data. * @param ap The argument list to use. - * @return The number of Unicode characters written to buffer. + * @return The number of Unicode characters that would have been written to + * buffer had count been sufficiently large. * @see u_sprintf - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_vsnprintf(UChar *buffer, int32_t count, const char *patternSpecification, @@ -744,9 +867,9 @@ u_vsnprintf(UChar *buffer, * @param patternSpecification A pattern specifying how u_sprintf will * interpret the variable arguments received and format the data. * @return The number of Unicode characters written to buffer. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_sprintf_u(UChar *buffer, const UChar *patternSpecification, ... ); @@ -763,10 +886,11 @@ u_sprintf_u(UChar *buffer, * @param count The number of code units to read. * @param patternSpecification A pattern specifying how u_sprintf will * interpret the variable arguments received and format the data. - * @return The number of Unicode characters written to buffer. - * @draft 3.0 + * @return The number of Unicode characters that would have been written to + * buffer had count been sufficiently large. + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_snprintf_u(UChar *buffer, int32_t count, const UChar *patternSpecification, @@ -783,9 +907,9 @@ u_snprintf_u(UChar *buffer, * @param ap The argument list to use. * @return The number of Unicode characters written to f. * @see u_sprintf_u - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_vsprintf_u(UChar *buffer, const UChar *patternSpecification, va_list ap); @@ -805,11 +929,12 @@ u_vsprintf_u(UChar *buffer, * @param patternSpecification A pattern specifying how u_sprintf will * interpret the variable arguments received and format the data. * @param ap The argument list to use. - * @return The number of Unicode characters written to f. + * @return The number of Unicode characters that would have been written to + * f had count been sufficiently large. * @see u_sprintf_u - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_vsnprintf_u(UChar *buffer, int32_t count, const UChar *patternSpecification, @@ -825,9 +950,9 @@ u_vsnprintf_u(UChar *buffer, * interpret the variable arguments received and parse the data. * @return The number of items successfully converted and assigned, or EOF * if an error occurred. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_sscanf(const UChar *buffer, const char *patternSpecification, ... ); @@ -844,9 +969,9 @@ u_sscanf(const UChar *buffer, * @return The number of items successfully converted and assigned, or EOF * if an error occurred. * @see u_sscanf - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_vsscanf(const UChar *buffer, const char *patternSpecification, va_list ap); @@ -859,9 +984,9 @@ u_vsscanf(const UChar *buffer, * interpret the variable arguments received and parse the data. * @return The number of items successfully converted and assigned, or EOF * if an error occurred. - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_sscanf_u(const UChar *buffer, const UChar *patternSpecification, ... ); @@ -878,13 +1003,15 @@ u_sscanf_u(const UChar *buffer, * @return The number of items successfully converted and assigned, or EOF * if an error occurred. * @see u_sscanf_u - * @draft 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 u_vsscanf_u(const UChar *buffer, const UChar *patternSpecification, va_list ap); + +#endif #endif #endif