fast_excel 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +1 -7
  3. data/CHANGELOG.md +9 -0
  4. data/Gemfile +1 -1
  5. data/examples/example.rb +2 -0
  6. data/examples/example_date_time.rb +38 -0
  7. data/fast_excel.gemspec +2 -2
  8. data/lib/fast_excel/binding/format.rb +17 -0
  9. data/lib/fast_excel/binding/workbook.rb +39 -17
  10. data/lib/fast_excel/binding/worksheet.rb +57 -13
  11. data/lib/fast_excel/binding.rb +7 -7
  12. data/lib/fast_excel.rb +27 -20
  13. data/libxlsxwriter/.github/FUNDING.yml +1 -0
  14. data/libxlsxwriter/.github/ISSUE_TEMPLATE.md +85 -0
  15. data/libxlsxwriter/.github/PULL_REQUEST_TEMPLATE.md +130 -0
  16. data/libxlsxwriter/.github/workflows/cmake_actions.yml +48 -0
  17. data/libxlsxwriter/.github/workflows/code_style.yml +23 -0
  18. data/libxlsxwriter/.github/workflows/coverity.yml +22 -0
  19. data/libxlsxwriter/.github/workflows/make_actions.yml +52 -0
  20. data/libxlsxwriter/.github/workflows/valgrind.yml +23 -0
  21. data/libxlsxwriter/.github/workflows/windows_build.yml +54 -0
  22. data/libxlsxwriter/.github/workflows/zig_build.yml +22 -0
  23. data/libxlsxwriter/.gitignore +16 -1
  24. data/libxlsxwriter/.indent.pro +24 -0
  25. data/libxlsxwriter/CMakeLists.txt +156 -56
  26. data/libxlsxwriter/CONTRIBUTING.md +2 -2
  27. data/libxlsxwriter/Changes.txt +344 -2
  28. data/libxlsxwriter/LICENSE.txt +66 -8
  29. data/libxlsxwriter/Makefile +151 -54
  30. data/libxlsxwriter/Package.swift +42 -0
  31. data/libxlsxwriter/Readme.md +4 -2
  32. data/libxlsxwriter/build.zig +324 -0
  33. data/libxlsxwriter/build.zig.zon +11 -0
  34. data/libxlsxwriter/cmake/FindMINIZIP.cmake +3 -3
  35. data/libxlsxwriter/cocoapods/libxlsxwriter-umbrella.h +6 -0
  36. data/libxlsxwriter/include/xlsxwriter/app.h +2 -1
  37. data/libxlsxwriter/include/xlsxwriter/chart.h +236 -32
  38. data/libxlsxwriter/include/xlsxwriter/chartsheet.h +7 -7
  39. data/libxlsxwriter/include/xlsxwriter/comment.h +76 -0
  40. data/libxlsxwriter/include/xlsxwriter/common.h +111 -50
  41. data/libxlsxwriter/include/xlsxwriter/content_types.h +8 -1
  42. data/libxlsxwriter/include/xlsxwriter/core.h +1 -1
  43. data/libxlsxwriter/include/xlsxwriter/custom.h +1 -1
  44. data/libxlsxwriter/include/xlsxwriter/drawing.h +11 -20
  45. data/libxlsxwriter/include/xlsxwriter/format.h +121 -8
  46. data/libxlsxwriter/include/xlsxwriter/hash_table.h +1 -1
  47. data/libxlsxwriter/include/xlsxwriter/metadata.h +49 -0
  48. data/libxlsxwriter/include/xlsxwriter/packager.h +27 -16
  49. data/libxlsxwriter/include/xlsxwriter/relationships.h +1 -1
  50. data/libxlsxwriter/include/xlsxwriter/shared_strings.h +1 -1
  51. data/libxlsxwriter/include/xlsxwriter/styles.h +13 -7
  52. data/libxlsxwriter/include/xlsxwriter/table.h +51 -0
  53. data/libxlsxwriter/include/xlsxwriter/theme.h +1 -1
  54. data/libxlsxwriter/include/xlsxwriter/third_party/emyg_dtoa.h +26 -0
  55. data/libxlsxwriter/include/xlsxwriter/third_party/ioapi.h +27 -25
  56. data/libxlsxwriter/include/xlsxwriter/third_party/md5.h +45 -0
  57. data/libxlsxwriter/include/xlsxwriter/third_party/zip.h +155 -153
  58. data/libxlsxwriter/include/xlsxwriter/utility.h +70 -8
  59. data/libxlsxwriter/include/xlsxwriter/vml.h +55 -0
  60. data/libxlsxwriter/include/xlsxwriter/workbook.h +218 -47
  61. data/libxlsxwriter/include/xlsxwriter/worksheet.h +2770 -241
  62. data/libxlsxwriter/include/xlsxwriter/xmlwriter.h +12 -8
  63. data/libxlsxwriter/include/xlsxwriter.h +4 -2
  64. data/libxlsxwriter/libxlsxwriter.podspec +8 -5
  65. data/libxlsxwriter/src/Makefile +58 -21
  66. data/libxlsxwriter/src/app.c +5 -2
  67. data/libxlsxwriter/src/chart.c +396 -81
  68. data/libxlsxwriter/src/chartsheet.c +22 -22
  69. data/libxlsxwriter/src/comment.c +443 -0
  70. data/libxlsxwriter/src/content_types.c +40 -1
  71. data/libxlsxwriter/src/core.c +2 -2
  72. data/libxlsxwriter/src/custom.c +1 -1
  73. data/libxlsxwriter/src/drawing.c +160 -40
  74. data/libxlsxwriter/src/format.c +109 -25
  75. data/libxlsxwriter/src/hash_table.c +1 -1
  76. data/libxlsxwriter/src/metadata.c +283 -0
  77. data/libxlsxwriter/src/packager.c +794 -94
  78. data/libxlsxwriter/src/relationships.c +1 -1
  79. data/libxlsxwriter/src/shared_strings.c +2 -4
  80. data/libxlsxwriter/src/styles.c +353 -58
  81. data/libxlsxwriter/src/table.c +304 -0
  82. data/libxlsxwriter/src/theme.c +1 -1
  83. data/libxlsxwriter/src/utility.c +143 -43
  84. data/libxlsxwriter/src/vml.c +1062 -0
  85. data/libxlsxwriter/src/workbook.c +567 -77
  86. data/libxlsxwriter/src/worksheet.c +6668 -1462
  87. data/libxlsxwriter/src/xmlwriter.c +95 -5
  88. data/libxlsxwriter/third_party/dtoa/Makefile +42 -0
  89. data/libxlsxwriter/third_party/dtoa/emyg_dtoa.c +461 -0
  90. data/libxlsxwriter/third_party/dtoa/emyg_dtoa.h +26 -0
  91. data/libxlsxwriter/third_party/md5/Makefile +42 -0
  92. data/libxlsxwriter/third_party/md5/md5.c +291 -0
  93. data/libxlsxwriter/third_party/md5/md5.h +45 -0
  94. data/libxlsxwriter/third_party/minizip/Makefile +3 -8
  95. data/libxlsxwriter/third_party/minizip/Makefile.orig +8 -4
  96. data/libxlsxwriter/third_party/minizip/MiniZip64_Changes.txt +1 -1
  97. data/libxlsxwriter/third_party/minizip/configure.ac +1 -1
  98. data/libxlsxwriter/third_party/minizip/crypt.h +13 -16
  99. data/libxlsxwriter/third_party/minizip/ioapi.c +31 -57
  100. data/libxlsxwriter/third_party/minizip/ioapi.h +31 -23
  101. data/libxlsxwriter/third_party/minizip/iowin32.c +29 -45
  102. data/libxlsxwriter/third_party/minizip/iowin32.h +4 -4
  103. data/libxlsxwriter/third_party/minizip/miniunz.c +29 -56
  104. data/libxlsxwriter/third_party/minizip/minizip.c +38 -49
  105. data/libxlsxwriter/third_party/minizip/mztools.c +1 -7
  106. data/libxlsxwriter/third_party/minizip/unzip.c +202 -342
  107. data/libxlsxwriter/third_party/minizip/unzip.h +74 -74
  108. data/libxlsxwriter/third_party/minizip/zip.c +165 -218
  109. data/libxlsxwriter/third_party/minizip/zip.h +164 -154
  110. data/libxlsxwriter/third_party/tmpfileplus/Makefile +3 -3
  111. data/libxlsxwriter/version.txt +1 -1
  112. data/test/auto_width_test.rb +20 -0
  113. data/test/default_format_test.rb +1 -1
  114. data/test/validations_test.rb +3 -3
  115. data/test/worksheet_test.rb +6 -1
  116. metadata +33 -7
  117. data/libxlsxwriter/.travis.yml +0 -37
