fast_excel 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -2
  3. data/Makefile +14 -0
  4. data/README.md +7 -2
  5. data/Rakefile +10 -0
  6. data/extconf.rb +0 -0
  7. data/fast_excel.gemspec +3 -1
  8. data/lib/fast_excel/binding.rb +3 -7
  9. data/lib/rubygems_plugin.rb +3 -0
  10. data/libxlsxwriter/.gitignore +49 -0
  11. data/libxlsxwriter/.indent.pro +125 -0
  12. data/libxlsxwriter/.travis.yml +25 -0
  13. data/libxlsxwriter/CONTRIBUTING.md +226 -0
  14. data/libxlsxwriter/Changes.txt +557 -0
  15. data/libxlsxwriter/LICENSE.txt +89 -0
  16. data/libxlsxwriter/Makefile +156 -0
  17. data/libxlsxwriter/Readme.md +78 -0
  18. data/libxlsxwriter/cocoapods/libxlsxwriter-umbrella.h +30 -0
  19. data/libxlsxwriter/cocoapods/libxlsxwriter.modulemap +7 -0
  20. data/libxlsxwriter/include/xlsxwriter/app.h +79 -0
  21. data/libxlsxwriter/include/xlsxwriter/chart.h +3476 -0
  22. data/libxlsxwriter/include/xlsxwriter/common.h +372 -0
  23. data/libxlsxwriter/include/xlsxwriter/content_types.h +74 -0
  24. data/libxlsxwriter/include/xlsxwriter/core.h +51 -0
  25. data/libxlsxwriter/include/xlsxwriter/custom.h +52 -0
  26. data/libxlsxwriter/include/xlsxwriter/drawing.h +111 -0
  27. data/libxlsxwriter/include/xlsxwriter/format.h +1214 -0
  28. data/libxlsxwriter/include/xlsxwriter/hash_table.h +76 -0
  29. data/libxlsxwriter/include/xlsxwriter/packager.h +80 -0
  30. data/libxlsxwriter/include/xlsxwriter/relationships.h +77 -0
  31. data/libxlsxwriter/include/xlsxwriter/shared_strings.h +83 -0
  32. data/libxlsxwriter/include/xlsxwriter/styles.h +77 -0
  33. data/libxlsxwriter/include/xlsxwriter/theme.h +47 -0
  34. data/libxlsxwriter/include/xlsxwriter/third_party/ioapi.h +214 -0
  35. data/libxlsxwriter/include/xlsxwriter/third_party/queue.h +694 -0
  36. data/libxlsxwriter/include/xlsxwriter/third_party/tmpfileplus.h +53 -0
  37. data/libxlsxwriter/include/xlsxwriter/third_party/tree.h +801 -0
  38. data/libxlsxwriter/include/xlsxwriter/third_party/zip.h +375 -0
  39. data/libxlsxwriter/include/xlsxwriter/utility.h +166 -0
  40. data/libxlsxwriter/include/xlsxwriter/workbook.h +757 -0
  41. data/libxlsxwriter/include/xlsxwriter/worksheet.h +2641 -0
  42. data/libxlsxwriter/include/xlsxwriter/xmlwriter.h +178 -0
  43. data/libxlsxwriter/include/xlsxwriter.h +23 -0
  44. data/libxlsxwriter/lib/.gitignore +0 -0
  45. data/libxlsxwriter/libxlsxwriter.podspec +47 -0
  46. data/libxlsxwriter/src/Makefile +130 -0
  47. data/libxlsxwriter/src/app.c +443 -0
  48. data/libxlsxwriter/src/chart.c +6346 -0
  49. data/libxlsxwriter/src/content_types.c +345 -0
  50. data/libxlsxwriter/src/core.c +293 -0
  51. data/libxlsxwriter/src/custom.c +224 -0
  52. data/libxlsxwriter/src/drawing.c +746 -0
  53. data/libxlsxwriter/src/format.c +729 -0
  54. data/libxlsxwriter/src/hash_table.c +223 -0
  55. data/libxlsxwriter/src/packager.c +948 -0
  56. data/libxlsxwriter/src/relationships.c +245 -0
  57. data/libxlsxwriter/src/shared_strings.c +266 -0
  58. data/libxlsxwriter/src/styles.c +1088 -0
  59. data/libxlsxwriter/src/theme.c +348 -0
  60. data/libxlsxwriter/src/utility.c +515 -0
  61. data/libxlsxwriter/src/workbook.c +1930 -0
  62. data/libxlsxwriter/src/worksheet.c +5022 -0
  63. data/libxlsxwriter/src/xmlwriter.c +355 -0
  64. data/libxlsxwriter/third_party/minizip/Makefile +44 -0
  65. data/libxlsxwriter/third_party/minizip/Makefile.am +45 -0
  66. data/libxlsxwriter/third_party/minizip/Makefile.orig +25 -0
  67. data/libxlsxwriter/third_party/minizip/MiniZip64_Changes.txt +6 -0
  68. data/libxlsxwriter/third_party/minizip/MiniZip64_info.txt +74 -0
  69. data/libxlsxwriter/third_party/minizip/README.txt +5 -0
  70. data/libxlsxwriter/third_party/minizip/configure.ac +32 -0
  71. data/libxlsxwriter/third_party/minizip/crypt.h +131 -0
  72. data/libxlsxwriter/third_party/minizip/ioapi.c +247 -0
  73. data/libxlsxwriter/third_party/minizip/ioapi.h +208 -0
  74. data/libxlsxwriter/third_party/minizip/iowin32.c +456 -0
  75. data/libxlsxwriter/third_party/minizip/iowin32.h +28 -0
  76. data/libxlsxwriter/third_party/minizip/make_vms.com +25 -0
  77. data/libxlsxwriter/third_party/minizip/miniunz.c +660 -0
  78. data/libxlsxwriter/third_party/minizip/miniunzip.1 +63 -0
  79. data/libxlsxwriter/third_party/minizip/minizip.1 +46 -0
  80. data/libxlsxwriter/third_party/minizip/minizip.c +520 -0
  81. data/libxlsxwriter/third_party/minizip/minizip.pc.in +12 -0
  82. data/libxlsxwriter/third_party/minizip/mztools.c +291 -0
  83. data/libxlsxwriter/third_party/minizip/mztools.h +37 -0
  84. data/libxlsxwriter/third_party/minizip/unzip.c +2125 -0
  85. data/libxlsxwriter/third_party/minizip/unzip.h +437 -0
  86. data/libxlsxwriter/third_party/minizip/zip.c +2007 -0
  87. data/libxlsxwriter/third_party/minizip/zip.h +367 -0
  88. data/libxlsxwriter/third_party/tmpfileplus/Makefile +42 -0
  89. data/libxlsxwriter/third_party/tmpfileplus/tmpfileplus.c +342 -0
  90. data/libxlsxwriter/third_party/tmpfileplus/tmpfileplus.h +53 -0
  91. data/libxlsxwriter/version.txt +1 -0
  92. metadata +89 -6
  93. data/binaries/libxlsxwriter-alpine.so +0 -0
  94. data/binaries/libxlsxwriter-darwin.dylib +0 -0
  95. data/binaries/libxlsxwriter-glibc.so +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5b3fea677b83c37195affe038f16bcc03cad62a0
