1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru****************************************************************************** 3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Copyright (C) 1998-2006, International Business Machines 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru****************************************************************************** 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* File uprintf.h 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Modification History: 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Date Name Description 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 11/19/98 stephen Creation. 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 03/12/99 stephen Modified for new C API. 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru****************************************************************************** 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/ 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef UPRINTF_H 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define UPRINTF_H 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h" 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ustdio.h" 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "ufmt_cmn.h" 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "locbund.h" 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Struct encapsulating a single uprintf format specification. 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef struct u_printf_spec_info { 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t fPrecision; /* Precision */ 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t fWidth; /* Width */ 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar fOrigSpec; /* Conversion specification */ 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar fSpec; /* Conversion specification */ 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar fPadChar; /* Padding character */ 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool fAlt; /* # flag */ 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool fSpace; /* Space flag */ 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool fLeft; /* - flag */ 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool fShowSign; /* + flag */ 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool fZero; /* 0 flag */ 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool fIsLongDouble; /* L flag */ 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool fIsShort; /* h flag */ 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool fIsLong; /* l flag */ 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool fIsLongLong; /* ll flag */ 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} u_printf_spec_info; 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef int32_t U_EXPORT2 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruu_printf_write_stream(void *context, 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UChar *str, 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t count); 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef int32_t U_EXPORT2 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruu_printf_pad_and_justify_stream(void *context, 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const u_printf_spec_info *info, 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UChar *result, 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t resultLen); 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef struct u_printf_stream_handler { 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_printf_write_stream *write; 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_printf_pad_and_justify_stream *pad_and_justify; 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} u_printf_stream_handler; 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* Used by sprintf */ 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef struct u_localized_print_string { 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar *str; /* Place to write the string */ 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t available;/* Number of codeunits available to write to */ 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t len; /* Maximum number of code units that can be written to output */ 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ULocaleBundle fBundle; /* formatters */ 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} u_localized_print_string; 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define UP_PERCENT 0x0025 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Parse a single u_printf format string. 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param fmt A pointer to a '%' character in a u_printf format specification. 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param spec A pointer to a <TT>u_printf_spec</TT> to receive the parsed 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * format specifier. 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param locStringContext If present, will make sure that it will only write 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * to the buffer when space is available. It's done this way because 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * va_list sometimes can't be passed by pointer. 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return The number of characters contained in this specifier. 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CFUNC int32_t 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruu_printf_parse(const u_printf_stream_handler *streamHandler, 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UChar *fmt, 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru void *context, 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_localized_print_string *locStringContext, 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ULocaleBundle *formatBundle, 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t *written, 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru va_list ap); 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 102