@@ -49,7 +49,7 @@
49
49
  extern "C" {
50
50
  #endif
51
51
 
52
- /* #define HAVE_BZIP2 */
52
+ /*#define HAVE_BZIP2*/
53
53
 
54
54
  #ifndef _ZLIB_H
55
55
  #include "zlib.h"
@@ -101,12 +101,12 @@ typedef voidp zipFile;
101
101
  /* tm_zip contain date/time info */
102
102
  typedef struct tm_zip_s
103
103
  {
104
- uInt tm_sec; /* seconds after the minute - [0,59] */
105
- uInt tm_min; /* minutes after the hour - [0,59] */
106
- uInt tm_hour; /* hours since midnight - [0,23] */
107
- uInt tm_mday; /* day of the month - [1,31] */
108
- uInt tm_mon; /* months since January - [0,11] */
109
- uInt tm_year; /* years - [1980..2044] */
104
+ int tm_sec; /* seconds after the minute - [0,59] */
105
+ int tm_min; /* minutes after the hour - [0,59] */
106
+ int tm_hour; /* hours since midnight - [0,23] */
107
+ int tm_mday; /* day of the month - [1,31] */
108
+ int tm_mon; /* months since January - [0,11] */
109
+ int tm_year; /* years - [1980..2044] */
110
110
  } tm_zip;
111
111
 
112
112
  typedef struct
@@ -126,8 +126,8 @@ typedef const char* zipcharpc;
126
126
  #define APPEND_STATUS_CREATEAFTER (1)
127
127
  #define APPEND_STATUS_ADDINZIP (2)
128
128
 
129
- extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append));
130
- extern zipFile ZEXPORT zipOpen64 OF((const void *pathname, int append));
129
+ extern zipFile ZEXPORT zipOpen(const char *pathname, int append);
130
+ extern zipFile ZEXPORT zipOpen64(const void *pathname, int append);
131
131
  /*
132
132
  Create a zipfile.
133
133
  pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on
@@ -144,41 +144,46 @@ extern zipFile ZEXPORT zipOpen64 OF((const void *pathname, int append));
144
144
 
145
145
  /* Note : there is no delete function into a zipfile.
146
146
  If you want delete file into a zipfile, you must open a zipfile, and create another
147
- Of couse, you can use RAW reading and writing to copy the file you did not want delte
147
+ Of course, you can use RAW reading and writing to copy the file you did not want delete
148
148
  */