4
- data.tar.gz: 91383abc260bb5df19bf9153efcd53f4d1e3fd43
3
+ metadata.gz: 5fea186d154ccc93b112e497f6d2eb19f6f1471c
4
+ data.tar.gz: f2a918430b64e7fe453e48b11e18fcf72cf105a7
5
5
  SHA512:
6
- metadata.gz: 83b36430c0c230863a9659790932a39c4e670d7e0b8c687a8f26ce82998d4f362a201d07ef9bbcbedae9725e66156a5d1ea37db3b9c390b51bdd69e35f295668
7
- data.tar.gz: 0ffe702bfd23a34bcd75e3b33d63629928acf8ca2da407a06262d16c40ca4a0ca75846483ca0cf8dff5438832ba18380a0dbef859338def57e1d836445e1ef4b
6
+ metadata.gz: 5d3d835819ec9dcff29dfec369535e16af37cf5b2627c16508b4ca6242c629a7ee407682e729a00f541a775af4b85fea4344c82ca2a5d8ba41ac3be3f5d180a9
7
+ data.tar.gz: 3c83478ba13197ee50be02c29c5af4c694a1c72da2ee0120d1f9e8cb667ff095850bca22200ca42746cd5fe7c00a4050102dd2f2cb38ebfe28be4808958f0e11
data/.gitignore CHANGED
@@ -1,4 +1,3 @@
1
- libxlsxwriter
2
1
  .ruby-version
