初始化PHP-Xlswrite扩展

This commit is contained in:
ykxiao
2024-03-05 10:01:08 +08:00
commit 879cf9584d
2483 changed files with 1054962 additions and 0 deletions

View File

@ -0,0 +1 @@
custom: ["paypal.me/xlsxwriter"]

60
library/libxlsxwriter/.gitignore vendored Normal file
View File

@ -0,0 +1,60 @@
*.a
*.o
*.so
*.so.*
*.to
*.lo
*.la
*.dylib
*.dll
*.gcno
*.gcda
test_*
!test_*.c
!test_*.cpp
!test_*.py
*.tar.gz
*~
TAGS
.#*
*#
~*xlsx
*.xlsx
*.bak
!test/functional/xlsx_files/*.xlsx
*.pyc
.pytest_cache/
.cproject
.project
.pydevproject
.settings/
.DS_Store
__pycache__
.cache
docs/html
docs/latex
.deps
.dirstamp
_temp.c
examples/*
!examples/*.c
!examples/logo.png
!examples/logo_small.png
!examples/Makefile
cov-int
libxlsxwriter-coverity.tgz
build
third_party/zlib-1.2.8/configure.log
third_party/zlib-1.2.8/contrib/minizip/miniunz
third_party/zlib-1.2.8/contrib/minizip/minizip
third_party/zlib-1.2.8/example
third_party/zlib-1.2.8/examplesh
third_party/zlib-1.2.8/minigzip
third_party/zlib-1.2.8/minigzipsh
third_party/zlib-1.2.8/zlib.pc
cmake
!cmake/FindMINIZIP.cmake
!cmake/FindPackage.cmake
!cmake/i686-toolchain.cmake

152
library/libxlsxwriter/.indent.pro vendored Normal file
View File

@ -0,0 +1,152 @@
/*
* Indent rules for libxlsxwriter.
*
* The rules for user defined typedefs can be update as follows:
*
perl -i -pe 'print and last if /[l]ibxlsxwriter typedefs/' .indent.pro
ack -h typedef include/xlsxwriter/*.h src/*.c | perl -lne 'print "-T $1" if /\w+\s+\w+\s+(\w+)/' | sort >> .indent.pro
*
*/
/* Command line options used with GNU indent 2.2.10 */
--braces-on-if-line
--braces-on-struct-decl-line
--case-indentation 4
--continue-at-parentheses
--declaration-comment-column 0
--format-first-column-comments
--honour-newlines
--ignore-profile
--indent-label 0
--indent-level 4
--no-space-after-function-call-names
--no-tabs
--swallow-optional-blank-lines
/* Typedefs used in the code. */
-T int8_t
-T int16_t
-T int32_t
-T int64_t
-T uint8_t
-T uint16_t
-T uint32_t
-T uint64_t
-T ssize_t
-T size_t
-T time_t
-T LIST_ENTRY
-T RB_ENTRY
-T SLIST_ENTRY
-T STAILQ_ENTRY
-T TAILQ_ENTRY
/* libxlsxwriter typedefs. */
-T lxw_app
-T lxw_author_id
-T lxw_autofilter
-T lxw_border
-T lxw_cell
-T lxw_chart
-T lxw_chart_axis
-T lxw_chart_axis_display_unit
-T lxw_chart_axis_label_alignment
-T lxw_chart_axis_label_position
-T lxw_chart_axis_tick_mark
-T lxw_chart_axis_tick_position
-T lxw_chart_axis_type
-T lxw_chart_blank
-T lxw_chart_custom_label
-T lxw_chart_data_label
-T lxw_chart_error_bar_axis
-T lxw_chart_error_bar_cap
-T lxw_chart_error_bar_direction
-T lxw_chart_error_bar_type
-T lxw_chart_fill
-T lxw_chart_font
-T lxw_chart_gridline
-T lxw_chart_label_position
-T lxw_chart_label_separator
-T lxw_chart_legend
-T lxw_chart_legend_position
-T lxw_chart_line
-T lxw_chart_line_dash_type
-T lxw_chart_marker
-T lxw_chart_marker_type
-T lxw_chart_options
-T lxw_chart_pattern
-T lxw_chart_pattern_type
-T lxw_chart_point
-T lxw_chart_series
-T lxw_chart_title
-T lxw_chart_trendline_type
-T lxw_chart_type
-T lxw_chartsheet
-T lxw_chartsheet_name
-T lxw_col_options
-T lxw_col_t
-T lxw_color_t
-T lxw_comment
-T lxw_comment_options
-T lxw_cond_format_hash_element
-T lxw_cond_format_obj
-T lxw_conditional_format
-T lxw_content_types
-T lxw_core
-T lxw_custom
-T lxw_custom_property
-T lxw_data_val_obj
-T lxw_data_validation
-T lxw_datetime
-T lxw_defined_name
-T lxw_doc_properties
-T lxw_drawing
-T lxw_drawing_coords
-T lxw_drawing_object
-T lxw_drawing_rel_id
-T lxw_error
-T lxw_fill
-T lxw_filter_rule
-T lxw_filter_rule_obj
-T lxw_font
-T lxw_format
-T lxw_hash_element
-T lxw_hash_table
-T lxw_header_footer_options
-T lxw_heading_pair
-T lxw_image_md5
-T lxw_image_options
-T lxw_merged_range
-T lxw_metadata
-T lxw_object_properties
-T lxw_packager
-T lxw_panes
-T lxw_part_name
-T lxw_print_area
-T lxw_protection
-T lxw_protection_obj
-T lxw_rel_tuple
-T lxw_relationships
-T lxw_repeat_cols
-T lxw_repeat_rows
-T lxw_rich_string_tuple
-T lxw_row
-T lxw_row_col_options
-T lxw_row_t
-T lxw_selection
-T lxw_series_data_point
-T lxw_series_error_bars
-T lxw_series_range
-T lxw_sheet
-T lxw_sst
-T lxw_styles
-T lxw_theme
-T lxw_tuple
-T lxw_vml
-T lxw_vml_obj
-T lxw_workbook
-T lxw_workbook_options
-T lxw_worksheet
-T lxw_worksheet_init_data
-T lxw_worksheet_name