149
149
 
150
- extern zipFile ZEXPORT zipOpen2 OF((const char *pathname,
151
- int append,
152
- zipcharpc* globalcomment,
153
- zlib_filefunc_def* pzlib_filefunc_def));
150
+ extern zipFile ZEXPORT zipOpen2(const char *pathname,
151
+ int append,
152
+ zipcharpc* globalcomment,
153
+ zlib_filefunc_def* pzlib_filefunc_def);
154
154
 
155
- extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname,
155
+ extern zipFile ZEXPORT zipOpen2_64(const void *pathname,
156
156
  int append,
157
157
  zipcharpc* globalcomment,
158
- zlib_filefunc64_def* pzlib_filefunc_def));
159
-
160
- extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
161
- const char* filename,
162
- const zip_fileinfo* zipfi,
163
- const void* extrafield_local,
164
- uInt size_extrafield_local,
165
- const void* extrafield_global,
166
- uInt size_extrafield_global,
167
- const char* comment,
168
- int method,
169
- int level));
170
-
171
- extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file,
172
- const char* filename,
173
- const zip_fileinfo* zipfi,
174
- const void* extrafield_local,
175
- uInt size_extrafield_local,
176
- const void* extrafield_global,
177
- uInt size_extrafield_global,
178
- const char* comment,
179
- int method,
180
- int level,
181
- int zip64));
158
+ zlib_filefunc64_def* pzlib_filefunc_def);
159
+
160
+ extern zipFile ZEXPORT zipOpen3(const void *pathname,
161
+ int append,
162
+ zipcharpc* globalcomment,
163
+ zlib_filefunc64_32_def* pzlib_filefunc64_32_def);
164
+
165
+ extern int ZEXPORT zipOpenNewFileInZip(zipFile file,
166
+ const char* filename,
167
+ const zip_fileinfo* zipfi,
168
+ const void* extrafield_local,
169
+ uInt size_extrafield_local,
170
+ const void* extrafield_global,
171
+ uInt size_extrafield_global,
172
+ const char* comment,
173
+ int method,
174
+ int level);
175
+
176
+ extern int ZEXPORT zipOpenNewFileInZip64(zipFile file,
177
+ const char* filename,
178
+ const zip_fileinfo* zipfi,
179
+ const void* extrafield_local,
180
+ uInt size_extrafield_local,
181
+ const void* extrafield_global,
182
+ uInt size_extrafield_global,
183
+ const char* comment,
184
+ int method,
185
+ int level,
186
+ int zip64);
182
187
 
