kmadej_fast_excel_fork 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.travis.yml +28 -0
- data/CHANGELOG.md +13 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +70 -0
- data/Makefile +14 -0
- data/README.md +95 -0
- data/Rakefile +24 -0
- data/appveyor.yml +25 -0
- data/benchmarks/1k_rows.rb +59 -0
- data/benchmarks/20k_rows.rb +26 -0
- data/benchmarks/init.rb +59 -0
- data/benchmarks/memory.rb +49 -0
- data/examples/example.rb +42 -0
- data/examples/example_align.rb +23 -0
- data/examples/example_chart.rb +21 -0
- data/examples/example_colors.rb +37 -0
- data/examples/example_formula.rb +18 -0
- data/examples/example_image.rb +13 -0
- data/examples/example_styles.rb +27 -0
- data/examples/logo.png +0 -0
- data/extconf.rb +0 -0
- data/fast_excel.gemspec +20 -0
- data/lib/fast_excel.rb +600 -0
- data/lib/fast_excel/binding.rb +2819 -0
- data/lib/fast_excel/binding/chart.rb +2666 -0
- data/lib/fast_excel/binding/format.rb +1177 -0
- data/lib/fast_excel/binding/workbook.rb +338 -0
- data/lib/fast_excel/binding/worksheet.rb +1555 -0
- data/libxlsxwriter/.gitignore +49 -0
- data/libxlsxwriter/.indent.pro +125 -0
- data/libxlsxwriter/.travis.yml +25 -0
- data/libxlsxwriter/CONTRIBUTING.md +226 -0
- data/libxlsxwriter/Changes.txt +557 -0
- data/libxlsxwriter/LICENSE.txt +89 -0
- data/libxlsxwriter/Makefile +156 -0
- data/libxlsxwriter/Readme.md +78 -0
- data/libxlsxwriter/cocoapods/libxlsxwriter-umbrella.h +30 -0
- data/libxlsxwriter/cocoapods/libxlsxwriter.modulemap +7 -0
- data/libxlsxwriter/include/xlsxwriter.h +23 -0
- data/libxlsxwriter/include/xlsxwriter/app.h +79 -0
- data/libxlsxwriter/include/xlsxwriter/chart.h +3476 -0
- data/libxlsxwriter/include/xlsxwriter/common.h +372 -0
- data/libxlsxwriter/include/xlsxwriter/content_types.h +74 -0
- data/libxlsxwriter/include/xlsxwriter/core.h +51 -0
- data/libxlsxwriter/include/xlsxwriter/custom.h +52 -0
- data/libxlsxwriter/include/xlsxwriter/drawing.h +111 -0
- data/libxlsxwriter/include/xlsxwriter/format.h +1214 -0
- data/libxlsxwriter/include/xlsxwriter/hash_table.h +76 -0
- data/libxlsxwriter/include/xlsxwriter/packager.h +80 -0
- data/libxlsxwriter/include/xlsxwriter/relationships.h +77 -0
- data/libxlsxwriter/include/xlsxwriter/shared_strings.h +83 -0
- data/libxlsxwriter/include/xlsxwriter/styles.h +77 -0
- data/libxlsxwriter/include/xlsxwriter/theme.h +47 -0
- data/libxlsxwriter/include/xlsxwriter/third_party/ioapi.h +214 -0
- data/libxlsxwriter/include/xlsxwriter/third_party/queue.h +694 -0
- data/libxlsxwriter/include/xlsxwriter/third_party/tmpfileplus.h +53 -0
- data/libxlsxwriter/include/xlsxwriter/third_party/tree.h +801 -0
- data/libxlsxwriter/include/xlsxwriter/third_party/zip.h +375 -0
- data/libxlsxwriter/include/xlsxwriter/utility.h +166 -0
- data/libxlsxwriter/include/xlsxwriter/workbook.h +757 -0
- data/libxlsxwriter/include/xlsxwriter/worksheet.h +2641 -0
- data/libxlsxwriter/include/xlsxwriter/xmlwriter.h +178 -0
- data/libxlsxwriter/lib/.gitignore +0 -0
- data/libxlsxwriter/libxlsxwriter.podspec +47 -0
- data/libxlsxwriter/src/Makefile +130 -0
- data/libxlsxwriter/src/app.c +443 -0
- data/libxlsxwriter/src/chart.c +6346 -0
- data/libxlsxwriter/src/content_types.c +345 -0
- data/libxlsxwriter/src/core.c +293 -0
- data/libxlsxwriter/src/custom.c +224 -0
- data/libxlsxwriter/src/drawing.c +746 -0
- data/libxlsxwriter/src/format.c +729 -0
- data/libxlsxwriter/src/hash_table.c +223 -0
- data/libxlsxwriter/src/packager.c +948 -0
- data/libxlsxwriter/src/relationships.c +245 -0
- data/libxlsxwriter/src/shared_strings.c +266 -0
- data/libxlsxwriter/src/styles.c +1088 -0
- data/libxlsxwriter/src/theme.c +348 -0
- data/libxlsxwriter/src/utility.c +515 -0
- data/libxlsxwriter/src/workbook.c +1930 -0
- data/libxlsxwriter/src/worksheet.c +5022 -0
- data/libxlsxwriter/src/xmlwriter.c +355 -0
- data/libxlsxwriter/third_party/minizip/Makefile +44 -0
- data/libxlsxwriter/third_party/minizip/Makefile.am +45 -0
- data/libxlsxwriter/third_party/minizip/Makefile.orig +25 -0
- data/libxlsxwriter/third_party/minizip/MiniZip64_Changes.txt +6 -0
- data/libxlsxwriter/third_party/minizip/MiniZip64_info.txt +74 -0
- data/libxlsxwriter/third_party/minizip/README.txt +5 -0
- data/libxlsxwriter/third_party/minizip/configure.ac +32 -0
- data/libxlsxwriter/third_party/minizip/crypt.h +131 -0
- data/libxlsxwriter/third_party/minizip/ioapi.c +247 -0
- data/libxlsxwriter/third_party/minizip/ioapi.h +208 -0
- data/libxlsxwriter/third_party/minizip/iowin32.c +456 -0
- data/libxlsxwriter/third_party/minizip/iowin32.h +28 -0
- data/libxlsxwriter/third_party/minizip/make_vms.com +25 -0
- data/libxlsxwriter/third_party/minizip/miniunz.c +660 -0
- data/libxlsxwriter/third_party/minizip/miniunzip.1 +63 -0
- data/libxlsxwriter/third_party/minizip/minizip.1 +46 -0
- data/libxlsxwriter/third_party/minizip/minizip.c +520 -0
- data/libxlsxwriter/third_party/minizip/minizip.pc.in +12 -0
- data/libxlsxwriter/third_party/minizip/mztools.c +291 -0
- data/libxlsxwriter/third_party/minizip/mztools.h +37 -0
- data/libxlsxwriter/third_party/minizip/unzip.c +2125 -0
- data/libxlsxwriter/third_party/minizip/unzip.h +437 -0
- data/libxlsxwriter/third_party/minizip/zip.c +2007 -0
- data/libxlsxwriter/third_party/minizip/zip.h +367 -0
- data/libxlsxwriter/third_party/tmpfileplus/Makefile +42 -0
- data/libxlsxwriter/third_party/tmpfileplus/tmpfileplus.c +342 -0
- data/libxlsxwriter/third_party/tmpfileplus/tmpfileplus.h +53 -0
- data/libxlsxwriter/version.txt +1 -0
- data/test/date_test.rb +22 -0
- data/test/default_format_test.rb +19 -0
- data/test/format_test.rb +171 -0
- data/test/test_helper.rb +52 -0
- data/test/tmpfile_test.rb +23 -0
- data/test/worksheet_test.rb +86 -0
- metadata +182 -0
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
/*****************************************************************************
|
|
2
|
+
* xmlwriter - A base library for libxlsxwriter libraries.
|
|
3
|
+
*
|
|
4
|
+
* Used in conjunction with the libxlsxwriter library.
|
|
5
|
+
*
|
|
6
|
+
* Copyright 2014-2017, John McNamara, jmcnamara@cpan.org. See LICENSE.txt.
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
#include <stdio.h>
|
|
11
|
+
#include <string.h>
|
|
12
|
+
#include <stdlib.h>
|
|
13
|
+
#include "xlsxwriter/xmlwriter.h"
|
|
14
|
+
|
|
15
|
+
#define LXW_AMP "&"
|
|
16
|
+
#define LXW_LT "<"
|
|
17
|
+
#define LXW_GT ">"
|
|
18
|
+
#define LXW_QUOT """
|
|
19
|
+
|
|
20
|
+
/* Defines. */
|
|
21
|
+
#define LXW_MAX_ENCODED_ATTRIBUTE_LENGTH (LXW_MAX_ATTRIBUTE_LENGTH*6)
|
|
22
|
+
|
|
23
|
+
/* Forward declarations. */
|
|
24
|
+
STATIC char *_escape_attributes(struct xml_attribute *attribute);
|
|
25
|
+
|
|
26
|
+
char *lxw_escape_data(const char *data);
|
|
27
|
+
|
|
28
|
+
STATIC void _fprint_escaped_attributes(FILE * xmlfile,
|
|
29
|
+
struct xml_attribute_list *attributes);
|
|
30
|
+
|
|
31
|
+
STATIC void _fprint_escaped_data(FILE * xmlfile, const char *data);
|
|
32
|
+
|
|
33
|
+
/*
|
|
34
|
+
* Write the XML declaration.
|
|
35
|
+
*/
|
|
36
|
+
void
|
|
37
|
+
lxw_xml_declaration(FILE * xmlfile)
|
|
38
|
+
{
|
|
39
|
+
fprintf(xmlfile, "<?xml version=\"1.0\" "
|
|
40
|
+
"encoding=\"UTF-8\" standalone=\"yes\"?>\n");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/*
|
|
44
|
+
* Write an XML start tag with optional attributes.
|
|
45
|
+
*/
|
|
46
|
+
void
|
|
47
|
+
lxw_xml_start_tag(FILE * xmlfile,
|
|
48
|
+
const char *tag, struct xml_attribute_list *attributes)
|
|
49
|
+
{
|
|
50
|
+
fprintf(xmlfile, "<%s", tag);
|
|
51
|
+
|
|
52
|
+
_fprint_escaped_attributes(xmlfile, attributes);
|
|
53
|
+
|
|
54
|
+
fprintf(xmlfile, ">");
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/*
|
|
58
|
+
* Write an XML start tag with optional, unencoded, attributes.
|
|
59
|
+
* This is a minor speed optimization for elements that don't need encoding.
|
|
60
|
+
*/
|
|
61
|
+
void
|
|
62
|
+
lxw_xml_start_tag_unencoded(FILE * xmlfile,
|
|
63
|
+
const char *tag,
|
|
64
|
+
struct xml_attribute_list *attributes)
|
|
65
|
+
{
|
|
66
|
+
struct xml_attribute *attribute;
|
|
67
|
+
|
|
68
|
+
fprintf(xmlfile, "<%s", tag);
|
|
69
|
+
|
|
70
|
+
if (attributes) {
|
|
71
|
+
STAILQ_FOREACH(attribute, attributes, list_entries) {
|
|
72
|
+
fprintf(xmlfile, " %s=\"%s\"", attribute->key, attribute->value);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
fprintf(xmlfile, ">");
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/*
|
|
80
|
+
* Write an XML end tag.
|
|
81
|
+
*/
|
|
82
|
+
void
|
|
83
|
+
lxw_xml_end_tag(FILE * xmlfile, const char *tag)
|
|
84
|
+
{
|
|
85
|
+
fprintf(xmlfile, "</%s>", tag);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/*
|
|
89
|
+
* Write an empty XML tag with optional attributes.
|
|
90
|
+
*/
|
|
91
|
+
void
|
|
92
|
+
lxw_xml_empty_tag(FILE * xmlfile,
|
|
93
|
+
const char *tag, struct xml_attribute_list *attributes)
|
|
94
|
+
{
|
|
95
|
+
fprintf(xmlfile, "<%s", tag);
|
|
96
|
+
|
|
97
|
+
_fprint_escaped_attributes(xmlfile, attributes);
|
|
98
|
+
|
|
99
|
+
fprintf(xmlfile, "/>");
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/*
|
|
103
|
+
* Write an XML start tag with optional, unencoded, attributes.
|
|
104
|
+
* This is a minor speed optimization for elements that don't need encoding.
|
|
105
|
+
*/
|
|
106
|
+
void
|
|
107
|
+
lxw_xml_empty_tag_unencoded(FILE * xmlfile,
|
|
108
|
+
const char *tag,
|
|
109
|
+
struct xml_attribute_list *attributes)
|
|
110
|
+
{
|
|
111
|
+
struct xml_attribute *attribute;
|
|
112
|
+
|
|
113
|
+
fprintf(xmlfile, "<%s", tag);
|
|
114
|
+
|
|
115
|
+
if (attributes) {
|
|
116
|
+
STAILQ_FOREACH(attribute, attributes, list_entries) {
|
|
117
|
+
fprintf(xmlfile, " %s=\"%s\"", attribute->key, attribute->value);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
fprintf(xmlfile, "/>");
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/*
|
|
125
|
+
* Write an XML element containing data with optional attributes.
|
|
126
|
+
*/
|
|
127
|
+
void
|
|
128
|
+
lxw_xml_data_element(FILE * xmlfile,
|
|
129
|
+
const char *tag,
|
|
130
|
+
const char *data, struct xml_attribute_list *attributes)
|
|
131
|
+
{
|
|
132
|
+
fprintf(xmlfile, "<%s", tag);
|
|
133
|
+
|
|
134
|
+
_fprint_escaped_attributes(xmlfile, attributes);
|
|
135
|
+
|
|
136
|
+
fprintf(xmlfile, ">");
|
|
137
|
+
|
|
138
|
+
_fprint_escaped_data(xmlfile, data);
|
|
139
|
+
|
|
140
|
+
fprintf(xmlfile, "</%s>", tag);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/*
|
|
144
|
+
* Escape XML characters in attributes.
|
|
145
|
+
*/
|
|
146
|
+
STATIC char *
|
|
147
|
+
_escape_attributes(struct xml_attribute *attribute)
|
|
148
|
+
{
|
|
149
|
+
char *encoded = (char *) calloc(LXW_MAX_ENCODED_ATTRIBUTE_LENGTH, 1);
|
|
150
|
+
char *p_encoded = encoded;
|
|
151
|
+
char *p_attr = attribute->value;
|
|
152
|
+
|
|
153
|
+
while (*p_attr) {
|
|
154
|
+
switch (*p_attr) {
|
|
155
|
+
case '&':
|
|
156
|
+
strncat(p_encoded, LXW_AMP, sizeof(LXW_AMP) - 1);
|
|
157
|
+
p_encoded += sizeof(LXW_AMP) - 1;
|
|
158
|
+
break;
|
|
159
|
+
case '<':
|
|
160
|
+
strncat(p_encoded, LXW_LT, sizeof(LXW_LT) - 1);
|
|
161
|
+
p_encoded += sizeof(LXW_LT) - 1;
|
|
162
|
+
break;
|
|
163
|
+
case '>':
|
|
164
|
+
strncat(p_encoded, LXW_GT, sizeof(LXW_GT) - 1);
|
|
165
|
+
p_encoded += sizeof(LXW_GT) - 1;
|
|
166
|
+
break;
|
|
167
|
+
case '"':
|
|
168
|
+
strncat(p_encoded, LXW_QUOT, sizeof(LXW_QUOT) - 1);
|
|
169
|
+
p_encoded += sizeof(LXW_QUOT) - 1;
|
|
170
|
+
break;
|
|
171
|
+
default:
|
|
172
|
+
*p_encoded = *p_attr;
|
|
173
|
+
p_encoded++;
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
p_attr++;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return encoded;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/*
|
|
183
|
+
* Escape XML characters in data sections of tags.
|
|
184
|
+
* Note, this is different from _escape_attributes()
|
|
185
|
+
* in that double quotes are not escaped by Excel.
|
|
186
|
+
*/
|
|
187
|
+
char *
|
|
188
|
+
lxw_escape_data(const char *data)
|
|
189
|
+
{
|
|
190
|
+
size_t encoded_len = (strlen(data) * 5 + 1);
|
|
191
|
+
|
|
192
|
+
char *encoded = (char *) calloc(encoded_len, 1);
|
|
193
|
+
char *p_encoded = encoded;
|
|
194
|
+
|
|
195
|
+
while (*data) {
|
|
196
|
+
switch (*data) {
|
|
197
|
+
case '&':
|
|
198
|
+
strncat(p_encoded, LXW_AMP, sizeof(LXW_AMP) - 1);
|
|
199
|
+
p_encoded += sizeof(LXW_AMP) - 1;
|
|
200
|
+
break;
|
|
201
|
+
case '<':
|
|
202
|
+
strncat(p_encoded, LXW_LT, sizeof(LXW_LT) - 1);
|
|
203
|
+
p_encoded += sizeof(LXW_LT) - 1;
|
|
204
|
+
break;
|
|
205
|
+
case '>':
|
|
206
|
+
strncat(p_encoded, LXW_GT, sizeof(LXW_GT) - 1);
|
|
207
|
+
p_encoded += sizeof(LXW_GT) - 1;
|
|
208
|
+
break;
|
|
209
|
+
default:
|
|
210
|
+
*p_encoded = *data;
|
|
211
|
+
p_encoded++;
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
data++;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return encoded;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/*
|
|
221
|
+
* Escape control characters in strings with with _xHHHH_.
|
|
222
|
+
*/
|
|
223
|
+
char *
|
|
224
|
+
lxw_escape_control_characters(const char *string)
|
|
225
|
+
{
|
|
226
|
+
size_t escape_len = sizeof("_xHHHH_") - 1;
|
|
227
|
+
size_t encoded_len = (strlen(string) * escape_len + 1);
|
|
228
|
+
|
|
229
|
+
char *encoded = (char *) calloc(encoded_len, 1);
|
|
230
|
+
char *p_encoded = encoded;
|
|
231
|
+
|
|
232
|
+
while (*string) {
|
|
233
|
+
switch (*string) {
|
|
234
|
+
case '\x01':
|
|
235
|
+
case '\x02':
|
|
236
|
+
case '\x03':
|
|
237
|
+
case '\x04':
|
|
238
|
+
case '\x05':
|
|
239
|
+
case '\x06':
|
|
240
|
+
case '\x07':
|
|
241
|
+
case '\x08':
|
|
242
|
+
case '\x0B':
|
|
243
|
+
case '\x0C':
|
|
244
|
+
case '\x0D':
|
|
245
|
+
case '\x0E':
|
|
246
|
+
case '\x0F':
|
|
247
|
+
case '\x10':
|
|
248
|
+
case '\x11':
|
|
249
|
+
case '\x12':
|
|
250
|
+
case '\x13':
|
|
251
|
+
case '\x14':
|
|
252
|
+
case '\x15':
|
|
253
|
+
case '\x16':
|
|
254
|
+
case '\x17':
|
|
255
|
+
case '\x18':
|
|
256
|
+
case '\x19':
|
|
257
|
+
case '\x1A':
|
|
258
|
+
case '\x1B':
|
|
259
|
+
case '\x1C':
|
|
260
|
+
case '\x1D':
|
|
261
|
+
case '\x1E':
|
|
262
|
+
case '\x1F':
|
|
263
|
+
lxw_snprintf(p_encoded, escape_len + 1, "_x%04X_", *string);
|
|
264
|
+
p_encoded += escape_len;
|
|
265
|
+
break;
|
|
266
|
+
default:
|
|
267
|
+
*p_encoded = *string;
|
|
268
|
+
p_encoded++;
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
271
|
+
string++;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
return encoded;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/* Write out escaped attributes. */
|
|
278
|
+
STATIC void
|
|
279
|
+
_fprint_escaped_attributes(FILE * xmlfile,
|
|
280
|
+
struct xml_attribute_list *attributes)
|
|
281
|
+
{
|
|
282
|
+
struct xml_attribute *attribute;
|
|
283
|
+
|
|
284
|
+
if (attributes) {
|
|
285
|
+
STAILQ_FOREACH(attribute, attributes, list_entries) {
|
|
286
|
+
fprintf(xmlfile, " %s=", attribute->key);
|
|
287
|
+
|
|
288
|
+
if (!strpbrk(attribute->value, "&<>\"")) {
|
|
289
|
+
fprintf(xmlfile, "\"%s\"", attribute->value);
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
char *encoded = _escape_attributes(attribute);
|
|
293
|
+
|
|
294
|
+
if (encoded) {
|
|
295
|
+
fprintf(xmlfile, "\"%s\"", encoded);
|
|
296
|
+
|
|
297
|
+
free(encoded);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/* Write out escaped XML data. */
|
|
305
|
+
STATIC void
|
|
306
|
+
_fprint_escaped_data(FILE * xmlfile, const char *data)
|
|
307
|
+
{
|
|
308
|
+
/* Escape the data section of the XML element. */
|
|
309
|
+
if (!strpbrk(data, "&<>")) {
|
|
310
|
+
fprintf(xmlfile, "%s", data);
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
char *encoded = lxw_escape_data(data);
|
|
314
|
+
if (encoded) {
|
|
315
|
+
fprintf(xmlfile, "%s", encoded);
|
|
316
|
+
free(encoded);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/* Create a new string XML attribute. */
|
|
322
|
+
struct xml_attribute *
|
|
323
|
+
lxw_new_attribute_str(const char *key, const char *value)
|
|
324
|
+
{
|
|
325
|
+
struct xml_attribute *attribute = malloc(sizeof(struct xml_attribute));
|
|
326
|
+
|
|
327
|
+
LXW_ATTRIBUTE_COPY(attribute->key, key);
|
|
328
|
+
LXW_ATTRIBUTE_COPY(attribute->value, value);
|
|
329
|
+
|
|
330
|
+
return attribute;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/* Create a new integer XML attribute. */
|
|
334
|
+
struct xml_attribute *
|
|
335
|
+
lxw_new_attribute_int(const char *key, uint32_t value)
|
|
336
|
+
{
|
|
337
|
+
struct xml_attribute *attribute = malloc(sizeof(struct xml_attribute));
|
|
338
|
+
|
|
339
|
+
LXW_ATTRIBUTE_COPY(attribute->key, key);
|
|
340
|
+
lxw_snprintf(attribute->value, LXW_MAX_ATTRIBUTE_LENGTH, "%d", value);
|
|
341
|
+
|
|
342
|
+
return attribute;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/* Create a new double XML attribute. */
|
|
346
|
+
struct xml_attribute *
|
|
347
|
+
lxw_new_attribute_dbl(const char *key, double value)
|
|
348
|
+
{
|
|
349
|
+
struct xml_attribute *attribute = malloc(sizeof(struct xml_attribute));
|
|
350
|
+
|
|
351
|
+
LXW_ATTRIBUTE_COPY(attribute->key, key);
|
|
352
|
+
lxw_snprintf(attribute->value, LXW_MAX_ATTRIBUTE_LENGTH, "%.16g", value);
|
|
353
|
+
|
|
354
|
+
return attribute;
|
|
355
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
#
|
|
3
|
+
# Simplied Makefile to build the minizip objects for the libxlsxwriter library.
|
|
4
|
+
#
|
|
5
|
+
|
|
6
|
+
# Keep the output quiet by default.
|
|
7
|
+
Q=@
|
|
8
|
+
ifdef V
|
|
9
|
+
Q=
|
|
10
|
+
endif
|
|
11
|
+
|
|
12
|
+
UNAME := $(shell uname)
|
|
13
|
+
|
|
14
|
+
# Check for MinGW/MinGW64/Cygwin environments.
|
|
15
|
+
ifneq (,$(findstring MINGW, $(UNAME)))
|
|
16
|
+
MING_LIKE = y
|
|
17
|
+
endif
|
|
18
|
+
ifneq (,$(findstring MSYS, $(UNAME)))
|
|
19
|
+
MING_LIKE = y
|
|
20
|
+
endif
|
|
21
|
+
ifneq (,$(findstring CYGWIN, $(UNAME)))
|
|
22
|
+
MING_LIKE = y
|
|
23
|
+
endif
|
|
24
|
+
|
|
25
|
+
FPIC = -fPIC
|
|
26
|
+
CFLAGS += -O3 -DNOCRYPT -DNOUNCRYPT
|
|
27
|
+
|
|
28
|
+
# Change make options on MinGW/MinGW64/Cygwin.
|
|
29
|
+
ifdef MING_LIKE
|
|
30
|
+
FPIC =
|
|
31
|
+
CC = gcc
|
|
32
|
+
CFLAGS += -DUSE_FILE32API
|
|
33
|
+
endif
|
|
34
|
+
|
|
35
|
+
all: ioapi.o zip.o ioapi.so zip.so
|
|
36
|
+
|
|
37
|
+
%.o : %.c
|
|
38
|
+
$(Q)$(CC) -c $(CFLAGS) $<
|
|
39
|
+
|
|
40
|
+
%.so : %.c
|
|
41
|
+
$(Q)$(CC) $(FPIC) -c $(CFLAGS) $< -o $@
|
|
42
|
+
|
|
43
|
+
clean:
|
|
44
|
+
$(Q)/bin/rm -f *.o *.so
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
lib_LTLIBRARIES = libminizip.la
|
|
2
|
+
|
|
3
|
+
if COND_DEMOS
|
|
4
|
+
bin_PROGRAMS = miniunzip minizip
|
|
5
|
+
endif
|
|
6
|
+
|
|
7
|
+
zlib_top_srcdir = $(top_srcdir)/../..
|
|
8
|
+
zlib_top_builddir = $(top_builddir)/../..
|
|
9
|
+
|
|
10
|
+
AM_CPPFLAGS = -I$(zlib_top_srcdir)
|
|
11
|
+
AM_LDFLAGS = -L$(zlib_top_builddir)
|
|
12
|
+
|
|
13
|
+
if WIN32
|
|
14
|
+
iowin32_src = iowin32.c
|
|
15
|
+
iowin32_h = iowin32.h
|
|
16
|
+
endif
|
|
17
|
+
|
|
18
|
+
libminizip_la_SOURCES = \
|
|
19
|
+
ioapi.c \
|
|
20
|
+
mztools.c \
|
|
21
|
+
unzip.c \
|
|
22
|
+
zip.c \
|
|
23
|
+
${iowin32_src}
|
|
24
|
+
|
|
25
|
+
libminizip_la_LDFLAGS = $(AM_LDFLAGS) -version-info 1:0:0 -lz
|
|
26
|
+
|
|
27
|
+
minizip_includedir = $(includedir)/minizip
|
|
28
|
+
minizip_include_HEADERS = \
|
|
29
|
+
crypt.h \
|
|
30
|
+
ioapi.h \
|
|
31
|
+
mztools.h \
|
|
32
|
+
unzip.h \
|
|
33
|
+
zip.h \
|
|
34
|
+
${iowin32_h}
|
|
35
|
+
|
|
36
|
+
pkgconfigdir = $(libdir)/pkgconfig
|
|
37
|
+
pkgconfig_DATA = minizip.pc
|
|
38
|
+
|
|
39
|
+
EXTRA_PROGRAMS = miniunzip minizip
|
|
40
|
+
|
|
41
|
+
miniunzip_SOURCES = miniunz.c
|
|
42
|
+
miniunzip_LDADD = libminizip.la
|
|
43
|
+
|
|
44
|
+
minizip_SOURCES = minizip.c
|
|
45
|
+
minizip_LDADD = libminizip.la -lz
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
CC=cc
|
|
2
|
+
CFLAGS=-O -I../..
|
|
3
|
+
|
|
4
|
+
UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a
|
|
5
|
+
ZIP_OBJS = minizip.o zip.o ioapi.o ../../libz.a
|
|
6
|
+
|
|
7
|
+
.c.o:
|
|
8
|
+
$(CC) -c $(CFLAGS) $*.c
|
|
9
|
+
|
|
10
|
+
all: miniunz minizip
|
|
11
|
+
|
|
12
|
+
miniunz: $(UNZ_OBJS)
|
|
13
|
+
$(CC) $(CFLAGS) -o $@ $(UNZ_OBJS)
|
|
14
|
+
|
|
15
|
+
minizip: $(ZIP_OBJS)
|
|
16
|
+
$(CC) $(CFLAGS) -o $@ $(ZIP_OBJS)
|
|
17
|
+
|
|
18
|
+
test: miniunz minizip
|
|
19
|
+
./minizip test readme.txt
|
|
20
|
+
./miniunz -l test.zip
|
|
21
|
+
mv readme.txt readme.old
|
|
22
|
+
./miniunz test.zip
|
|
23
|
+
|
|
24
|
+
clean:
|
|
25
|
+
/bin/rm -f *.o *~ minizip miniunz
|