View File

@ -0,0 +1,42 @@
language: c
dist: xenial
compiler:
- clang
- gcc
env:
- CFLAGS='-Werror'
- NO_VALGRIND=1 USE_STANDARD_TMPFILE=1 CFLAGS='-Werror'
- NO_VALGRIND=1 CFLAGS='-Werror -m32'
- NO_VALGRIND=1 USE_SYSTEM_MINIZIP=1 CFLAGS='-Werror'
- NO_VALGRIND=1 USE_DTOA_LIBRARY=1 CFLAGS='-Werror'
- NO_VALGRIND=1 USE_NO_MD5=1 CFLAGS='-Werror'
- NO_VALGRIND=1 USE_OPENSSL_MD5=1 CFLAGS='-Werror'
- NO_VALGRIND=1 USE_FMEMOPEN=1 CFLAGS='-Werror'
addons:
apt:
update: true
packages:
- gcc-multilib
- libminizip-dev
- libssl-dev
- valgrind
- zlib1g-dev
- zlib1g-dev:i386
before_install:
- sudo pip install pytest
script:
- make V=1
- make test_functional V=1
- make test_unit V=1
- make examples V=1
- make test_valgrind V=1
- sudo make install V=1
- sudo make uninstall V=1
- make test_cmake V=1
- make clean V=1

View File

@ -0,0 +1,226 @@
# libxlsxwriter: Reporting Bugs and submitting Pull Requests
## Reporting Bugs
Here are some tips on reporting bugs in `libxlsxwriter`.
### Upgrade to the latest version of the library
Upgrade to the latest version of the library since the bug you are reporting
may already be fixed.
Check the [Changes][changes] section of the documentation to see what has
changed in the latest versions.
[changes]: http://libxlsxwriter.github.io/changes.html
You can check which version of `libxlsxwriter` that you are using by checking
the `xlsxwriter.h` header file or by adding the following to your program:
```C
#include <stdio.h>
#include "xlsxwriter.h"
int main() {
printf("Libxlsxwriter version = %s\n", lxw_version());
return 0;
}
```
### Read the documentation
Read or search the `libxlsxwriter` [documentation][docs] to see if the issue
you are encountering is already explained.
[docs]: http://libxlsxwriter.github.io/index.html
### Look at the example programs
There are many [examples programs][examples] in the distribution. Try to
identify an example program that corresponds to your query and adapt it to use
as a bug report.
[examples]: http://libxlsxwriter.github.io/examples.html
### Use the xlsxwriter Issue Tracker
The [libxlsxwriter issue tracker][issues] is on GitHub.
[issues]: https://github.com/jmcnamara/libxlsxwriter/issues
### Tips for submitting a bug report
1. Describe the problem as clearly and as concisely as possible.
2. Include a sample program. This is probably the most important step.
It is generally easier to describe a problem in code than in written
prose.
3. The sample program should be as small as possible to demonstrate the
problem. Don't copy and paste large non-relevant sections of your
program.
A sample bug report is shown below. This format helps analyze and respond to
the bug report more quickly.
> Subject: Issue with SOMETHING
>
> Greetings,
>
> I am using libxlsxwriter to do SOMETHING but it appears to do SOMETHING ELSE.
>
> I am using CC version X.Y.Z, OS = uname and libxlsxwriter x.y.z.
>
> Here is some code that demonstrates the problem:
>
>
>```C
>#include "xlsxwriter.h"
>
>int main() {
>
> lxw_workbook *workbook = workbook_new("bug_report.xlsx");
> lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
>
> worksheet_write_string(worksheet, 0, 0, "Hello", NULL);
> worksheet_write_number(worksheet, 1, 0, 123, NULL);
>
> return workbook_close(workbook);
>}
>```
>
# Pull Requests and Contributing to Libxlsxwriter
All patches and pull requests are welcome but in general you should start with
an issue tracker to describe what you intend to do before you do it.
### Getting Started
1. Pull requests and new feature proposals must start with an [issue
tracker][issues]. This serves as the focal point for the design discussion.
2. Describe what you plan to do. If there are API changes add some code
example to demonstrate them.
3. Fork the repository.
4. Run all the tests to make sure the current code works on your system using
`make test`. See the [Running the Test Suite][tests] section of the docs
for instructions.
5. Create a feature branch for your new feature.
[tests]: http://libxlsxwriter.github.io/running_the_tests.html
### Code Style
The code style is mainly K&R style with 4 space indents.
The author uses GNU indent (`gindent`) 2.2.10 with the following options:
```
--braces-on-if-line
--braces-on-struct-decl-line
--case-indentation 4
--continue-at-parentheses
--declaration-comment-column 0
--format-first-column-comments
--honour-newlines
--ignore-profile
--indent-label 0
--indent-level 4
--no-space-after-function-call-names
--no-tabs
--swallow-optional-blank-lines
```
The [indent configuration file][indentpro] is available in the repo. The code
can be indented automatically if the same version of `gindent` is used with
the following make command:
```shell
make indent
```
Note, make sure you have backed up your files or added them to the index
before running this command.
In general follow the existing style in the code.
[indentpro]: https://github.com/jmcnamara/libxlsxwriter/blob/master/.indent.pro
### Writing and Running Tests
Any significant features should be accompanied by a test. See the `test`
directory and the [Running the Test Suite][tests] section of the docs for
details of the test setup.
The tests can be run as follows:
```shell
make test
```
Same as:
```shell
make test_unit
make test_functional
```
The functional tests require the Python module [pytest][pytest] as a test runner.
If you have `valgrind` installed you can use the test suite to check for memory leaks:
```shell
make test_valgrind
```
When you push your changes they will also be tested automatically using
[Travis CI][travis].
[Travis]: https://travis-ci.org/jmcnamara/libxlsxwriter/
[pytest]: http://pytest.org/
### Documentation
The `libxlsxwriter` documentation is written in Doxygen format in the header
files and in additional `.dox` files in the `docs/src` directory of the
repo. The documentation can be built as follows:
```shell
make docs
open docs/html/index.html
```
### Example programs
If applicable add an example program to the `examples` directory. Example
files can be built using:
```shell
make docs
```
### Copyright and License
Copyright remains with the original author. Do not include additional
copyright claims or Licensing requirements. GitHub and the `git` repository
will record your contribution and it will be acknowledged it in the Changes
file.
### Submitting the Pull Request
If your change involves several incremental `git` commits then `rebase` or
`squash` them onto another branch so that the Pull Request is a single commit
or a small number of logical commits.
Push your changes to GitHub and submit the Pull Request with a hash link to
the to the Issue tracker that was opened above.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,85 @@
# libxlsxwriter: Reporting Bugs
Here are some tips on reporting bugs in `libxlsxwriter`.
### Upgrade to the latest version of the library
Upgrade to the latest version of the library since the bug you are reporting
may already be fixed.
Check the [Changes][changes] section of the documentation to see what has
changed in the latest versions.
[changes]: http://libxlsxwriter.github.io/changes.html
You can check which version of `libxlsxwriter` that you are using by checking
the `xlsxwriter.h` header file or by adding the following to your program:
```C
#include <stdio.h>
#include "xlsxwriter.h"
int main() {
printf("Libxlsxwriter version = %s\n", lxw_version());
return 0;
}
```
### Read the documentation
Read or search the `libxlsxwriter` [documentation][docs] to see if the issue
you are encountering is already explained.
[docs]: http://libxlsxwriter.github.io/index.html
### Look at the example programs
There are many [examples programs][examples] in the distribution. Try to
identify an example program that corresponds to your query and adapt it to use
as a bug report.
[examples]: http://libxlsxwriter.github.io/examples.html
### Tips for submitting a bug report
1. Describe the problem as clearly and as concisely as possible.
2. Include a sample program. This is probably the most important step.
It is generally easier to describe a problem in code than in written
prose.
3. The sample program should be as small as possible to demonstrate the
problem. Don't copy and paste large non-relevant sections of your
program.
A sample bug report is shown below. This format helps analyze and respond to
the bug report more quickly.
> Subject: Issue with SOMETHING
>
> Greetings,
>
> I am using libxlsxwriter to do SOMETHING but it appears to do SOMETHING ELSE.
>
> I am using CC version X.Y.Z, OS = uname and libxlsxwriter x.y.z.
>
> Here is some code that demonstrates the problem:
>
>
>```C
>#include "xlsxwriter.h"
>
>int main() {
>
> lxw_workbook *workbook = workbook_new("bug_report.xlsx");
> lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
>
> worksheet_write_string(worksheet, 0, 0, "Hello", NULL);
> worksheet_write_number(worksheet, 1, 0, 123, NULL);
>
> return workbook_close(workbook);
>}
>```
>