183
188
  /*
184
189
  Open a file in the ZIP for writing.
@@ -197,70 +202,69 @@ extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file,
197
202
  */
198
203
 
199
204
 
200
- extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file,
201
- const char* filename,
202
- const zip_fileinfo* zipfi,
203
- const void* extrafield_local,
204
- uInt size_extrafield_local,
205
- const void* extrafield_global,
206
- uInt size_extrafield_global,
207
- const char* comment,
208
- int method,
209
- int level,
210
- int raw));
211
-
212
-
213
- extern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file,
214
- const char* filename,
215
- const zip_fileinfo* zipfi,
216
- const void* extrafield_local,
217
- uInt size_extrafield_local,
218
- const void* extrafield_global,
219
- uInt size_extrafield_global,
220
- const char* comment,
221
- int method,
222
- int level,
223
- int raw,
224
- int zip64));
205
+ extern int ZEXPORT zipOpenNewFileInZip2(zipFile file,
206
+ const char* filename,
207
+ const zip_fileinfo* zipfi,
208
+ const void* extrafield_local,
209
+ uInt size_extrafield_local,
210
+ const void* extrafield_global,
211
+ uInt size_extrafield_global,
212
+ const char* comment,
213
+ int method,
214
+ int level,
215
+ int raw);
216
+
217
+
218
+ extern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file,
219
+ const char* filename,
220
+ const zip_fileinfo* zipfi,
221
+ const void* extrafield_local,
222
+ uInt size_extrafield_local,
223
+ const void* extrafield_global,
224
+ uInt size_extrafield_global,
225
+ const char* comment,
226
+ int method,
227
+ int level,
228
+ int raw,
229
+ int zip64);
225
230
  /*
226
231
  Same than zipOpenNewFileInZip, except if raw=1, we write raw file
227
232
  */
228
233
 
229
- extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file,
230
- const char* filename,
231
- const zip_fileinfo* zipfi,
232
- const void* extrafield_local,
233
- uInt size_extrafield_local,
234
- const void* extrafield_global,
235
- uInt size_extrafield_global,
236
- const char* comment,
237
- int method,
238
- int level,
239
- int raw,
240
- int windowBits,
241
- int memLevel,
242
- int strategy,
243
- const char* password,
244
- uLong crcForCrypting));
245
-
246
- extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file,
247
- const char* filename,
248
- const zip_fileinfo* zipfi,
249
- const void* extrafield_local,
250
- uInt size_extrafield_local,
251
- const void* extrafield_global,
252
- uInt size_extrafield_global,
253
- const char* comment,
254
- int method,
255
- int level,
256
- int raw,
257
- int windowBits,
258
- int memLevel,
259
- int strategy,
260
- const char* password,
261
- uLong crcForCrypting,
262
- int zip64
263
- ));
234
+ extern int ZEXPORT zipOpenNewFileInZip3(zipFile file,
235
+ const char* filename,
236
+ const zip_fileinfo* zipfi,
237
+ const void* extrafield_local,
238
+ uInt size_extrafield_local,
239
+ const void* extrafield_global,
240
+ uInt size_extrafield_global,
241
+ const char* comment,
242
+ int method,
243
+ int level,
244
+ int raw,
245
+ int windowBits,
246
+ int memLevel,
247
+ int strategy,
248
+ const char* password,
249
+ uLong crcForCrypting);
250
+
251
+ extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file,
252
+ const char* filename,
253
+ const zip_fileinfo* zipfi,
254
+ const void* extrafield_local,
255
+ uInt size_extrafield_local,
256
+ const void* extrafield_global,
257
+ uInt size_extrafield_global,
258
+ const char* comment,
259
+ int method,
260
+ int level,
261
+ int raw,
262
+ int windowBits,
263
+ int memLevel,
264
+ int strategy,
265
+ const char* password,
266
+ uLong crcForCrypting,
267
+ int zip64);
264
268
 