3
2
  try.c
4
3
  try.rb
@@ -7,4 +6,8 @@ gen_ffi.rb
7
6
  *.xlsx
8
7
  a.out
9
8
  .DS_Store
10
- *.gem
9
+ *.gem
10
+ libxlsxwriter/dev
11
+ libxlsxwriter/docs
12
+ libxlsxwriter/examples
13
+ libxlsxwriter/test
data/Makefile ADDED
@@ -0,0 +1,14 @@
1
+ Q=@
2
+ ifdef V
3
+ Q=
4
+ endif
5
+
6
+ all :
7
+ @echo "Compiling libxlsxwriter ..."
8
+ $(Q)$(MAKE) -C libxlsxwriter
9
+
10
+ clean :
11
+ #$(Q)$(MAKE) clean -C libxlsxwriter
12
+
13
+ install :
14
+ @echo "Nothing to install"
data/README.md CHANGED
@@ -2,7 +2,12 @@
2
2
 
3
3
  ```ruby
4
4
  workbook = FastExcel.open("hello_world_ffi.xlsx", constant_memory: true)
5
- worksheet = workbook.add_worksheet("Garuda Payments")
5
+ workbook.default_format.set(
6
+ font_size: 0, # user's default
7
+ font_family: "Arial"
8
+ )
9
+
10
+ worksheet = workbook.add_worksheet("Example Report")
6
11
 
7
12
  bold = workbook.bold_cell_format
8
13
  worksheet.set_column(0, 0, FastExcel::DEF_COL_WIDTH, bold)
@@ -34,5 +39,5 @@ end
34
39
  workbook.close
35
40
  ```
36
41
 