View File

@ -0,0 +1,207 @@
/**
@page license License
Libxlsxwriter is released under a FreeBSD license:
Copyright 2014-2021, John McNamara <jmcnamara@cpan.org>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are
those of the authors and should not be interpreted as representing
official policies, either expressed or implied, of the FreeBSD Project.
Libxlsxwriter includes `queue.h` and `tree.h` from FreeBSD, the `minizip`
component of `zlib`. It also includes and uses the optional `tmpfileplus`,
`md5` and `emyg_dtoa`. These components which have the following licenses:
Queue.h from FreeBSD:
Copyright (c) 1991, 1993
The Regents of the University of California. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
4. Neither the name of the University nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
Tree.h from FreeBSD:
Copyright 2002 Niels Provos <provos@citi.umich.edu>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The `minizip` files used in the libxlsxwriter source tree are taken from the
`zlib` ` contrib/minizip` directory. [Zlib](http://www.zlib.net) has the
following License/Copyright:
(C) 1995-2013 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
Jean-loup Gailly Mark Adler
jloup@gzip.org madler@alumni.caltech.edu
The `minizip` files have the following additional copyright declarations:
Copyright (C) 1998-2010 Gilles Vollant
(minizip) ( http://www.winimage.com/zLibDll/minizip.html )
Modifications for Zip64 support
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
Note, it is possible to compile libxlsxwriter without statically linking the
`minizip` files and instead dynamically linking to `lminizip`, see
@ref gsg_minizip.
[Tmpfileplus](http://www.di-mgt.com.au/c_function_to_create_temp_file.html)
has the following license:
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
Copyright (c) 2012-16 David Ireland, DI Management Services Pty Ltd
<http://www.di-mgt.com.au/contact/>.
See the [Mozilla Public License, v. 2.0](http://mozilla.org/MPL/2.0/).
Note, it is possible to compile libxlsxwriter using the standard library
`tmpfile()` function instead of `tmpfileplus`, see @ref gsg_tmpdir.
The [Milo Yip DTOA library](https://github.com/miloyip/dtoa-benchmark) for
converting doubles to strings. It has the following license:
Copyright (C) 2015 Doug Currie
based on dtoa_milo.h
Copyright (C) 2014 Milo Yip
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
This Milo Yip DTOA library (emyg_dtoa) is uses to avoid issues where the
standard sprintf() dtoa function changes output based on locale settings. It
is also 40-50% faster than the standard dtoa for raw numeric data. The use of
this library is optional. If you wish to use it you can pass
`USE_DTOA_LIBRARY=1` to make when compiling.
[Openwall MD5](https://openwall.info/wiki/people/solar/software/public-domain-source-code/md5)
has the following licence:
This software was written by Alexander Peslyak in 2001. No copyright is
claimed, and the software is hereby placed in the public domain.
In case this attempt to disclaim copyright and place the software in the
public domain is deemed null and void, then the software is
Copyright (c) 2001 Alexander Peslyak and it is hereby released to the
general public under the following terms:
Redistribution and use in source and binary forms, with or without
modification, are permitted.
There's ABSOLUTELY NO WARRANTY, express or implied.
(This is a heavily cut-down "BSD license".)
Note, the MD5 library is used to avoid including duplicate image files in the
xlsx file. If you don't want to use this code, and the additional licence, you
can use OpenSSL's MD5 functions instead by passing `USE_OPENSSL_MD5=1` to
make. If this functionality isn't required it is possible to compile
libxlsxwriter without image deduplication by passing `USE_NO_MD5=1` to make.
See also @ref gsg_md5.
Next: @ref changes
*/