265
269
  /*
266
270
  Same than zipOpenNewFileInZip2, except
@@ -269,47 +273,45 @@ extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file,
269
273
  crcForCrypting : crc of file to compress (needed for crypting)
270
274
  */
271
275
 
272
- extern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file,
273
- const char* filename,
274
- const zip_fileinfo* zipfi,
275
- const void* extrafield_local,
276
- uInt size_extrafield_local,
277
- const void* extrafield_global,
278
- uInt size_extrafield_global,
279
- const char* comment,
280
- int method,
281
- int level,
282
- int raw,
283
- int windowBits,
284
- int memLevel,
285
- int strategy,
286
- const char* password,
287
- uLong crcForCrypting,
288
- uLong versionMadeBy,
289
- uLong flagBase
290
- ));
291
-
292
-
293
- extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file,
294
- const char* filename,
295
- const zip_fileinfo* zipfi,
296
- const void* extrafield_local,
297
- uInt size_extrafield_local,
298
- const void* extrafield_global,
299
- uInt size_extrafield_global,
300
- const char* comment,
301
- int method,
302
- int level,
303
- int raw,
304
- int windowBits,
305
- int memLevel,
306
- int strategy,
307
- const char* password,
308
- uLong crcForCrypting,
309
- uLong versionMadeBy,
310
- uLong flagBase,
311
- int zip64
312
- ));
276
+ extern int ZEXPORT zipOpenNewFileInZip4(zipFile file,
277
+ const char* filename,
278
+ const zip_fileinfo* zipfi,
279
+ const void* extrafield_local,
280
+ uInt size_extrafield_local,
281
+ const void* extrafield_global,
282
+ uInt size_extrafield_global,
283
+ const char* comment,
284
+ int method,
285
+ int level,
286
+ int raw,
287
+ int windowBits,
288
+ int memLevel,
289
+ int strategy,
290
+ const char* password,
291
+ uLong crcForCrypting,
292
+ uLong versionMadeBy,
293
+ uLong flagBase);
294
+
295
+
296
+ extern int ZEXPORT zipOpenNewFileInZip4_64(zipFile file,
297
+ const char* filename,
298
+ const zip_fileinfo* zipfi,
299
+ const void* extrafield_local,
300
+ uInt size_extrafield_local,
301
+ const void* extrafield_global,
302
+ uInt size_extrafield_global,
303
+ const char* comment,
304
+ int method,
305
+ int level,
306
+ int raw,
307
+ int windowBits,
308
+ int memLevel,
309
+ int strategy,
310
+ const char* password,
311
+ uLong crcForCrypting,
312
+ uLong versionMadeBy,
313
+ uLong flagBase,
314
+ int zip64);
313
315
  /*
314
316
  Same than zipOpenNewFileInZip4, except
315
317
  versionMadeBy : value for Version made by field
@@ -317,25 +319,25 @@ extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file,
317
319
  */
318
320
 
319
321
 
320
- extern int ZEXPORT zipWriteInFileInZip OF((zipFile file,
321
- const void* buf,
322
- unsigned len));
322
+ extern int ZEXPORT zipWriteInFileInZip(zipFile file,
323
+ const void* buf,
324
+ unsigned len);
323
325
  /*
324
326
  Write data in the zipfile
325
327
  */
326
328
 
327
- extern int ZEXPORT zipCloseFileInZip OF((zipFile file));
329
+ extern int ZEXPORT zipCloseFileInZip(zipFile file);
328
330
  /*
329
331
  Close the current file in the zipfile
330
332
  */
331
333
 
332
- extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file,
333
- uLong uncompressed_size,
334
- uLong crc32));
334
+ extern int ZEXPORT zipCloseFileInZipRaw(zipFile file,
335
+ uLong uncompressed_size,
336
+ uLong crc32);
335
337
 