37
- This repositiry and gem contain precompiled [libxlsxwriter](https://github.com/jmcnamara/libxlsxwriter) for MacOs, Linux with glibc and Alpine Linux
42
+ This repositiry and gem contain sources of [libxlsxwriter](https://github.com/jmcnamara/libxlsxwriter)
38
43
 
data/Rakefile CHANGED
@@ -24,4 +24,14 @@ namespace :build do
24
24
  system("docker cp #{last_container_id}:/srv/libxlsxwriter/lib/libxlsxwriter.so ./binaries/libxlsxwriter-alpine.so")
25
25
  system("docker rm #{last_container_id}")
26
26
  end
27
+ end
28
+
29
+ task :sync do
30
+ require 'fileutils'
31
+ FileUtils.rm_rf("./libxlsxwriter")
32
+ system("git clone --depth 10 git@github.com:Paxa/libxlsxwriter.git")
33
+ Dir.chdir("./libxlsxwriter") do
34
+ system("git show --pretty='format:%cd %h' --date=iso --quiet > version.txt")
35
+ FileUtils.rm_rf("./.git")
36
+ end
27
37
  end
data/extconf.rb ADDED
File without changes
data/fast_excel.gemspec CHANGED
@@ -1,18 +1,20 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "fast_excel"
3
- s.version = "0.1.4"
3
+ s.version = "0.1.5"
4
4
  s.author = ["Pavel Evstigneev"]
5
5
  s.email = ["pavel.evst@gmail.com"]
6
6
  s.homepage = "https://github.com/paxa/fast_excel"
7
7
  s.summary = %q{Ultra Fast Excel Writter}
8
8
  s.description = "Wrapper for libxlsxwriter using ffi"
9
9
  s.license = 'MIT'
10
+ s.has_rdoc = false
10
11
  s.required_ruby_version = '~> 2.0'
11
12
 
12
13
  s.files = `git ls-files`.split("\n")
13
14
  s.test_files = []
14
15
 
15
16
  s.require_paths = ["lib"]
17
+ s.extensions = ["extconf.rb"]
16
18
 
17
19
  s.add_runtime_dependency "ffi", ["> 1.9", "< 2"]
18
20
  end
@@ -6,16 +6,12 @@ module Libxlsxwriter
6
6
  extend FFI::Library
7
7
 
8
8
  LIB_FILENAME = if RUBY_PLATFORM =~ /darwin/
9
- "libxlsxwriter-darwin.dylib"
9
+ "libxlsxwriter.dylib"
10
10
  else
11
- if File.exist?('/etc/alpine-release')
12
- "libxlsxwriter-alpine.so"
13
- else
14
- "libxlsxwriter-glibc.so"
15
- end
11
+ "libxlsxwriter.so"
16
12
  end
17
13
 
18
- ffi_lib File.expand_path("./../../../binaries/#{LIB_FILENAME}", __FILE__)
14
+ ffi_lib File.expand_path("./../../../libxlsxwriter/lib/#{LIB_FILENAME}", __FILE__)
19
15
 
20
16
  def self.attach_function(name, *_)
21
17
  begin; super; rescue FFI::NotFoundError => e
@@ -0,0 +1,3 @@
1
+ Gem.post_install do |installer|
2
+ puts "Post install message"
3
+ end
@@ -0,0 +1,49 @@
1
+ *.a
2
+ *.o
3
+ *.so
4
+ *.to
5
+ *.lo
6
+ *.la
7
+ *.dylib
8
+ *.dll
9
+ test_*
10
+ !test_*.c
11
+ !test_*.cpp
12
+ !test_*.py
13
+ *.tar.gz
14
+ *~
15
+ TAGS
16
+ .#*
17
+ *#
18
+ ~*xlsx
19
+ *.xlsx
20
+ *.bak
21
+ !test/functional/xlsx_files/*.xlsx
22
+ *.pyc
23
+ .cproject
24
+ .project
25
+ .pydevproject
26
+ .settings/
27
+ .DS_Store
28
+ __pycache__
29
+ .cache
30
+ docs/html
31
+ docs/latex
32
+ .deps
33
+ .dirstamp
34
+ _temp.c
35
+ examples/*
36
+ !examples/*.c
37
+ !examples/logo.png
38
+ !examples/Makefile
39
+ cov-int
40
+ libxlsxwriter-coverity.tgz
41
+
42
+ third_party/zlib-1.2.8/configure.log
43
+ third_party/zlib-1.2.8/contrib/minizip/miniunz
44
+ third_party/zlib-1.2.8/contrib/minizip/minizip
45
+ third_party/zlib-1.2.8/example
46
+ third_party/zlib-1.2.8/examplesh
47
+ third_party/zlib-1.2.8/minigzip
48
+ third_party/zlib-1.2.8/minigzipsh
49
+ third_party/zlib-1.2.8/zlib.pc
@@ -0,0 +1,125 @@
1
+ /*
2
+ * Indent rules for libxlsxwriter.
3
+ *
4
+ * The rules for user defined typedefs can be update as follows:
5
+ *
6
+ perl -i -pe 'print and last if /[l]ibxlsxwriter typedefs/' .indent.pro
7
+ ack -h typedef include/xlsxwriter/*.h src/*.c | perl -lne 'print "-T $1" if /\w+\s+\w+\s+(\w+)/' | sort >> .indent.pro
8
+ *
9
+ */
10
+
11
+ /* Command line options used with GNU indent 2.2.10 */
12
+ --braces-on-if-line
13
+ --braces-on-struct-decl-line
14
+ --case-indentation 4
15
+ --continue-at-parentheses
16
+ --declaration-comment-column 0
17
+ --format-first-column-comments
18
+ --honour-newlines
19
+ --ignore-profile
20
+ --indent-label 0
21
+ --indent-level 4
22
+ --no-space-after-function-call-names
23
+ --no-tabs
24
+ --swallow-optional-blank-lines
25
+
26
+ /* Typedefs used in the code. */
27
+ -T int8_t
28
+ -T int16_t
29
+ -T int32_t
30
+ -T int64_t
31
+ -T uint8_t
32
+ -T uint16_t
33
+ -T uint32_t
34
+ -T uint64_t
35
+ -T ssize_t
36
+ -T size_t
37
+ -T time_t
38
+
39
+ -T LIST_ENTRY
40
+ -T RB_ENTRY
41
+ -T SLIST_ENTRY
42
+ -T STAILQ_ENTRY
43
+ -T TAILQ_ENTRY
44
+
45
+ /* libxlsxwriter typedefs. */
46
+ -T lxw_app
47
+ -T lxw_autofilter
48
+ -T lxw_border
49
+ -T lxw_cell
50
+ -T lxw_chart
51
+ -T lxw_chart_axis
52
+ -T lxw_chart_axis_display_unit
53
+ -T lxw_chart_axis_label_position
54
+ -T lxw_chart_axis_tick_mark
55
+ -T lxw_chart_axis_tick_position
56
+ -T lxw_chart_blank
57
+ -T lxw_chart_error_bar_cap
58
+ -T lxw_chart_error_bar_direction
59
+ -T lxw_chart_error_bar_type
60
+ -T lxw_chart_fill
61
+ -T lxw_chart_font
62
+ -T lxw_chart_gridline
63
+ -T lxw_chart_label_position
64
+ -T lxw_chart_label_separator
65
+ -T lxw_chart_legend
66
+ -T lxw_chart_legend_position
67
+ -T lxw_chart_line
68
+ -T lxw_chart_line_dash_type
69
+ -T lxw_chart_marker
70
+ -T lxw_chart_marker_type
71
+ -T lxw_chart_pattern
72
+ -T lxw_chart_pattern_type
73
+ -T lxw_chart_point
74
+ -T lxw_chart_series
75
+ -T lxw_chart_title
76
+ -T lxw_chart_trendline_type
77
+ -T lxw_chart_type
78
+ -T lxw_col_options
79
+ -T lxw_col_t
80
+ -T lxw_color_t
81
+ -T lxw_content_types
82
+ -T lxw_core
83
+ -T lxw_custom
84
+ -T lxw_custom_property
85
+ -T lxw_datetime
86
+ -T lxw_defined_name
87
+ -T lxw_doc_properties
88
+ -T lxw_drawing
89
+ -T lxw_drawing_coords
90
+ -T lxw_drawing_object
91
+ -T lxw_error
92
+ -T lxw_fill
93
+ -T lxw_font
94
+ -T lxw_format
95
+ -T lxw_hash_element
96
+ -T lxw_hash_table
97
+ -T lxw_header_footer_options
98
+ -T lxw_heading_pair
99
+ -T lxw_image_options
100
+ -T lxw_merged_range
101
+ -T lxw_packager
102
+ -T lxw_panes
103
+ -T lxw_part_name
104
+ -T lxw_print_area
105
+ -T lxw_protection
106
+ -T lxw_rel_tuple
107
+ -T lxw_relationships
108
+ -T lxw_repeat_cols
109
+ -T lxw_repeat_rows
110
+ -T lxw_row
111
+ -T lxw_row_col_options
112
+ -T lxw_row_t
113
+ -T lxw_selection
114
+ -T lxw_series_data_point
115
+ -T lxw_series_error_bars
116
+ -T lxw_series_range
117
+ -T lxw_sst
118
+ -T lxw_styles
119
+ -T lxw_theme
120
+ -T lxw_tuple
121
+ -T lxw_workbook
122
+ -T lxw_workbook_options
123
+ -T lxw_worksheet
124
+ -T lxw_worksheet_init_data
125
+ -T lxw_worksheet_name
@@ -0,0 +1,25 @@
1
+ language: c
2
+
3
+ compiler:
4
+ - clang
5
+ - gcc
6
+
7
+ env:
8
+ - CFLAGS='-Werror'
9
+ - NO_VALGRIND=1 USE_STANDARD_TMPFILE=1 CFLAGS='-Werror'
10
+ - NO_VALGRIND=1 CFLAGS='-Werror -m32'
11
+
12
+ install:
13
+ - sudo pip install pytest
14
+ - sudo apt-get update
15
+ - sudo apt-get install -y gcc-multilib
16
+ - sudo apt-get install -y zlib1g-dev
17
+ - sudo apt-get install -y zlib1g-dev:i386
18
+ - sudo apt-get install -y gcc
19
+ - sudo apt-get install -y valgrind
20
+
21
+ script:
22
+ - make V=1
23
+ - make test_functional V=1
24
+ - make test_unit V=1
25
+ - make test_valgrind V=1
@@ -0,0 +1,226 @@
1
+ # libxlsxwriter: Reporting Bugs and submitting Pull Requests
2
+
3
+
4
+ ## Reporting Bugs
5
+
6
+ Here are some tips on reporting bugs in `libxlsxwriter`.
7
+
8
+ ### Upgrade to the latest version of the library
9
+
10
+ Upgrade to the latest version of the library since the bug you are reporting
11
+ may already be fixed.
12
+
13
+ Check the [Changes][changes] section of the documentation to see what has
14
+ changed in the latest versions.
15
+
16
+ [changes]: http://libxlsxwriter.github.io/changes.html
17
+
18
+ You can check which version of `libxlsxwriter` that you are using by checking
19
+ the `xlsxwriter.h` header file or by adding the following to your program:
20
+
21
+ ```C
22
+ #include <stdio.h>
23
+ #include "xlsxwriter.h"
24
+
25
+ int main() {
26
+
27
+ printf("Libxlsxwriter version = %s\n", LXW_VERSION);
28
+
29
+ return 0;
30
+ }
31
+ ```
32
+
33
+
34
+ ### Read the documentation
35
+
36
+ Read or search the `libxlsxwriter` [documentation][docs] to see if the issue
37
+ you are encountering is already explained.
38
+
39
+ [docs]: http://libxlsxwriter.github.io/index.html
40
+
41
+ ### Look at the example programs
42
+
43
+ There are many [examples programs][examples] in the distribution. Try to
44
+ identify an example program that corresponds to your query and adapt it to use
45
+ as a bug report.
46
+
47
+ [examples]: http://libxlsxwriter.github.io/examples.html
48
+
49
+
50
+ ### Use the xlsxwriter Issue Tracker
51
+
52
+ The [libxlsxwriter issue tracker][issues] is on GitHub.
53
+
54
+ [issues]: https://github.com/jmcnamara/libxlsxwriter/issues
55
+
56
+
57
+ ### Tips for submitting a bug report
58
+
59
+ 1. Describe the problem as clearly and as concisely as possible.
60
+ 2. Include a sample program. This is probably the most important step.
61
+ It is generally easier to describe a problem in code than in written
62
+ prose.
63
+ 3. The sample program should be as small as possible to demonstrate the
64
+ problem. Don't copy and paste large non-relevant sections of your
65
+ program.
66
+
67
+ A sample bug report is shown below. This format helps analyze and respond to
68
+ the bug report more quickly.
69
+
70
+
71
+ > Subject: Issue with SOMETHING
72
+ >
73
+ > Greetings,
74
+ >
75
+ > I am using libxlsxwriter to do SOMETHING but it appears to do SOMETHING ELSE.
76
+ >
77
+ > I am using CC version X.Y.Z, OS = uname and libxlsxwriter x.y.z.
78
+ >
79
+ > Here is some code that demonstrates the problem:
80
+ >
81
+ >
82
+ >```C
83
+ >#include "xlsxwriter.h"
84
+ >
85
+ >int main() {
86
+ >
87
+ > lxw_workbook *workbook = workbook_new("bug_report.xlsx");
88
+ > lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
89
+ >
90
+ > worksheet_write_string(worksheet, 0, 0, "Hello", NULL);
91
+ > worksheet_write_number(worksheet, 1, 0, 123, NULL);
92
+ >
93
+ > return workbook_close(workbook);
94
+ >}
95
+ >```
96
+ >
97
+
98
+
99
+ # Pull Requests and Contributing to Libxlsxwriter
100
+
101
+ All patches and pull requests are welcome but in general you should start with
102
+ an issue tracker to describe what you intend to do before you do it.
103
+
104
+
105
+ ### Getting Started
106
+
107
+ 1. Pull requests and new feature proposals must start with an [issue
108
+ tracker][issues]. This serves as the focal point for the design discussion.
109
+ 2. Describe what you plan to do. If there are API changes add some code
110
+ example to demonstrate them.
111
+ 3. Fork the repository.
112
+ 4. Run all the tests to make sure the current code works on your system using
113
+ `make test`. See the [Running the Test Suite][tests] section of the docs
114
+ for instructions.
115
+ 5. Create a feature branch for your new feature.
116
+
117
+
118
+ [tests]: http://libxlsxwriter.github.io/running_the_tests.html
119
+
120
+ ### Code Style
121
+
122
+ The code style is mainly K&R style with 4 space indents.
123
+
124
+ The author uses GNU indent (`gindent`) 2.2.10 with the following options:
125
+
126
+ ```
127
+ --braces-on-if-line
128
+ --braces-on-struct-decl-line
129
+ --case-indentation 4
130
+ --continue-at-parentheses
131
+ --declaration-comment-column 0
132
+ --format-first-column-comments
133
+ --honour-newlines
134
+ --ignore-profile
135
+ --indent-label 0
136
+ --indent-level 4
137
+ --no-space-after-function-call-names
138
+ --no-tabs
139
+ --swallow-optional-blank-lines
140
+ ```
141
+
142
+ The [indent configuration file][indentpro] is available in the repo. The code
143
+ can be indented automatically if the same version of `gindent` is used with
144
+ the following make command:
145
+
146
+ ```shell
147
+ make indent
148
+ ```
149
+
150
+ Note, make sure you have backed up your files or added them to the index
151
+ before running this command.
152
+
153
+ In general follow the existing style in the code.
154
+
155
+ [indentpro]: https://github.com/jmcnamara/libxlsxwriter/blob/master/.indent.pro
156
+
157
+ ### Writing and Running Tests
158
+
159
+ Any significant features should be accompanied by a test. See the `test`
160
+ directory and the [Running the Test Suite][tests] section of the docs for
161
+ details of the test setup.
162
+
163
+ The tests can be run as follows:
164
+
165
+ ```shell
166
+ make test
167
+ ```
168
+ Same as:
169
+
170
+ ```shell
171
+ make test_unit
172
+ make test_functional
173
+ ```
174
+
175
+ The functional tests require the Python module [pytest][pytest] as a test runner.
176
+
177
+ If you have `valgrind` installed you can use the test suite to check for memory leaks:
178
+
179
+ ```shell
180
+ make test_valgrind
181
+ ```
182
+
183
+ When you push your changes they will also be tested automatically using
184
+ [Travis CI][travis].
185
+
186
+ [Travis]: https://travis-ci.org/jmcnamara/libxlsxwriter/
187
+ [pytest]: http://pytest.org/
188
+
189
+
190
+ ### Documentation
191
+
192
+ The `libxlsxwriter` documentation is written in Doxygen format in the header
193
+ files and in additional `.dox` files in the `docs/src` directory of the
194
+ repo. The documentation can be built as follows:
195
+
196
+ ```shell
197
+ make docs
198
+ open docs/html/index.html
199
+ ```
200
+
201
+
202
+ ### Example programs
203
+
204
+ If applicable add an example program to the `examples` directory. Example
205
+ files can be built using:
206
+
207
+ ```shell
208
+ make docs
209
+ ```
210
+
211
+ ### Copyright and License
212
+
213
+ Copyright remains with the original author. Do not include additional
214
+ copyright claims or Licensing requirements. GitHub and the `git` repository
215
+ will record your contribution and it will be acknowledged it in the Changes
216
+ file.
217
+
218
+
219
+ ### Submitting the Pull Request
220
+
221
+ If your change involves several incremental `git` commits then `rebase` or
222
+ `squash` them onto another branch so that the Pull Request is a single commit
223
+ or a small number of logical commits.
224
+
225
+ Push your changes to GitHub and submit the Pull Request with a hash link to
226
+ the to the Issue tracker that was opened above.