View File

@ -0,0 +1,130 @@
# libxlsxwriter: Submitting Pull Requests
# Pull Requests and Contributing to Libxlsxwriter
All patches and pull requests are welcome but in general you should start with
an issue tracker to describe what you intend to do before you do it.
### Getting Started
1. Pull requests and new feature proposals must start with an [issue
tracker][issues]. This serves as the focal point for the design discussion.
2. Describe what you plan to do. If there are API changes add some code
example to demonstrate them.
3. Fork the repository.
4. Run all the tests to make sure the current code works on your system using
`make test`. See the [Running the Test Suite][tests] section of the docs
for instructions.
5. Create a feature branch for your new feature.
[tests]: http://libxlsxwriter.github.io/running_the_tests.html
### Code Style
The code style is mainly K&R style with 4 space indents.
The author uses GNU indent (`gindent`) 2.2.10 with the following options:
```
--braces-on-if-line
--braces-on-struct-decl-line
--case-indentation 4
--continue-at-parentheses
--declaration-comment-column 0
--format-first-column-comments
--honour-newlines
--ignore-profile
--indent-label 0
--indent-level 4
--no-space-after-function-call-names
--no-tabs
--swallow-optional-blank-lines
```
The [indent configuration file][indentpro] is available in the repo. The code
can be indented automatically if the same version of `gindent` is used with
the following make command:
```shell
make indent
```
Note, make sure you have backed up your files or added them to the index
before running this command.
In general follow the existing style in the code.
[indentpro]: https://github.com/jmcnamara/libxlsxwriter/blob/master/.indent.pro
### Writing and Running Tests
Any significant features should be accompanied by a test. See the `test`
directory and the [Running the Test Suite][tests] section of the docs for
details of the test setup.
The tests can be run as follows:
```shell
make test
```
Same as:
```shell
make test_unit
make test_functional
```
The functional tests require the Python module [pytest][pytest] as a test runner.
If you have `valgrind` installed you can use the test suite to check for memory leaks:
```shell
make test_valgrind
```
When you push your changes they will also be tested automatically using
[Travis CI][travis].
[Travis]: https://travis-ci.org/jmcnamara/libxlsxwriter/
[pytest]: http://pytest.org/
### Documentation
The `libxlsxwriter` documentation is written in Doxygen format in the header
files and in additional `.dox` files in the `docs/src` directory of the
repo. The documentation can be built as follows:
```shell
make docs
open docs/html/index.html
```
### Example programs
If applicable add an example program to the `examples` directory. Example
files can be built using:
```shell
make docs
```
### Copyright and License
Copyright remains with the original author. Do not include additional
copyright claims or Licensing requirements. GitHub and the `git` repository
will record your contribution and it will be acknowledged it in the Changes
file.
### Submitting the Pull Request
If your change involves several incremental `git` commits then `rebase` or
`squash` them onto another branch so that the Pull Request is a single commit
or a small number of logical commits.
Push your changes to GitHub and submit the Pull Request with a hash link to
the to the Issue tracker that was opened above.

View File