336
- extern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file,
337
- ZPOS64_T uncompressed_size,
338
- uLong crc32));
338
+ extern int ZEXPORT zipCloseFileInZipRaw64(zipFile file,
339
+ ZPOS64_T uncompressed_size,
340
+ uLong crc32);
339
341
 
340
342
  /*
341
343
  Close the current file in the zipfile, for file opened with
@@ -343,14 +345,14 @@ extern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file,
343
345
  uncompressed_size and crc32 are value for the uncompressed size
344
346
  */
345
347
 
346
- extern int ZEXPORT zipClose OF((zipFile file,
347
- const char* global_comment));
348
+ extern int ZEXPORT zipClose(zipFile file,
349
+ const char* global_comment);
348
350
  /*
349
351
  Close the zipfile
350
352
  */
351
353
 
352
354
 
353
- extern int ZEXPORT zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader));
355
+ extern int ZEXPORT zipRemoveExtraInfoBlock(char* pData, int* dataLen, short sHeader);
354
356
  /*
355
357
  zipRemoveExtraInfoBlock - Added by Mathias Svensson
356
358
 
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * libxlsxwriter
3
3
  *
4
- * Copyright 2014-2019, John McNamara, jmcnamara@cpan.org. See LICENSE.txt.
4
+ * Copyright 2014-2022, John McNamara, jmcnamara@cpan.org. See LICENSE.txt.
5
5
  */
6
6
 
7
7
  /**
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * @brief Utility functions for libxlsxwriter.
11
11
  *
12
- * <!-- Copyright 2014-2019, John McNamara, jmcnamara@cpan.org -->
12
+ * <!-- Copyright 2014-2022, John McNamara, jmcnamara@cpan.org -->
13
13
  *
14
14
  */
15
15
 
@@ -17,7 +17,9 @@
17
17
  #define __LXW_UTILITY_H__
18
18
 
19
19
  #include <stdint.h>
20
+ #ifndef _MSC_VER
20
21
  #include <strings.h>
22
+ #endif
21
23
  #include "common.h"
22
24
  #include "xmlwriter.h"
23
25
 
