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