@ -0,0 +1,83 @@
# libxlsxwriter
Libxlsxwriter: A C library for creating Excel XLSX files.
![demo image](http://libxlsxwriter.github.io/demo.png)
## The libxlsxwriter library
Libxlsxwriter is a C library that can be used to write text, numbers, formulas
and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.
It supports features such as:
- 100% compatible Excel XLSX files.
- Full Excel formatting.
- Merged cells.
- Defined names.
- Autofilters.
- Charts.
- Data validation and drop down lists.
- Conditional formatting.
- Worksheet PNG/JPEG/GIF images.
- Cell comments.
- Support for adding Macros.
- Memory optimization mode for writing large files.
- Source code available on [GitHub](https://github.com/jmcnamara/libxlsxwriter).
- FreeBSD license.
- ANSI C.
- Works with GCC, Clang, Xcode, MSVC 2015, ICC, TCC, MinGW, MingGW-w64/32.
- Works on Linux, FreeBSD, OpenBSD, OS X, iOS and Windows. Also works on MSYS/MSYS2 and Cygwin.
- Compiles for 32 and 64 bit.
- Compiles and works on big and little endian systems.
- The only dependency is on `zlib`.
Here is an example that was used to create the spreadsheet shown above:
```C
#include "xlsxwriter.h"
int main() {
/* Create a new workbook and add a worksheet. */
lxw_workbook *workbook = workbook_new("demo.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
/* Add a format. */
lxw_format *format = workbook_add_format(workbook);
/* Set the bold property for the format */
format_set_bold(format);
/* Change the column width for clarity. */
worksheet_set_column(worksheet, 0, 0, 20, NULL);
/* Write some simple text. */
worksheet_write_string(worksheet, 0, 0, "Hello", NULL);
/* Text with formatting. */
worksheet_write_string(worksheet, 1, 0, "World", format);
/* Write some numbers. */
worksheet_write_number(worksheet, 2, 0, 123, NULL);
worksheet_write_number(worksheet, 3, 0, 123.456, NULL);
/* Insert an image. */
worksheet_insert_image(worksheet, 1, 2, "logo.png");
workbook_close(workbook);
return 0;
}
```
See the [full documentation](http://libxlsxwriter.github.io) for the getting
started guide, a tutorial, the main API documentation and examples.

View File

@ -0,0 +1,36 @@
#import <Foundation/Foundation.h>
#import "../xlsxwriter.h"
#import "app.h"
#import "chart.h"
#import "chartsheet.h"
#import "comment.h"
#import "common.h"
#import "content_types.h"
#import "core.h"
#import "custom.h"
#import "drawing.h"
#import "format.h"
#import "hash_table.h"
#import "metadata.h"
#import "packager.h"
#import "relationships.h"
#import "shared_strings.h"
#import "styles.h"
#import "theme.h"
#import "third_party/emyg_dtoa.h"
#import "third_party/ioapi.h"
#import "third_party/md5.h"
#import "third_party/queue.h"
#import "third_party/tmpfileplus.h"
#import "third_party/tree.h"
#import "third_party/zip.h"
#import "utility.h"
#import "vml.h"
#import "workbook.h"
#import "worksheet.h"
#import "xmlwriter.h"
FOUNDATION_EXPORT double xlsxwriterVersionNumber;
FOUNDATION_EXPORT const unsigned char xlsxwriterVersionString[];

View File

@ -0,0 +1,7 @@
framework module xlsxwriter {
umbrella header "xlsxwriter/libxlsxwriter-umbrella.h"
header "xlsxwriter.h"
export *
module * { export * }
}

View File

@ -0,0 +1,4 @@
This directory contains some release utilities that are mainly useful
to the library developer.

View File

@ -0,0 +1,7 @@
#/bin/bash
# Perform some minor clean-ups/fixes to the docs.
perl -i -pe "s/_page/_8h/" html/pages.html
perl -i ../dev/release/fix_example_docs.pl html/examples.html
cp menudata.js html

View File

@ -0,0 +1,124 @@
#!/usr/bin/perl
#
# Simple program to arrange the example programs in a user defined order
# instead of a sorted order. Also add a caption.
#
# Copyright 2014-2021, John McNamara, jmcnamara@cpan.org
#
use warnings;
use strict;
# The required example order and descriptions.
my @examples = (
[ 'hello.c', 'A simple hello world example' ],
[ 'anatomy.c', 'The anatomy of a libxlsxwriter program' ],
[ 'demo.c', 'Demo of some of the libxlsxwriter features' ],
[ 'tutorial1.c', 'Tutorial 1 from the documentation' ],
[ 'tutorial2.c', 'Tutorial 2 from the documentation' ],
[ 'tutorial3.c', 'Tutorial 3 from the documentation' ],
[ 'format_font.c', 'Example of writing data with font formatting' ],
[ 'format_num_format.c', 'Example of writing data with number formatting' ],
[ 'dates_and_times01.c', 'Writing dates and times with numbers' ],
[ 'dates_and_times02.c', 'Writing dates and times with datetime' ],
[ 'dates_and_times03.c', 'Writing dates and times with Unix datetimes' ],
[ 'dates_and_times04.c', 'Dates and times with different formats' ],
[ 'hyperlinks.c', 'A example of writing urls/hyperlinks' ],
[ 'rich_strings.c', 'A example of writing "rich" multi-format strings' ],
[ 'array_formula.c', 'A example of using array formulas' ],
[ 'dynamic_arrays.c', 'A example of using Excel 365 dynamic array formulas' ],
[ 'utf8.c', 'A example of some UTF-8 text' ],
[ 'constant_memory.c', 'Write a large file with constant memory usage' ],
[ 'merge_range.c', 'Create a merged range of cells' ],
[ 'merge_rich_string.c', 'Create a merged range with a rich string' ],
[ 'autofilter.c', 'An example of a worksheet autofilter' ],
[ 'data_validate.c', 'Examples of worksheet data validation and drop down lists' ],
[ 'conditional_format1.c', 'A simple conditional formatting example' ],
[ 'conditional_format2.c', 'An advanced conditional formatting example' ],
[ 'images.c', 'Example of adding images to a worksheet.' ],
[ 'image_buffer.c', 'Example of adding an image from a memory buffer.' ],
[ 'headers_footers.c', 'Example of adding worksheet headers/footers' ],
[ 'defined_name.c', 'Example of how to create defined names' ],
[ 'outline.c', 'Example of grouping and outlines' ],
[ 'outline_collapsed.c', 'Example of grouping and collapsed outlines' ],
[ 'background.c', 'Example of how to set the background image for a worksheet' ],
[ 'tab_colors.c', 'Example of how to set worksheet tab colors' ],
[ 'diagonal_border.c', 'Example of how to set a worksheet cell diagonal border.' ],
[ 'hide_sheet.c', 'Example of hiding a worksheet' ],
[ 'doc_properties.c', 'Example of setting workbook doc properties' ],
[ 'doc_custom_properties.c','Example of setting custom doc properties' ],
[ 'worksheet_protection.c', 'Example of enabling worksheet protection' ],
[ 'hide_row_col.c', 'Example of hiding worksheet rows and columns' ],
[ 'comments1.c', 'Example of adding cell comments to a worksheet' ],
[ 'comments2.c', 'Example of adding cell comments with options' ],
[ 'macro.c', 'Example of adding a VBA macro to a workbook' ],
[ 'panes.c', 'Example of how to create worksheet panes' ],
[ 'ignore_errors.c', 'Example of ignoring worksheet errors/warnings' ],
[ 'lambda.c', 'Example of using the EXCEL 365+ LAMBDA() function' ],
[ 'chart.c', 'Example of a simple column chart' ],
[ 'chart_area.c', 'Examples of area charts' ],
[ 'chart_bar.c', 'Examples of bar charts' ],
[ 'chart_column.c', 'Examples of column charts' ],
[ 'chart_line.c', 'Example of a line chart' ],
[ 'chart_scatter.c', 'Examples of scatter charts' ],
[ 'chart_radar.c', 'Examples of radar charts' ],
[ 'chart_pie.c', 'Examples of pie charts' ],
[ 'chart_doughnut.c', 'Examples of doughnut charts' ],
[ 'chart_clustered.c', 'Examples of clustered category chart' ],
[ 'chart_data_table.c', 'Examples of charts with data tables' ],
[ 'chart_data_tools.c', 'Examples of charts data tools' ],
[ 'chart_data_labels.c', 'Examples of charts data labels' ],
[ 'chart_fonts.c', 'Examples of using charts fonts' ],
[ 'chart_pattern.c', 'Examples of using charts patterns' ],
[ 'chart_styles.c', 'Examples of built-in charts styles' ],
[ 'chartsheet.c', 'Example of a chartsheet chart' ],
);
# Convert the array refs to a hash for lookups.
my %examples;
for my $example (@examples) {
$examples{$example->[0]} = 1;
}
my $in_list = 0;
while ( my $line = <> ) {
# Print all lines not in the <ul> list.
print $line if !$in_list;
# Check for <ul> list.
if ( $line =~ /<div class="textblock">/ ) {
$in_list = 1;
}
# Capture the <li> items of the list.
if ( $line =~ /<li><a class="el" href="[^"]+">([^<]+)/ ) {
my $example = $1;
# Warn if there are any new/unkown items.
if ( !exists $examples{$example} ) {
warn "$0 Unknown example: $example\n";
}
next;
}
# At the end of the <ul> list print out the <li> items in user defined order.
if ( $line =~ m{^</ul>} ) {
$in_list = 0;
for my $aref ( @examples ) {
my $example = $aref->[0];
my $filename = $aref->[0];
my $desc = $aref->[1];
$example =~ s/\.c/_8c-example.html/;
printf qq(<li><a class="el" href="%s">%s</a> %s</li>\n\n),
$example, $filename, $desc;
}
print $line;
}
}
__END__

View File

@ -0,0 +1,78 @@
#!/usr/bin/perl
#
# Simple program to generate the examples.dox file from a simple text file,
# with links to the next/previous examples.
#
# Copyright 2014-2021, John McNamara, jmcnamara@cpan.org
#
use strict;
use warnings;
my @examples;
my @sections;
my @links;
my $buffer = '';
# Sample through the example sections and break the text into blocks.
while ( my $line = <> ) {
# Ignore comments in the input file.
next if $line =~ /^#/;
# Match the start of an example block.
if ( $line =~ /^\@example/ ) {
chomp $buffer;
# Store the example name and the section body.
push @examples, $line;
push @sections, $buffer;
$buffer = '';
next;
}
$buffer .= $line;
}
# Store the last example section and omit the first blank element.
push @sections, $buffer;
shift @sections;
# Generate a set of @ref links targets from the example program names.
for ( @examples ) {
my $link = $_;
chomp $link;
$link =~ s/\@example //;
push @links, [ $link, $link ];
}
# Add the first and last links back to the examples.
unshift @links, [ "examples", "Examples page" ];
push @links, [ "examples", "Examples page" ];
# Add the start of the Doxygen header.
print "/**\n";
print "\@page examples Example Programs\n\n";
# Print out each section.
for my $i ( 0 .. @examples - 1 ) {
print $examples[$i];
# Add a simple header table with next/previous links.
printf qq{\n<table width="600">\n};
printf qq{<tr>\n};
printf qq{ <td>\@ref %s "&lt;&lt; %s"</td>\n},
$links[$i]->[0], $links[$i]->[1];
printf qq{ <td align="right">\@ref %s "%s &gt;&gt;"</td>\n},
$links[ $i + 2 ]->[0], $links[ $i + 2 ]->[1];
printf qq{</tr>\n};
printf qq{</table>\n};
print $sections[$i], "\n\n\n\n";
}
# Print the end of the doxygen comment.
print "*/\n";

View File

@ -0,0 +1,49 @@
#!/usr/bin/perl
#
# Simple program to generate the string array for the lxw_strerror() function
# from the Doxygen comments in the lxw_error enum:
#
# perl dev/release/gen_error_strings.pl include/xlsxwriter/common.h
#
# Copyright 2014-2021, John McNamara, jmcnamara@cpan.org
#
use warnings;
use strict;
my $in_enum = 0;
my @strings;
my $filename = shift || 'include/xlsxwriter/common.h';
open my $fh, '<', $filename or die "Couldn't open $filename: $!\n";
while (<$fh>) {
$in_enum = 1 if /typedef enum lxw_error/;
$in_enum = 0 if /} lxw_error;/;
# Match doxygen strings in the enum.
if ($in_enum && m{/\*\*}) {
# Strip the comment parts.
s{/\*\*}{};
s{\*/}{};
s{^\s+}{};
s{\s+$}{};
push @strings, $_;
}
}
# Print out an array of strings based on the doxygen comments.
print "\n";
print "// Copy to src/utility.c\n\n";
print "char *error_strings[LXW_MAX_ERRNO + 1] = {\n";
for my $string (@strings) {
print qq{ "$string",\n};
}
print qq{ "Unknown error number."\n};
print "};\n\n";

View File

@ -0,0 +1,36 @@
#!/usr/bin/perl
#
# Simple program to generate the coccoapods unbrella file.
# Run from the libxlsxwriter root dir.
#
# Copyright 2014-2021, John McNamara, jmcnamara@cpan.org
#
use warnings;
use strict;
use File::Find;
my @includes;
# Callback to match header files.
sub match_include {
push @includes, $File::Find::name if /^.*\.h\z/s;
}
# Use File::Find to find header files.
find({wanted => \&match_include}, 'include/xlsxwriter');
# Sort and remove leading dirs from the include files.
@includes = sort @includes;
s{^include/xlsxwriter/}{} for @includes;
# Generate the unbrella file.
print qq{#import <Foundation/Foundation.h>\n\n};
print qq{#import "../xlsxwriter.h"\n};
print qq{#import "$_"\n} for @includes;
print qq{\n};
print qq{FOUNDATION_EXPORT double xlsxwriterVersionNumber;\n};
print qq{FOUNDATION_EXPORT const unsigned char xlsxwriterVersionString[];\n\n};

View File

@ -0,0 +1,50 @@
#!/usr/bin/perl
#
# Simple program to generate a Windows .def file from the exported symbols in
# libxlsxwriter.a.
#
# perl dev/release/gen_windows_def_file.pl lib/libxlsxwriter.a
#
# Copyright 2014-2021, John McNamara, jmcnamara@cpan.org
#
use warnings;
use strict;
my $lib_file = shift;
die "$0: Path to .a lib file required.\n" if !$lib_file;
die "$0: File '$lib_file' not found\n" if !-e $lib_file;
# Get the symbols from the libxlsxwriter.a file.
my @symbols = `nm $lib_file`;
my %unique;
for my $symbol ( @symbols ) {
chomp $symbol;
# Get the last field in the row.
my @fields = split " ", $symbol;
$symbol = $fields[-1];
next unless $symbol;
# Skip symbols not belonging to libxlsxwriter.
next if $symbol !~ /^_(lxw|work|format|chart|new)/;
# Skip some the RedBlack functions.
next if $symbol =~ m{RB};
# Strip the leading underscore.
$symbol =~ s/^_//;
# Remove duplicate instances of some symbols.
$unique{$symbol}++;
}
# Generate the .def file.
print "EXPORTS\r\n";
for my $symbol ( sort keys %unique ) {
print " ", $symbol, "\r\n";
}

View File

@ -0,0 +1,10 @@
prefix=@PREFIX@
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib
Name: libxlsxwriter
Description: A C library for creating Excel XLSX files
Version: @VERSION@
Cflags: -I${includedir}
Libs: -L${libdir} -lxlsxwriter -lz

View File

@ -0,0 +1,332 @@
#!/bin/bash
clear
echo "|"
echo "| Pre-release checks."
echo "|"
echo
#############################################################
#
# Run tests.
#
function check_test_status {
echo
echo -n "Are all tests passing? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo -n " Run all tests now? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo
echo -e "Please run: make test\n";
exit 1
else
echo " Running tests...";
make test
check_test_status
fi
fi
}
#############################################################
#
# Run test for C++ const correctness.
#
function check_test_const {
echo
echo -n "Is the const test passing? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo -n " Run test now? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo
echo -e "Please run: make test_const\n";
exit 1
else
echo " Running test...";
make test_const
check_test_const
fi
fi
}
#############################################################
#
# Run spellcheck.
#
function check_spellcheck {
echo
echo -n "Is the spellcheck ok? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo -n " Run spellcheck now? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo
echo -e "Please run: make spellcheck\n";
exit 1
else
echo " Running spellcheck...";
make spellcheck
check_spellcheck
fi
fi
}
#############################################################
#
# Check Changes file is up to date.
#
function check_changefile {
clear
echo "Latest change in Changes file: "
perl -ne '$rev++ if /^##/; exit if $rev > 1; print " | $_"' Changes.txt
echo
echo -n "Is the Changes file updated? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo
echo -e "Please update the Change file to proceed.\n";
exit 1
fi
}
#############################################################
#
# Check the versions are up to date.
#
function check_versions {
clear
echo
echo "Latest file versions: "
echo
awk '/s.version / {print "\t" FILENAME "\t" $1 "\t" $3}' libxlsxwriter.podspec
awk '/ LXW/ {print "\t" FILENAME "\t" $2 "\t" $3}' include/xlsxwriter.h
echo
echo -n "Are the versions up to date? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo -n " Update versions? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo
echo -e "Please update the versions to proceed.\n";
exit 1
else
echo " Updating versions...";
perl -i dev/release/update_revison.pl include/xlsxwriter.h libxlsxwriter.podspec
check_versions
fi
fi
}
#############################################################
#
# Check that the docs build cleanly.
#
function check_docs {
# clear
echo
echo -n "Do the docs build cleanly? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo -n " Build docs now? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo
echo -e "Please run: make docs\n";
exit 1
else
echo " Building docs...";
make docs
check_docs
fi
fi
}
#############################################################
#
# Generate the cocoapods umbrella file.
#
function gen_umbrella_file {
echo
echo -n "Is the umbrella file up to date? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo -n " Update umbrella file now? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo
echo -e "Please update cocoapods/libxlsxwriter-umbrella.h\n";
exit 1
else
echo " Updating file...";
perl dev/release/gen_umbrella_file.pl > cocoapods/libxlsxwriter-umbrella.h
fi
fi
}
#############################################################
#
# Check the cocoapods spec file.
#
function check_pod_spec {
echo
echo -n "Is the coacoapod file ok? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo -n " Run lint now? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo
echo -e "Please run: pod spec lint libxlsxwriter.podspec\n";
exit 1
else
echo " Running lint...";
pod spec lint libxlsxwriter.podspec --use-libraries
check_pod_spec
fi
fi
}
#############################################################
#
# Update the pod repo. This can take some time.
#
function update_pod_repo {
echo
echo -n "Is the pod repo updated? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo -n " Update now? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo
echo -e "Please run: pod spec lint libxlsxwriter.podspec\n";
exit 1
else
echo " Running update...";
cd ~/.cocoapods/repos/master
git pull --ff-only
cd -
update_pod_repo
fi
fi
}
#############################################################
#
# Run release checks.
#
function check_git_status {
clear
echo "Git status: "
git status | awk '{print " | ", $0}'
echo "Git log: "
git log -1 | awk '{print " | ", $0}'
echo "Git latest tag: "
git tag -l -n1 | tail -1 | awk '{print " | ", $0}'
echo
echo -n "Is the git status okay? [y/N]: "
read RESPONSE
if [ "$RESPONSE" != "y" ]; then
echo
echo -e "Please fix git status.\n";
echo -e "\ngit add -u";
git tag -l -n1 | tail -1 | perl -lane 'printf "git commit -m \"Prep for release %s\"\ngit tag \"%s\"\n\n", $F[4], $F[0]' | perl dev/release/update_revison.pl
exit 1
fi
}
check_test_status
clear
check_test_const
clear
check_spellcheck
clear
check_docs
check_changefile
clear
gen_umbrella_file
check_pod_spec
clear
update_pod_repo
check_versions
check_git_status
#############################################################
#
# All checks complete.
#
clear
echo
echo "Everything is configured.";
echo
echo -n "Confirm release: [y/N]: ";
read RESPONSE
if [ "$RESPONSE" == "y" ]; then
exit 0
else
exit 1
fi

View File

@ -0,0 +1,42 @@
#!/usr/bin/perl
# Simple script to increment x.y.z style version numbers in a file.
use strict;
use warnings;
use Perl::Version;
while (<>) {
# Increment any x.y.z version strings.
if (m/(\d\.\d\.\d)/) {
my $version = Perl::Version->new( $1 );
# Components are: revision, version and subversion.
if ( $version->version == 9 && $version->subversion == 9 ) {
$version->inc_revision();
}
elsif ( $version->subversion == 9 ) {
$version->inc_version();
}
else {
$version->inc_subversion();
}
my $new_version = $version->stringify();
s/\d\.\d\.\d/$new_version/;
}
# Increment the LXW_VERSION_ID number in xlsxwriter.h
if (m/LXW_VERSION_ID (\d+)/) {
my $version = $1;
my $new_version = $version + 1;
s/\d+/$new_version/;
}
print;
}
__END__

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,180 @@
<doxygenlayout version="1.0">
<!-- Generated by doxygen 1.8.7 -->
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="mainpage" visible="yes" title=""/>
<tab type="modules" visible="yes" title="" intro=""/>
<tab type="pages" visible="yes" title="" intro=""/>
<tab type="files" visible="yes" title="">
<tab type="filelist" visible="yes" title="" intro=""/>
</tab>
<tab type="examples" visible="yes" title="" intro="Example programs using libxlsxwriter:"/>
</navindex>
<!-- Layout definition for a class page -->
<class>
<briefdescription visible="yes"/>
<detaileddescription title=""/>
<inheritancegraph visible="$CLASS_GRAPH"/>
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
<memberdecl>
<nestedclasses visible="yes" title=""/>
<publictypes title=""/>
<services title=""/>
<interfaces title=""/>
<publicslots title=""/>
<signals title=""/>
<publicmethods title=""/>
<publicstaticmethods title=""/>
<publicattributes title=""/>
<publicstaticattributes title=""/>
<protectedtypes title=""/>
<protectedslots title=""/>
<protectedmethods title=""/>
<protectedstaticmethods title=""/>
<protectedattributes title=""/>
<protectedstaticattributes title=""/>
<packagetypes title=""/>
<packagemethods title=""/>
<packagestaticmethods title=""/>
<packageattributes title=""/>
<packagestaticattributes title=""/>
<properties title=""/>
<events title=""/>
<privatetypes title=""/>
<privateslots title=""/>
<privatemethods title=""/>
<privatestaticmethods title=""/>
<privateattributes title=""/>
<privatestaticattributes title=""/>
<friends title=""/>
<related title="" subtitle=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<services title=""/>
<interfaces title=""/>
<constructors title=""/>
<functions title=""/>
<related title=""/>
<variables title=""/>
<properties title=""/>
<events title=""/>
</memberdef>
<allmemberslink visible="yes"/>
<usedfiles visible="$SHOW_USED_FILES"/>
<authorsection visible="yes"/>
</class>
<!-- Layout definition for a namespace page -->
<namespace>
<briefdescription visible="yes"/>
<memberdecl>
<nestednamespaces visible="yes" title=""/>
<constantgroups visible="yes" title=""/>
<classes visible="yes" title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection visible="yes"/>
</namespace>
<!-- Layout definition for a file page -->
<file>
<detaileddescription title="Description"/>
<sourcelink visible="yes"/>
<memberdecl>
<functions title=""/>
</memberdecl>
<memberdef>
<functions title=""/>
<inlineclasses title=""/>
<typedefs title=""/>
<defines title=""/>
<enums title=""/>
<variables title=""/>
</memberdef>
<memberdecl>
<classes visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<constantgroups visible="yes" title=""/>
<typedefs title=""/>
<variables title=""/>
<enums title=""/>
<defines title=""/>
<membergroups visible="yes"/>
</memberdecl>
<authorsection/>
</file>
<!-- Layout definition for a group page -->
<group>
<briefdescription visible="yes"/>
<groupgraph visible="$GROUP_GRAPHS"/>
<memberdecl>
<nestedgroups visible="yes" title=""/>
<dirs visible="yes" title=""/>
<files visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<pagedocs/>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
</memberdef>
<authorsection visible="yes"/>
</group>
<!-- Layout definition for a directory page -->
<directory>
<briefdescription visible="yes"/>
<directorygraph visible="yes"/>
<memberdecl>
<dirs visible="yes"/>
<files visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
</directory>
</doxygenlayout>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,18 @@
<!-- HTML footer for doxygen 1.8.20-->
<!-- start footer part -->
<!--BEGIN GENERATE_TREEVIEW-->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
$navpath
<li class="footer">Copyright 2014-2021 John McNamara. $generatedby <a href="http://www.doxygen.org/index.html"><img class="footer" src="$relpath^doxygen.svg" width="104" height="31" alt="doxygen"/></a> $doxygenversion </li>
</ul>
</div>
<!--END GENERATE_TREEVIEW-->
<!--BEGIN !GENERATE_TREEVIEW-->
<hr class="footer"/><address class="footer"><small>
Copyright 2014-2021 John McNamara.
$generatedby&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="$relpath^doxygen.svg" width="104" height="31" alt="doxygen"/></a> $doxygenversion
</small></address>
<!--END !GENERATE_TREEVIEW-->
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Some files were not shown because too many files have changed in this diff Show More