@@ -101,6 +103,20 @@ extern "C" {
101
103
  */
102
104
  const char *lxw_version(void);
103
105
 
106
+ /**
107
+ * @brief Retrieve the library version ID.
108
+ *
109
+ * @return The version ID.
110
+ *
111
+ * Get the library version such as "X.Y.Z" as a XYZ integer.
112
+ *
113
+ * @code
114
+ * printf("Libxlsxwriter version id = %d\n", lxw_version_id());
115
+ * @endcode
116
+ *
117
+ */
118
+ uint16_t lxw_version_id(void);
119
+
104
120
  /**
105
121
  * @brief Converts a libxlsxwriter error number to a string.
106
122
  *
@@ -155,10 +171,52 @@ void lxw_rowcol_to_formula_abs(char *formula, const char *sheetname,
155
171
 
156
172
  uint32_t lxw_name_to_row(const char *row_str);
157
173
  uint16_t lxw_name_to_col(const char *col_str);
174
+
158
175
  uint32_t lxw_name_to_row_2(const char *row_str);
159
176
  uint16_t lxw_name_to_col_2(const char *col_str);
160
177
 
161
- double lxw_datetime_to_excel_date(lxw_datetime *datetime, uint8_t date_1904);
178
+ /**
179
+ * @brief Converts a #lxw_datetime to an Excel datetime number.
180
+ *
181
+ * @param datetime A pointer to a #lxw_datetime struct.
182
+ *
183
+ * @return A double representing an Excel datetime.
184
+ *
185
+ * The `%lxw_datetime_to_excel_datetime()` function converts a datetime in
186
+ * #lxw_datetime to an Excel datetime number:
187
+ *
188
+ * @code
189
+ * lxw_datetime datetime = {2013, 2, 28, 12, 0, 0.0};
190
+ *
191
+ * double excel_datetime = lxw_datetime_to_excel_date(&datetime);
192
+ * @endcode
193
+ *
194
+ * See @ref working_with_dates for more details on the Excel datetime format.
195
+ */
196
+ double lxw_datetime_to_excel_datetime(lxw_datetime *datetime);
197
+
198
+ double lxw_datetime_to_excel_date_epoch(lxw_datetime *datetime,
199
+ uint8_t date_1904);
200
+
201
+ /**
202
+ * @brief Converts a unix datetime to an Excel datetime number.
203
+ *
204
+ * @param unixtime Unix time (seconds since 1970-01-01)
205
+ *
206
+ * @return A double representing an Excel datetime.
207
+ *
208
+ * The `%lxw_unixtime_to_excel_date()` function converts a unix datetime to
209
+ * an Excel datetime number:
210
+ *
211
+ * @code
212
+ * double excel_datetime = lxw_unixtime_to_excel_date(946684800);
213
+ * @endcode
214
+ *
215
+ * See @ref working_with_dates for more details.
216
+ */
217
+ double lxw_unixtime_to_excel_date(int64_t unixtime);
218
+
219
+ double lxw_unixtime_to_excel_date_epoch(int64_t unixtime, uint8_t date_1904);
162
220
 
163
221
  char *lxw_strdup(const char *str);
164
222
  char *lxw_strdup_formula(const char *formula);
@@ -174,15 +232,19 @@ void lxw_str_tolower(char *str);
174
232
  #define lxw_strcasecmp strcasecmp
175
233
  #endif
176
234
 
177
- FILE *lxw_tmpfile(char *tmpdir);
235
+ FILE *lxw_tmpfile(const char *tmpdir);
236
+ FILE *lxw_get_filehandle(char **buf, size_t *size, const char *tmpdir);
237
+ FILE *lxw_fopen(const char *filename, const char *mode);
178
238
 
179
- /* Use a user defined function to format doubles in sprintf or else a simple
180
- * macro (the default). */
181
- #ifdef USE_DOUBLE_FUNCTION
239
+ /* Use the third party dtoa function to avoid locale issues with sprintf
240
+ * double formatting. Otherwise we use a simple macro that falls back to the
241
+ * default c-lib sprintf.
242
+ */
243
+ #ifdef USE_DTOA_LIBRARY
182
244
  int lxw_sprintf_dbl(char *data, double number);
183
245
  #else
184
246
  #define lxw_sprintf_dbl(data, number) \
185
- lxw_snprintf(data, LXW_ATTR_32, "%.16g", number)
247
+ lxw_snprintf(data, LXW_ATTR_32, "%.16G", number)
186
248
  #endif
187
249
 
188
250
  uint16_t lxw_hash_password(const char *password);
@@ -0,0 +1,55 @@
1
+ /*
2
+ * libxlsxwriter
3
+ *
4
+ * Copyright 2014-2022, John McNamara, jmcnamara@cpan.org. See LICENSE.txt.
5
+ *
6
+ * vml - A libxlsxwriter library for creating Excel XLSX vml files.
7
+ *
8
+ */
9
+ #ifndef __LXW_VML_H__
10
+ #define __LXW_VML_H__
11
+
12
+ #include <stdint.h>
13
+
14
+ #include "common.h"
15
+ #include "worksheet.h"
16
+
17
+ /*
18
+ * Struct to represent a vml object.
19
+ */
20
+ typedef struct lxw_vml {
21
+
22
+ FILE *file;
23
+ uint8_t type;
24
+ struct lxw_comment_objs *button_objs;
25
+ struct lxw_comment_objs *comment_objs;
26
+ struct lxw_comment_objs *image_objs;
27
+ char *vml_data_id_str;
28
+ uint32_t vml_shape_id;
29
+ uint8_t comment_display_default;
30
+
31
+ } lxw_vml;
32
+
33
+
34
+ /* *INDENT-OFF* */
35
+ #ifdef __cplusplus
36
+ extern "C" {
37
+ #endif
38
+ /* *INDENT-ON* */
39
+
40
+ lxw_vml *lxw_vml_new(void);
41
+ void lxw_vml_free(lxw_vml *vml);
42
+ void lxw_vml_assemble_xml_file(lxw_vml *self);
43
+
44
+ /* Declarations required for unit testing. */
45
+ #ifdef TESTING
46
+
47
+ #endif /* TESTING */
48
+
49
+ /* *INDENT-OFF* */
50
+ #ifdef __cplusplus
51
+ }
52
+ #endif
53
+ /* *INDENT-ON* */
54
+
55
+ #endif /* __LXW_VML_H__ */