From 472dd85026ddb2b83c1303c05500616743afb7c7 Mon Sep 17 00:00:00 2001 From: Thomas Fussell Date: Thu, 19 Jan 2017 08:37:40 -0500 Subject: [PATCH] use slate instead of sphinx for documentation --- docs/CHANGELOG.md | 88 + docs/Gemfile | 9 + docs/Gemfile.lock | 122 ++ docs/LICENSE | 13 + docs/Makefile | 192 --- docs/README.md | 110 ++ docs/Vagrantfile | 39 + docs/api/xlnt.cell.rst | 30 - docs/api/xlnt.packaging.rst | 11 - docs/api/xlnt.rst | 11 - docs/api/xlnt.styles.rst | 37 - docs/api/xlnt.utils.rst | 68 - docs/api/xlnt.workbook.rst | 23 - docs/api/xlnt.worksheet.rst | 72 - docs/changes.rst | 4 - docs/charts/introduction.rst | 4 - docs/comments.rst | 36 - docs/conf.py | 300 ---- docs/config.rb | 46 + docs/cookbook.rst | 204 --- docs/deploy.sh | 203 +++ docs/development.rst | 50 - docs/font-selection.json | 148 ++ docs/formatting.rst | 4 - docs/formula.rst | 106 -- docs/generate-md.js | 100 ++ docs/index.rst | 232 --- docs/make.bat | 263 --- docs/requirements.txt | 1 - docs/source/fonts/slate.eot | Bin 0 -> 1876 bytes docs/source/fonts/slate.svg | 14 + docs/source/fonts/slate.ttf | Bin 0 -> 1720 bytes docs/source/fonts/slate.woff | Bin 0 -> 1796 bytes docs/source/fonts/slate.woff2 | Bin 0 -> 796 bytes docs/source/images/github.png | Bin 0 -> 4044 bytes docs/source/images/logo.png | Bin 0 -> 7042 bytes docs/source/images/navbar.png | Bin 0 -> 96 bytes docs/source/includes/_api_reference copy.md | 238 +++ docs/source/includes/_api_reference.md | 1626 +++++++++++++++++++ docs/source/includes/_contributing.md | 31 + docs/source/includes/_formatting.md | 37 + docs/source/includes/_getting_started.md | 20 + docs/source/includes/_introduction.md | 79 + docs/source/includes/_license.md | 361 ++++ docs/source/includes/_memory_model.md | 31 + docs/source/index.html.md | 16 + docs/source/javascripts/all.js | 4 + docs/source/javascripts/all_nosearch.js | 3 + docs/source/javascripts/app/_lang.js | 166 ++ docs/source/javascripts/app/_search.js | 75 + docs/source/javascripts/app/_toc.js | 57 + docs/source/layouts/layout.erb | 96 ++ docs/source/stylesheets/_icon-font.scss | 38 + docs/source/stylesheets/_normalize.scss | 427 +++++ docs/source/stylesheets/_variables.scss | 105 ++ docs/source/stylesheets/print.css.scss | 147 ++ docs/source/stylesheets/screen.css.scss | 634 ++++++++ docs/styles.rst | 17 - docs/tutorial.rst | 5 - docs/validation.rst | 2 - docs/windows-development.rst | 2 - 61 files changed, 5083 insertions(+), 1674 deletions(-) create mode 100644 docs/CHANGELOG.md create mode 100644 docs/Gemfile create mode 100644 docs/Gemfile.lock create mode 100644 docs/LICENSE delete mode 100644 docs/Makefile create mode 100644 docs/README.md create mode 100644 docs/Vagrantfile delete mode 100644 docs/api/xlnt.cell.rst delete mode 100644 docs/api/xlnt.packaging.rst delete mode 100644 docs/api/xlnt.rst delete mode 100644 docs/api/xlnt.styles.rst delete mode 100644 docs/api/xlnt.utils.rst delete mode 100644 docs/api/xlnt.workbook.rst delete mode 100644 docs/api/xlnt.worksheet.rst delete mode 100644 docs/changes.rst delete mode 100644 docs/charts/introduction.rst delete mode 100644 docs/comments.rst delete mode 100644 docs/conf.py create mode 100644 docs/config.rb delete mode 100644 docs/cookbook.rst create mode 100755 docs/deploy.sh delete mode 100644 docs/development.rst create mode 100755 docs/font-selection.json delete mode 100644 docs/formatting.rst delete mode 100644 docs/formula.rst create mode 100644 docs/generate-md.js delete mode 100644 docs/index.rst delete mode 100644 docs/make.bat delete mode 100644 docs/requirements.txt create mode 100755 docs/source/fonts/slate.eot create mode 100755 docs/source/fonts/slate.svg create mode 100755 docs/source/fonts/slate.ttf create mode 100755 docs/source/fonts/slate.woff create mode 100755 docs/source/fonts/slate.woff2 create mode 100644 docs/source/images/github.png create mode 100644 docs/source/images/logo.png create mode 100644 docs/source/images/navbar.png create mode 100644 docs/source/includes/_api_reference copy.md create mode 100644 docs/source/includes/_api_reference.md create mode 100644 docs/source/includes/_contributing.md create mode 100644 docs/source/includes/_formatting.md create mode 100644 docs/source/includes/_getting_started.md create mode 100644 docs/source/includes/_introduction.md create mode 100644 docs/source/includes/_license.md create mode 100644 docs/source/includes/_memory_model.md create mode 100644 docs/source/index.html.md create mode 100644 docs/source/javascripts/all.js create mode 100644 docs/source/javascripts/all_nosearch.js create mode 100644 docs/source/javascripts/app/_lang.js create mode 100644 docs/source/javascripts/app/_search.js create mode 100644 docs/source/javascripts/app/_toc.js create mode 100644 docs/source/layouts/layout.erb create mode 100644 docs/source/stylesheets/_icon-font.scss create mode 100644 docs/source/stylesheets/_normalize.scss create mode 100644 docs/source/stylesheets/_variables.scss create mode 100644 docs/source/stylesheets/print.css.scss create mode 100644 docs/source/stylesheets/screen.css.scss delete mode 100644 docs/styles.rst delete mode 100644 docs/tutorial.rst delete mode 100644 docs/validation.rst delete mode 100644 docs/windows-development.rst diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md new file mode 100644 index 00000000..8b0454f7 --- /dev/null +++ b/docs/CHANGELOG.md @@ -0,0 +1,88 @@ +# Changelog + +## Version 1.4.0 + +*November 24, 2016* + +- Upgrade Middleman and Rouge gems, should hopefully solve a number of bugs +- Update some links in README +- Fix broken Vagrant startup script +- Fix some problems with deploy.sh help message +- Fix bug with language tabs not hiding properly if no error +- Add `!default` to SASS variables +- Fix bug with logo margin +- Bump tested Ruby versions in .travis.yml + +## Version 1.3.3 + +*June 11, 2016* + +Documentation and example changes. + +## Version 1.3.2 + +*February 3, 2016* + +A small bugfix for slightly incorrect background colors on code samples in some cases. + +## Version 1.3.1 + +*January 31, 2016* + +A small bugfix for incorrect whitespace in code blocks. + +## Version 1.3 + +*January 27, 2016* + +We've upgraded Middleman and a number of other dependencies, which should fix quite a few bugs. + +Instead of `rake build` and `rake deploy`, you should now run `bundle exec middleman build --clean` to build your server, and `./deploy.sh` to deploy it to Github Pages. + +## Version 1.2 + +*June 20, 2015* + +**Fixes:** + +- Remove crash on invalid languages +- Update Tocify to scroll to the highlighted header in the Table of Contents +- Fix variable leak and update search algorithms +- Update Python examples to be valid Python +- Update gems +- More misc. bugfixes of Javascript errors +- Add Dockerfile +- Remove unused gems +- Optimize images, fonts, and generated asset files +- Add chinese font support +- Remove RedCarpet header ID patch +- Update language tabs to not disturb existing query strings + +## Version 1.1 + +*July 27, 2014* + +**Fixes:** + +- Finally, a fix for the redcarpet upgrade bug + +## Version 1.0 + +*July 2, 2014* + +[View Issues](https://github.com/tripit/slate/issues?milestone=1&state=closed) + +**Features:** + +- Responsive designs for phones and tablets +- Started tagging versions + +**Fixes:** + +- Fixed 'unrecognized expression' error +- Fixed #undefined hash bug +- Fixed bug where the current language tab would be unselected +- Fixed bug where tocify wouldn't highlight the current section while searching +- Fixed bug where ids of header tags would have special characters that caused problems +- Updated layout so that pages with disabled search wouldn't load search.js +- Cleaned up Javascript diff --git a/docs/Gemfile b/docs/Gemfile new file mode 100644 index 00000000..27539b05 --- /dev/null +++ b/docs/Gemfile @@ -0,0 +1,9 @@ +source 'https://rubygems.org' + +# Middleman +gem 'middleman', '~>4.1.0' +gem 'middleman-syntax', '~> 3.0.0' +gem 'middleman-autoprefixer', '~> 2.7.0' +gem "middleman-sprockets", "~> 4.0.0" +gem 'rouge', '~> 2.0.5' +gem 'redcarpet', '~> 3.3.2' diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock new file mode 100644 index 00000000..092117d8 --- /dev/null +++ b/docs/Gemfile.lock @@ -0,0 +1,122 @@ +GEM + remote: https://rubygems.org/ + specs: + activesupport (4.2.7.1) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + addressable (2.4.0) + autoprefixer-rails (6.4.1) + execjs + backports (3.6.8) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.10.0) + compass-import-once (1.0.5) + sass (>= 3.2, < 3.5) + concurrent-ruby (1.0.2) + contracts (0.13.0) + dotenv (2.1.1) + erubis (2.7.0) + execjs (2.7.0) + fast_blank (1.0.0) + fastimage (2.0.0) + addressable (~> 2) + ffi (1.9.14) + haml (4.0.7) + tilt + hamster (3.0.0) + concurrent-ruby (~> 1.0) + hashie (3.4.4) + i18n (0.7.0) + json (1.8.3) + kramdown (1.12.0) + listen (3.0.8) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + memoist (0.15.0) + middleman (4.1.10) + coffee-script (~> 2.2) + compass-import-once (= 1.0.5) + haml (>= 4.0.5) + kramdown (~> 1.2) + middleman-cli (= 4.1.10) + middleman-core (= 4.1.10) + sass (>= 3.4.0, < 4.0) + middleman-autoprefixer (2.7.0) + autoprefixer-rails (>= 6.3.1, < 7.0.0) + middleman-core (>= 3.3.3) + middleman-cli (4.1.10) + thor (>= 0.17.0, < 2.0) + middleman-core (4.1.10) + activesupport (~> 4.2) + addressable (~> 2.3) + backports (~> 3.6) + bundler (~> 1.1) + contracts (~> 0.13.0) + dotenv + erubis + execjs (~> 2.0) + fast_blank + fastimage (~> 2.0) + hamster (~> 3.0) + hashie (~> 3.4) + i18n (~> 0.7.0) + listen (~> 3.0.0) + memoist (~> 0.14) + padrino-helpers (~> 0.13.0) + parallel + rack (>= 1.4.5, < 2.0) + sass (>= 3.4) + servolux + tilt (~> 1.4.1) + uglifier (~> 3.0) + middleman-sprockets (4.0.0) + middleman-core (~> 4.0) + sprockets (>= 3.0) + middleman-syntax (3.0.0) + middleman-core (>= 3.2) + rouge (~> 2.0) + minitest (5.9.0) + padrino-helpers (0.13.3.1) + i18n (~> 0.6, >= 0.6.7) + padrino-support (= 0.13.3.1) + tilt (>= 1.4.1, < 3) + padrino-support (0.13.3.1) + activesupport (>= 3.1) + parallel (1.9.0) + rack (1.6.4) + rb-fsevent (0.9.7) + rb-inotify (0.9.7) + ffi (>= 0.5.0) + redcarpet (3.3.4) + rouge (2.0.5) + sass (3.4.22) + servolux (0.12.0) + sprockets (3.7.0) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + thor (0.19.1) + thread_safe (0.3.5) + tilt (1.4.1) + tzinfo (1.2.2) + thread_safe (~> 0.1) + uglifier (3.0.2) + execjs (>= 0.3.0, < 3) + +PLATFORMS + ruby + +DEPENDENCIES + middleman (~> 4.1.0) + middleman-autoprefixer (~> 2.7.0) + middleman-sprockets (~> 4.0.0) + middleman-syntax (~> 3.0.0) + redcarpet (~> 3.3.2) + rouge (~> 2.0.5) + +BUNDLED WITH + 1.12.5 diff --git a/docs/LICENSE b/docs/LICENSE new file mode 100644 index 00000000..5ceddf59 --- /dev/null +++ b/docs/LICENSE @@ -0,0 +1,13 @@ +Copyright 2008-2013 Concur Technologies, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); you may +not use this file except in compliance with the License. You may obtain +a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. \ No newline at end of file diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index ec717c9f..00000000 --- a/docs/Makefile +++ /dev/null @@ -1,192 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " applehelp to make an Apple Help Book" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - @echo " coverage to run coverage check of the documentation (if enabled)" - -clean: - rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/xlnt.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/xlnt.qhc" - -applehelp: - $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp - @echo - @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." - @echo "N.B. You won't be able to view it unless you put it in" \ - "~/Library/Documentation/Help or install it in your application" \ - "bundle." - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/xlnt" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/xlnt" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -coverage: - $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage - @echo "Testing of coverage in the sources finished, look at the " \ - "results in $(BUILDDIR)/coverage/python.txt." - -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." - -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..3b634c84 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,110 @@ +

+ Slate: API Documentation Generator +
+ Build Status +

+ +

Slate helps you create beautiful, intelligent, responsive API documentation.

+ +

Screenshot of Example Documentation created with Slate

+ +

The example above was created with Slate. Check it out at lord.github.io/slate.

+ +Features +------------ + +* **Clean, intuitive design** — With Slate, the description of your API is on the left side of your documentation, and all the code examples are on the right side. Inspired by [Stripe's](https://stripe.com/docs/api) and [Paypal's](https://developer.paypal.com/webapps/developer/docs/api/) API docs. Slate is responsive, so it looks great on tablets, phones, and even in print. + +* **Everything on a single page** — Gone are the days when your users had to search through a million pages to find what they wanted. Slate puts the entire documentation on a single page. We haven't sacrificed linkability, though. As you scroll, your browser's hash will update to the nearest header, so linking to a particular point in the documentation is still natural and easy. + +* **Slate is just Markdown** — When you write docs with Slate, you're just writing Markdown, which makes it simple to edit and understand. Everything is written in Markdown — even the code samples are just Markdown code blocks. + +* **Write code samples in multiple languages** — If your API has bindings in multiple programming languages, you can easily put in tabs to switch between them. In your document, you'll distinguish different languages by specifying the language name at the top of each code block, just like with Github Flavored Markdown. + +* **Out-of-the-box syntax highlighting** for [over 100 languages](https://github.com/jneen/rouge/wiki/List-of-supported-languages-and-lexers), no configuration required. + +* **Automatic, smoothly scrolling table of contents** on the far left of the page. As you scroll, it displays your current position in the document. It's fast, too. We're using Slate at TripIt to build documentation for our new API, where our table of contents has over 180 entries. We've made sure that the performance remains excellent, even for larger documents. + +* **Let your users update your documentation for you** — By default, your Slate-generated documentation is hosted in a public Github repository. Not only does this mean you get free hosting for your docs with Github Pages, but it also makes it simple for other developers to make pull requests to your docs if they find typos or other problems. Of course, if you don't want to use GitHub, you're also welcome to host your docs elsewhere. + +Getting started with Slate is super easy! Simply fork this repository and follow the instructions below. Or, if you'd like to check out what Slate is capable of, take a look at the [sample docs](http://lord.github.io/slate). + +Getting Started with Slate +------------------------------ + +### Prerequisites + +You're going to need: + + - **Linux or OS X** — Windows may work, but is unsupported. + - **Ruby, version 2.2.5 or newer** + - **Bundler** — If Ruby is already installed, but the `bundle` command doesn't work, just run `gem install bundler` in a terminal. + +### Getting Set Up + +1. Fork this repository on Github. +2. Clone *your forked repository* (not our original one) to your hard drive with `git clone https://github.com/YOURUSERNAME/slate.git` +3. `cd slate` +4. Initialize and start Slate. You can either do this locally, or with Vagrant: + +```shell +# either run this to run locally +bundle install +bundle exec middleman server + +# OR run this to run with vagrant +vagrant up +``` + +You can now see the docs at http://localhost:4567. Whoa! That was fast! + +Now that Slate is all set up on your machine, you'll probably want to learn more about [editing Slate markdown](https://github.com/lord/slate/wiki/Markdown-Syntax), or [how to publish your docs](https://github.com/lord/slate/wiki/Deploying-Slate). + +If you'd prefer to use Docker, instructions are available [in the wiki](https://github.com/lord/slate/wiki/Docker). + +Companies Using Slate +--------------------------------- + +* [NASA](https://api.nasa.gov) +* [IBM](https://docs.cloudant.com/api.html) +* [Sony](http://developers.cimediacloud.com) +* [Mozilla](http://mozilla.github.io/localForage/) +* [Best Buy](https://bestbuyapis.github.io/api-documentation/) +* [Travis-CI](https://docs.travis-ci.com/api/) +* [Greenhouse](https://developers.greenhouse.io/harvest.html) +* [Woocommerce](http://woocommerce.github.io/woocommerce-rest-api-docs/) +* [Appium](http://appium.io/slate/en/master) +* [Dwolla](https://docs.dwolla.com/) +* [Clearbit](https://clearbit.com/docs) +* [Coinbase](https://developers.coinbase.com/api) +* [Parrot Drones](http://developer.parrot.com/docs/bebop/) +* [Fidor Bank](http://docs.fidor.de/) + +You can view more in [the list on the wiki](https://github.com/lord/slate/wiki/Slate-in-the-Wild). + +Need Help? Found a bug? +-------------------- + +[Submit an issue](https://github.com/lord/slate/issues) to the Slate Github if you need any help. And, of course, feel free to submit pull requests with bug fixes or changes. + +Contributors +-------------------- + +Slate was built by [Robert Lord](https://lord.io) while interning at [TripIt](https://www.tripit.com/). + +Thanks to the following people who have submitted major pull requests: + +- [@chrissrogers](https://github.com/chrissrogers) +- [@bootstraponline](https://github.com/bootstraponline) +- [@realityking](https://github.com/realityking) +- [@cvkef](https://github.com/cvkef) + +Also, thanks to [Sauce Labs](http://saucelabs.com) for helping sponsor the project. + +Special Thanks +-------------------- +- [Middleman](https://github.com/middleman/middleman) +- [jquery.tocify.js](https://github.com/gfranko/jquery.tocify.js) +- [middleman-syntax](https://github.com/middleman/middleman-syntax) +- [middleman-gh-pages](https://github.com/edgecase/middleman-gh-pages) +- [Font Awesome](http://fortawesome.github.io/Font-Awesome/) diff --git a/docs/Vagrantfile b/docs/Vagrantfile new file mode 100644 index 00000000..59610839 --- /dev/null +++ b/docs/Vagrantfile @@ -0,0 +1,39 @@ +Vagrant.configure(2) do |config| + config.vm.box = "ubuntu/trusty64" + config.vm.network :forwarded_port, guest: 4567, host: 4567 + + config.vm.provision "bootstrap", + type: "shell", + inline: <<-SHELL + sudo apt-get update + sudo apt-get install -yq ruby2.0 ruby2.0-dev pkg-config build-essential nodejs git libxml2-dev libxslt-dev + sudo apt-get autoremove -yq + gem2.0 install --no-ri --no-rdoc bundler + SHELL + + # add the local user git config to the vm + config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig" + + config.vm.provision "install", + type: "shell", + privileged: false, + inline: <<-SHELL + echo "==============================================" + echo "Installing app dependencies" + cd /vagrant + bundle config build.nokogiri --use-system-libraries + bundle install + SHELL + + config.vm.provision "run", + type: "shell", + privileged: false, + run: "always", + inline: <<-SHELL + echo "==============================================" + echo "Starting up middleman at http://localhost:4567" + echo "If it does not come up, check the ~/middleman.log file for any error messages" + cd /vagrant + bundle exec middleman server --watcher-force-polling --watcher_latency=1 &> ~/middleman.log & + SHELL +end diff --git a/docs/api/xlnt.cell.rst b/docs/api/xlnt.cell.rst deleted file mode 100644 index ef3e7115..00000000 --- a/docs/api/xlnt.cell.rst +++ /dev/null @@ -1,30 +0,0 @@ -Cell Module -=========== - -.. doxygenstruct:: xlnt::cell_reference_hash - :members: - -.. doxygenclass:: xlnt::cell_reference - :members: - -.. doxygenenum:: xlnt::cell_type - -.. doxygenclass:: xlnt::cell - :members: - -.. doxygenclass:: xlnt::comment - :members: - -.. doxygentypedef:: xlnt::row_t - -.. doxygenclass:: xlnt::column_t - :members: - -.. doxygenstruct:: xlnt::column_hash - :members: - -.. doxygenclass:: xlnt::formatted_text - :members: - -.. doxygenclass:: xlnt::text_run - :members: diff --git a/docs/api/xlnt.packaging.rst b/docs/api/xlnt.packaging.rst deleted file mode 100644 index 0cfb3eab..00000000 --- a/docs/api/xlnt.packaging.rst +++ /dev/null @@ -1,11 +0,0 @@ -Packaging Module -================ - -.. doxygenclass:: xlnt::manifest - :members: - -.. doxygenclass:: xlnt::relationship - :members: - -.. doxygenclass:: xlnt::uri - :members: diff --git a/docs/api/xlnt.rst b/docs/api/xlnt.rst deleted file mode 100644 index 084b7a88..00000000 --- a/docs/api/xlnt.rst +++ /dev/null @@ -1,11 +0,0 @@ -Library Modules -=============== - -.. toctree:: - - xlnt.cell - xlnt.packaging - xlnt.styles - xlnt.utils - xlnt.workbook - xlnt.worksheet diff --git a/docs/api/xlnt.styles.rst b/docs/api/xlnt.styles.rst deleted file mode 100644 index 28dd6f48..00000000 --- a/docs/api/xlnt.styles.rst +++ /dev/null @@ -1,37 +0,0 @@ -Styles Module -============= - -.. doxygenclass:: xlnt::alignment - :members: - -.. doxygenenum:: xlnt::border_style - -.. doxygenclass:: xlnt::border - :members: - -.. doxygenclass:: xlnt::color - :members: - -.. doxygenenum:: xlnt::diagonal_direction - -.. doxygenclass:: xlnt::fill - :members: - -.. doxygenclass:: xlnt::font - :members: - -.. doxygenclass:: xlnt::format - :members: - -.. doxygenenum:: xlnt::horizontal_alignment - -.. doxygenclass:: xlnt::number_format - :members: - -.. doxygenclass:: xlnt::protection - :members: - -.. doxygenclass:: xlnt::style - :members: - -.. doxygenenum:: xlnt::vertical_alignment diff --git a/docs/api/xlnt.utils.rst b/docs/api/xlnt.utils.rst deleted file mode 100644 index 4e15ba77..00000000 --- a/docs/api/xlnt.utils.rst +++ /dev/null @@ -1,68 +0,0 @@ -Utilities Module -================ - -.. doxygenclass:: xlnt::exception - :members: - -.. doxygenclass:: xlnt::invalid_parameter - :members: - -.. doxygenclass:: xlnt::invalid_sheet_title - :members: - -.. doxygenclass:: xlnt::missing_number_format - :members: - -.. doxygenclass:: xlnt::invalid_file - :members: - -.. doxygenclass:: xlnt::illegal_character - :members: - -.. doxygenclass:: xlnt::invalid_data_type - :members: - -.. doxygenclass:: xlnt::invalid_column_string_index - :members: - -.. doxygenclass:: xlnt::invalid_cell_reference - :members: - -.. doxygenclass:: xlnt::invalid_attribute - :members: - -.. doxygenclass:: xlnt::key_not_found - :members: - -.. doxygenclass:: xlnt::no_visible_worksheets - :members: - -.. doxygenclass:: xlnt::unhandled_switch_case - :members: - -.. doxygenclass:: xlnt::unsupported - :members: - -.. doxygenenum:: xlnt::calendar - -.. doxygenstruct:: xlnt::date - :members: - -.. doxygenstruct:: xlnt::datetime - :members: - -.. doxygenstruct:: xlnt::time - :members: - -.. doxygenstruct:: xlnt::timedelta - :members: - -.. doxygenclass:: xlnt::utf8string - :members: - -.. doxygenclass:: xlnt::optional - :members: - -.. doxygenclass:: xlnt::path - :members: - diff --git a/docs/api/xlnt.workbook.rst b/docs/api/xlnt.workbook.rst deleted file mode 100644 index 9eb3d87c..00000000 --- a/docs/api/xlnt.workbook.rst +++ /dev/null @@ -1,23 +0,0 @@ -Workbook Module -=============== - -.. doxygenclass:: xlnt::const_worksheet_iterator - :members: - -.. doxygenclass:: xlnt::document_security - :members: - -.. doxygenclass:: xlnt::external_book - :members: - -.. doxygenclass:: xlnt::named_range - :members: - -.. doxygenclass:: xlnt::theme - :members: - -.. doxygenclass:: xlnt::workbook - :members: - -.. doxygenclass:: xlnt::worksheet_iterator - :members: diff --git a/docs/api/xlnt.worksheet.rst b/docs/api/xlnt.worksheet.rst deleted file mode 100644 index 315ed916..00000000 --- a/docs/api/xlnt.worksheet.rst +++ /dev/null @@ -1,72 +0,0 @@ -Worksheet Module -================ - -.. doxygenclass:: xlnt::cell_vector - :members: - -.. doxygenclass:: xlnt::cell_iterator - :members: - -.. doxygenclass:: xlnt::column_properties - :members: - -.. doxygenclass:: xlnt::const_cell_iterator - :members: - -.. doxygenclass:: xlnt::const_range_iterator - :members: - -.. doxygenclass:: xlnt::footer - :members: - -.. doxygenclass:: xlnt::header_footer - :members: - -.. doxygenclass:: xlnt::header - :members: - -.. doxygenenum:: xlnt::major_order - -.. doxygenenum:: xlnt::orientation - -.. doxygenenum:: xlnt::page_break - -.. doxygenclass:: xlnt::page_margins - :members: - -.. doxygenstruct:: xlnt::page_setup - :members: - -.. doxygenclass:: xlnt::pane - :members: - -.. doxygenenum:: xlnt::paper_size - -.. doxygenclass:: xlnt::range_iterator - :members: - -.. doxygenclass:: xlnt::range_reference - :members: - -.. doxygenclass:: xlnt::range - :members: - -.. doxygenclass:: xlnt::row_properties - :members: - -.. doxygenclass:: xlnt::selection - :members: - -.. doxygenclass:: xlnt::sheet_protection - :members: - -.. doxygenenum:: xlnt::sheet_state - -.. doxygenclass:: xlnt::sheet_view - :members: - -.. doxygenclass:: xlnt::worksheet_properties - :members: - -.. doxygenclass:: xlnt::worksheet - :members: diff --git a/docs/changes.rst b/docs/changes.rst deleted file mode 100644 index ac7f2c81..00000000 --- a/docs/changes.rst +++ /dev/null @@ -1,4 +0,0 @@ -0.9.0 (unreleased) -================== - -Beta release diff --git a/docs/charts/introduction.rst b/docs/charts/introduction.rst deleted file mode 100644 index 34a91646..00000000 --- a/docs/charts/introduction.rst +++ /dev/null @@ -1,4 +0,0 @@ -Charts -====== - -Charts aren't supported yet. diff --git a/docs/comments.rst b/docs/comments.rst deleted file mode 100644 index 4564f2b0..00000000 --- a/docs/comments.rst +++ /dev/null @@ -1,36 +0,0 @@ -Comments -======== - -Adding a comment to a cell --------------------------- - -Comments have a text attribute and an author attribute, which must both be set. - -.. code-block:: cpp - - xlnt::workbook workbook; - auto worksheet = workbook.get_active_sheet(); - auto comment = worksheet.get_cell("A1").get_comment(); - comment = xlnt::comment("This is the comment text", "Comment Author"); - std::cout << comment.get_text() << std::endl; - std::cout << comment.get_author() << std::endl; - -You cannot assign the same Comment object to two different cells. Doing so -raises an xlnt::attribute_error. - -.. code-block:: cpp - - xlnt::workbook workbook; - auto worksheet = workbook.get_active_sheet(); - xlnt::comment comment("Text", "Author"); - worksheet.get_cell("A1").set_comment(comment); - worksheet.get_cell("B1").set_comment(comment); - - // prints: terminate called after throwing an instance of 'xlnt::attribute_error' - -Loading and saving comments ----------------------------- - -Comments present in a workbook when loaded are stored in the comment -attribute of their respective cells automatically. Comments remaining in a workbook when it is saved are automatically saved to -the workbook file. diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index 7eab53c6..00000000 --- a/docs/conf.py +++ /dev/null @@ -1,300 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# xlnt documentation build configuration file, created by -# sphinx-quickstart on Mon Oct 26 10:31:07 2015. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os -import shlex - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) - -on_rtd = os.environ.get('READTHEDOCS', None) == 'True' -if on_rtd: - from subprocess import call - call('doxygen Doxyfile', shell=True) - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.todo', - 'sphinx.ext.viewcode', - 'breathe' -] - -# Breathe extension variables -breathe_projects = { "xlnt" : "doxyxml/" } -breathe_default_project = "xlnt" -breathe_doxygen_config_options = {'EXCLUDE_SYMBOLS': 'XLNT_API'} - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# source_suffix = ['.rst', '.md'] -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = 'xlnt' -copyright = '2015, Thomas Fussell' -author = 'Thomas Fussell' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '0.9' -# The full version, including alpha/beta/rc tags. -release = '0.9' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -#keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'sphinx_rtd_theme' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -#html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr' -#html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# Now only 'ja' uses this config value -#html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -#html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'xlntdoc' - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', - -# Latex figure (float) alignment -#'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'xlnt.tex', 'xlnt Documentation', - 'Thomas Fussell', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'xlnt', 'xlnt Documentation', - [author], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'xlnt', 'xlnt Documentation', - author, 'xlnt', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False diff --git a/docs/config.rb b/docs/config.rb new file mode 100644 index 00000000..41553c59 --- /dev/null +++ b/docs/config.rb @@ -0,0 +1,46 @@ +# Markdown +set :markdown_engine, :redcarpet +set :markdown, + fenced_code_blocks: true, + smartypants: true, + disable_indented_code_blocks: true, + prettify: true, + tables: true, + with_toc_data: true, + no_intra_emphasis: true + +# Assets +set :css_dir, 'stylesheets' +set :js_dir, 'javascripts' +set :images_dir, 'images' +set :fonts_dir, 'fonts' + +# Activate the syntax highlighter +activate :syntax + +activate :sprockets + +activate :autoprefixer do |config| + config.browsers = ['last 2 version', 'Firefox ESR'] + config.cascade = false + config.inline = true +end + +# Github pages require relative links +activate :relative_assets +set :relative_links, true + +# Build Configuration +configure :build do + # If you're having trouble with Middleman hanging, commenting + # out the following two lines has been known to help + activate :minify_css + activate :minify_javascript + # activate :relative_assets + # activate :asset_hash + # activate :gzip +end + +# Deploy Configuration +# If you want Middleman to listen on a different port, you can set that below +set :port, 4567 diff --git a/docs/cookbook.rst b/docs/cookbook.rst deleted file mode 100644 index 37861d7e..00000000 --- a/docs/cookbook.rst +++ /dev/null @@ -1,204 +0,0 @@ -Simple usage -============ - -Write a workbook ----------------- -.. code-block:: cpp - - #include - - int main() - { - xlnt::workbook wb; - - std::string dest_filename = "empty_book.xlsx"; - - auto ws1 = wb.get_active_sheet(); - ws1.set_title("range names"); - - for(xlnt::row_t row = 1; row < 40; row++) - { - std::vector to_append(600, 0); - std::iota(std::begin(to_append), std::end(to_append), 0); - ws1.append(to_append); - } - - auto ws2 = wb.create_sheet("Pi"); - - ws2.get_cell("F5").set_value(3.14); - - for(xlnt::row_t row = 10; row < 20; row++) - { - for(xlnt::column_t column = 27; column < 54; column++) - { - ws3.get_cell(column, row).set_value(column.column_string()); - } - } - - std::cout << ws3.get_cell("AA10") << std::endl; - - wb.save(dest_filename); - - return 0; - } - -Read an existing workbook -------------------------- -.. code-block:: cpp - - #include - - int main() - { - xlnt::workbook wb; - wb.load("empty_book.xlsx"); - auto sheet_ranges = wb.get_range("range names"); - - std::cout << sheet_ranges["D18"] << std::endl; - // prints: 3 - - return 0; - } - -.. note :: - - There are several optional parameters that can be used in xlnt::workbook::load (in order): - - - `guess_types` will enable or disable (default) type inference when - reading cells. - - - `data_only` controls whether cells with formulae have either the - formula (default) or the value stored the last time Excel read the sheet. - - - `keep_vba` controls whether any Visual Basic elements are preserved or - not (default). If they are preserved they are still not editable. - - -.. warning :: - - xlnt does currently not read all possible items in an Excel file so - images and charts will be lost from existing files if they are opened and - saved with the same name. - - -Using number formats --------------------- -.. code-block:: cpp - - #include - - int main() - { - xlnt::workbook wb; - wb.guess_types(true); - - auto ws = wb.get_active_sheet(); - ws.get_cell("A1").set_value(xlnt::datetime(2010, 7, 21)); - std::cout << ws.get_cell("A1").get_number_format().get_format_string() << std::endl - // prints: yyyy-mm-dd h:mm:ss - - // set percentage using a string followed by the percent sign - ws.get_cell("B1").set_value("3.14%"); - std::cout << cell.get_value() << std::endl; - // prints: 0.031400000000000004 - std::cout << cell << std::endl; - // prints: 3.14% - std::cout << cell.get_number_format().get_format_string() << std::endl; - // prints: 0% - - return 0; - } - -Using formulae --------------- -.. code-block:: cpp - - #include - - int main() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - ws.get_cell("A1").set_formula("=SUM(1, 1)"); - wb.save("formula.xlsx"); - } - -.. warning:: - NB you must use the English name for a function and function arguments *must* be separated by commas and not other punctuation such as semi-colons. - -xlsx never evaluates formula but it is possible to check the name of a formula: - -.. code-block:: cpp - - #include - - int main() - { - bool found = xlnt::formulae::exists("HEX2DEC"); - std::cout << (found ? "True" : "False") << std::endl; - // prints: True - - return 0; - } - -If you're trying to use a formula that isn't known this could be because you're using a formula that was not included in the initial specification. Such formulae must be prefixed with `xlfn.` to work. - -Merge / Unmerge cells ---------------------- -.. code-block:: cpp - - #include - - int main() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - - ws.merge_cells("A1:B1"); - ws.unmerge_cells("A1:B1"); - - // or - - ws.merge_cells(1, 2, 4, 2) - ws.unmerge_cells(1, 2, 4, 2); - - return 0; - } - - -Inserting an image -------------------- -.. code-block:: cpp - - #include - - int main() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - ws.get_cell("A1").set_value("You should see three logos below"); - - // create an image - auto img = xlnt::image("logo.png"); - - // add to worksheet and anchor next to cells - ws.add_image(img, "A1"); - wb.save("logo.xlsx"); - - return 0; - } - -Fold columns (outline) ----------------------- -.. code-block:: cpp - - int main() - { - xlnt::workbook wb; - auto ws = wb.create_sheet(); - bool hidden = true; - ws.group_columns("A", "D", hidden); - wb.save("group.xlsx"); - - return 0; - } diff --git a/docs/deploy.sh b/docs/deploy.sh new file mode 100755 index 00000000..909a9d90 --- /dev/null +++ b/docs/deploy.sh @@ -0,0 +1,203 @@ +#!/usr/bin/env bash +set -o errexit #abort if any command fails +me=$(basename "$0") + +help_message="\ +Usage: $me [-c FILE] [] +Deploy generated files to a git branch. + +Options: + + -h, --help Show this help information. + -v, --verbose Increase verbosity. Useful for debugging. + -e, --allow-empty Allow deployment of an empty directory. + -m, --message MESSAGE Specify the message used when committing on the + deploy branch. + -n, --no-hash Don't append the source commit's hash to the deploy + commit's message. +" + +bundle exec middleman build --clean + +parse_args() { + # Set args from a local environment file. + if [ -e ".env" ]; then + source .env + fi + + # Parse arg flags + # If something is exposed as an environment variable, set/overwrite it + # here. Otherwise, set/overwrite the internal variable instead. + while : ; do + if [[ $1 = "-h" || $1 = "--help" ]]; then + echo "$help_message" + return 0 + elif [[ $1 = "-v" || $1 = "--verbose" ]]; then + verbose=true + shift + elif [[ $1 = "-e" || $1 = "--allow-empty" ]]; then + allow_empty=true + shift + elif [[ ( $1 = "-m" || $1 = "--message" ) && -n $2 ]]; then + commit_message=$2 + shift 2 + elif [[ $1 = "-n" || $1 = "--no-hash" ]]; then + GIT_DEPLOY_APPEND_HASH=false + shift + else + break + fi + done + + # Set internal option vars from the environment and arg flags. All internal + # vars should be declared here, with sane defaults if applicable. + + # Source directory & target branch. + deploy_directory=build + deploy_branch=gh-pages + + #if no user identity is already set in the current git environment, use this: + default_username=${GIT_DEPLOY_USERNAME:-deploy.sh} + default_email=${GIT_DEPLOY_EMAIL:-} + + #repository to deploy to. must be readable and writable. + repo=origin + + #append commit hash to the end of message by default + append_hash=${GIT_DEPLOY_APPEND_HASH:-true} +} + +main() { + parse_args "$@" + + enable_expanded_output + + if ! git diff --exit-code --quiet --cached; then + echo Aborting due to uncommitted changes in the index >&2 + return 1 + fi + + commit_title=`git log -n 1 --format="%s" HEAD` + commit_hash=` git log -n 1 --format="%H" HEAD` + + #default commit message uses last title if a custom one is not supplied + if [[ -z $commit_message ]]; then + commit_message="publish: $commit_title" + fi + + #append hash to commit message unless no hash flag was found + if [ $append_hash = true ]; then + commit_message="$commit_message"$'\n\n'"generated from commit $commit_hash" + fi + + previous_branch=`git rev-parse --abbrev-ref HEAD` + + if [ ! -d "$deploy_directory" ]; then + echo "Deploy directory '$deploy_directory' does not exist. Aborting." >&2 + return 1 + fi + + # must use short form of flag in ls for compatibility with OS X and BSD + if [[ -z `ls -A "$deploy_directory" 2> /dev/null` && -z $allow_empty ]]; then + echo "Deploy directory '$deploy_directory' is empty. Aborting. If you're sure you want to deploy an empty tree, use the --allow-empty / -e flag." >&2 + return 1 + fi + + if git ls-remote --exit-code $repo "refs/heads/$deploy_branch" ; then + # deploy_branch exists in $repo; make sure we have the latest version + + disable_expanded_output + git fetch --force $repo $deploy_branch:$deploy_branch + enable_expanded_output + fi + + # check if deploy_branch exists locally + if git show-ref --verify --quiet "refs/heads/$deploy_branch" + then incremental_deploy + else initial_deploy + fi + + restore_head +} + +initial_deploy() { + git --work-tree "$deploy_directory" checkout --orphan $deploy_branch + git --work-tree "$deploy_directory" add --all + commit+push +} + +incremental_deploy() { + #make deploy_branch the current branch + git symbolic-ref HEAD refs/heads/$deploy_branch + #put the previously committed contents of deploy_branch into the index + git --work-tree "$deploy_directory" reset --mixed --quiet + git --work-tree "$deploy_directory" add --all + + set +o errexit + diff=$(git --work-tree "$deploy_directory" diff --exit-code --quiet HEAD --)$? + set -o errexit + case $diff in + 0) echo No changes to files in $deploy_directory. Skipping commit.;; + 1) commit+push;; + *) + echo git diff exited with code $diff. Aborting. Staying on branch $deploy_branch so you can debug. To switch back to master, use: git symbolic-ref HEAD refs/heads/master && git reset --mixed >&2 + return $diff + ;; + esac +} + +commit+push() { + set_user_id + git --work-tree "$deploy_directory" commit -m "$commit_message" + + disable_expanded_output + #--quiet is important here to avoid outputting the repo URL, which may contain a secret token + git push --quiet $repo $deploy_branch + enable_expanded_output +} + +#echo expanded commands as they are executed (for debugging) +enable_expanded_output() { + if [ $verbose ]; then + set -o xtrace + set +o verbose + fi +} + +#this is used to avoid outputting the repo URL, which may contain a secret token +disable_expanded_output() { + if [ $verbose ]; then + set +o xtrace + set -o verbose + fi +} + +set_user_id() { + if [[ -z `git config user.name` ]]; then + git config user.name "$default_username" + fi + if [[ -z `git config user.email` ]]; then + git config user.email "$default_email" + fi +} + +restore_head() { + if [[ $previous_branch = "HEAD" ]]; then + #we weren't on any branch before, so just set HEAD back to the commit it was on + git update-ref --no-deref HEAD $commit_hash $deploy_branch + else + git symbolic-ref HEAD refs/heads/$previous_branch + fi + + git reset --mixed +} + +filter() { + sed -e "s|$repo|\$repo|g" +} + +sanitize() { + "$@" 2> >(filter 1>&2) | filter +} + +[[ $1 = --source-only ]] || main "$@" diff --git a/docs/development.rst b/docs/development.rst deleted file mode 100644 index 17761e48..00000000 --- a/docs/development.rst +++ /dev/null @@ -1,50 +0,0 @@ -Development -=========== - -What is suppoprted ------------------- - -Supporting different platforms ------------------------------- - -Coding style ------------- - -Testing -------- - -Coverage -++++++++ - -Organisation -++++++++++++ - -Checking XML -++++++++++++ - -Schema validation -+++++++++++++++++ - -Microsoft Tools -+++++++++++++++ - -Contributing ------------- - -Contributions in the form of pull requests are always welcome. Don't forget -to add yourself to the list of authors! - -Branch naming convention ------------------------- - -Pull Requests -------------- - -Documentation -+++++++++++++ - -Benchmarking ------------- - -Memory Use -++++++++++ diff --git a/docs/font-selection.json b/docs/font-selection.json new file mode 100755 index 00000000..5e78f5d8 --- /dev/null +++ b/docs/font-selection.json @@ -0,0 +1,148 @@ +{ + "IcoMoonType": "selection", + "icons": [ + { + "icon": { + "paths": [ + "M438.857 73.143q119.429 0 220.286 58.857t159.714 159.714 58.857 220.286-58.857 220.286-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857zM512 785.714v-108.571q0-8-5.143-13.429t-12.571-5.429h-109.714q-7.429 0-13.143 5.714t-5.714 13.143v108.571q0 7.429 5.714 13.143t13.143 5.714h109.714q7.429 0 12.571-5.429t5.143-13.429zM510.857 589.143l10.286-354.857q0-6.857-5.714-10.286-5.714-4.571-13.714-4.571h-125.714q-8 0-13.714 4.571-5.714 3.429-5.714 10.286l9.714 354.857q0 5.714 5.714 10t13.714 4.286h105.714q8 0 13.429-4.286t6-10z" + ], + "attrs": [], + "isMulticolor": false, + "tags": [ + "exclamation-circle" + ], + "defaultCode": 61546, + "grid": 14 + }, + "attrs": [], + "properties": { + "id": 100, + "order": 4, + "prevSize": 28, + "code": 58880, + "name": "exclamation-sign", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 0 + }, + { + "icon": { + "paths": [ + "M585.143 786.286v-91.429q0-8-5.143-13.143t-13.143-5.143h-54.857v-292.571q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143v91.429q0 8 5.143 13.143t13.143 5.143h54.857v182.857h-54.857q-8 0-13.143 5.143t-5.143 13.143v91.429q0 8 5.143 13.143t13.143 5.143h256q8 0 13.143-5.143t5.143-13.143zM512 274.286v-91.429q0-8-5.143-13.143t-13.143-5.143h-109.714q-8 0-13.143 5.143t-5.143 13.143v91.429q0 8 5.143 13.143t13.143 5.143h109.714q8 0 13.143-5.143t5.143-13.143zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z" + ], + "attrs": [], + "isMulticolor": false, + "tags": [ + "info-circle" + ], + "defaultCode": 61530, + "grid": 14 + }, + "attrs": [], + "properties": { + "id": 85, + "order": 3, + "name": "info-sign", + "prevSize": 28, + "code": 58882 + }, + "setIdx": 0, + "iconIdx": 2 + }, + { + "icon": { + "paths": [ + "M733.714 419.429q0-16-10.286-26.286l-52-51.429q-10.857-10.857-25.714-10.857t-25.714 10.857l-233.143 232.571-129.143-129.143q-10.857-10.857-25.714-10.857t-25.714 10.857l-52 51.429q-10.286 10.286-10.286 26.286 0 15.429 10.286 25.714l206.857 206.857q10.857 10.857 25.714 10.857 15.429 0 26.286-10.857l310.286-310.286q10.286-10.286 10.286-25.714zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z" + ], + "attrs": [], + "isMulticolor": false, + "tags": [ + "check-circle" + ], + "defaultCode": 61528, + "grid": 14 + }, + "attrs": [], + "properties": { + "id": 83, + "order": 9, + "prevSize": 28, + "code": 58886, + "name": "ok-sign" + }, + "setIdx": 0, + "iconIdx": 6 + }, + { + "icon": { + "paths": [ + "M658.286 475.429q0-105.714-75.143-180.857t-180.857-75.143-180.857 75.143-75.143 180.857 75.143 180.857 180.857 75.143 180.857-75.143 75.143-180.857zM950.857 950.857q0 29.714-21.714 51.429t-51.429 21.714q-30.857 0-51.429-21.714l-196-195.429q-102.286 70.857-228 70.857-81.714 0-156.286-31.714t-128.571-85.714-85.714-128.571-31.714-156.286 31.714-156.286 85.714-128.571 128.571-85.714 156.286-31.714 156.286 31.714 128.571 85.714 85.714 128.571 31.714 156.286q0 125.714-70.857 228l196 196q21.143 21.143 21.143 51.429z" + ], + "width": 951, + "attrs": [], + "isMulticolor": false, + "tags": [ + "search" + ], + "defaultCode": 61442, + "grid": 14 + }, + "attrs": [], + "properties": { + "id": 2, + "order": 1, + "prevSize": 28, + "code": 58887, + "name": "icon-search" + }, + "setIdx": 0, + "iconIdx": 7 + } + ], + "height": 1024, + "metadata": { + "name": "slate", + "license": "SIL OFL 1.1" + }, + "preferences": { + "showGlyphs": true, + "showQuickUse": true, + "showQuickUse2": true, + "showSVGs": true, + "fontPref": { + "prefix": "icon-", + "metadata": { + "fontFamily": "slate", + "majorVersion": 1, + "minorVersion": 0, + "description": "Based on FontAwesome", + "license": "SIL OFL 1.1" + }, + "metrics": { + "emSize": 1024, + "baseline": 6.25, + "whitespace": 50 + }, + "resetPoint": 58880, + "showSelector": false, + "selector": "class", + "classSelector": ".icon", + "showMetrics": false, + "showMetadata": true, + "showVersion": true, + "ie7": false + }, + "imagePref": { + "prefix": "icon-", + "png": true, + "useClassSelector": true, + "color": 4473924, + "bgColor": 16777215 + }, + "historySize": 100, + "showCodes": true, + "gridSize": 16, + "showLiga": false + } +} diff --git a/docs/formatting.rst b/docs/formatting.rst deleted file mode 100644 index b408e696..00000000 --- a/docs/formatting.rst +++ /dev/null @@ -1,4 +0,0 @@ -Conditional Formatting -====================== - -Not supported yet. diff --git a/docs/formula.rst b/docs/formula.rst deleted file mode 100644 index 1c8564f1..00000000 --- a/docs/formula.rst +++ /dev/null @@ -1,106 +0,0 @@ -Parsing Formulas -================ - -`xlnt` supports limited parsing of formulas embedded in cells. The -`xlnt/formula` module contains a `tokenizer` class to break -formulas into their consitutuent tokens. Usage is as follows: - -.. code-block:: cpp - - #include - - int main() - { - std::string formula = R"(=IF($A$1,"then True",MAX(DEFAULT_VAL,'Sheet 2'!B1)))"; - xlnt::tokenizer tok(formula); - tok.parse(); - - for(auto &t : tok.get_items()) - { - std::cout << t.get_value() << "\t" << t.get_type() << "\t" << t.get_subtype() << std::endl; - } - - // prints: - // - // IF( FUNC OPEN - // $A$1 OPERAND RANGE - // , SEP ARG - // "then True" OPERAND TEXT - // , SEP ARG - // MAX( FUNC OPEN - // DEFAULT_VAL OPERAND RANGE - // , SEP ARG - // 'Sheet 2'!B1 OPERAND RANGE - // ) FUNC CLOSE - // ) FUNC CLOSE - - return 0; - } - -As shown above, tokens have three attributes of interest: - -* ``.value``: The substring of the formula that produced this token - -* ``.type``: The type of token this represents. Can be one of - - - ``token::literal``: If the cell does not contain a formula, its - value is represented by a single ``LITERAL`` token. - - - ``token::operand``: A generic term for any value in the Excel - formula. (See ``.subtype`` below for more details). - - - ``token::func``: Function calls are broken up into tokens for the - opener (e.g., ``SUM(``), followed by the arguments, followed by - the closer (i.e., ``)``). The function name and opening - parenthesis together form one ``FUNC`` token, and the matching - parenthesis forms another ``FUNC`` token. - - - ``token::array``: Array literals (enclosed between curly braces) - get two ``ARRAY`` tokens each, one for the opening ``{`` and one - for the closing ``}``. - - - ``token::paren``: When used for grouping subexpressions (and not to - denote function calls), parentheses are tokenized as ``paren`` - tokens (one per character). - - - ``token::sep``: These tokens are created from either commas (``,``) - or semicolons (``;``). Commas create ``sep`` tokens when they are - used to separate function arguments (e.g., ``SUM(a,b)``) or when - they are used to separate array elements (e.g., ``{a,b}``). (They - have another use as an infix operator for joining - ranges). Semicolons are always used to separate rows in an array - literal, so always create ``sep`` tokens. - - - ``token::op_pre``: Designates a prefix unary operator. Its value is - always ``+`` or ``-`` - - - ``token::op_in``: Designates an infix binary operator. Possible - values are ``>=``, ``<=``, ``<>``, ``=``, ``>``, ``<``, ``*``, - ``/``, ``+``, ``-``, ``^``, or ``&``. - - - ``token::op_post``: Designates a postfix unary operator. Its value - is always ``%``. - - - ``token::wspace``: Created for any whitespace encountered. Its - value is always a single space, regardless of how much whitespace - is found. - -* ``.subtype``: Some of the token types above use the subtype to - provide additional information about the token. Possible subtypes - are: - - + ``token::text``, ``token::number``, ``token::logical``, - ``token::error``, ``token::range``: these subtypes describe the - various forms of ``operand`` found in formulae. ``logical`` is - either ``true`` or ``false``, ``range`` is either a named range or - a direct reference to another range. ``text``, ``number``, and - ``error`` all refer to literal values in the formula - - + ``token::open`` and ``token::close``: these two subtypes are used by - ``paren``, ``func``, and ``array``, to describe whether the token - is opening a new subexpression or closing it. - - + ``token::arg`` and ``token::row``: are used by the ``sep`` tokens, - to distinguish between the comma and semicolon. Commas produce - tokens of subtype ``arg`` whereas semicolons produce tokens of - subtype ``row`` diff --git a/docs/generate-md.js b/docs/generate-md.js new file mode 100644 index 00000000..4a669422 --- /dev/null +++ b/docs/generate-md.js @@ -0,0 +1,100 @@ +var xpath = require('xpath'); +var dom = require('xmldom').DOMParser; +var fs = require('fs'); +var _ = require('underscore'); +var async = require('async'); + +function generate(directory, primary_callback) { + var modules = []; + return fs.readFile(directory + 'index.xml', 'utf8', (err, xml) => { + if (err) throw err; + var doc = new dom().parseFromString(xml); + var nodes = xpath.select('/doxygenindex/compound[@kind="dir"]', doc); + for (var i = 0; i < nodes.length; i++) { + var refid = nodes[i].getAttribute('refid'); + var name = nodes[i].firstChild.firstChild.toString(); + modules.push({name: name, refid: refid}); + } + const root_module = _.find(modules, (module) => { + return _.last(module.name.split('/')) == 'xlnt'; + }); + const root_name = root_module.name; + modules = _.filter(modules, (module) => { + return module.name.indexOf(root_name) >= 0 && module.name !== root_name; + }); + return async.mapSeries(modules, (module, module_callback) => { + return fs.readFile(directory + module.refid + '.xml', 'utf8', (err, xml) => { + if (err) throw err; + var doc = new dom().parseFromString(xml); + var nodes = xpath.select('/doxygen/compounddef/innerfile', doc); + module.source_files = []; + for (var i = 0; i < nodes.length; i++) { + var refid = nodes[i].getAttribute('refid'); + var name = nodes[i].firstChild.toString(); + module.source_files.push({name: name, refid: refid}); + } + return async.map(module.source_files, (source_file, source_file_callback) => { + return fs.readFile(directory + source_file.refid + '.xml', 'utf8', (err, xml) => { + if (err) throw err; + var doc = new dom().parseFromString(xml); + var nodes = xpath.select('/doxygen/compounddef/innerclass', doc); + module.class_files = []; + for (var i = 0; i < nodes.length; i++) { + var refid = nodes[i].getAttribute('refid'); + var name = nodes[i].firstChild.toString(); + module.class_files.push({name: name, refid: refid}); + } + return async.map(module.class_files, (class_file, class_file_callback) => { + return fs.readFile(directory + class_file.refid + '.xml', 'utf8', (err, xml) => { + if (err) throw err; + var doc = new dom().parseFromString(xml); + var nodes = xpath.select('/doxygen/compounddef/sectiondef/memberdef[@prot="public"]', doc); + var members = []; + for (var i = 0; i < nodes.length; i++) { + var member_data = {id: nodes[i].getAttribute('id')}; + var child = nodes[i].firstChild; + while (child != nodes[i].lastChild) { + if (child.textContent.trim()) { + member_data[child.nodeName] = child.textContent.trim(); + } + child = child.nextSibling; + } + members.push(member_data); + } + class_file.members = members; + return class_file_callback(null, class_file); + }); + }, (err, data) => { + return source_file_callback(null, _.flatten(data, true)); + }); + }); + }, (err, data) => { + module.classes = _.flatten(data, true); + return module_callback(null, module); + }); + }); + }, (err, data) => { + return primary_callback(null, _.flatten(data, true)); + }); + }); +} + +generate('doxyxml/', function(err, data) { + console.log('# API Reference'); + for (var i = 0; i < data.length; i++) { + var module = data[i]; + var module_name = _.last(module.name.split('/')); + console.log('##', module_name.charAt(0).toUpperCase() + module_name.slice(1), 'Module'); + for (var j = 0; j < module.classes.length; j++) { + var class_ = module.classes[j]; + console.log('###', _.last(class_.name.split('::'))); + for (var k = 0; k < class_.members.length; k++) { + var member = class_.members[k]; + console.log('####', '```' + member.definition + '```'); + if (member.briefdescription) { + console.log(member.briefdescription); + } + } + } + } +}); diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index 24105417..00000000 --- a/docs/index.rst +++ /dev/null @@ -1,232 +0,0 @@ -:mod:`xlnt` - user-friendly xlsx library for C++14 -=========================================================================== - -.. module:: xlnt -.. moduleauthor:: Thomas Fussell - -:Author: Thomas Fussell -:Source code: https://github.com/tfussell/xlnt -:Issues: https://github.com/tfussell/xlnt/issues -:Generated: |today| -:License: MIT -:Version: |release| - -Introduction ------------- - -xlnt is a C++14 library for reading, writing, and modifying XLSX files as described in [ECMA 376](http://www.ecma-international.org/publications/standards/Ecma-376.htm). The API is based on [openpyxl](https://bitbucket.org/openpyxl/openpyxl), a Python library to read/write Excel 2007 xlsx/xlsm files, and ultimately on [PHPExcel](https://github.com/PHPOffice/PHPExcel), pure PHP library for reading and writing spreadsheet files upon which openpyxl was based. This project is still very much a work in progress, but the core development work is complete. - -Summary of Features -+++++++++++++++++++ - -+---------------------------------------------------------------------+------+------+-------+ -| Feature | Read | Edit | Write | -+=====================================================================+======+======+=======+ -| Excel-style Workbook | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| LibreOffice-style Workbook | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Numbers-style Workbook | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Encrypted Workbook (Excel 2007-2010) | ✓ | ✓ | | -+---------------------------------------------------------------------+------+------+-------+ -| Encrypted Workbook (Excel 2013-2016) | ✓ | ✓ | | -+---------------------------------------------------------------------+------+------+-------+ -| Excel Binary Workbook (.xlsb) | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Excel Macro-Enabled Workbook (.xlsm) | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Excel Macro-Enabled Template (.xltm) | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Document Properties | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Numeric Cell Values | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Inline String Cell Values | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Shared String Cell Values | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Shared String Text Run Formatting (e.g. varied fonts within a cell) | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Hyperlink Cell Values | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Formula Cell Values | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Formula Evaluation | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Page Margins | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Page Setup | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Print Area | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Comments | ✓ | ✓ | | -+---------------------------------------------------------------------+------+------+-------+ -| Header and Footer | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Custom Views | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Charts | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Chartsheets | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Dialogsheets | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Themes | ✓ | | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Cell Styles | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Cell Formats | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Formatting->Alignment (e.g. right align) | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Formatting->Border (e.g. red cell outline) | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Formatting->Fill (e.g. green cell background) | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Formatting->Font (e.g. blue cell text) | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Formatting->Number Format (e.g. show 2 decimals) | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Formatting->Protection (e.g. hide formulas) | ✓ | ✓ | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Column Styles | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Row Styles | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Sheet Styles | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Conditional Formatting | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Tables | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Table Formatting | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Pivot Tables | | | | -+---------------------------------------------------------------------+------+------+-------+ -| XLSX Thumbnail | ✓ | | ✓ | -+---------------------------------------------------------------------+------+------+-------+ -| Custom OOXML Properties | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Custom OOXML Parts | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Drawing | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Text Box | | | | -+---------------------------------------------------------------------+------+------+-------+ -| WordArt | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Embedded Content (e.g. images) | | | | -+---------------------------------------------------------------------+------+------+-------+ -| Excel VBA | | | | -+---------------------------------------------------------------------+------+------+-------+ - -Sample code: -++++++++++++ - -.. literalinclude:: ../samples/sample.cpp - - -How to Contribute Code ----------------------- - -See `Information For Developers`_ - -Installation ------------- - -Getting the source ------------------- - -Usage examples --------------- - -Tutorial -++++++++ - -.. toctree:: - - tutorial - -Cookbook -++++++++ - -.. toctree:: - - cookbook - -Charts -++++++ - -.. toctree:: - - charts/introduction - -Comments -++++++++ - -.. toctree:: - - comments - -Working with styles -+++++++++++++++++++ - -.. toctree:: - - styles - -Conditional Formatting -++++++++++++++++++++++ - -.. toctree:: - - formatting - -Data Validation -+++++++++++++++ - -.. toctree:: - - validation - -Parsing Formulas -++++++++++++++++ - -.. toctree:: - - formula - - -Information for Developers --------------------------- - -.. toctree:: - - development - windows-development - -API Documentation ------------------- - -.. toctree:: - :maxdepth: 2 - - api/xlnt - - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` - - -Release Notes -============= - -.. toctree:: - :maxdepth: 1 - - changes diff --git a/docs/make.bat b/docs/make.bat deleted file mode 100644 index 7362da8b..00000000 --- a/docs/make.bat +++ /dev/null @@ -1,263 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=_build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . -set I18NSPHINXOPTS=%SPHINXOPTS% . -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% - set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. texinfo to make Texinfo files - echo. gettext to make PO message catalogs - echo. changes to make an overview over all changed/added/deprecated items - echo. xml to make Docutils-native XML files - echo. pseudoxml to make pseudoxml-XML files for display purposes - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - echo. coverage to run coverage check of the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - - -REM Check if sphinx-build is available and fallback to Python version if any -%SPHINXBUILD% 2> nul -if errorlevel 9009 goto sphinx_python -goto sphinx_ok - -:sphinx_python - -set SPHINXBUILD=python -m sphinx.__init__ -%SPHINXBUILD% 2> nul -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -:sphinx_ok - - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\xlnt.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\xlnt.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdf" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf - cd %~dp0 - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdfja" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf-ja - cd %~dp0 - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "texinfo" ( - %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. - goto end -) - -if "%1" == "gettext" ( - %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The message catalogs are in %BUILDDIR%/locale. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - if errorlevel 1 exit /b 1 - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - if errorlevel 1 exit /b 1 - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - if errorlevel 1 exit /b 1 - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -if "%1" == "coverage" ( - %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage - if errorlevel 1 exit /b 1 - echo. - echo.Testing of coverage in the sources finished, look at the ^ -results in %BUILDDIR%/coverage/python.txt. - goto end -) - -if "%1" == "xml" ( - %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The XML files are in %BUILDDIR%/xml. - goto end -) - -if "%1" == "pseudoxml" ( - %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. - goto end -) - -:end diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index 188f51e6..00000000 --- a/docs/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -breathe \ No newline at end of file diff --git a/docs/source/fonts/slate.eot b/docs/source/fonts/slate.eot new file mode 100755 index 0000000000000000000000000000000000000000..13c4839a1975d4c92d66753d75553f922743c6ef GIT binary patch literal 1876 zcmaJ?&2Jl35TEDWeRg&sP8)xqh$Kr)Yzaiu#`dnNaHtS!Xx9i53LF}#nAmmP`Xfq= z;s{Zte*qCEK;i~h4hYFPaA-x4sD#vVrBXQ{MIaD@1Ke8kn|8tnQ^fdI9N^x@? zd<=RUJW{D`U;b-v<0kYSA}zO8E|&DaCqF0BzlPme0}$TUZbAP8`m<~GR{K~75*dg= zcCEQu4DE@ZpmS=+>&5muJwb0nf0^x#V!izR7X1vpggLV7&CM3_1j&!tPMS_)mkgrN zC!rsJe5kniow8zt{RT+zltXle=pd}!=-!|+8X9a|iyqm&z#GOh#?Z4hMmoI$K1va6 zrUYgm&_U=R+`ZrJ0!LQ9E`42ef0@uHvC8U zo}w4%B?O&MCX$JGEG)w^HIqqa()pb0xK4IFpUb457c*fwDPqaQf|z%md}h1{#>ac0 zD>_@{@&c$_-fEYWRBE3yj7U8q4MTz%hA^cOxdwei%19MlXpM(P_)+e=@Rm}B>tXap zwoqO*DogaoKF+^`!zvX>{f10 zq*F6dk@0&Ok4=k2cHR|EKKaOn+_Q3KG-~~J-9n!;&D+d{W9=SQ|IqlDm9?y2uUl{( zi(0o$Q@Cby<g+B7U zE7gMM6{=S}Ps}C~lhg72%h#4X&vB-0d)je4Z)w>(?>M%-xE~jH;l@L}Lcyy(n4O9z z65lS`w&R>XbW_^$2bKN!lz(S%N3N!tcP>R={D&-^3rjyfS-aWi!AkH>sk+00G5&qW zC1%n(1Gmpd;5$IPUF_Lw@K%&WbbxEX?LgKcF9x!K$J`8LiMQ^#KsG5yOZ=|rBS1K&l2uG4tC&hwF_o-hDp_Le zTrgI}?0+pse + + +Generated by IcoMoon + + + + + + + + + + diff --git a/docs/source/fonts/slate.ttf b/docs/source/fonts/slate.ttf new file mode 100755 index 0000000000000000000000000000000000000000..ace9a46a7e1ed6b6ab3de2f30ef3e27c572f88d3 GIT binary patch literal 1720 zcmaJ>-D_KA7=PaL@t*V?ZMro%kz(6pV-rwZyCyk@Q7?wb>UJv9`gO6wj7^qiCTUqB zO%X@;7dX69!8^V6LWJzXiw!F%45qgVdLa}=5xvm6E&iVKo-9$jJ@CHI_viaTf`}a2 zC!H2wcyVDVd0amU$>&(FZ8pn0bm7yth{U7dH)`ef4)6r{E^wmO*t_`0^~*QG?-S|8 zt!lYq{5ky*k?|Sy{uTt*p8hrX-@re<)$DYS^+1t{800m!H_O^}@g4X@@W-3w?hZXf zuY!M;^{sNV`qeJ|2)=?Gg`Mqo2XzAEd#oqjAaRXMBJF+c79{T|EPkbe7-PE;5S;Q~ zaGL1Q(r@%{&}khDI-bPX!~GUGz-0@x9Aaiik?BxrHq?#(PnWnI%nYaReOv*$ZSm>?)ctla|1hAG;T1^YPnfOv{N&_J8ekcvoG^Cm?MLpzb znO-8ASEU{s)D{<<&JKz%JjTWAM|EWWzjHMajT;ECdZ?bsKw&|^tZONrkvOuIkI%De zUYTtG_26}0jYK0>4*B1QgBuPLXU?}t^*TiboK|r`R>P0_HD+(cdi{Ze{FKYDLBs0R~?v6B%Rx~Edo2aasT@IJ-vtfG(iE^ z$Awv_E5l{^C4s84a|;3+->t#z!u^V-9Nj!@+Ph(RslFP9tMyA^DCS*vdNzG<@yc2l z`u?ov&H8>AuC0gXeBbj{4$|U#n6XQ^x*FE+&d;P>_lp(J^Zj%8%oMl&cI_ZN6TKO{ zkvFp2-&{yO{TDd~50<`txN&oc<4*8TskuV~pXj~g5i{t$k=GYVU^@bQTx>a5uvcK? zADE$i`dge4A3((KH9;?{zv*7K*f>Jt^humckR5yQeHf=xv0R7Ti)jP&N=%#Ng5wPM z_VCv|5z{smX^sCCV+<0Gsc02b(JH2*RZK;zn2MJ0U5I^E%r-TsOdYDyD_EDQO?BF) z7OFc*Cuk9TtZz5Uo$8RKb(q)a%}C8|gD__z_YMNoV9|<#sst6tUZ*|mXK52w&tq|_ J6Wq-M;U6NW`v(93 literal 0 HcmV?d00001 diff --git a/docs/source/fonts/slate.woff b/docs/source/fonts/slate.woff new file mode 100755 index 0000000000000000000000000000000000000000..1e72e0ee0018119d7c814c2097cc60c0bcd05d84 GIT binary patch literal 1796 zcmaJ>&2Jl35TCanZ=GF;-Nqj%Qj#SmwgjS~vAs(b4i$%lc7v*fuR|jhlemtH?Nqf< z5&;$c3y8RZ#0{p83^QtGf$~^ZU#vdPL3b z4fcBr_DN>rKz!G#?&4f~pM4ZRM6a}~ts1aTadwIM%N_dh>UO7#K7YRFXF@YA68l_? z@xFm7>0K?wZ&VUvut!OxMlIIQ5*<0_&Hha~Yl49Y@PK@!7+CqFG*;eClSR)#j$=Xw zNnrjF9T`VX|4zRT99<||DqHk_nzSa(NzO5voBad{L?lOWoE4r?ZbRP(V_X@TZL>{} z(3A8mk}l-3xojrwNJr*pi-lsLQVxSKC{0w##ljO}){#>poy#tYg)pcTCk9|L<3To?f*omEO$b9ODUa}gVj!a zAvUB1l6OCpmTg;7PgnO)phbF-Xik@UVo+OLa3((}zVs*;Zywi?{r}GOL=0{q1ou!q ztD%;HAbGE?Z5HC#RzAMSTXWiN9ioS*i+Usm@#fI}eK@$`F!8DQHtAj`iEnm!UKH}P zNl{d*%%o>TwzLq6ppv_9BR_a$H<|Q)z2RXkyY6k4BJlQ)o4+xU@=Bif%MA~%sib$? zbw%hV*Y96nzi0MvpHdWZeO#D>x^i4rP!XsqKRYk5@ZB2RF5E9QWp(qg81F^VmBvaG ztu(Ggk(kS7r)DyTm#?ozQ4q}d{!9==(dt@sJ_vk&`7k5ChZ~1PD=Sgs?%Z@HoBe#* z_k-a4JvVKwyWWZ=q2@1#9uk~9EfrHBtA=!8%MC` zIGu@c6SyDi7WCym@ z2-w*rE$c_UfviKEL=Vy>={0bo+(i5#P1q3$6VB``hVMrCzU@B6vbqKcPy}m-BtQn- zkylU>byNe6DE>18g5d9bm%bZqa|qF=7&3(|U!AY)%Yg-vOsqKIq$w0D$r*3}ks4=+ z>U6?w2xMd=B$;zQ9v)F1K7KwfQ9|)<9nl&i?6-rchs{I8LC1eK^@#(|^QwB-{VeQz zoHLn@cwG?Yo(X!F(Q8iBOqSNs${h}C*?qJYLuZAnVXqx{ww|}Ux0`ca^V#hz?c7{r z7ldYbmk!M1m3G+IYC6(!VcCzqp&pJkZ#1@kw2W<^EJMqOM;^&dq6ELC*|pK!(cC0< zbZtF%BzLsuTw5O*+eg;dX0a+hcfI=gj8a~qWYJoMamHAo)!Qq|6&~9S8`{d0T?L&% z@$R=P6H0rTp6V+-Dlb>EB67JEMQ>kk%`y}{hvBC(RNEw)*%|U|4>SL+B=3rE@y*rw zR_bLZr&~XN?C;+yx2IilcDnrb?M)}An;DsTe@^rq$9L-UWNqY_oTyWyYisN3CMIh; z*C)b12exYgK^2c4S}J#2YJ+00rUlj%+LqQ7E%lldEc`K|1Bky)iLkwF{Wltvj!{A+PBEzhE3BX) zFBgqmj@&z?N1*=OK?z54T7is8FiA(N66oe`X+cKl>`n&&000000HC;3 zk^ug-#56-JW5JAtMV6Rgj#+|9A(7;@^`+^dWy@Alt7D86w|;R>QMs>d+47HJVfKhH aD;vc&%m&dlj4($-ipx}q&#}A+00017%3vV? literal 0 HcmV?d00001 diff --git a/docs/source/images/github.png b/docs/source/images/github.png new file mode 100644 index 0000000000000000000000000000000000000000..192846a12085914cc0e38d9b48036b11d2a4d7c4 GIT binary patch literal 4044 zcmaJ^c{r4N`aGRl~FEHV3FIF9Vfr0h$`Nq8%zL{iAU z#5hVRL@G>)Ls=v09p|m{{{A@E`&`%ae82a7eLna7xtD*QbH|f zc{v_4BT~tRgdL0_n@r=g1q3Xt*)#$%6kve@fS?eHC3vy11q=!yS%N){9ifgi3=kZ0 zB$@%ZMmxC?qeF=(64=@bWWhG$2OtA10*FlxqcF|bmf*kQn(^;DZU`9k7lajR3I2~L zFUR8`43zO{XGJ+s56bc1_!Xa?D0Uu$&jH0jzYy%2Y<7Wgc zz$7w4Xsi$_1+){95I_xQS%UdW|5E~)=IHo$U<&g`qxda@un9B>%n%A8lXvR+3(aJ? z0RNTok7%Y_6b*p508DB)gUFvppvF%!zjyyT(GHNW#tcg(hLZsb%N}b9=6eiDAtW;_ z)&^z+MI%g+7#s|SL!i;da2yVSFot7cHW(x1Pp&mv_#18&|;&a6L-1gm36j4%xkt~@|aub48UIJ z$zhq@B7I*@K=JsszBQ|u#fgozh3$<;UrW}%K3KOv47M8PGaoHmt(#jfMh*TN&0?`K zaIH*Nnf((zUiD`J>uX-|Jvf&~@?201A-;Py(xizM0Ra%x1Qld{N{* z;L_VqaCaRIZyty_w^4SdaP+hY@}fFdmut^mu5C&u?4oYNd9u80uF1{Tt|=mSmRnVL zmAHA{fSb(S;QD#^QyVf+oG4T+T-}mjzAVKpg_YhH3@V*>1YYZ9S7-`l*M2QqJt-O0hICdOjT6Jmm^OAW)J9SfEpQ35%9yW<_^$%0UD}6$*XHEs5@&0!5WZQRd0BMQ1O^6a}xk-$MhuEM3<(S~K0oKEDlVyOServwIXUu+-_H3Wpowmr_xrReUt=aPWcm^)}_>9sT`pv}A(3VbdIy7J(!}o@UgBT z2l(wFsMA~1>G_0xg<1foUY$JTDt}VBr)R>N6d3be2i541tFFAu!3e)rSKZl(>uZlH zFa4D(S-dB4F3PjoM6u{Q2VB5z&0domdfcvzlrH%!!LYEuimCop1}NwDMg(<;a9cKY z>bwKVI*Ox$ccRh_?wrKM3c-$Ti%3{L9CsyA2yk5kKuuDY8b%wBp>#8=*ov?7Ood-N0~ zDAu~)M&)u&&vd$~(xJ-p?{)z6{>DAz%S+TaZjMaW-3fT+iihW6z+m7%vauQmXtn=!h+dC_Gw(c8g z_;6rqUp({E*uFC(y{d&Lx)rzpmpJ46%rv9IDLc&n(WJ~7e14VWhO%cHezCU9gZE1{ zJOvhs(1wK;ypl8t%PVULi8bK8dvwSL`0bmG=c_iMDHAo>1v?v$<*;A5*}8+qVYp*@ ze}K0g?m`P~hMqLMj#5d#)=tuR-b(zvsL@U7 zh4kwU&aUyQz9%UMyRZ_GikkzroQdlzA_seV%XhEOzpXzuebfqdxI>z2lF{Dic>*{^O;}%mk6~@5$}WdW&(-m9)pbkKk_$ z3az`+BVT`Obr)0J-(TL??IY{?lA?2$uCDFyP|<#+Yus*)@N@v{Xa;?$qzB31;WO zx&b3151u%^el}?Dy6X8%$bdB%I$vL~JEqq3O4F6I;cvIVFHXPb=`Lb|wk&JDLZc(ZU6VHXw7wOo22x-k*8)F=r? z#@_d^LRf?2tz~N(XlARcU&p(OP1(+Q*0K98T+H-7g#^*Re4b9qtfr?Ujy&0bi3J+HR+a876j%v8>FZqq9cA~{aE-5bp;y_qUAm&EEB zX}I>w`!ow-*_D5N(l9#>4DEkW6snmtN)q?Akj}bcu!8!0l&BMR5j5*sMqNM`zC46< z|9v)bbi`*%es(e+=2C=Gx3u%xod_HOXh9<_ zv8-{Mx3&SD^gIi@uo~U-;vL7RNpJ2Q%#thlLQ+cOAWLnX;xNJaDY(oQ@$7TDcQw6y zMcd!uhjBwZGQslzkN_91QAf@xFCE;Mos@G-rGgwh#XMn&eXjK3jds@_n=h60c}8x} z_w@+j!H>oRZk#%xq3%ywjwo`LgA@@KD<2#UT=u$k<-^^_8h7i|Q@^zQ@*cn3XR3s_ zAo#C%$+fE9(ayuPUC0BphK+t7r(II~Uaou-Sqd!c@dmwnBxk45?d{KzRZKL<`Fv)V ZsK8ky_?39l4gAjkwLQ)WTW#Z?@NW_mBhUZ< literal 0 HcmV?d00001 diff --git a/docs/source/images/logo.png b/docs/source/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9656cd46eea5a06403bc1f81cfe0356c7c0737d9 GIT binary patch literal 7042 zcma)h2Q-}B*YBf6M3fXY1g{nZiQb7Q88sQ*=tL)?#)uYCQjm-mqMHzH^wEhDqPH*@ zOcEh#gecL!Gg;rg|Fz!x-F5GpXWCh(?6dbizu(^bJiDu>Npp_%90Wl$usdpS2qJX{ zzj0^JfX@O-ng;N7#!g#P4LT*hvYQJMKns=E9Wx&YV&o;hNnmiEU!alF7pALDNuVZ& z=;aU}TuveA3LQ-Cmf@r6_1R!A!-bsgO~TZG5D(8&CMv3@CXvYjo%weqbI$HgC&R^J zzN+H|gp*qW<>#GWBnr)Q(8i5vEy#VYFhBdgHm>xM=;xwvD?*`0YBBuj)2AwDsp!x4 zcy?h(#~~IktsgB4i-vg`x)pb+WBCbX!UlygCkPkzob#~IPW-@F%V#>o zf{Gd?HjAskU+j2|v5{jRN%kOr@^_V!Kz921=&^H|v${UZn&Hyy#h>uuN!TXT+F5dIzEs>PUe1D zW+I3air-I+T+&6MU)PgKI(1#^c`ZmWoohvya;!aZ!*#C=$dN!$xG>+bJ;Byzo}+hs zbfw;5|7)5CJH{pP<{AN=A1sD&%QGuLHtGRu+PpA3-RvYdq>a`+X%nmuevaW#R73fe z7u^b-YqpLqy7Devl_h-7p`lDk<#?l|*Q)Fiu+gL)d`uSiW})@EynEW{(c1^Zt)Ux? zvKdU#WO1Jcj7LnmRyLh>S88f$wPdT%muO571y^Uc@{v_w$zkam%h^{>nhp~>N=4!| z7HB>P?~z9&xTJ}lza3@!NkUgPgLZbW8DaEF`mPuX{c;lw{@=20g!rnVs+~_9SfT{V za6w!Wk*bDXsf8b@`Lt0ltDD{w1L?MDqFlU%n=omiLk9UnOv9Jxf;IDgSAF-DTkx_- z3nmK>I|^wnij!P+qB}Lpw|(z&G$3&m;>38XJuoq?@Pw;MN!U*|aLM)vWQlT?;e@h= z_{SvVY22;!f9<+O-E!iCAkOlgv>7fk!@%vt6C*!3w~zSu-}{N_>5pM7U;ymEXGA3Eh=l>DL?zf1U`&XO7Zsq`$*E##5c?)>}C`#7EaGd<@lUsY3qVr<}5d!aM~; zL|VQ}SOf;vbHT{xRaxa+VL`dP&9BLYX;YDjMhY1!#T|#9HebXhQ5879}L&anInYi zjCT*Ywx!=>l@~*xeCzUIp+Svse%2xFD1nSAO;a+66T6R(luBV37A*Z`Ob~e=SX%k| zspNd+UFLf>;w2vzoNGz)W;Ilm$$rVkgX5kovtX_rPqc^{qcQ zvR{cZPt@sN1~7GfSfsoLCda#sMjKNE%?t`o!WabIG?*tuhRhu6J}{nhg`LZs)A6XC zDHo*m=(MH48VZ%j;+yw}3rE~3^n-V6ujY8iJ)-t?bSwSt`AV#-?@nJrDvDu-ER!!4 zV-N4+^6Ugqc0{$nl9CiYV|>-Sx=%k}_pTe^9^<*E8E2$09gOPhjswi_=qfj79!RBs z$)+oRWaNh>9ggMTWs;GT>Q8FNXQadv2tYx_hK%Tn;Jp8Z4u}XE5D{GP@3emf`}ZpU8Up$ZOMBq4x-S@oM?0Tg0z_8O z7C~8@ovkA7*gu>m>E^rgS%8&Fr5%<_1#L4l25d|`XAr`ehJfbr&!6At=BgUx>x{&Q zY;&_xtElEg)2L)sI1OFJi{Y$86=^7llHhuyIYOBIn{AoXZrY#uUv0{#`$Ofc-Er*2 zB_-EEkN{MMiR|swl9ZH;6c+bc)L}iRqG~rv5~kGl)7QC)9IL{aotDO$As?XUS&MLS zap~>vH@tN#oQ<~SHW|<@XSt=p-fTctX2^j{hH~i1bHCKo)alCmFOo$pd)uHd=N@N} z(Tj%*C-bvC{?$f#u>K$vZ)=)>UR-ospKVMbBLNbq5Ey!%My#!^y`gpY&)3fy3?~{j z`+?R|D#~YK8g#@i=~_>3*yAGJpisFz3H&}ch;{{QQ?c};?60l2rIx$*hDYFEAnDpEuZc0+%O<~zTGK2JnlnzU1+2wd@@xtKgxRIEa zRs`(kc5<|TFuM`Lw7E;mp;SV1MQW*oPTBDG?T8uAT7b831B0aGDEGC?c{A|o1h;V0dkfp85zM`CG2v(cOoMrr^{_4 zJWLxE9?u2u%}zJ?xlMW}B_$D+nAb8y8XlIe$4@B=PS~q!$)eVth{cag*46Ahr!zi7 zF2L<=`(85NR3#end`Df;2S@3zoHJ6YWygnvQ;b=a{<{4+>UKH{(M; zNesN-r~u(;SDFfg!Sm5yBwoptn`-?sLvuiVbj?;*G0 z>|3^dQ#7AA6p_{5-rf!Dla7PwgW@1pNi+Jyhoy@>yt64vsWyahk@$auSua2xuRdpmk>v|di&ZMN2lz&6W z(r}J>gKwcnye--)WPd>qH;%*YeNsX+J-SILLR5qEKeECHquQc9^P3hGkJqPbu+4Ua zKV8zkr^kEvi3_otZvGn!o8256UMTedBV%L#1`#14p_Rj;^76aXjMu+pQ(R;-hzlb( zG&DpX9X%eOnD95xFD!&L`mc|+M^cMk4?5n#)jXW+qOekMz+}PPByI%4cf4vy00J8Jz;X zf6#n)JZ>mtw~7|`E^K{-zrrLctee@Z+t862OOUqQ0>^INfrc*xp#ekE1E9H^q>gHB+zc0DGZ13<`E^rI& z?c-Bsnv#`O#&PA^Pg`oGOV8Z&ou>J@Zjg>=5`HFM8HX6$Q9jH zo}@{*pz?L!=Ep0a)QyP&;6g4WnfM-TyWn564Q44@(<%M2>DPMwmL z?JUA^<#XYTCy_~19@W>^9~|IXLyYjIts%|NpFeLnYM4v&dX<`5=#&}Ampj)QK}k2A z{H$8DBsaI+ze`{qM}%uNhmX%0W<%D2-nUn+Pa6V#x_QBe^F+1~b=Ta!qj_y#R)?L5YR z^4KSrY{|e`pnv`H<@s6fK4Hs{S^Id!{8daN2H~f{&8&VghG-e8OMGfaEo<1+jEvF> z`)-Z<2pt(>q(NT+Xw|Z;dDlF}das8+%eQfGE{zL`vkXu_%4B6_HMF#3$M(Nu5&wsk znh8*u%UJ%+uf%X9tl7RhuCThg8X>JgXbBFgeeiw`A+DBk-R$D{-sR;t;(TmGB8xef zHB=zK(IlR$ZRX3kySp|uR*IXBECu_R)|2_Olo#KQ;ZS;9rxD9KUd&a=kEH;%=L}c; z^Cbd#xL#Z4dIeGIxxVFwbZft5LUxZw(f{>s`OVvxfdn6n4*RT6a=WhvU3X8t)8*Q{ zJ*w?pZ*h-KV}!YNV*CRm5cj5im)d-nRBk$csQB;%(e7bh+Bt+Z9)z5k+B_=Kbu(ItF zMqqV{P0A+N17>U+2SCuXgS2_!Plu4uxBW?ICHS|u)jgb-VI~1?;Jfxi`Lte8P_R9j z1)M6W2Xoh9L~L7^3Rs^WfA@^qzuBH!u(Wi&y%K~t9)uQ45WFphQ2?l?-6iJ){kuw7|}TE;^N{lKsk9>#m3d{$P&{E z)!R|$@7=riI$tlN=vKrTm#ND8>_0&!P)_pDbG*n1Tg50YE)Kw(uV5_jV*>>><28AC zJT~(Vati4dD-_`_dSgjLUt*y#TQ0`8P#Er&?zm7W-2>+Ngoo@jMZC8g%YK@oqg*uuE z_ROOm1ax_0e*OhwyeM{oD$g36-kIOdiQ`ulZ+%_@1^U#+-rsUndL z#u$r2yl12ETF@I=AIAdx60R)kXUm}{-oxS~lbV`Z-d(8UhQ$5e%ca(>Er`P}kxW*1 zLD;5dKRP-#R^vJ@sJPjAiLD8e>l|1MliA+t6DnhBe!c7BQkZ<*EEg#Hwvmxh5e8$ds~f9u zHNLW{N)oy4teYWcR6B&1Ki{{Cty^GiiDGZqVri~g%MQMS&VF&9jXLM5;d z>p_lk|Ni}*e&s1NkFaTZ7}>=SMqd*_RSh89|1;GCZvB7B4*!+6{rwB1`R{3o$DEgYz7CD4EDf+kSk%&eCHBU)+I@DW#UyP~jwu z>%7fn1$5iuFb-~Jl}Q;#8Bc3=xdy9yEnD>b!-W%fM|tmStvEFcq&!h{tIQlL^#fV? z+(npqOQONG)Tl0o^Ts{v2ENBjTqtye5zWExpT}~Bv)2|b_nvLyAIrF#GvLhBe*jw% z73l8OJm$?XD9`I7z)TJJN!Fhe65QuhLSYfS3y25VW^E!3JQP6_qooVS3<{EROO*~i z%%H|;m&9$u<%^qJpDOs_1 zGCWvkIcP(v&I_&>O0T}$SnL0K7J}sL&Utw*m1WeZaFEN)PbD;N`KC4{QW zmf?!;?UV7sB>kK)D^&%JeiuO%MMYKYe6+&>SY_e&zKEChAr^CklUl zX4xQ)g5(?;;$bNNmOvGeT1}-aeUTLHtMQuP5lIoM>t7!k+#*Av+g&Jbn(z~kT<7(? z1?rydLQIaCesVBpz+26b)>G9-AY1UR4cvB^qAYTgDGON^05#i{Nw>RBGaJ-;pfVIj zn|dO}qI-x=S8Z-ReNz;lHU31_Uc%qu*MwoTTiSMQt&m^tX4CoG4X4o`d#}E-3Zz-# zA=aSDX+277#I`emm+MJn;(S79L)BBk{KS3@_a{u}SwE-JABGcg!JRB|hQ@q1ZwI-T z$1R7Bw(IAf8s{G(8-2<^o8_IhwLU|>rj zMHe0mt|EH-`tStQbLt58_d=L}ebl7e|>hr1NSy z60tf=>Afz>q|H{5ByE2B>pzba-`CZ>DOM$e>=gN*D)pUp$I&agEB0LjmEvF8fq}A@ z=s?+$aWcI@=3(4Wga71|Ntn?)$9<=|FWjyEMa0cvBY~Pp^im_F)MC#tN;7-4| zz7LjGDe+z%9i#*o9(48-;1)#WgA+@*@J|LNCV3HRuYMp+=lOQlaN&Ds0U4UUwGzRhuXO1@Vdc$^ZZW literal 0 HcmV?d00001 diff --git a/docs/source/images/navbar.png b/docs/source/images/navbar.png new file mode 100644 index 0000000000000000000000000000000000000000..df38e90d87e1a215371b4977e18cde90f8832537 GIT binary patch literal 96 zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk@BpAX3RW*PVQ%R6tFatx` T value() const` +Return the value of this cell as an instance of type T. Overloads exist for most C++ fundamental types like bool, int, etc. as well as for std::string and xlnt datetime types: date, time, datetime, and timedelta. + +#### `void clear_value()` +Make this cell have a value of type null. All other cell attributes are retained. + +#### `template void value(T value)` +Set the value of this cell to the given value. Overloads exist for most C++ fundamental types like bool, int, etc. as well as for std::string and xlnt datetime types: date, time, datetime, and timedelta. + +#### `void value(const std::string &string_value, bool infer_type)` +Analyze string_value to determine its type, convert it to that type, and set the value of this cell to that converted value. + +#### `type data_type() const` +Return the type of this cell. + +#### `void data_type(type t)` +Set the type of this cell. + +#### `bool garbage_collectible() const` +There’s no reason to keep a cell which has no value and is not a placeholder. Return true if this cell has no value, style, isn’t merged, etc. + +#### `bool is_date() const` +Return true iff this cell’s number format matches a date format. + +#### `cell_reference reference() const` +Return a cell_reference that points to the location of this cell. + +#### `column_t column() const` +Return the column of this cell. + +#### `row_t row() const` +Return the row of this cell. + +#### `std::pair anchor() const` +Return the location of this cell as an ordered pair. + +#### `std::string hyperlink() const` +Return the URL of this cell’s hyperlink. + +#### `void hyperlink(const std::string &value)` +Add a hyperlink to this cell pointing to the URI of the given value. + +#### `bool has_hyperlink() const` +Return true if this cell has a hyperlink set. + +#### `class alignment computed_alignment() const` +Returns the result of computed_format().alignment(). + +#### `class border computed_border() const` +Returns the result of computed_format().border(). + +#### `class fill computed_fill() const` +Returns the result of computed_format().fill(). + +#### `class font computed_font() const` +Returns the result of computed_format().font(). + +#### `class number_format computed_number_format() const` +Returns the result of computed_format().number_format(). + +#### `class protection computed_protection() const` +Returns the result of computed_format().protection(). + +#### `bool has_format() const` +Return true if this cell has had a format applied to it. + +#### `const class format format() const` +Return a reference to the format applied to this cell. If this cell has no format, an invalid_attribute exception will be thrown. + +#### `void format(const class format new_format)` +Applies the cell-level formatting of new_format to this cell. + +#### `void clear_format()` +Remove the cell-level formatting from this cell. This doesn’t affect the style that may also be applied to the cell. Throws an invalid_attribute exception if no format is applied. + +#### `class number_format number_format() const` +Returns the number format of this cell. + +#### `void number_format(const class number_format &format)` +Creates a new format in the workbook, sets its number_format to the given format, and applies the format to this cell. + +#### `class font font() const` +Returns the font applied to the text in this cell. + +#### `void font(const class font &font_)` +Creates a new format in the workbook, sets its font to the given font, and applies the format to this cell. + +#### `class fill fill() const` +Returns the fill applied to this cell. + +#### `void fill(const class fill &fill_)` +Creates a new format in the workbook, sets its fill to the given fill, and applies the format to this cell. + +#### `class border border() const` +Returns the border of this cell. + +#### `void border(const class border &border_)` +Creates a new format in the workbook, sets its border to the given border, and applies the format to this cell. + +#### `class alignment alignment() const` +Returns the alignment of the text in this cell. + +#### `void alignment(const class alignment &alignment_)` +Creates a new format in the workbook, sets its alignment to the given alignment, and applies the format to this cell. + +#### `class protection protection() const` +Returns the protection of this cell. + +#### `void protection(const class protection &protection_)` +Creates a new format in the workbook, sets its protection to the given protection, and applies the format to this cell. + +#### `bool has_style() const` +Returns true if this cell has had a style applied to it. + +#### `const class style style() const` +Returns a wrapper pointing to the named style applied to this cell. + +#### `void style(const class style &new_style)` +Equivalent to style(new_style.name()) + +#### `void style(const std::string &style_name)` +Sets the named style applied to this cell to a style named style_name. If this style has not been previously created in the workbook, a key_not_found exception will be thrown. + +#### `void clear_style()` +Removes the named style from this cell. An invalid_attribute exception will be thrown if this cell has no style. This will not affect the cell format of the cell. + +#### `std::string formula() const` +Returns the string representation of the formula applied to this cell. + +#### `void formula(const std::string &formula)` +Sets the formula of this cell to the given value. This formula string should begin with ‘=’. + +#### `void clear_formula()` +Removes the formula from this cell. After this is called, has_formula() will return false. + +#### `bool has_formula() const` +Returns true if this cell has had a formula applied to it. + +#### `std::string to_string() const` +Returns a string representing the value of this cell. If the data type is not a string, it will be converted according to the number format. + +#### `bool is_merged() const` +Return true iff this cell has been merged with one or more surrounding cells. + +#### `void merged(bool merged)` +Make this a merged cell iff merged is true. Generally, this shouldn’t be called directly. Instead, use worksheet::merge_cells on its parent worksheet. + +#### `std::string error() const` +Return the error string that is stored in this cell. + +#### `void error(const std::string &error)` +Directly assign the value of this cell to be the given error. + +#### `cell offset(int column, int row)` +Return a cell from this cell’s parent workbook at a relative offset given by the parameters. + +#### `class worksheet worksheet()` +Return the worksheet that owns this cell. + +#### `const class worksheet worksheet() const` +Return the worksheet that owns this cell. + +#### `class workbook &workbook()` +Return the workbook of the worksheet that owns this cell. + +#### `const class workbook &workbook() const` +Return the workbook of the worksheet that owns this cell. + +#### `calendar base_date() const` +Shortcut to return the base date of the parent workbook. Equivalent to workbook().properties().excel_base_date + +#### `std::string check_string(const std::string &to_check)` +Return to_check after checking encoding, size, and illegal characters. + +#### `bool has_comment()` +Return true if this cell has a comment applied. + +#### `void clear_comment()` +Delete the comment applied to this cell if it exists. + +#### `class comment comment()` +Get the comment applied to this cell. + +#### `void comment(const std::string &text, const std::string &author = "Microsoft Office User")` +Create a new comment with the given text and optional author and apply it to the cell. + +#### `void comment(const std::string &comment_text, const class font &comment_font, const std::string &author = "Microsoft Office User")` +Create a new comment with the given text, formatting, and optional author and apply it to the cell. + +#### `void comment(const class comment &new_comment)` +Apply the comment provided as the only argument to the cell. + +#### `cell &operator=(const cell &rhs)` +Make this cell point to rhs. The cell originally pointed to by this cell will be unchanged. + +#### `bool operator==(const cell &comparand) const` +Return true if this cell the same cell as comparand (compare by reference). + +#### `bool operator==(std::nullptr_t) const` +Return true if this cell is uninitialized. + +#### `static const std::unordered_map &error_codes()` +Return a map of error strings such as #DIV/0! and their associated indices. + +### cell_reference class + +#### `cell_reference()` + +Default constructor makes a reference to the top-left-most cell, “A1”. + +#### `cell_reference(const char *reference_string)` + +Constructs a cell_reference from a string reprenting a cell coordinate (e.g. $B14). + +## Workbook Module + +### workbook class + +#### `workbook::workbook()` + +Constructs a workbook. diff --git a/docs/source/includes/_api_reference.md b/docs/source/includes/_api_reference.md new file mode 100644 index 00000000..1172a5e9 --- /dev/null +++ b/docs/source/includes/_api_reference.md @@ -0,0 +1,1626 @@ +# API Reference +## Cell Module +### cell +#### ```using xlnt::cell::type = cell_type``` +Alias xlnt::cell_type to xlnt::cell::type since it looks nicer. +#### ```friend class detail::xlsx_consumer``` +#### ```friend class detail::xlsx_producer``` +#### ```friend struct detail::cell_impl``` +#### ```static const std::unordered_map& xlnt::cell::error_codes``` +Return a map of error strings such as #DIV/0! and their associated indices. +#### ```xlnt::cell::cell``` +Default copy constructor. +#### ```bool xlnt::cell::has_value``` +Return true if value has been set and has not been cleared using cell::clear_value(). +#### ```T xlnt::cell::value``` +Return the value of this cell as an instance of type T. Overloads exist for most C++ fundamental types like bool, int, etc. as well as for std::string and xlnt datetime types: date, time, datetime, and timedelta. +#### ```void xlnt::cell::clear_value``` +Make this cell have a value of type null. All other cell attributes are retained. +#### ```void xlnt::cell::value``` +Set the value of this cell to the given value. Overloads exist for most C++ fundamental types like bool, int, etc. as well as for std::string and xlnt datetime types: date, time, datetime, and timedelta. +#### ```void xlnt::cell::value``` +Analyze string_value to determine its type, convert it to that type, and set the value of this cell to that converted value. +#### ```type xlnt::cell::data_type``` +Return the type of this cell. +#### ```void xlnt::cell::data_type``` +Set the type of this cell. +#### ```bool xlnt::cell::garbage_collectible``` +There's no reason to keep a cell which has no value and is not a placeholder. Return true if this cell has no value, style, isn't merged, etc. +#### ```bool xlnt::cell::is_date``` +Return true iff this cell's number format matches a date format. +#### ```cell_reference xlnt::cell::reference``` +Return a cell_reference that points to the location of this cell. +#### ```column_t xlnt::cell::column``` +Return the column of this cell. +#### ```row_t xlnt::cell::row``` +Return the row of this cell. +#### ```std::pair xlnt::cell::anchor``` +Return the location of this cell as an ordered pair. +#### ```std::string xlnt::cell::hyperlink``` +Return the URL of this cell's hyperlink. +#### ```void xlnt::cell::hyperlink``` +Add a hyperlink to this cell pointing to the URI of the given value. +#### ```bool xlnt::cell::has_hyperlink``` +Return true if this cell has a hyperlink set. +#### ```class alignment xlnt::cell::computed_alignment``` +Returns the result of computed_format().alignment(). +#### ```class border xlnt::cell::computed_border``` +Returns the result of computed_format().border(). +#### ```class fill xlnt::cell::computed_fill``` +Returns the result of computed_format().fill(). +#### ```class font xlnt::cell::computed_font``` +Returns the result of computed_format().font(). +#### ```class number_format xlnt::cell::computed_number_format``` +Returns the result of computed_format().number_format(). +#### ```class protection xlnt::cell::computed_protection``` +Returns the result of computed_format().protection(). +#### ```bool xlnt::cell::has_format``` +Return true if this cell has had a format applied to it. +#### ```const class format xlnt::cell::format``` +Return a reference to the format applied to this cell. If this cell has no format, an invalid_attribute exception will be thrown. +#### ```void xlnt::cell::format``` +Applies the cell-level formatting of new_format to this cell. +#### ```void xlnt::cell::clear_format``` +Remove the cell-level formatting from this cell. This doesn't affect the style that may also be applied to the cell. Throws an invalid_attribute exception if no format is applied. +#### ```class number_format xlnt::cell::number_format``` +Returns the number format of this cell. +#### ```void xlnt::cell::number_format``` +Creates a new format in the workbook, sets its number_format to the given format, and applies the format to this cell. +#### ```class font xlnt::cell::font``` +Returns the font applied to the text in this cell. +#### ```void xlnt::cell::font``` +Creates a new format in the workbook, sets its font to the given font, and applies the format to this cell. +#### ```class fill xlnt::cell::fill``` +Returns the fill applied to this cell. +#### ```void xlnt::cell::fill``` +Creates a new format in the workbook, sets its fill to the given fill, and applies the format to this cell. +#### ```class border xlnt::cell::border``` +Returns the border of this cell. +#### ```void xlnt::cell::border``` +Creates a new format in the workbook, sets its border to the given border, and applies the format to this cell. +#### ```class alignment xlnt::cell::alignment``` +Returns the alignment of the text in this cell. +#### ```void xlnt::cell::alignment``` +Creates a new format in the workbook, sets its alignment to the given alignment, and applies the format to this cell. +#### ```class protection xlnt::cell::protection``` +Returns the protection of this cell. +#### ```void xlnt::cell::protection``` +Creates a new format in the workbook, sets its protection to the given protection, and applies the format to this cell. +#### ```bool xlnt::cell::has_style``` +Returns true if this cell has had a style applied to it. +#### ```const class style xlnt::cell::style``` +Returns a wrapper pointing to the named style applied to this cell. +#### ```void xlnt::cell::style``` +Equivalent to style(new_style.name()) +#### ```void xlnt::cell::style``` +Sets the named style applied to this cell to a style named style_name. If this style has not been previously created in the workbook, a key_not_found exception will be thrown. +#### ```void xlnt::cell::clear_style``` +Removes the named style from this cell. An invalid_attribute exception will be thrown if this cell has no style. This will not affect the cell format of the cell. +#### ```std::string xlnt::cell::formula``` +Returns the string representation of the formula applied to this cell. +#### ```void xlnt::cell::formula``` +Sets the formula of this cell to the given value. This formula string should begin with '='. +#### ```void xlnt::cell::clear_formula``` +Removes the formula from this cell. After this is called, has_formula() will return false. +#### ```bool xlnt::cell::has_formula``` +Returns true if this cell has had a formula applied to it. +#### ```std::string xlnt::cell::to_string``` +Returns a string representing the value of this cell. If the data type is not a string, it will be converted according to the number format. +#### ```bool xlnt::cell::is_merged``` +Return true iff this cell has been merged with one or more surrounding cells. +#### ```void xlnt::cell::merged``` +Make this a merged cell iff merged is true. Generally, this shouldn't be called directly. Instead, use worksheet::merge_cells on its parent worksheet. +#### ```std::string xlnt::cell::error``` +Return the error string that is stored in this cell. +#### ```void xlnt::cell::error``` +Directly assign the value of this cell to be the given error. +#### ```cell xlnt::cell::offset``` +Return a cell from this cell's parent workbook at a relative offset given by the parameters. +#### ```class worksheet xlnt::cell::worksheet``` +Return the worksheet that owns this cell. +#### ```const class worksheet xlnt::cell::worksheet``` +Return the worksheet that owns this cell. +#### ```class workbook& xlnt::cell::workbook``` +Return the workbook of the worksheet that owns this cell. +#### ```const class workbook& xlnt::cell::workbook``` +Return the workbook of the worksheet that owns this cell. +#### ```calendar xlnt::cell::base_date``` +Shortcut to return the base date of the parent workbook. Equivalent to workbook().properties().excel_base_date +#### ```std::string xlnt::cell::check_string``` +Return to_check after checking encoding, size, and illegal characters. +#### ```bool xlnt::cell::has_comment``` +Return true if this cell has a comment applied. +#### ```void xlnt::cell::clear_comment``` +Delete the comment applied to this cell if it exists. +#### ```class comment xlnt::cell::comment``` +Get the comment applied to this cell. +#### ```void xlnt::cell::comment``` +Create a new comment with the given text and optional author and apply it to the cell. +#### ```void xlnt::cell::comment``` +Create a new comment with the given text, formatting, and optional author and apply it to the cell. +#### ```void xlnt::cell::comment``` +Apply the comment provided as the only argument to the cell. +#### ```double xlnt::cell::width``` +#### ```double xlnt::cell::height``` +#### ```cell& xlnt::cell::operator=``` +Make this cell point to rhs. The cell originally pointed to by this cell will be unchanged. +#### ```bool xlnt::cell::operator==``` +Return true if this cell the same cell as comparand (compare by reference). +#### ```bool xlnt::cell::operator==``` +Return true if this cell is uninitialized. +### cell_reference_hash +#### ```std::size_t xlnt::cell_reference_hash::operator()``` +### cell_reference +#### ```static std::pair xlnt::cell_reference::split_reference``` +Split a coordinate string like "A1" into an equivalent pair like {"A", 1}. +#### ```static std::pair xlnt::cell_reference::split_reference``` +Split a coordinate string like "A1" into an equivalent pair like {"A", 1}. Reference parameters absolute_column and absolute_row will be set to true if column part or row part are prefixed by a dollar-sign indicating they are absolute, otherwise false. +#### ```xlnt::cell_reference::cell_reference``` +Default constructor makes a reference to the top-left-most cell, "A1". +#### ```xlnt::cell_reference::cell_reference``` +Constructs a cell_reference from a string reprenting a cell coordinate (e.g. $B14). +#### ```xlnt::cell_reference::cell_reference``` +Constructs a cell_reference from a string reprenting a cell coordinate (e.g. $B14). +#### ```xlnt::cell_reference::cell_reference``` +Constructs a cell_reference from a 1-indexed column index and row index. +#### ```cell_reference& xlnt::cell_reference::make_absolute``` +Convert a coordinate to an absolute coordinate string (e.g. B12 -> $B$12) Defaulting to true, absolute_column and absolute_row can optionally control whether the resulting cell_reference has an absolute column (e.g. B12 -> $B12) and absolute row (e.g. B12 -> B$12) respectively. +#### ```bool xlnt::cell_reference::column_absolute``` +Return true if the reference refers to an absolute column, otherwise false. +#### ```void xlnt::cell_reference::column_absolute``` +Make this reference have an absolute column if absolute_column is true, otherwise not absolute. +#### ```bool xlnt::cell_reference::row_absolute``` +Return true if the reference refers to an absolute row, otherwise false. +#### ```void xlnt::cell_reference::row_absolute``` +Make this reference have an absolute row if absolute_row is true, otherwise not absolute. +#### ```column_t xlnt::cell_reference::column``` +Return a string that identifies the column of this reference (e.g. second column from left is "B") +#### ```void xlnt::cell_reference::column``` +Set the column of this reference from a string that identifies a particular column. +#### ```column_t::index_t xlnt::cell_reference::column_index``` +Return a 1-indexed numeric index of the column of this reference. +#### ```void xlnt::cell_reference::column_index``` +Set the column of this reference from a 1-indexed number that identifies a particular column. +#### ```row_t xlnt::cell_reference::row``` +Return a 1-indexed numeric index of the row of this reference. +#### ```void xlnt::cell_reference::row``` +Set the row of this reference from a 1-indexed number that identifies a particular row. +#### ```cell_reference xlnt::cell_reference::make_offset``` +Return a cell_reference offset from this cell_reference by the number of columns and rows specified by the parameters. A negative value for column_offset or row_offset results in a reference above or left of this cell_reference, respectively. +#### ```std::string xlnt::cell_reference::to_string``` +Return a string like "A1" for cell_reference(1, 1). +#### ```range_reference xlnt::cell_reference::to_range``` +Return a 1x1 range_reference containing only this cell_reference. +#### ```range_reference xlnt::cell_reference::operator,``` +I've always wanted to overload the comma operator. cell_reference("A", 1), cell_reference("B", 1) will return range_reference(cell_reference("A", 1), cell_reference("B", 1)) +#### ```bool xlnt::cell_reference::operator==``` +Return true if this reference is identical to comparand including in absoluteness of column and row. +#### ```bool xlnt::cell_reference::operator==``` +Construct a cell_reference from reference_string and return the result of their comparison. +#### ```bool xlnt::cell_reference::operator==``` +Construct a cell_reference from reference_string and return the result of their comparison. +#### ```bool xlnt::cell_reference::operator!=``` +Return true if this reference is not identical to comparand including in absoluteness of column and row. +#### ```bool xlnt::cell_reference::operator!=``` +Construct a cell_reference from reference_string and return the result of their comparison. +#### ```bool xlnt::cell_reference::operator!=``` +Construct a cell_reference from reference_string and return the result of their comparison. +### comment +#### ```xlnt::comment::comment``` +Constructs a new blank comment. +#### ```xlnt::comment::comment``` +Constructs a new comment with the given text and author. +#### ```xlnt::comment::comment``` +Constructs a new comment with the given unformatted text and author. +#### ```rich_text xlnt::comment::text``` +Return the text that will be displayed for this comment. +#### ```std::string xlnt::comment::plain_text``` +Return the plain text that will be displayed for this comment without formatting information. +#### ```std::string xlnt::comment::author``` +Return the author of this comment. +#### ```void xlnt::comment::hide``` +Make this comment only visible when the associated cell is hovered. +#### ```void xlnt::comment::show``` +Make this comment always visible. +#### ```bool xlnt::comment::visible``` +Returns true if this comment is not hidden. +#### ```void xlnt::comment::position``` +Set the absolute position of this cell to the given coordinates. +#### ```int xlnt::comment::left``` +Returns the distance from the left side of the sheet to the left side of the comment. +#### ```int xlnt::comment::top``` +Returns the distance from the top of the sheet to the top of the comment. +#### ```void xlnt::comment::size``` +Set the size of the comment. +#### ```int xlnt::comment::width``` +Returns the width of this comment. +#### ```int xlnt::comment::height``` +Returns the height of this comment. +#### ```bool operator==``` +Return true if both comments are equivalent. +### column_t +#### ```using xlnt::column_t::index_t = std::uint32_t``` +#### ```index_t xlnt::column_t::index``` +Internal numeric value of this column index. +#### ```static index_t xlnt::column_t::column_index_from_string``` +Convert a column letter into a column number (e.g. B -> 2) +#### ```static std::string xlnt::column_t::column_string_from_index``` +Convert a column number into a column letter (3 -> 'C') +#### ```xlnt::column_t::column_t``` +Default column_t is the first (left-most) column. +#### ```xlnt::column_t::column_t``` +Construct a column from a number. +#### ```xlnt::column_t::column_t``` +Construct a column from a string. +#### ```xlnt::column_t::column_t``` +Construct a column from a string. +#### ```xlnt::column_t::column_t``` +Copy constructor +#### ```xlnt::column_t::column_t``` +Move constructor +#### ```std::string xlnt::column_t::column_string``` +Return a string representation of this column index. +#### ```column_t& xlnt::column_t::operator=``` +Set this column to be the same as rhs's and return reference to self. +#### ```column_t& xlnt::column_t::operator=``` +Set this column to be equal to rhs and return reference to self. +#### ```column_t& xlnt::column_t::operator=``` +Set this column to be equal to rhs and return reference to self. +#### ```bool xlnt::column_t::operator==``` +Return true if this column refers to the same column as other. +#### ```bool xlnt::column_t::operator!=``` +Return true if this column doesn't refer to the same column as other. +#### ```bool xlnt::column_t::operator==``` +Return true if this column refers to the same column as other. +#### ```bool xlnt::column_t::operator==``` +Return true if this column refers to the same column as other. +#### ```bool xlnt::column_t::operator==``` +Return true if this column refers to the same column as other. +#### ```bool xlnt::column_t::operator==``` +Return true if this column refers to the same column as other. +#### ```bool xlnt::column_t::operator!=``` +Return true if this column doesn't refer to the same column as other. +#### ```bool xlnt::column_t::operator!=``` +Return true if this column doesn't refer to the same column as other. +#### ```bool xlnt::column_t::operator!=``` +Return true if this column doesn't refer to the same column as other. +#### ```bool xlnt::column_t::operator!=``` +Return true if this column doesn't refer to the same column as other. +#### ```bool xlnt::column_t::operator>``` +Return true if other is to the right of this column. +#### ```bool xlnt::column_t::operator>=``` +Return true if other is to the right of or equal to this column. +#### ```bool xlnt::column_t::operator<``` +Return true if other is to the left of this column. +#### ```bool xlnt::column_t::operator<=``` +Return true if other is to the left of or equal to this column. +#### ```bool xlnt::column_t::operator>``` +Return true if other is to the right of this column. +#### ```bool xlnt::column_t::operator>=``` +Return true if other is to the right of or equal to this column. +#### ```bool xlnt::column_t::operator<``` +Return true if other is to the left of this column. +#### ```bool xlnt::column_t::operator<=``` +Return true if other is to the left of or equal to this column. +#### ```column_t& xlnt::column_t::operator++``` +Pre-increment this column, making it point to the column one to the right. +#### ```column_t& xlnt::column_t::operator--``` +Pre-deccrement this column, making it point to the column one to the left. +#### ```column_t xlnt::column_t::operator++``` +Post-increment this column, making it point to the column one to the right and returning the old column. +#### ```column_t xlnt::column_t::operator--``` +Post-decrement this column, making it point to the column one to the left and returning the old column. +#### ```column_t& xlnt::column_t::operator+=``` +Add rhs to this column and return a reference to this column. +#### ```column_t& xlnt::column_t::operator-=``` +Subtrac rhs from this column and return a reference to this column. +#### ```column_t& xlnt::column_t::operator*=``` +Multiply this column by rhs and return a reference to this column. +#### ```column_t& xlnt::column_t::operator/=``` +Divide this column by rhs and return a reference to this column. +#### ```column_t& xlnt::column_t::operator%=``` +Mod this column by rhs and return a reference to this column. +#### ```column_t operator+``` +Return the result of adding rhs to this column. +#### ```column_t operator-``` +Return the result of subtracing lhs by rhs column. +#### ```column_t operator*``` +Return the result of multiply lhs by rhs column. +#### ```column_t operator/``` +Return the result of divide lhs by rhs column. +#### ```column_t operator%``` +Return the result of mod lhs by rhs column. +#### ```bool operator>``` +Return true if other is to the right of this column. +#### ```bool operator>=``` +Return true if other is to the right of or equal to this column. +#### ```bool operator<``` +Return true if other is to the left of this column. +#### ```bool operator<=``` +Return true if other is to the left of or equal to this column. +#### ```void swap``` +Swap the columns that left and right refer to. +### column_hash +#### ```std::size_t xlnt::column_hash::operator()``` +### column_t > +#### ```size_t std::hash< xlnt::column_t >::operator()``` +### rich_text +#### ```xlnt::rich_text::rich_text``` +#### ```xlnt::rich_text::rich_text``` +#### ```xlnt::rich_text::rich_text``` +#### ```xlnt::rich_text::rich_text``` +#### ```void xlnt::rich_text::clear``` +Remove all text runs from this text. +#### ```void xlnt::rich_text::plain_text``` +Clear any runs in this text and add a single run with default formatting and the given string as its textual content. +#### ```std::string xlnt::rich_text::plain_text``` +Combine the textual content of each text run in order and return the result. +#### ```std::vector xlnt::rich_text::runs``` +Returns a copy of the individual runs that comprise this text. +#### ```void xlnt::rich_text::runs``` +Set the runs of this text all at once. +#### ```void xlnt::rich_text::add_run``` +Add a new run to the end of the set of runs. +#### ```bool xlnt::rich_text::operator==``` +Returns true if the runs that make up this text are identical to those in rhs. +#### ```bool xlnt::rich_text::operator==``` +Returns true if this text has a single unformatted run with text equal to rhs. +## Packaging Module +### manifest +#### ```void xlnt::manifest::clear``` +Unregisters all default and override type and all relationships and known parts. +#### ```std::vector xlnt::manifest::parts``` +Returns the path to all internal package parts registered as a source or target of a relationship. +#### ```bool xlnt::manifest::has_relationship``` +Returns true if the manifest contains a relationship with the given type with part as the source. +#### ```bool xlnt::manifest::has_relationship``` +Returns true if the manifest contains a relationship with the given type with part as the source. +#### ```class relationship xlnt::manifest::relationship``` +Returns the relationship with "source" as the source and with a type of "type". Throws a key_not_found exception if no such relationship is found. +#### ```class relationship xlnt::manifest::relationship``` +Returns the relationship with "source" as the source and with an ID of "rel_id". Throws a key_not_found exception if no such relationship is found. +#### ```std::vector xlnt::manifest::relationships``` +Returns all relationship with "source" as the source. +#### ```std::vector xlnt::manifest::relationships``` +Returns all relationships with "source" as the source and with a type of "type". +#### ```path xlnt::manifest::canonicalize``` +Returns the canonical path of the chain of relationships by traversing through rels and forming the absolute combined path. +#### ```std::string xlnt::manifest::register_relationship``` +#### ```std::string xlnt::manifest::register_relationship``` +#### ```std::unordered_map xlnt::manifest::unregister_relationship``` +Delete the relationship with the given id from source part. Returns a mapping of relationship IDs since IDs are shifted down. For example, if there are three relationships for part a.xml like [rId1, rId2, rId3] and rId2 is deleted, the resulting map would look like [rId3->rId2]. +#### ```std::string xlnt::manifest::content_type``` +Given the path to a part, returns the content type of the part as a string. +#### ```bool xlnt::manifest::has_default_type``` +Returns true if a default content type for the extension has been registered. +#### ```std::vector xlnt::manifest::extensions_with_default_types``` +Returns a vector of all extensions with registered default content types. +#### ```std::string xlnt::manifest::default_type``` +Returns the registered default content type for parts of the given extension. +#### ```void xlnt::manifest::register_default_type``` +Associates the given extension with the given content type. +#### ```void xlnt::manifest::unregister_default_type``` +Unregisters the default content type for the given extension. +#### ```bool xlnt::manifest::has_override_type``` +Returns true if a content type overriding the default content type has been registered for the given part. +#### ```std::string xlnt::manifest::override_type``` +Returns the override content type registered for the given part. Throws key_not_found exception if no override type was found. +#### ```std::vector xlnt::manifest::parts_with_overriden_types``` +Returns the path of every part in this manifest with an overriden content type. +#### ```void xlnt::manifest::register_override_type``` +Overrides any default type registered for the part's extension with the given content type. +#### ```void xlnt::manifest::unregister_override_type``` +Unregisters the overriding content type of the given part. +### relationship +#### ```xlnt::relationship::relationship``` +#### ```xlnt::relationship::relationship``` +#### ```std::string xlnt::relationship::id``` +Returns a string of the form rId# that identifies the relationship. +#### ```relationship_type xlnt::relationship::type``` +Returns the type of this relationship. +#### ```xlnt::target_mode xlnt::relationship::target_mode``` +Returns whether the target of the relationship is internal or external to the package. +#### ```uri xlnt::relationship::source``` +Returns the URI of the package part this relationship points to. +#### ```uri xlnt::relationship::target``` +Returns the URI of the package part this relationship points to. +#### ```bool xlnt::relationship::operator==``` +Returns true if and only if rhs is equal to this relationship. +#### ```bool xlnt::relationship::operator!=``` +Returns true if and only if rhs is not equal to this relationship. +### uri +#### ```xlnt::uri::uri``` +#### ```xlnt::uri::uri``` +#### ```xlnt::uri::uri``` +#### ```xlnt::uri::uri``` +#### ```bool xlnt::uri::is_relative``` +#### ```bool xlnt::uri::is_absolute``` +#### ```std::string xlnt::uri::scheme``` +#### ```std::string xlnt::uri::authority``` +#### ```bool xlnt::uri::has_authentication``` +#### ```std::string xlnt::uri::authentication``` +#### ```std::string xlnt::uri::username``` +#### ```std::string xlnt::uri::password``` +#### ```std::string xlnt::uri::host``` +#### ```bool xlnt::uri::has_port``` +#### ```std::size_t xlnt::uri::port``` +#### ```class path xlnt::uri::path``` +#### ```bool xlnt::uri::has_query``` +#### ```std::string xlnt::uri::query``` +#### ```bool xlnt::uri::has_fragment``` +#### ```std::string xlnt::uri::fragment``` +#### ```std::string xlnt::uri::to_string``` +#### ```uri xlnt::uri::make_absolute``` +#### ```uri xlnt::uri::make_reference``` +#### ```bool operator==``` +## Styles Module +### alignment +#### ```bool xlnt::alignment::shrink``` +#### ```alignment& xlnt::alignment::shrink``` +#### ```bool xlnt::alignment::wrap``` +#### ```alignment& xlnt::alignment::wrap``` +#### ```optional xlnt::alignment::indent``` +#### ```alignment& xlnt::alignment::indent``` +#### ```optional xlnt::alignment::rotation``` +#### ```alignment& xlnt::alignment::rotation``` +#### ```optional xlnt::alignment::horizontal``` +#### ```alignment& xlnt::alignment::horizontal``` +#### ```optional xlnt::alignment::vertical``` +#### ```alignment& xlnt::alignment::vertical``` +#### ```bool operator==``` +Returns true if left is exactly equal to right. +#### ```bool operator!=``` +Returns true if left is not exactly equal to right. +### border +#### ```static const std::vector& xlnt::border::all_sides``` +#### ```xlnt::border::border``` +#### ```optional xlnt::border::side``` +#### ```border& xlnt::border::side``` +#### ```optional xlnt::border::diagonal``` +#### ```border& xlnt::border::diagonal``` +#### ```bool operator==``` +Returns true if left is exactly equal to right. +#### ```bool operator!=``` +Returns true if left is not exactly equal to right. +### border_property +#### ```optional xlnt::border::border_property::color``` +#### ```border_property& xlnt::border::border_property::color``` +#### ```optional xlnt::border::border_property::style``` +#### ```border_property& xlnt::border::border_property::style``` +#### ```bool operator==``` +Returns true if left is exactly equal to right. +#### ```bool operator!=``` +Returns true if left is not exactly equal to right. +### indexed_color +#### ```xlnt::indexed_color::indexed_color``` +#### ```std::size_t xlnt::indexed_color::index``` +#### ```void xlnt::indexed_color::index``` +### theme_color +#### ```xlnt::theme_color::theme_color``` +#### ```std::size_t xlnt::theme_color::index``` +#### ```void xlnt::theme_color::index``` +### rgb_color +#### ```xlnt::rgb_color::rgb_color``` +#### ```xlnt::rgb_color::rgb_color``` +#### ```std::string xlnt::rgb_color::hex_string``` +#### ```std::uint8_t xlnt::rgb_color::red``` +#### ```std::uint8_t xlnt::rgb_color::green``` +#### ```std::uint8_t xlnt::rgb_color::blue``` +#### ```std::uint8_t xlnt::rgb_color::alpha``` +#### ```std::array xlnt::rgb_color::rgb``` +#### ```std::array xlnt::rgb_color::rgba``` +### color +#### ```static const color xlnt::color::black``` +#### ```static const color xlnt::color::white``` +#### ```static const color xlnt::color::red``` +#### ```static const color xlnt::color::darkred``` +#### ```static const color xlnt::color::blue``` +#### ```static const color xlnt::color::darkblue``` +#### ```static const color xlnt::color::green``` +#### ```static const color xlnt::color::darkgreen``` +#### ```static const color xlnt::color::yellow``` +#### ```static const color xlnt::color::darkyellow``` +#### ```xlnt::color::color``` +#### ```xlnt::color::color``` +#### ```xlnt::color::color``` +#### ```xlnt::color::color``` +#### ```color_type xlnt::color::type``` +#### ```bool xlnt::color::is_auto``` +#### ```void xlnt::color::auto_``` +#### ```const rgb_color& xlnt::color::rgb``` +#### ```const indexed_color& xlnt::color::indexed``` +#### ```const theme_color& xlnt::color::theme``` +#### ```double xlnt::color::tint``` +#### ```void xlnt::color::tint``` +#### ```bool xlnt::color::operator==``` +#### ```bool xlnt::color::operator!=``` +### pattern_fill +#### ```xlnt::pattern_fill::pattern_fill``` +#### ```pattern_fill_type xlnt::pattern_fill::type``` +#### ```pattern_fill& xlnt::pattern_fill::type``` +#### ```optional xlnt::pattern_fill::foreground``` +#### ```pattern_fill& xlnt::pattern_fill::foreground``` +#### ```optional xlnt::pattern_fill::background``` +#### ```pattern_fill& xlnt::pattern_fill::background``` +#### ```bool operator==``` +Returns true if left is exactly equal to right. +#### ```bool operator!=``` +Returns true if left is not exactly equal to right. +### gradient_fill +#### ```xlnt::gradient_fill::gradient_fill``` +#### ```gradient_fill_type xlnt::gradient_fill::type``` +#### ```gradient_fill& xlnt::gradient_fill::type``` +#### ```gradient_fill& xlnt::gradient_fill::degree``` +#### ```double xlnt::gradient_fill::degree``` +#### ```double xlnt::gradient_fill::left``` +#### ```gradient_fill& xlnt::gradient_fill::left``` +#### ```double xlnt::gradient_fill::right``` +#### ```gradient_fill& xlnt::gradient_fill::right``` +#### ```double xlnt::gradient_fill::top``` +#### ```gradient_fill& xlnt::gradient_fill::top``` +#### ```double xlnt::gradient_fill::bottom``` +#### ```gradient_fill& xlnt::gradient_fill::bottom``` +#### ```gradient_fill& xlnt::gradient_fill::add_stop``` +#### ```gradient_fill& xlnt::gradient_fill::clear_stops``` +#### ```std::unordered_map xlnt::gradient_fill::stops``` +#### ```bool operator==``` +Returns true if left is exactly equal to right. +#### ```bool operator!=``` +Returns true if left is not exactly equal to right. +### fill +#### ```static fill xlnt::fill::solid``` +Helper method for the most common use case, setting the fill color of a cell to a single solid color. The foreground and background colors of a fill are not the same as the foreground and background colors of a cell. When setting a fill color in Excel, a new fill is created with the given color as the fill's fgColor and index color number 64 as the bgColor. This method creates a fill in the same way. +#### ```xlnt::fill::fill``` +Constructs a fill initialized as a none-type pattern fill with no foreground or background colors. +#### ```xlnt::fill::fill``` +Constructs a fill initialized as a pattern fill based on the given pattern. +#### ```xlnt::fill::fill``` +Constructs a fill initialized as a gradient fill based on the given gradient. +#### ```fill_type xlnt::fill::type``` +Returns the fill_type of this fill depending on how it was constructed. +#### ```class gradient_fill xlnt::fill::gradient_fill``` +Returns the gradient fill represented by this fill. Throws an invalid_attribute exception if this is not a gradient fill. +#### ```class pattern_fill xlnt::fill::pattern_fill``` +Returns the pattern fill represented by this fill. Throws an invalid_attribute exception if this is not a pattern fill. +#### ```bool operator==``` +Returns true if left is exactly equal to right. +#### ```bool operator!=``` +Returns true if left is not exactly equal to right. +### font +#### ```undefined``` +#### ```bool operator==``` +Returns true if left is exactly equal to right. +#### ```bool operator!=``` +Returns true if left is not exactly equal to right. +#### ```xlnt::font::font``` +#### ```font& xlnt::font::bold``` +#### ```bool xlnt::font::bold``` +#### ```font& xlnt::font::superscript``` +#### ```bool xlnt::font::superscript``` +#### ```font& xlnt::font::italic``` +#### ```bool xlnt::font::italic``` +#### ```font& xlnt::font::strikethrough``` +#### ```bool xlnt::font::strikethrough``` +#### ```font& xlnt::font::underline``` +#### ```bool xlnt::font::underlined``` +#### ```underline_style xlnt::font::underline``` +#### ```bool xlnt::font::has_size``` +#### ```font& xlnt::font::size``` +#### ```double xlnt::font::size``` +#### ```bool xlnt::font::has_name``` +#### ```font& xlnt::font::name``` +#### ```std::string xlnt::font::name``` +#### ```bool xlnt::font::has_color``` +#### ```font& xlnt::font::color``` +#### ```xlnt::color xlnt::font::color``` +#### ```bool xlnt::font::has_family``` +#### ```font& xlnt::font::family``` +#### ```std::size_t xlnt::font::family``` +#### ```bool xlnt::font::has_scheme``` +#### ```font& xlnt::font::scheme``` +#### ```std::string xlnt::font::scheme``` +### format +#### ```friend struct detail::stylesheet``` +#### ```std::size_t xlnt::format::id``` +#### ```class alignment& xlnt::format::alignment``` +#### ```const class alignment& xlnt::format::alignment``` +#### ```format xlnt::format::alignment``` +#### ```bool xlnt::format::alignment_applied``` +#### ```class border& xlnt::format::border``` +#### ```const class border& xlnt::format::border``` +#### ```format xlnt::format::border``` +#### ```bool xlnt::format::border_applied``` +#### ```class fill& xlnt::format::fill``` +#### ```const class fill& xlnt::format::fill``` +#### ```format xlnt::format::fill``` +#### ```bool xlnt::format::fill_applied``` +#### ```class font& xlnt::format::font``` +#### ```const class font& xlnt::format::font``` +#### ```format xlnt::format::font``` +#### ```bool xlnt::format::font_applied``` +#### ```class number_format& xlnt::format::number_format``` +#### ```const class number_format& xlnt::format::number_format``` +#### ```format xlnt::format::number_format``` +#### ```bool xlnt::format::number_format_applied``` +#### ```class protection& xlnt::format::protection``` +#### ```const class protection& xlnt::format::protection``` +#### ```format xlnt::format::protection``` +#### ```bool xlnt::format::protection_applied``` +#### ```bool xlnt::format::has_style``` +#### ```void xlnt::format::clear_style``` +#### ```format xlnt::format::style``` +#### ```format xlnt::format::style``` +#### ```const class style xlnt::format::style``` +### number_format +#### ```static const number_format xlnt::number_format::general``` +#### ```static const number_format xlnt::number_format::text``` +#### ```static const number_format xlnt::number_format::number``` +#### ```static const number_format xlnt::number_format::number_00``` +#### ```static const number_format xlnt::number_format::number_comma_separated1``` +#### ```static const number_format xlnt::number_format::percentage``` +#### ```static const number_format xlnt::number_format::percentage_00``` +#### ```static const number_format xlnt::number_format::date_yyyymmdd2``` +#### ```static const number_format xlnt::number_format::date_yymmdd``` +#### ```static const number_format xlnt::number_format::date_ddmmyyyy``` +#### ```static const number_format xlnt::number_format::date_dmyslash``` +#### ```static const number_format xlnt::number_format::date_dmyminus``` +#### ```static const number_format xlnt::number_format::date_dmminus``` +#### ```static const number_format xlnt::number_format::date_myminus``` +#### ```static const number_format xlnt::number_format::date_xlsx14``` +#### ```static const number_format xlnt::number_format::date_xlsx15``` +#### ```static const number_format xlnt::number_format::date_xlsx16``` +#### ```static const number_format xlnt::number_format::date_xlsx17``` +#### ```static const number_format xlnt::number_format::date_xlsx22``` +#### ```static const number_format xlnt::number_format::date_datetime``` +#### ```static const number_format xlnt::number_format::date_time1``` +#### ```static const number_format xlnt::number_format::date_time2``` +#### ```static const number_format xlnt::number_format::date_time3``` +#### ```static const number_format xlnt::number_format::date_time4``` +#### ```static const number_format xlnt::number_format::date_time5``` +#### ```static const number_format xlnt::number_format::date_time6``` +#### ```static bool xlnt::number_format::is_builtin_format``` +#### ```static const number_format& xlnt::number_format::from_builtin_id``` +#### ```xlnt::number_format::number_format``` +#### ```xlnt::number_format::number_format``` +#### ```xlnt::number_format::number_format``` +#### ```xlnt::number_format::number_format``` +#### ```void xlnt::number_format::format_string``` +#### ```void xlnt::number_format::format_string``` +#### ```std::string xlnt::number_format::format_string``` +#### ```bool xlnt::number_format::has_id``` +#### ```void xlnt::number_format::id``` +#### ```std::size_t xlnt::number_format::id``` +#### ```std::string xlnt::number_format::format``` +#### ```std::string xlnt::number_format::format``` +#### ```bool xlnt::number_format::is_date_format``` +#### ```bool operator==``` +Returns true if left is exactly equal to right. +#### ```bool operator!=``` +Returns true if left is not exactly equal to right. +### protection +#### ```static protection xlnt::protection::unlocked_and_visible``` +#### ```static protection xlnt::protection::locked_and_visible``` +#### ```static protection xlnt::protection::unlocked_and_hidden``` +#### ```static protection xlnt::protection::locked_and_hidden``` +#### ```xlnt::protection::protection``` +#### ```bool xlnt::protection::locked``` +#### ```protection& xlnt::protection::locked``` +#### ```bool xlnt::protection::hidden``` +#### ```protection& xlnt::protection::hidden``` +#### ```bool operator==``` +Returns true if left is exactly equal to right. +#### ```bool operator!=``` +Returns true if left is not exactly equal to right. +### style +#### ```friend struct detail::stylesheet``` +#### ```friend class detail::xlsx_consumer``` +#### ```xlnt::style::style``` +Delete zero-argument constructor +#### ```xlnt::style::style``` +Default copy constructor +#### ```std::string xlnt::style::name``` +Return the name of this style. +#### ```style xlnt::style::name``` +#### ```bool xlnt::style::hidden``` +#### ```style xlnt::style::hidden``` +#### ```optional xlnt::style::custom``` +#### ```style xlnt::style::custom``` +#### ```optional xlnt::style::builtin_id``` +#### ```style xlnt::style::builtin_id``` +#### ```class alignment& xlnt::style::alignment``` +#### ```const class alignment& xlnt::style::alignment``` +#### ```style xlnt::style::alignment``` +#### ```bool xlnt::style::alignment_applied``` +#### ```class border& xlnt::style::border``` +#### ```const class border& xlnt::style::border``` +#### ```style xlnt::style::border``` +#### ```bool xlnt::style::border_applied``` +#### ```class fill& xlnt::style::fill``` +#### ```const class fill& xlnt::style::fill``` +#### ```style xlnt::style::fill``` +#### ```bool xlnt::style::fill_applied``` +#### ```class font& xlnt::style::font``` +#### ```const class font& xlnt::style::font``` +#### ```style xlnt::style::font``` +#### ```bool xlnt::style::font_applied``` +#### ```class number_format& xlnt::style::number_format``` +#### ```const class number_format& xlnt::style::number_format``` +#### ```style xlnt::style::number_format``` +#### ```bool xlnt::style::number_format_applied``` +#### ```class protection& xlnt::style::protection``` +#### ```const class protection& xlnt::style::protection``` +#### ```style xlnt::style::protection``` +#### ```bool xlnt::style::protection_applied``` +#### ```bool xlnt::style::operator==``` +## Utils Module +### date +#### ```int xlnt::date::year``` +#### ```int xlnt::date::month``` +#### ```int xlnt::date::day``` +#### ```static date xlnt::date::today``` +Return the current date according to the system time. +#### ```static date xlnt::date::from_number``` +Return a date by adding days_since_base_year to base_date. This includes leap years. +#### ```xlnt::date::date``` +#### ```int xlnt::date::to_number``` +Return the number of days between this date and base_date. +#### ```int xlnt::date::weekday``` +#### ```bool xlnt::date::operator==``` +Return true if this date is equal to comparand. +### datetime +#### ```int xlnt::datetime::year``` +#### ```int xlnt::datetime::month``` +#### ```int xlnt::datetime::day``` +#### ```int xlnt::datetime::hour``` +#### ```int xlnt::datetime::minute``` +#### ```int xlnt::datetime::second``` +#### ```int xlnt::datetime::microsecond``` +#### ```static datetime xlnt::datetime::now``` +Return the current date and time according to the system time. +#### ```static datetime xlnt::datetime::today``` +Return the current date and time according to the system time. This is equivalent to datetime::now(). +#### ```static datetime xlnt::datetime::from_number``` +Return a datetime from number by converting the integer part into a date and the fractional part into a time according to date::from_number and time::from_number. +#### ```static datetime xlnt::datetime::from_iso_string``` +#### ```xlnt::datetime::datetime``` +#### ```xlnt::datetime::datetime``` +#### ```std::string xlnt::datetime::to_string``` +#### ```std::string xlnt::datetime::to_iso_string``` +#### ```long double xlnt::datetime::to_number``` +#### ```bool xlnt::datetime::operator==``` +#### ```int xlnt::datetime::weekday``` +### exception +#### ```xlnt::exception::exception``` +#### ```xlnt::exception::exception``` +#### ```virtual xlnt::exception::~exception``` +#### ```void xlnt::exception::message``` +### invalid_parameter +#### ```xlnt::invalid_parameter::invalid_parameter``` +#### ```xlnt::invalid_parameter::invalid_parameter``` +#### ```virtual xlnt::invalid_parameter::~invalid_parameter``` +### invalid_sheet_title +#### ```xlnt::invalid_sheet_title::invalid_sheet_title``` +#### ```xlnt::invalid_sheet_title::invalid_sheet_title``` +#### ```virtual xlnt::invalid_sheet_title::~invalid_sheet_title``` +### missing_number_format +#### ```xlnt::missing_number_format::missing_number_format``` +#### ```virtual xlnt::missing_number_format::~missing_number_format``` +### invalid_file +#### ```xlnt::invalid_file::invalid_file``` +#### ```xlnt::invalid_file::invalid_file``` +#### ```virtual xlnt::invalid_file::~invalid_file``` +### illegal_character +#### ```xlnt::illegal_character::illegal_character``` +#### ```xlnt::illegal_character::illegal_character``` +#### ```virtual xlnt::illegal_character::~illegal_character``` +### invalid_data_type +#### ```xlnt::invalid_data_type::invalid_data_type``` +#### ```xlnt::invalid_data_type::invalid_data_type``` +#### ```virtual xlnt::invalid_data_type::~invalid_data_type``` +### invalid_column_string_index +#### ```xlnt::invalid_column_string_index::invalid_column_string_index``` +#### ```xlnt::invalid_column_string_index::invalid_column_string_index``` +#### ```virtual xlnt::invalid_column_string_index::~invalid_column_string_index``` +### invalid_cell_reference +#### ```xlnt::invalid_cell_reference::invalid_cell_reference``` +#### ```xlnt::invalid_cell_reference::invalid_cell_reference``` +#### ```xlnt::invalid_cell_reference::invalid_cell_reference``` +#### ```virtual xlnt::invalid_cell_reference::~invalid_cell_reference``` +### invalid_attribute +#### ```xlnt::invalid_attribute::invalid_attribute``` +#### ```xlnt::invalid_attribute::invalid_attribute``` +#### ```virtual xlnt::invalid_attribute::~invalid_attribute``` +### key_not_found +#### ```xlnt::key_not_found::key_not_found``` +#### ```xlnt::key_not_found::key_not_found``` +#### ```virtual xlnt::key_not_found::~key_not_found``` +### no_visible_worksheets +#### ```xlnt::no_visible_worksheets::no_visible_worksheets``` +#### ```xlnt::no_visible_worksheets::no_visible_worksheets``` +#### ```virtual xlnt::no_visible_worksheets::~no_visible_worksheets``` +### unhandled_switch_case +#### ```xlnt::unhandled_switch_case::unhandled_switch_case``` +#### ```virtual xlnt::unhandled_switch_case::~unhandled_switch_case``` +### unsupported +#### ```xlnt::unsupported::unsupported``` +#### ```xlnt::unsupported::unsupported``` +#### ```virtual xlnt::unsupported::~unsupported``` +### optional +#### ```xlnt::optional< T >::optional``` +#### ```xlnt::optional< T >::optional``` +#### ```xlnt::optional< T >::operator bool``` +#### ```bool xlnt::optional< T >::is_set``` +#### ```void xlnt::optional< T >::set``` +#### ```T& xlnt::optional< T >::get``` +#### ```const T& xlnt::optional< T >::get``` +#### ```void xlnt::optional< T >::clear``` +#### ```optional& xlnt::optional< T >::operator=``` +#### ```bool xlnt::optional< T >::operator==``` +### path +#### ```static char xlnt::path::system_separator``` +The system-specific path separator character (e.g. '/' or '\'). +#### ```xlnt::path::path``` +Construct an empty path. +#### ```xlnt::path::path``` +Counstruct a path from a string representing the path. +#### ```xlnt::path::path``` +Construct a path from a string with an explicit directory seprator. +#### ```bool xlnt::path::is_relative``` +Return true iff this path doesn't begin with / (or a drive letter on Windows). +#### ```bool xlnt::path::is_absolute``` +Return true iff path::is_relative() is false. +#### ```bool xlnt::path::is_root``` +Return true iff this path is the root directory. +#### ```path xlnt::path::parent``` +Return a new path that points to the directory containing the current path Return the path unchanged if this path is the absolute or relative root. +#### ```std::string xlnt::path::filename``` +Return the last component of this path. +#### ```std::string xlnt::path::extension``` +Return the part of the path following the last dot in the filename. +#### ```std::pair xlnt::path::split_extension``` +Return a pair of strings resulting from splitting the filename on the last dot. +#### ```std::vector xlnt::path::split``` +Create a string representing this path separated by the provided separator or the system-default separator if not provided. +#### ```std::string xlnt::path::string``` +Create a string representing this path separated by the provided separator or the system-default separator if not provided. +#### ```path xlnt::path::resolve``` +If this path is relative, append each component of this path to base_path and return the resulting absolute path. Otherwise, the the current path will be returned and base_path will be ignored. +#### ```path xlnt::path::relative_to``` +The inverse of path::resolve. Creates a relative path from an absolute path by removing the common root between base_path and this path. If the current path is already relative, return it unchanged. +#### ```bool xlnt::path::exists``` +Return true iff the file or directory pointed to by this path exists on the filesystem. +#### ```bool xlnt::path::is_directory``` +Return true if the file or directory pointed to by this path is a directory. +#### ```bool xlnt::path::is_file``` +Return true if the file or directory pointed to by this path is a regular file. +#### ```std::string xlnt::path::read_contents``` +Open the file pointed to by this path and return a string containing the files contents. +#### ```path xlnt::path::append``` +Append the provided part to this path and return the result. +#### ```path xlnt::path::append``` +Append the provided part to this path and return the result. +#### ```bool operator==``` +Returns true if left path is equal to right path. +### path > +#### ```size_t std::hash< xlnt::path >::operator()``` +### scoped_enum_hash +#### ```std::size_t xlnt::scoped_enum_hash< Enum >::operator()``` +### time +#### ```int xlnt::time::hour``` +#### ```int xlnt::time::minute``` +#### ```int xlnt::time::second``` +#### ```int xlnt::time::microsecond``` +#### ```static time xlnt::time::now``` +Return the current time according to the system time. +#### ```static time xlnt::time::from_number``` +Return a time from a number representing a fraction of a day. The integer part of number will be ignored. 0.5 would return time(12, 0, 0, 0) or noon, halfway through the day. +#### ```xlnt::time::time``` +#### ```xlnt::time::time``` +#### ```long double xlnt::time::to_number``` +#### ```bool xlnt::time::operator==``` +### timedelta +#### ```int xlnt::timedelta::days``` +#### ```int xlnt::timedelta::hours``` +#### ```int xlnt::timedelta::minutes``` +#### ```int xlnt::timedelta::seconds``` +#### ```int xlnt::timedelta::microseconds``` +#### ```static timedelta xlnt::timedelta::from_number``` +#### ```xlnt::timedelta::timedelta``` +#### ```xlnt::timedelta::timedelta``` +#### ```long double xlnt::timedelta::to_number``` +### utf8string +#### ```static utf8string xlnt::utf8string::from_utf8``` +#### ```static utf8string xlnt::utf8string::from_latin1``` +#### ```static utf8string xlnt::utf8string::from_utf16``` +#### ```static utf8string xlnt::utf8string::from_utf32``` +#### ```bool xlnt::utf8string::is_valid``` +### variant +#### ```undefined``` +#### ```xlnt::variant::variant``` +#### ```xlnt::variant::variant``` +#### ```xlnt::variant::variant``` +#### ```xlnt::variant::variant``` +#### ```xlnt::variant::variant``` +#### ```xlnt::variant::variant``` +#### ```xlnt::variant::variant``` +#### ```xlnt::variant::variant``` +#### ```xlnt::variant::variant``` +#### ```xlnt::variant::variant``` +#### ```xlnt::variant::variant``` +#### ```xlnt::variant::variant``` +#### ```xlnt::variant::variant``` +#### ```bool xlnt::variant::is``` +#### ```T xlnt::variant::get``` +#### ```type xlnt::variant::value_type``` +## Workbook Module +### calculation_properties +#### ```std::size_t xlnt::calculation_properties::calc_id``` +#### ```bool xlnt::calculation_properties::concurrent_calc``` +### const_worksheet_iterator +#### ```xlnt::const_worksheet_iterator::const_worksheet_iterator``` +#### ```xlnt::const_worksheet_iterator::const_worksheet_iterator``` +#### ```const_worksheet_iterator& xlnt::const_worksheet_iterator::operator=``` +#### ```const worksheet xlnt::const_worksheet_iterator::operator*``` +#### ```bool xlnt::const_worksheet_iterator::operator==``` +#### ```bool xlnt::const_worksheet_iterator::operator!=``` +#### ```const_worksheet_iterator xlnt::const_worksheet_iterator::operator++``` +#### ```const_worksheet_iterator& xlnt::const_worksheet_iterator::operator++``` +### document_security +#### ```bool xlnt::document_security::lock_revision``` +#### ```bool xlnt::document_security::lock_structure``` +#### ```bool xlnt::document_security::lock_windows``` +#### ```std::string xlnt::document_security::revision_password``` +#### ```std::string xlnt::document_security::workbook_password``` +#### ```xlnt::document_security::document_security``` +### external_book +### named_range +#### ```using xlnt::named_range::target = std::pair``` +#### ```xlnt::named_range::named_range``` +#### ```xlnt::named_range::named_range``` +#### ```xlnt::named_range::named_range``` +#### ```std::string xlnt::named_range::name``` +#### ```const std::vector& xlnt::named_range::targets``` +#### ```named_range& xlnt::named_range::operator=``` +### theme +### workbook +#### ```using xlnt::workbook::iterator = worksheet_iterator``` +#### ```using xlnt::workbook::const_iterator = const_worksheet_iterator``` +#### ```using xlnt::workbook::reverse_iterator = std::reverse_iterator``` +#### ```using xlnt::workbook::const_reverse_iterator = std::reverse_iterator``` +#### ```friend class detail::xlsx_consumer``` +#### ```friend class detail::xlsx_producer``` +#### ```void swap``` +Swap the data held in workbooks "left" and "right". +#### ```static workbook xlnt::workbook::empty``` +#### ```xlnt::workbook::workbook``` +Create a workbook containing a single empty worksheet. +#### ```xlnt::workbook::workbook``` +Move construct this workbook from existing workbook "other". +#### ```xlnt::workbook::workbook``` +Copy construct this workbook from existing workbook "other". +#### ```xlnt::workbook::~workbook``` +Destroy this workbook. +#### ```worksheet xlnt::workbook::create_sheet``` +Create a sheet after the last sheet in this workbook and return it. +#### ```worksheet xlnt::workbook::create_sheet``` +Create a sheet at the specified index and return it. +#### ```worksheet xlnt::workbook::create_sheet_with_rel``` +This should be private... +#### ```void xlnt::workbook::copy_sheet``` +Create a new sheet initializing it with all of the data from the provided worksheet. +#### ```void xlnt::workbook::copy_sheet``` +Create a new sheet at the specified index initializing it with all of the data from the provided worksheet. +#### ```worksheet xlnt::workbook::active_sheet``` +Returns the worksheet that was most recently accessed. This is also the sheet that will be shown when the workbook is opened in the spreadsheet editor program. +#### ```worksheet xlnt::workbook::sheet_by_title``` +Return the worksheet with the given name. This may throw an exception if the sheet isn't found. Use workbook::contains(const std::string &) to make sure the sheet exists. +#### ```const worksheet xlnt::workbook::sheet_by_title``` +Return the const worksheet with the given name. This may throw an exception if the sheet isn't found. Use workbook::contains(const std::string &) to make sure the sheet exists. +#### ```worksheet xlnt::workbook::sheet_by_index``` +Return the worksheet at the given index. +#### ```const worksheet xlnt::workbook::sheet_by_index``` +Return the const worksheet at the given index. +#### ```worksheet xlnt::workbook::sheet_by_id``` +Return the worksheet with a sheetId of id. +#### ```const worksheet xlnt::workbook::sheet_by_id``` +Return the const worksheet with a sheetId of id. +#### ```bool xlnt::workbook::contains``` +Return true if this workbook contains a sheet with the given name. +#### ```std::size_t xlnt::workbook::index``` +Return the index of the given worksheet. The worksheet must be owned by this workbook. +#### ```void xlnt::workbook::remove_sheet``` +Remove the given worksheet from this workbook. +#### ```void xlnt::workbook::clear``` +Delete every cell in this worksheet. After this is called, the worksheet will be equivalent to a newly created sheet at the same index and with the same title. +#### ```iterator xlnt::workbook::begin``` +Returns an iterator to the first worksheet in this workbook. +#### ```iterator xlnt::workbook::end``` +Returns an iterator to the worksheet following the last worksheet of the workbook. This worksheet acts as a placeholder; attempting to access it will cause an exception to be thrown. +#### ```const_iterator xlnt::workbook::begin``` +Returns a const iterator to the first worksheet in this workbook. +#### ```const_iterator xlnt::workbook::end``` +Returns a const iterator to the worksheet following the last worksheet of the workbook. This worksheet acts as a placeholder; attempting to access it will cause an exception to be thrown. +#### ```const_iterator xlnt::workbook::cbegin``` +Returns an iterator to the first worksheet in this workbook. +#### ```const_iterator xlnt::workbook::cend``` +Returns a const iterator to the worksheet following the last worksheet of the workbook. This worksheet acts as a placeholder; attempting to access it will cause an exception to be thrown. +#### ```void xlnt::workbook::apply_to_cells``` +Apply the function "f" to every non-empty cell in every worksheet in this workbook. +#### ```std::vector xlnt::workbook::sheet_titles``` +Returns a temporary vector containing the titles of each sheet in the order of the sheets in the workbook. +#### ```std::size_t xlnt::workbook::sheet_count``` +Returns the number of sheets in this workbook. +#### ```bool xlnt::workbook::has_core_property``` +Returns true if the workbook has the core property with the given name. +#### ```std::vector xlnt::workbook::core_properties``` +#### ```variant xlnt::workbook::core_property``` +#### ```void xlnt::workbook::core_property``` +#### ```bool xlnt::workbook::has_extended_property``` +Returns true if the workbook has the extended property with the given name. +#### ```std::vector xlnt::workbook::extended_properties``` +#### ```variant xlnt::workbook::extended_property``` +#### ```void xlnt::workbook::extended_property``` +#### ```bool xlnt::workbook::has_custom_property``` +Returns true if the workbook has the custom property with the given name. +#### ```std::vector xlnt::workbook::custom_properties``` +#### ```variant xlnt::workbook::custom_property``` +#### ```void xlnt::workbook::custom_property``` +#### ```calendar xlnt::workbook::base_date``` +#### ```void xlnt::workbook::base_date``` +#### ```bool xlnt::workbook::has_title``` +#### ```std::string xlnt::workbook::title``` +#### ```void xlnt::workbook::title``` +#### ```std::vector xlnt::workbook::named_ranges``` +#### ```void xlnt::workbook::create_named_range``` +#### ```void xlnt::workbook::create_named_range``` +#### ```bool xlnt::workbook::has_named_range``` +#### ```class range xlnt::workbook::named_range``` +#### ```void xlnt::workbook::remove_named_range``` +#### ```void xlnt::workbook::save``` +#### ```void xlnt::workbook::save``` +#### ```void xlnt::workbook::save``` +#### ```void xlnt::workbook::save``` +#### ```void xlnt::workbook::save``` +#### ```void xlnt::workbook::save``` +#### ```void xlnt::workbook::save``` +#### ```void xlnt::workbook::save``` +#### ```void xlnt::workbook::load``` +#### ```void xlnt::workbook::load``` +#### ```void xlnt::workbook::load``` +#### ```void xlnt::workbook::load``` +#### ```void xlnt::workbook::load``` +#### ```void xlnt::workbook::load``` +#### ```void xlnt::workbook::load``` +#### ```void xlnt::workbook::load``` +#### ```bool xlnt::workbook::has_view``` +#### ```workbook_view xlnt::workbook::view``` +#### ```void xlnt::workbook::view``` +#### ```bool xlnt::workbook::has_code_name``` +#### ```std::string xlnt::workbook::code_name``` +#### ```void xlnt::workbook::code_name``` +#### ```bool xlnt::workbook::has_file_version``` +#### ```std::string xlnt::workbook::app_name``` +#### ```std::size_t xlnt::workbook::last_edited``` +#### ```std::size_t xlnt::workbook::lowest_edited``` +#### ```std::size_t xlnt::workbook::rup_build``` +#### ```bool xlnt::workbook::has_theme``` +#### ```const xlnt::theme& xlnt::workbook::theme``` +#### ```void xlnt::workbook::theme``` +#### ```xlnt::format xlnt::workbook::format``` +#### ```const xlnt::format xlnt::workbook::format``` +#### ```xlnt::format xlnt::workbook::create_format``` +#### ```void xlnt::workbook::clear_formats``` +#### ```bool xlnt::workbook::has_style``` +#### ```class style xlnt::workbook::style``` +#### ```const class style xlnt::workbook::style``` +#### ```class style xlnt::workbook::create_style``` +#### ```void xlnt::workbook::clear_styles``` +#### ```class manifest& xlnt::workbook::manifest``` +#### ```const class manifest& xlnt::workbook::manifest``` +#### ```void xlnt::workbook::add_shared_string``` +#### ```std::vector& xlnt::workbook::shared_strings``` +#### ```const std::vector& xlnt::workbook::shared_strings``` +#### ```void xlnt::workbook::thumbnail``` +#### ```const std::vector& xlnt::workbook::thumbnail``` +#### ```bool xlnt::workbook::has_calculation_properties``` +#### ```class calculation_properties xlnt::workbook::calculation_properties``` +#### ```void xlnt::workbook::calculation_properties``` +#### ```workbook& xlnt::workbook::operator=``` +Set the contents of this workbook to be equal to those of "other". Other is passed as value to allow for copy-swap idiom. +#### ```worksheet xlnt::workbook::operator[]``` +Return the worksheet with a title of "name". +#### ```worksheet xlnt::workbook::operator[]``` +Return the worksheet at "index". +#### ```bool xlnt::workbook::operator==``` +Return true if this workbook internal implementation points to the same memory as rhs's. +#### ```bool xlnt::workbook::operator!=``` +Return true if this workbook internal implementation doesn't point to the same memory as rhs's. +### workbook_view +#### ```bool xlnt::workbook_view::auto_filter_date_grouping``` +#### ```bool xlnt::workbook_view::minimized``` +#### ```bool xlnt::workbook_view::show_horizontal_scroll``` +#### ```bool xlnt::workbook_view::show_sheet_tabs``` +#### ```bool xlnt::workbook_view::show_vertical_scroll``` +#### ```bool xlnt::workbook_view::visible``` +#### ```optional xlnt::workbook_view::active_tab``` +#### ```optional xlnt::workbook_view::first_sheet``` +#### ```optional xlnt::workbook_view::tab_ratio``` +#### ```optional xlnt::workbook_view::window_width``` +#### ```optional xlnt::workbook_view::window_height``` +#### ```optional xlnt::workbook_view::x_window``` +#### ```optional xlnt::workbook_view::y_window``` +### worksheet_iterator +#### ```xlnt::worksheet_iterator::worksheet_iterator``` +#### ```xlnt::worksheet_iterator::worksheet_iterator``` +#### ```worksheet_iterator& xlnt::worksheet_iterator::operator=``` +#### ```worksheet xlnt::worksheet_iterator::operator*``` +#### ```bool xlnt::worksheet_iterator::operator==``` +#### ```bool xlnt::worksheet_iterator::operator!=``` +#### ```worksheet_iterator xlnt::worksheet_iterator::operator++``` +#### ```worksheet_iterator& xlnt::worksheet_iterator::operator++``` +## Worksheet Module +### cell_iterator +#### ```xlnt::cell_iterator::cell_iterator``` +#### ```xlnt::cell_iterator::cell_iterator``` +#### ```xlnt::cell_iterator::cell_iterator``` +#### ```cell xlnt::cell_iterator::operator*``` +#### ```cell_iterator& xlnt::cell_iterator::operator=``` +#### ```bool xlnt::cell_iterator::operator==``` +#### ```bool xlnt::cell_iterator::operator!=``` +#### ```cell_iterator& xlnt::cell_iterator::operator--``` +#### ```cell_iterator xlnt::cell_iterator::operator--``` +#### ```cell_iterator& xlnt::cell_iterator::operator++``` +#### ```cell_iterator xlnt::cell_iterator::operator++``` +### cell_vector +#### ```using xlnt::cell_vector::iterator = cell_iterator``` +#### ```using xlnt::cell_vector::const_iterator = const_cell_iterator``` +#### ```using xlnt::cell_vector::reverse_iterator = std::reverse_iterator``` +#### ```using xlnt::cell_vector::const_reverse_iterator = std::reverse_iterator``` +#### ```xlnt::cell_vector::cell_vector``` +#### ```cell xlnt::cell_vector::front``` +#### ```const cell xlnt::cell_vector::front``` +#### ```cell xlnt::cell_vector::back``` +#### ```const cell xlnt::cell_vector::back``` +#### ```cell xlnt::cell_vector::operator[]``` +#### ```const cell xlnt::cell_vector::operator[]``` +#### ```std::size_t xlnt::cell_vector::length``` +#### ```iterator xlnt::cell_vector::begin``` +#### ```iterator xlnt::cell_vector::end``` +#### ```const_iterator xlnt::cell_vector::begin``` +#### ```const_iterator xlnt::cell_vector::cbegin``` +#### ```const_iterator xlnt::cell_vector::end``` +#### ```const_iterator xlnt::cell_vector::cend``` +#### ```reverse_iterator xlnt::cell_vector::rbegin``` +#### ```reverse_iterator xlnt::cell_vector::rend``` +#### ```const_reverse_iterator xlnt::cell_vector::rbegin``` +#### ```const_reverse_iterator xlnt::cell_vector::rend``` +#### ```const_reverse_iterator xlnt::cell_vector::crbegin``` +#### ```const_reverse_iterator xlnt::cell_vector::crend``` +### column_properties +#### ```optional xlnt::column_properties::width``` +#### ```bool xlnt::column_properties::custom_width``` +#### ```optional xlnt::column_properties::style``` +#### ```bool xlnt::column_properties::hidden``` +### const_cell_iterator +#### ```xlnt::const_cell_iterator::const_cell_iterator``` +#### ```xlnt::const_cell_iterator::const_cell_iterator``` +#### ```xlnt::const_cell_iterator::const_cell_iterator``` +#### ```const_cell_iterator& xlnt::const_cell_iterator::operator=``` +#### ```const cell xlnt::const_cell_iterator::operator*``` +#### ```bool xlnt::const_cell_iterator::operator==``` +#### ```bool xlnt::const_cell_iterator::operator!=``` +#### ```const_cell_iterator& xlnt::const_cell_iterator::operator--``` +#### ```const_cell_iterator xlnt::const_cell_iterator::operator--``` +#### ```const_cell_iterator& xlnt::const_cell_iterator::operator++``` +#### ```const_cell_iterator xlnt::const_cell_iterator::operator++``` +### const_range_iterator +#### ```xlnt::const_range_iterator::const_range_iterator``` +#### ```xlnt::const_range_iterator::const_range_iterator``` +#### ```const cell_vector xlnt::const_range_iterator::operator*``` +#### ```const_range_iterator& xlnt::const_range_iterator::operator=``` +#### ```bool xlnt::const_range_iterator::operator==``` +#### ```bool xlnt::const_range_iterator::operator!=``` +#### ```const_range_iterator& xlnt::const_range_iterator::operator--``` +#### ```const_range_iterator xlnt::const_range_iterator::operator--``` +#### ```const_range_iterator& xlnt::const_range_iterator::operator++``` +#### ```const_range_iterator xlnt::const_range_iterator::operator++``` +### header_footer +#### ```undefined``` +#### ```bool xlnt::header_footer::has_header``` +True if any text has been added for a header at any location on any page. +#### ```bool xlnt::header_footer::has_footer``` +True if any text has been added for a footer at any location on any page. +#### ```bool xlnt::header_footer::align_with_margins``` +True if headers and footers should align to the page margins. +#### ```header_footer& xlnt::header_footer::align_with_margins``` +Set to true if headers and footers should align to the page margins. Set to false if headers and footers should align to the edge of the page. +#### ```bool xlnt::header_footer::different_odd_even``` +True if headers and footers differ based on page number. +#### ```bool xlnt::header_footer::different_first``` +True if headers and footers are different on the first page. +#### ```bool xlnt::header_footer::scale_with_doc``` +True if headers and footers should scale to match the worksheet. +#### ```header_footer& xlnt::header_footer::scale_with_doc``` +Set to true if headers and footers should scale to match the worksheet. +#### ```bool xlnt::header_footer::has_header``` +True if any text has been added at the given location on any page. +#### ```void xlnt::header_footer::clear_header``` +Remove all headers from all pages. +#### ```void xlnt::header_footer::clear_header``` +Remove header at the given location on any page. +#### ```header_footer& xlnt::header_footer::header``` +Add a header at the given location with the given text. +#### ```header_footer& xlnt::header_footer::header``` +Add a header at the given location with the given text. +#### ```rich_text xlnt::header_footer::header``` +Get the text of the header at the given location. If headers are different on odd and even pages, the odd header will be returned. +#### ```bool xlnt::header_footer::has_first_page_header``` +True if a header has been set for the first page at any location. +#### ```bool xlnt::header_footer::has_first_page_header``` +True if a header has been set for the first page at the given location. +#### ```void xlnt::header_footer::clear_first_page_header``` +Remove all headers from the first page. +#### ```void xlnt::header_footer::clear_first_page_header``` +Remove header from the first page at the given location. +#### ```header_footer& xlnt::header_footer::first_page_header``` +Add a header on the first page at the given location with the given text. +#### ```rich_text xlnt::header_footer::first_page_header``` +Get the text of the first page header at the given location. If no first page header has been set, the general header for that location will be returned. +#### ```bool xlnt::header_footer::has_odd_even_header``` +True if different headers have been set for odd and even pages. +#### ```bool xlnt::header_footer::has_odd_even_header``` +True if different headers have been set for odd and even pages at the given location. +#### ```void xlnt::header_footer::clear_odd_even_header``` +Remove odd/even headers at all locations. +#### ```void xlnt::header_footer::clear_odd_even_header``` +Remove odd/even headers at the given location. +#### ```header_footer& xlnt::header_footer::odd_even_header``` +Add a header for odd pages at the given location with the given text. +#### ```rich_text xlnt::header_footer::odd_header``` +Get the text of the odd page header at the given location. If no odd page header has been set, the general header for that location will be returned. +#### ```rich_text xlnt::header_footer::even_header``` +Get the text of the even page header at the given location. If no even page header has been set, the general header for that location will be returned. +#### ```bool xlnt::header_footer::has_footer``` +True if any text has been added at the given location on any page. +#### ```void xlnt::header_footer::clear_footer``` +Remove all footers from all pages. +#### ```void xlnt::header_footer::clear_footer``` +Remove footer at the given location on any page. +#### ```header_footer& xlnt::header_footer::footer``` +Add a footer at the given location with the given text. +#### ```header_footer& xlnt::header_footer::footer``` +Add a footer at the given location with the given text. +#### ```rich_text xlnt::header_footer::footer``` +Get the text of the footer at the given location. If footers are different on odd and even pages, the odd footer will be returned. +#### ```bool xlnt::header_footer::has_first_page_footer``` +True if a footer has been set for the first page at any location. +#### ```bool xlnt::header_footer::has_first_page_footer``` +True if a footer has been set for the first page at the given location. +#### ```void xlnt::header_footer::clear_first_page_footer``` +Remove all footers from the first page. +#### ```void xlnt::header_footer::clear_first_page_footer``` +Remove footer from the first page at the given location. +#### ```header_footer& xlnt::header_footer::first_page_footer``` +Add a footer on the first page at the given location with the given text. +#### ```rich_text xlnt::header_footer::first_page_footer``` +Get the text of the first page footer at the given location. If no first page footer has been set, the general footer for that location will be returned. +#### ```bool xlnt::header_footer::has_odd_even_footer``` +True if different footers have been set for odd and even pages. +#### ```bool xlnt::header_footer::has_odd_even_footer``` +True if different footers have been set for odd and even pages at the given location. +#### ```void xlnt::header_footer::clear_odd_even_footer``` +Remove odd/even footers at all locations. +#### ```void xlnt::header_footer::clear_odd_even_footer``` +Remove odd/even footers at the given location. +#### ```header_footer& xlnt::header_footer::odd_even_footer``` +Add a footer for odd pages at the given location with the given text. +#### ```rich_text xlnt::header_footer::odd_footer``` +Get the text of the odd page footer at the given location. If no odd page footer has been set, the general footer for that location will be returned. +#### ```rich_text xlnt::header_footer::even_footer``` +Get the text of the even page footer at the given location. If no even page footer has been set, the general footer for that location will be returned. +### page_margins +#### ```xlnt::page_margins::page_margins``` +#### ```double xlnt::page_margins::top``` +#### ```void xlnt::page_margins::top``` +#### ```double xlnt::page_margins::left``` +#### ```void xlnt::page_margins::left``` +#### ```double xlnt::page_margins::bottom``` +#### ```void xlnt::page_margins::bottom``` +#### ```double xlnt::page_margins::right``` +#### ```void xlnt::page_margins::right``` +#### ```double xlnt::page_margins::header``` +#### ```void xlnt::page_margins::header``` +#### ```double xlnt::page_margins::footer``` +#### ```void xlnt::page_margins::footer``` +### page_setup +#### ```xlnt::page_setup::page_setup``` +#### ```xlnt::page_break xlnt::page_setup::page_break``` +#### ```void xlnt::page_setup::page_break``` +#### ```xlnt::sheet_state xlnt::page_setup::sheet_state``` +#### ```void xlnt::page_setup::sheet_state``` +#### ```xlnt::paper_size xlnt::page_setup::paper_size``` +#### ```void xlnt::page_setup::paper_size``` +#### ```xlnt::orientation xlnt::page_setup::orientation``` +#### ```void xlnt::page_setup::orientation``` +#### ```bool xlnt::page_setup::fit_to_page``` +#### ```void xlnt::page_setup::fit_to_page``` +#### ```bool xlnt::page_setup::fit_to_height``` +#### ```void xlnt::page_setup::fit_to_height``` +#### ```bool xlnt::page_setup::fit_to_width``` +#### ```void xlnt::page_setup::fit_to_width``` +#### ```void xlnt::page_setup::horizontal_centered``` +#### ```bool xlnt::page_setup::horizontal_centered``` +#### ```void xlnt::page_setup::vertical_centered``` +#### ```bool xlnt::page_setup::vertical_centered``` +#### ```void xlnt::page_setup::scale``` +#### ```double xlnt::page_setup::scale``` +### pane +#### ```optional xlnt::pane::top_left_cell``` +#### ```pane_state xlnt::pane::state``` +#### ```pane_corner xlnt::pane::active_pane``` +#### ```row_t xlnt::pane::y_split``` +#### ```column_t xlnt::pane::x_split``` +#### ```bool xlnt::pane::operator==``` +### range +#### ```using xlnt::range::iterator = range_iterator``` +#### ```using xlnt::range::const_iterator = const_range_iterator``` +#### ```using xlnt::range::reverse_iterator = std::reverse_iterator``` +#### ```using xlnt::range::const_reverse_iterator = std::reverse_iterator``` +#### ```xlnt::range::range``` +#### ```xlnt::range::~range``` +#### ```xlnt::range::range``` +#### ```cell_vector xlnt::range::operator[]``` +#### ```const cell_vector xlnt::range::operator[]``` +#### ```bool xlnt::range::operator==``` +#### ```bool xlnt::range::operator!=``` +#### ```cell_vector xlnt::range::vector``` +#### ```const cell_vector xlnt::range::vector``` +#### ```class cell xlnt::range::cell``` +#### ```const class cell xlnt::range::cell``` +#### ```range_reference xlnt::range::reference``` +#### ```std::size_t xlnt::range::length``` +#### ```bool xlnt::range::contains``` +#### ```iterator xlnt::range::begin``` +#### ```iterator xlnt::range::end``` +#### ```const_iterator xlnt::range::begin``` +#### ```const_iterator xlnt::range::end``` +#### ```const_iterator xlnt::range::cbegin``` +#### ```const_iterator xlnt::range::cend``` +#### ```reverse_iterator xlnt::range::rbegin``` +#### ```reverse_iterator xlnt::range::rend``` +#### ```const_reverse_iterator xlnt::range::rbegin``` +#### ```const_reverse_iterator xlnt::range::rend``` +#### ```const_reverse_iterator xlnt::range::crbegin``` +#### ```const_reverse_iterator xlnt::range::crend``` +### range_iterator +#### ```xlnt::range_iterator::range_iterator``` +#### ```xlnt::range_iterator::range_iterator``` +#### ```cell_vector xlnt::range_iterator::operator*``` +#### ```range_iterator& xlnt::range_iterator::operator=``` +#### ```bool xlnt::range_iterator::operator==``` +#### ```bool xlnt::range_iterator::operator!=``` +#### ```range_iterator& xlnt::range_iterator::operator--``` +#### ```range_iterator xlnt::range_iterator::operator--``` +#### ```range_iterator& xlnt::range_iterator::operator++``` +#### ```range_iterator xlnt::range_iterator::operator++``` +### range_reference +#### ```static range_reference xlnt::range_reference::make_absolute``` +Convert a coordinate to an absolute coordinate string (B12 -> $B$12) +#### ```xlnt::range_reference::range_reference``` +#### ```xlnt::range_reference::range_reference``` +#### ```xlnt::range_reference::range_reference``` +#### ```xlnt::range_reference::range_reference``` +#### ```xlnt::range_reference::range_reference``` +#### ```xlnt::range_reference::range_reference``` +#### ```bool xlnt::range_reference::is_single_cell``` +#### ```std::size_t xlnt::range_reference::width``` +#### ```std::size_t xlnt::range_reference::height``` +#### ```cell_reference xlnt::range_reference::top_left``` +#### ```cell_reference xlnt::range_reference::bottom_right``` +#### ```cell_reference& xlnt::range_reference::top_left``` +#### ```cell_reference& xlnt::range_reference::bottom_right``` +#### ```range_reference xlnt::range_reference::make_offset``` +#### ```std::string xlnt::range_reference::to_string``` +#### ```bool xlnt::range_reference::operator==``` +#### ```bool xlnt::range_reference::operator==``` +#### ```bool xlnt::range_reference::operator==``` +#### ```bool xlnt::range_reference::operator!=``` +#### ```bool xlnt::range_reference::operator!=``` +#### ```bool xlnt::range_reference::operator!=``` +#### ```bool operator==``` +#### ```bool operator==``` +#### ```bool operator!=``` +#### ```bool operator!=``` +### row_properties +#### ```optional xlnt::row_properties::height``` +#### ```bool xlnt::row_properties::custom_height``` +#### ```bool xlnt::row_properties::hidden``` +#### ```optional xlnt::row_properties::style``` +### selection +#### ```bool xlnt::selection::has_active_cell``` +#### ```cell_reference xlnt::selection::active_cell``` +#### ```void xlnt::selection::active_cell``` +#### ```range_reference xlnt::selection::sqref``` +#### ```pane_corner xlnt::selection::pane``` +#### ```void xlnt::selection::pane``` +#### ```bool xlnt::selection::operator==``` +### sheet_protection +#### ```static std::string xlnt::sheet_protection::hash_password``` +#### ```void xlnt::sheet_protection::password``` +#### ```std::string xlnt::sheet_protection::hashed_password``` +### sheet_view +#### ```void xlnt::sheet_view::id``` +#### ```std::size_t xlnt::sheet_view::id``` +#### ```bool xlnt::sheet_view::has_pane``` +#### ```struct pane& xlnt::sheet_view::pane``` +#### ```const struct pane& xlnt::sheet_view::pane``` +#### ```void xlnt::sheet_view::clear_pane``` +#### ```void xlnt::sheet_view::pane``` +#### ```bool xlnt::sheet_view::has_selections``` +#### ```void xlnt::sheet_view::add_selection``` +#### ```void xlnt::sheet_view::clear_selections``` +#### ```std::vector xlnt::sheet_view::selections``` +#### ```class xlnt::selection& xlnt::sheet_view::selection``` +#### ```void xlnt::sheet_view::show_grid_lines``` +#### ```bool xlnt::sheet_view::show_grid_lines``` +#### ```void xlnt::sheet_view::default_grid_color``` +#### ```bool xlnt::sheet_view::default_grid_color``` +#### ```void xlnt::sheet_view::type``` +#### ```sheet_view_type xlnt::sheet_view::type``` +#### ```bool xlnt::sheet_view::operator==``` +### worksheet +#### ```using xlnt::worksheet::iterator = range_iterator``` +Iterate over a non-const worksheet with an iterator of this type. +#### ```using xlnt::worksheet::const_iterator = const_range_iterator``` +Iterate over a non-const worksheet with an iterator of this type. +#### ```using xlnt::worksheet::reverse_iterator = std::reverse_iterator``` +Iterate in reverse over a non-const worksheet with an iterator of this type. +#### ```using xlnt::worksheet::const_reverse_iterator = std::reverse_iterator``` +Iterate in reverse order over a const worksheet with an iterator of this type. +#### ```class range const cell_reference& xlnt::worksheet::bottom_right``` +#### ```const class range const cell_reference& bottom_right xlnt::worksheet::const``` +#### ```friend class detail::xlsx_consumer``` +#### ```friend class detail::xlsx_producer``` +#### ```xlnt::worksheet::worksheet``` +Construct a null worksheet. No methods should be called on such a worksheet. +#### ```xlnt::worksheet::worksheet``` +Copy constructor. This worksheet will point to the same memory as rhs's worksheet. +#### ```class workbook& xlnt::worksheet::workbook``` +Returns a reference to the workbook this worksheet is owned by. +#### ```const class workbook& xlnt::worksheet::workbook``` +Returns a reference to the workbook this worksheet is owned by. +#### ```void xlnt::worksheet::garbage_collect``` +Deletes data held in the worksheet that does not affect the internal data or display. For example, unreference styles and empty cells will be removed. +#### ```std::size_t xlnt::worksheet::id``` +Returns the unique numeric identifier of this worksheet. This will sometimes but not necessarily be the index of the worksheet in the workbook. +#### ```void xlnt::worksheet::id``` +Set the unique numeric identifier. The id defaults to the lowest unused id in the workbook so this should not be called without a good reason. +#### ```std::string xlnt::worksheet::title``` +Returns the title of this sheet. +#### ```void xlnt::worksheet::title``` +Sets the title of this sheet. +#### ```cell_reference xlnt::worksheet::frozen_panes``` +Returns the top left corner of the region above and to the left of which panes are frozen. +#### ```void xlnt::worksheet::freeze_panes``` +Freeze panes above and to the left of top_left_cell. +#### ```void xlnt::worksheet::freeze_panes``` +Freeze panes above and to the left of top_left_coordinate. +#### ```void xlnt::worksheet::unfreeze_panes``` +Remove frozen panes. The data in those panes will be unaffectedthis affects only the view. +#### ```bool xlnt::worksheet::has_frozen_panes``` +Returns true if this sheet has a frozen row, frozen column, or both. +#### ```class cell xlnt::worksheet::cell``` +#### ```const class cell xlnt::worksheet::cell``` +#### ```class cell xlnt::worksheet::cell``` +#### ```const class cell xlnt::worksheet::cell``` +#### ```bool xlnt::worksheet::has_cell``` +#### ```class range xlnt::worksheet::range``` +#### ```class range xlnt::worksheet::range``` +#### ```const class range xlnt::worksheet::range``` +#### ```const class range xlnt::worksheet::range``` +#### ```class range xlnt::worksheet::rows``` +#### ```class range xlnt::worksheet::rows``` +#### ```class range xlnt::worksheet::rows``` +#### ```class range xlnt::worksheet::rows``` +#### ```class range xlnt::worksheet::columns``` +#### ```xlnt::column_properties& xlnt::worksheet::column_properties``` +#### ```const xlnt::column_properties& xlnt::worksheet::column_properties``` +#### ```bool xlnt::worksheet::has_column_properties``` +#### ```void xlnt::worksheet::add_column_properties``` +#### ```double xlnt::worksheet::column_width``` +Calculate the width of the given column. This will be the default column width if a custom width is not set on this column's column_properties. +#### ```xlnt::row_properties& xlnt::worksheet::row_properties``` +#### ```const xlnt::row_properties& xlnt::worksheet::row_properties``` +#### ```bool xlnt::worksheet::has_row_properties``` +#### ```void xlnt::worksheet::add_row_properties``` +#### ```double xlnt::worksheet::row_height``` +Calculate the height of the given row. This will be the default row height if a custom height is not set on this row's row_properties. +#### ```cell_reference xlnt::worksheet::point_pos``` +#### ```cell_reference xlnt::worksheet::point_pos``` +#### ```std::string xlnt::worksheet::unique_sheet_name``` +#### ```void xlnt::worksheet::create_named_range``` +#### ```void xlnt::worksheet::create_named_range``` +#### ```bool xlnt::worksheet::has_named_range``` +#### ```class range xlnt::worksheet::named_range``` +#### ```void xlnt::worksheet::remove_named_range``` +#### ```row_t xlnt::worksheet::lowest_row``` +#### ```row_t xlnt::worksheet::highest_row``` +#### ```row_t xlnt::worksheet::next_row``` +#### ```column_t xlnt::worksheet::lowest_column``` +#### ```column_t xlnt::worksheet::highest_column``` +#### ```range_reference xlnt::worksheet::calculate_dimension``` +#### ```void xlnt::worksheet::merge_cells``` +#### ```void xlnt::worksheet::merge_cells``` +#### ```void xlnt::worksheet::merge_cells``` +#### ```void xlnt::worksheet::unmerge_cells``` +#### ```void xlnt::worksheet::unmerge_cells``` +#### ```void xlnt::worksheet::unmerge_cells``` +#### ```std::vector xlnt::worksheet::merged_ranges``` +#### ```void xlnt::worksheet::append``` +#### ```void xlnt::worksheet::append``` +#### ```void xlnt::worksheet::append``` +#### ```void xlnt::worksheet::append``` +#### ```void xlnt::worksheet::append``` +#### ```void xlnt::worksheet::append``` +#### ```bool xlnt::worksheet::operator==``` +#### ```bool xlnt::worksheet::operator!=``` +#### ```bool xlnt::worksheet::operator==``` +#### ```bool xlnt::worksheet::operator!=``` +#### ```void xlnt::worksheet::operator=``` +#### ```class cell xlnt::worksheet::operator[]``` +#### ```const class cell xlnt::worksheet::operator[]``` +#### ```class range xlnt::worksheet::operator[]``` +#### ```const class range xlnt::worksheet::operator[]``` +#### ```class range xlnt::worksheet::operator[]``` +#### ```const class range xlnt::worksheet::operator[]``` +#### ```class range xlnt::worksheet::operator``` +#### ```const class range xlnt::worksheet::operator``` +#### ```bool xlnt::worksheet::compare``` +#### ```bool xlnt::worksheet::has_page_setup``` +#### ```xlnt::page_setup xlnt::worksheet::page_setup``` +#### ```void xlnt::worksheet::page_setup``` +#### ```bool xlnt::worksheet::has_page_margins``` +#### ```xlnt::page_margins xlnt::worksheet::page_margins``` +#### ```void xlnt::worksheet::page_margins``` +#### ```range_reference xlnt::worksheet::auto_filter``` +#### ```void xlnt::worksheet::auto_filter``` +#### ```void xlnt::worksheet::auto_filter``` +#### ```void xlnt::worksheet::auto_filter``` +#### ```void xlnt::worksheet::clear_auto_filter``` +#### ```bool xlnt::worksheet::has_auto_filter``` +#### ```void xlnt::worksheet::reserve``` +#### ```bool xlnt::worksheet::has_header_footer``` +#### ```class header_footer xlnt::worksheet::header_footer``` +#### ```void xlnt::worksheet::header_footer``` +#### ```void xlnt::worksheet::parent``` +#### ```std::vector xlnt::worksheet::formula_attributes``` +#### ```xlnt::sheet_state xlnt::worksheet::sheet_state``` +#### ```void xlnt::worksheet::sheet_state``` +#### ```iterator xlnt::worksheet::begin``` +#### ```iterator xlnt::worksheet::end``` +#### ```const_iterator xlnt::worksheet::begin``` +#### ```const_iterator xlnt::worksheet::end``` +#### ```const_iterator xlnt::worksheet::cbegin``` +#### ```const_iterator xlnt::worksheet::cend``` +#### ```class range xlnt::worksheet::iter_cells``` +#### ```void xlnt::worksheet::print_title_rows``` +#### ```void xlnt::worksheet::print_title_rows``` +#### ```void xlnt::worksheet::print_title_cols``` +#### ```void xlnt::worksheet::print_title_cols``` +#### ```std::string xlnt::worksheet::print_titles``` +#### ```void xlnt::worksheet::print_area``` +#### ```range_reference xlnt::worksheet::print_area``` +#### ```bool xlnt::worksheet::has_view``` +#### ```sheet_view xlnt::worksheet::view``` +#### ```void xlnt::worksheet::add_view``` +#### ```void xlnt::worksheet::clear_page_breaks``` +Remove all manual column and row page breaks (represented as dashed blue lines in the page view in Excel). +#### ```const std::vector& xlnt::worksheet::page_break_rows``` +Returns vector where each element represents a row which will break a page below it. +#### ```void xlnt::worksheet::page_break_at_row``` +Add a page break at the given row. +#### ```const std::vector& xlnt::worksheet::page_break_columns``` +Returns vector where each element represents a column which will break a page to the right. +#### ```void xlnt::worksheet::page_break_at_column``` +Add a page break at the given column. +### worksheet_properties diff --git a/docs/source/includes/_contributing.md b/docs/source/includes/_contributing.md new file mode 100644 index 00000000..29f07242 --- /dev/null +++ b/docs/source/includes/_contributing.md @@ -0,0 +1,31 @@ +# Contributing to xlnt + +xlnt welcomes contributions from everyone regardless of skill level (provided you can write C++ or documentation). + +## Getting Started + +Look through the list of issues to find something interesting to work on. Help is appreciated with any issues, but important timely issues are labeled as "help wanted". Issues labeled "docs" might be good for those who want to contribute without having to know too much C++. You might also find something that the code is missing without an associated issue. That's fine to work on to, but it might be best to make an issue first in case someone else is working on it. + +## Contributions + +Contributions to xlnt should be made in the form of pull requests on GitHub. Each pull request will be reviewed and either merged into the current development branch or given feedback for changes that would be required to do so. + +All code in this repository is under the MIT License. You should agree to these terms before submitting any code to xlnt. + +## Pull Request Checklist + +- Branch from the head of the current development branch. Until version 1.0 is released, this the master branch. + +- Commits should be as small as possible, while ensuring that each commit is correct independently (i.e. each commit should compile and pass all tests). Commits that don't follow the coding style indicated in .clang-format (e.g. indentation) are less likely to be accepted until they are fixed. + +- If your pull request is not getting reviewed or you need a specific person to review it, you can @-reply a reviewer asking for a review in the pull request or a comment. + +- Add tests relevant to the fixed defect or new feature. It's best to do this before making any changes, make sure that the tests fail, then make changes ensuring that it ultimately passes the tests (i.e. TDD). xlnt uses cxxtest for testing. Tests are contained in a tests directory inside each module (e.g. source/workbook/tests/test_workbook.hpp) in the form of a header file. Each test is a separate function with a name that starts like "test_". See http://cxxtest.com/guide.html for information about CxxTest or take a look at existing tests. + +## Conduct + +Just try to be nice--we're all volunteers here. + +## Communication + +Add a comment to an existing issue on GitHub, open a new issue for defects or feature requests, or contact @tfussell if you want. diff --git a/docs/source/includes/_formatting.md b/docs/source/includes/_formatting.md new file mode 100644 index 00000000..c1343935 --- /dev/null +++ b/docs/source/includes/_formatting.md @@ -0,0 +1,37 @@ + +# Formatting + +## Format vs. Style + +```c++ +#include +#include + +int main() +{ + xlnt::workbook wb; + auto cell = wb.active_sheet().cell("A1"); + return 0; +} +``` + +In the context of xlnt, format and style have specific distinct meanings. A style in xlnt corresponds to a named style created in the "Cell styles" dropdown in Excel. It must have a name and optionally any of: alignment, border, fill, font, number format, protection. A format in xlnt corresponds to the alignment, border, fill, font, number format, and protection settings applied to a cell via right-click->"Format Cells". A cell can have both a format and a style. The style properties will generally override the format properties. + +## Number Formatting + +```c++ +#include +#include + +int main() +{ + xlnt::workbook wb; + auto cell = wb.active_sheet().cell("A1"); + cell.number_format(xlnt::number_format::percentage()); + cell.value(0.513); + std::cout << cell.to_string() << std::endl; + return 0; +} +``` + +An xlnt::number_format is the format code used when displaying a value in a cell. For example, a number_format of "0.00" implies that the number 13.726 should be displayed as "13.73". Many number formats are built-in to Excel and can be access with xlnt::number_format static constructors. Other custom number formats can be created by passing a string to the [xlnt::number_format constructor](#cell-const-cell-amp). diff --git a/docs/source/includes/_getting_started.md b/docs/source/includes/_getting_started.md new file mode 100644 index 00000000..7f630516 --- /dev/null +++ b/docs/source/includes/_getting_started.md @@ -0,0 +1,20 @@ + +# Getting Started + +## Getting xlnt + +### Binaries + +### Homebrew + +### Arch + +### vcpkg + +## Compiling from Source + +### CMake + +### Dependencies + +### Static vs. Dynamic diff --git a/docs/source/includes/_introduction.md b/docs/source/includes/_introduction.md new file mode 100644 index 00000000..5e6eb4e9 --- /dev/null +++ b/docs/source/includes/_introduction.md @@ -0,0 +1,79 @@ + +# Introduction + +```c++ +#include + +int main() +{ + xlnt::workbook wb; + xlnt::worksheet ws = wb.active_sheet(); + ws.cell("A1").value(5); + ws.cell("B2").value("string data"); + ws.cell("C3").formula("=RAND()"); + ws.merge_cells("C3:C4"); + ws.freeze_panes("B2"); + wb.save("xlnt.xlsx"); + return 0; +} +``` + +xlnt is a C++14 library for reading, writing, and modifying XLSX files as described in [ECMA 376](http://www.ecma-international.org/publications/standards/Ecma-376.htm). The API is based on [openpyxl](https://bitbucket.org/openpyxl/openpyxl), a Python library to read/write Excel 2007 xlsx/xlsm files, and ultimately on [PHPExcel](https://github.com/PHPOffice/PHPExcel), pure PHP library for reading and writing spreadsheet files upon which openpyxl was based. This project is still very much a work in progress, but the core development work is complete. + +## Features + +| Feature | Read | Edit | Write | +|---------------------------------------------------------------------|------|------|-------| +| Excel-style Workbook | ✓ | ✓ | ✓ | +| LibreOffice-style Workbook | ✓ | ✓ | ✓ | +| Numbers-style Workbook | ✓ | ✓ | ✓ | +| Encrypted Workbook (Excel 2007-2010) | ✓ | ✓ | | +| Encrypted Workbook (Excel 2013-2016) | ✓ | ✓ | | +| Excel Binary Workbook (.xlsb) | | | | +| Excel Macro-Enabled Workbook (.xlsm) | | | | +| Excel Macro-Enabled Template (.xltm) | | | | +| Document Properties | ✓ | ✓ | ✓ | +| Numeric Cell Values | ✓ | ✓ | ✓ | +| Inline String Cell Values | ✓ | ✓ | ✓ | +| Shared String Cell Values | ✓ | ✓ | ✓ | +| Shared String Text Run Formatting (e.g. varied fonts within a cell) | ✓ | ✓ | ✓ | +| Hyperlink Cell Values | | | | +| Formula Cell Values | | | | +| Formula Evaluation | | | | +| Page Margins | ✓ | ✓ | ✓ | +| Page Setup | | | | +| Print Area | | | | +| Comments | ✓ | ✓ | | +| Header and Footer | | | | +| Custom Views | | | | +| Charts | | | | +| Chartsheets | | | | +| Dialogsheets | | | | +| Themes | ✓ | | ✓ | +| Cell Styles | ✓ | ✓ | ✓ | +| Cell Formats | ✓ | ✓ | ✓ | +| Formatting->Alignment (e.g. right align) | ✓ | ✓ | ✓ | +| Formatting->Border (e.g. red cell outline) | ✓ | ✓ | ✓ | +| Formatting->Fill (e.g. green cell background) | ✓ | ✓ | ✓ | +| Formatting->Font (e.g. blue cell text) | ✓ | ✓ | ✓ | +| Formatting->Number Format (e.g. show 2 decimals) | ✓ | ✓ | ✓ | +| Formatting->Protection (e.g. hide formulas) | ✓ | ✓ | ✓ | +| Column Styles | | | | +| Row Styles | | | | +| Sheet Styles | | | | +| Conditional Formatting | | | | +| Tables | | | | +| Table Formatting | | | | +| Pivot Tables | | | | +| XLSX Thumbnail | ✓ | | ✓ | +| Custom OOXML Properties | | | | +| Custom OOXML Parts | | | | +| Drawing | | | | +| Text Box | | | | +| WordArt | | | | +| Embedded Content (e.g. images) | | | | +| Excel VBA | | | | + +## Performance + +Creates a new workbook and writes 1 million cells to a file in X seconds using a fully optimized build on Windows 10 with MSVC 2015. diff --git a/docs/source/includes/_license.md b/docs/source/includes/_license.md new file mode 100644 index 00000000..1a43cdf4 --- /dev/null +++ b/docs/source/includes/_license.md @@ -0,0 +1,361 @@ +# License + +## [xlnt](https://github.com/tfussell/xlnt) + +>[MIT License](https://github.com/tfussell/xlnt/blob/master/LICENSE.md) + +``` +Copyright (c) 2014-2017 Thomas Fussell + +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. +``` + +## [POLE](http://www.dimin.net/software/pole/) + +>[BSD 2-Clause License](https://bitbucket.org/dimin/pole/src/c15e513bdce4c3a52b3dbc925d4d2bb520dc71d8/pole/LICENSE) + +``` +POLE - Portable C++ library to access OLE Storage +Copyright (C) 2002-2007 Ariya Hidayat (ariya@kde.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 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. +``` + +## [Crypto++](https://www.cryptopp.com/) + +>[Boost Software License - Version 1.0](https://www.cryptopp.com/License.txt) + +``` +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +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, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +``` + +## [libstudxml](http://www.codesynthesis.com/projects/libstudxml/) + +>[MIT License](http://www.codesynthesis.com/licenses/mit.txt) + +``` +Summary: Everything is licensed under the MIT License (text below). + +Code found in the xml/details/expat/ directory is distributed under +the MIT License (see the xml/details/expat/LICENSE file for copyright +information). + +Code found in the xml/details/genx/ directory is distributed under +the MIT License (see the xml/details/genx/LICENSE file for copyright +information). + +The rest is Copyright (c) 2013-2014 Code Synthesis Tools CC and is +distributed under the MIT License: + +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. +``` + +## [zlib](http://www.zlib.net/) + +>[zlib License](http://www.zlib.net/zlib_license.html) + +``` + (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 +``` + +## [CxxTest](http://cxxtest.com/) + +>[LGPL License](https://github.com/CxxTest/cxxtest/blob/master/COPYING) + +``` + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. +``` + +## [PartIO](https://www.disneyanimation.com/technology/partio.html) + +>[BSD 3-Clause License (with specific non-attribution clause)](https://github.com/wdas/partio/blob/master/src/lib/io/ZIP.h) + +``` +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* 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. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER 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 BASED 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 DAMAGES. +``` diff --git a/docs/source/includes/_memory_model.md b/docs/source/includes/_memory_model.md new file mode 100644 index 00000000..f592addc --- /dev/null +++ b/docs/source/includes/_memory_model.md @@ -0,0 +1,31 @@ + +# Memory Model + +```c++ +#include +#include + +void set_cell(xlnt::cell cell, int value) +{ + cell.value(value); +} + +xlnt::workbook create_wb() +{ + xlnt::workbook wb; + auto ws = wb.active_sheet(); + set_cell(wb.cell("A1"), 2); + return wb; +} + +int main() +{ + auto wb = create_wb(); + std::cout << wb.value() << std::endl; + return 0; +} +``` + +xlnt uses the pimpl idiom for most of its core data structures. This primary reason for choosing this technique was simplifying usage of the library. Instead of using pointers or references, classes can be passed around by value. Internally they hold a pointer to memory which is within the primary workbook implementation struct. Methods called on the wrapper object dereference the opaque pointer and manipulate its data directly. + +For the user, this means that workbooks, worksheets, cells, formats, and styles can be passed and stored by value. diff --git a/docs/source/index.html.md b/docs/source/index.html.md new file mode 100644 index 00000000..7381d19d --- /dev/null +++ b/docs/source/index.html.md @@ -0,0 +1,16 @@ +--- +title: API Reference + +toc_footers: + - GitHub Repo + +includes: + - introduction + - getting_started + - memory_model + - formatting + - api_reference + - license + +search: true +--- diff --git a/docs/source/javascripts/all.js b/docs/source/javascripts/all.js new file mode 100644 index 00000000..ffaa9b01 --- /dev/null +++ b/docs/source/javascripts/all.js @@ -0,0 +1,4 @@ +//= require ./lib/_energize +//= require ./app/_lang +//= require ./app/_search +//= require ./app/_toc diff --git a/docs/source/javascripts/all_nosearch.js b/docs/source/javascripts/all_nosearch.js new file mode 100644 index 00000000..818bc4e5 --- /dev/null +++ b/docs/source/javascripts/all_nosearch.js @@ -0,0 +1,3 @@ +//= require ./lib/_energize +//= require ./app/_lang +//= require ./app/_toc diff --git a/docs/source/javascripts/app/_lang.js b/docs/source/javascripts/app/_lang.js new file mode 100644 index 00000000..4c73da6e --- /dev/null +++ b/docs/source/javascripts/app/_lang.js @@ -0,0 +1,166 @@ +//= require ../lib/_jquery + +/* +Copyright 2008-2013 Concur Technologies, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); you may +not use this file except in compliance with the License. You may obtain +a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. +*/ +(function (global) { + 'use strict'; + + var languages = []; + + global.setupLanguages = setupLanguages; + global.activateLanguage = activateLanguage; + + function activateLanguage(language) { + if (!language) return; + if (language === "") return; + + $(".lang-selector a").removeClass('active'); + $(".lang-selector a[data-language-name='" + language + "']").addClass('active'); + for (var i=0; i < languages.length; i++) { + $(".highlight." + languages[i]).hide(); + $(".lang-specific." + languages[i]).hide(); + } + $(".highlight." + language).show(); + $(".lang-specific." + language).show(); + + global.toc.calculateHeights(); + + // scroll to the new location of the position + if ($(window.location.hash).get(0)) { + $(window.location.hash).get(0).scrollIntoView(true); + } + } + + // parseURL and stringifyURL are from https://github.com/sindresorhus/query-string + // MIT licensed + // https://github.com/sindresorhus/query-string/blob/7bee64c16f2da1a326579e96977b9227bf6da9e6/license + function parseURL(str) { + if (typeof str !== 'string') { + return {}; + } + + str = str.trim().replace(/^(\?|#|&)/, ''); + + if (!str) { + return {}; + } + + return str.split('&').reduce(function (ret, param) { + var parts = param.replace(/\+/g, ' ').split('='); + var key = parts[0]; + var val = parts[1]; + + key = decodeURIComponent(key); + // missing `=` should be `null`: + // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters + val = val === undefined ? null : decodeURIComponent(val); + + if (!ret.hasOwnProperty(key)) { + ret[key] = val; + } else if (Array.isArray(ret[key])) { + ret[key].push(val); + } else { + ret[key] = [ret[key], val]; + } + + return ret; + }, {}); + }; + + function stringifyURL(obj) { + return obj ? Object.keys(obj).sort().map(function (key) { + var val = obj[key]; + + if (Array.isArray(val)) { + return val.sort().map(function (val2) { + return encodeURIComponent(key) + '=' + encodeURIComponent(val2); + }).join('&'); + } + + return encodeURIComponent(key) + '=' + encodeURIComponent(val); + }).join('&') : ''; + }; + + // gets the language set in the query string + function getLanguageFromQueryString() { + if (location.search.length >= 1) { + var language = parseURL(location.search).language + if (language) { + return language; + } else if (jQuery.inArray(location.search.substr(1), languages) != -1) { + return location.search.substr(1); + } + } + + return false; + } + + // returns a new query string with the new language in it + function generateNewQueryString(language) { + var url = parseURL(location.search); + if (url.language) { + url.language = language; + return stringifyURL(url); + } + return language; + } + + // if a button is clicked, add the state to the history + function pushURL(language) { + if (!history) { return; } + var hash = window.location.hash; + if (hash) { + hash = hash.replace(/^#+/, ''); + } + history.pushState({}, '', '?' + generateNewQueryString(language) + '#' + hash); + + // save language as next default + localStorage.setItem("language", language); + } + + function setupLanguages(l) { + var defaultLanguage = localStorage.getItem("language"); + + languages = l; + + var presetLanguage = getLanguageFromQueryString(); + if (presetLanguage) { + // the language is in the URL, so use that language! + activateLanguage(presetLanguage); + + localStorage.setItem("language", presetLanguage); + } else if ((defaultLanguage !== null) && (jQuery.inArray(defaultLanguage, languages) != -1)) { + // the language was the last selected one saved in localstorage, so use that language! + activateLanguage(defaultLanguage); + } else { + // no language selected, so use the default + activateLanguage(languages[0]); + } + } + + // if we click on a language tab, activate that language + $(function() { + $(".lang-selector a").on("click", function() { + var language = $(this).data("language-name"); + pushURL(language); + activateLanguage(language); + return false; + }); + window.onpopstate = function() { + activateLanguage(getLanguageFromQueryString()); + }; + }); +})(window); diff --git a/docs/source/javascripts/app/_search.js b/docs/source/javascripts/app/_search.js new file mode 100644 index 00000000..4dfcdefa --- /dev/null +++ b/docs/source/javascripts/app/_search.js @@ -0,0 +1,75 @@ +//= require ../lib/_lunr +//= require ../lib/_jquery +//= require ../lib/_jquery.highlight +(function () { + 'use strict'; + + var content, searchResults; + var highlightOpts = { element: 'span', className: 'search-highlight' }; + + var index = new lunr.Index(); + + index.ref('id'); + index.field('title', { boost: 10 }); + index.field('body'); + index.pipeline.add(lunr.trimmer, lunr.stopWordFilter); + + $(populate); + $(bind); + + function populate() { + $('h1, h2, h3').each(function() { + var title = $(this); + var body = title.nextUntil('h1, h2, h3'); + index.add({ + id: title.prop('id'), + title: title.text(), + body: body.text() + }); + }); + } + + function bind() { + content = $('.content'); + searchResults = $('.search-results'); + + $('#input-search').on('keyup', search); + } + + function search(event) { + unhighlight(); + searchResults.addClass('visible'); + + // ESC clears the field + if (event.keyCode === 27) this.value = ''; + + if (this.value) { + var results = index.search(this.value).filter(function(r) { + return r.score > 0.0001; + }); + + if (results.length) { + searchResults.empty(); + $.each(results, function (index, result) { + var elem = document.getElementById(result.ref); + searchResults.append("
  • " + $(elem).text() + "
  • "); + }); + highlight.call(this); + } else { + searchResults.html('
  • '); + $('.search-results li').text('No Results Found for "' + this.value + '"'); + } + } else { + unhighlight(); + searchResults.removeClass('visible'); + } + } + + function highlight() { + if (this.value) content.highlight(this.value, highlightOpts); + } + + function unhighlight() { + content.unhighlight(highlightOpts); + } +})(); diff --git a/docs/source/javascripts/app/_toc.js b/docs/source/javascripts/app/_toc.js new file mode 100644 index 00000000..fd3bbd05 --- /dev/null +++ b/docs/source/javascripts/app/_toc.js @@ -0,0 +1,57 @@ +//= require ../lib/_jquery +//= require ../lib/_jquery_ui +//= require ../lib/_jquery.tocify +//= require ../lib/_imagesloaded.min +(function (global) { + 'use strict'; + + var closeToc = function() { + $(".tocify-wrapper").removeClass('open'); + $("#nav-button").removeClass('open'); + }; + + var makeToc = function() { + global.toc = $("#toc").tocify({ + selectors: 'h1, h2, h3, h4', + extendPage: false, + theme: 'none', + smoothScroll: false, + showEffectSpeed: 0, + hideEffectSpeed: 180, + ignoreSelector: '.toc-ignore', + highlightOffset: 60, + scrollTo: -1, + scrollHistory: true, + hashGenerator: function (text, element) { + return element.prop('id'); + } + }).data('toc-tocify'); + + $("#nav-button").click(function() { + $(".tocify-wrapper").toggleClass('open'); + $("#nav-button").toggleClass('open'); + return false; + }); + + $(".page-wrapper").click(closeToc); + $(".tocify-item").click(closeToc); + }; + + // Hack to make already open sections to start opened, + // instead of displaying an ugly animation + function animate() { + setTimeout(function() { + toc.setOption('showEffectSpeed', 180); + }, 50); + } + + $(function() { + makeToc(); + animate(); + setupLanguages($('body').data('languages')); + $('.content').imagesLoaded( function() { + global.toc.calculateHeights(); + }); + }); +})(window); + diff --git a/docs/source/layouts/layout.erb b/docs/source/layouts/layout.erb new file mode 100644 index 00000000..644f382d --- /dev/null +++ b/docs/source/layouts/layout.erb @@ -0,0 +1,96 @@ +<%# +Copyright 2008-2013 Concur Technologies, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); you may +not use this file except in compliance with the License. You may obtain +a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. +%> +<% language_tabs = current_page.data.language_tabs || [] %> + + + + + + + <%= current_page.data.title || "API Documentation" %> + + + <%= stylesheet_link_tag :screen, media: :screen %> + <%= stylesheet_link_tag :print, media: :print %> + <% if current_page.data.search %> + <%= javascript_include_tag "all" %> + <% else %> + <%= javascript_include_tag "all_nosearch" %> + <% end %> + + + + + + NAV + <%= image_tag('navbar.png') %> + + +
    + <%= image_tag "logo.png" %> + <% if language_tabs.any? %> +
    + <% language_tabs.each do |lang| %> + <% if lang.is_a? Hash %> + <%= lang.values.first %> + <% else %> + <%= lang %> + <% end %> + <% end %> +
    + <% end %> + <% if current_page.data.search %> + +
      + <% end %> +
      +
      + <% if current_page.data.toc_footers %> + + <% end %> +
      +
      +
      +
      + <%= yield %> + <% current_page.data.includes && current_page.data.includes.each do |include| %> + <%= partial "includes/#{include}" %> + <% end %> +
      +
      + <% if language_tabs.any? %> +
      + <% language_tabs.each do |lang| %> + <% if lang.is_a? Hash %> + <%= lang.values.first %> + <% else %> + <%= lang %> + <% end %> + <% end %> +
      + <% end %> +
      +
      + + diff --git a/docs/source/stylesheets/_icon-font.scss b/docs/source/stylesheets/_icon-font.scss new file mode 100644 index 00000000..b5994839 --- /dev/null +++ b/docs/source/stylesheets/_icon-font.scss @@ -0,0 +1,38 @@ +@font-face { + font-family: 'slate'; + src:font-url('slate.eot?-syv14m'); + src:font-url('slate.eot?#iefix-syv14m') format('embedded-opentype'), + font-url('slate.woff2?-syv14m') format('woff2'), + font-url('slate.woff?-syv14m') format('woff'), + font-url('slate.ttf?-syv14m') format('truetype'), + font-url('slate.svg?-syv14m#slate') format('svg'); + font-weight: normal; + font-style: normal; +} + +%icon { + font-family: 'slate'; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; +} + +%icon-exclamation-sign { + @extend %icon; + content: "\e600"; +} +%icon-info-sign { + @extend %icon; + content: "\e602"; +} +%icon-ok-sign { + @extend %icon; + content: "\e606"; +} +%icon-search { + @extend %icon; + content: "\e607"; +} diff --git a/docs/source/stylesheets/_normalize.scss b/docs/source/stylesheets/_normalize.scss new file mode 100644 index 00000000..46f646a5 --- /dev/null +++ b/docs/source/stylesheets/_normalize.scss @@ -0,0 +1,427 @@ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9/10. + */ + +img { + border: 0; +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} diff --git a/docs/source/stylesheets/_variables.scss b/docs/source/stylesheets/_variables.scss new file mode 100644 index 00000000..ef999e56 --- /dev/null +++ b/docs/source/stylesheets/_variables.scss @@ -0,0 +1,105 @@ +/* +Copyright 2008-2013 Concur Technologies, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); you may +not use this file except in compliance with the License. You may obtain +a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. +*/ + + +//////////////////////////////////////////////////////////////////////////////// +// CUSTOMIZE SLATE +//////////////////////////////////////////////////////////////////////////////// +// Use these settings to help adjust the appearance of Slate + + +// BACKGROUND COLORS +//////////////////// +$nav-bg: #393939 !default; +$examples-bg: #393939 !default; +$code-bg: #292929 !default; +$code-annotation-bg: #1c1c1c !default; +$nav-subitem-bg: #262626 !default; +$nav-active-bg: #2467af !default; +$lang-select-border: #000 !default; +$lang-select-bg: #222 !default; +$lang-select-active-bg: $examples-bg !default; // feel free to change this to blue or something +$lang-select-pressed-bg: #111 !default; // color of language tab bg when mouse is pressed +$main-bg: #eaf2f6 !default; +$aside-notice-bg: #8fbcd4 !default; +$aside-warning-bg: #c97a7e !default; +$aside-success-bg: #6ac174 !default; +$search-notice-bg: #c97a7e !default; + + +// TEXT COLORS +//////////////////// +$main-text: #333 !default; // main content text color +$nav-text: #fff !default; +$nav-active-text: #fff !default; +$lang-select-text: #fff !default; // color of unselected language tab text +$lang-select-active-text: #fff !default; // color of selected language tab text +$lang-select-pressed-text: #fff !default; // color of language tab text when mouse is pressed + + +// SIZES +//////////////////// +$nav-width: 230px !default; // width of the navbar +$examples-width: 50% !default; // portion of the screen taken up by code examples +$logo-margin: 20px !default; // margin between nav items and logo, ignored if search is active +$main-padding: 28px !default; // padding to left and right of content & examples +$nav-padding: 15px !default; // padding to left and right of navbar +$nav-v-padding: 10px !default; // padding used vertically around search boxes and results +$nav-indent: 10px !default; // extra padding for ToC subitems +$code-annotation-padding: 13px !default; // padding inside code annotations +$h1-margin-bottom: 21px !default; // padding under the largest header tags +$tablet-width: 930px !default; // min width before reverting to tablet size +$phone-width: $tablet-width - $nav-width !default; // min width before reverting to mobile size + + +// FONTS +//////////////////// +%default-font { + font-family: "Helvetica Neue", Helvetica, Arial, "Microsoft Yahei","微软雅黑", STXihei, "华文细黑", sans-serif; + font-size: 13px; +} + +%header-font { + @extend %default-font; + font-weight: bold; +} + +%code-font { + font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, serif; + font-size: 12px; + line-height: 1.5; +} + + +// OTHER +//////////////////// +$nav-active-shadow: #000 !default; +$nav-footer-border-color: #666 !default; +$nav-embossed-border-top: #000 !default; +$nav-embossed-border-bottom: #939393 !default; +$main-embossed-text-shadow: 0px 1px 0px #fff !default; +$search-box-border-color: #666 !default; + + +//////////////////////////////////////////////////////////////////////////////// +// INTERNAL +//////////////////////////////////////////////////////////////////////////////// +// These settings are probably best left alone. + +%break-words { + word-break: break-all; + hyphens: auto; +} diff --git a/docs/source/stylesheets/print.css.scss b/docs/source/stylesheets/print.css.scss new file mode 100644 index 00000000..adf8b66b --- /dev/null +++ b/docs/source/stylesheets/print.css.scss @@ -0,0 +1,147 @@ +@charset "utf-8"; +@import 'normalize'; +@import 'variables'; +@import 'icon-font'; + +/* +Copyright 2008-2013 Concur Technologies, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); you may +not use this file except in compliance with the License. You may obtain +a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. +*/ + +$print-color: #999; +$print-color-light: #ccc; +$print-font-size: 12px; + +body { + @extend %default-font; +} + +.tocify, .toc-footer, .lang-selector, .search, #nav-button { + display: none; +} + +.tocify-wrapper>img { + margin: 0 auto; + display: block; +} + +.content { + font-size: 12px; + + pre, code { + @extend %code-font; + @extend %break-words; + border: 1px solid $print-color; + border-radius: 5px; + font-size: 0.8em; + } + + pre { + code { + border: 0; + } + } + + pre { + padding: 1.3em; + } + + code { + padding: 0.2em; + } + + table { + border: 1px solid $print-color; + tr { + border-bottom: 1px solid $print-color; + } + td,th { + padding: 0.7em; + } + } + + p { + line-height: 1.5; + } + + a { + text-decoration: none; + color: #000; + } + + h1 { + @extend %header-font; + font-size: 2.5em; + padding-top: 0.5em; + padding-bottom: 0.5em; + margin-top: 1em; + margin-bottom: $h1-margin-bottom; + border: 2px solid $print-color-light; + border-width: 2px 0; + text-align: center; + } + + h2 { + @extend %header-font; + font-size: 1.8em; + margin-top: 2em; + border-top: 2px solid $print-color-light; + padding-top: 0.8em; + } + + h1+h2, h1+div+h2 { + border-top: none; + padding-top: 0; + margin-top: 0; + } + + h3, h4 { + @extend %header-font; + font-size: 0.8em; + margin-top: 1.5em; + margin-bottom: 0.8em; + text-transform: uppercase; + } + + h5, h6 { + text-transform: uppercase; + } + + aside { + padding: 1em; + border: 1px solid $print-color-light; + border-radius: 5px; + margin-top: 1.5em; + margin-bottom: 1.5em; + line-height: 1.6; + } + + aside:before { + vertical-align: middle; + padding-right: 0.5em; + font-size: 14px; + } + + aside.notice:before { + @extend %icon-info-sign; + } + + aside.warning:before { + @extend %icon-exclamation-sign; + } + + aside.success:before { + @extend %icon-ok-sign; + } +} \ No newline at end of file diff --git a/docs/source/stylesheets/screen.css.scss b/docs/source/stylesheets/screen.css.scss new file mode 100644 index 00000000..3fe40f4d --- /dev/null +++ b/docs/source/stylesheets/screen.css.scss @@ -0,0 +1,634 @@ +@charset "utf-8"; +@import 'normalize'; +@import 'variables'; +@import 'icon-font'; + +/* +Copyright 2008-2013 Concur Technologies, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); you may +not use this file except in compliance with the License. You may obtain +a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. +*/ + +//////////////////////////////////////////////////////////////////////////////// +// GENERAL STUFF +//////////////////////////////////////////////////////////////////////////////// + +html, body { + color: $main-text; + padding: 0; + margin: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + @extend %default-font; + background-color: $main-bg; + height: 100%; + -webkit-text-size-adjust: none; /* Never autoresize text */ +} + +//////////////////////////////////////////////////////////////////////////////// +// TABLE OF CONTENTS +//////////////////////////////////////////////////////////////////////////////// + +#toc > ul > li > a > span { + float: right; + background-color: #2484FF; + border-radius: 40px; + width: 20px; +} + +@mixin embossed-bg { + background: + linear-gradient(to bottom, rgba(#000, 0.2), rgba(#000, 0) 8px), + linear-gradient(to top, rgba(#000, 0.2), rgba(#000, 0) 8px), + linear-gradient(to bottom, rgba($nav-embossed-border-top, 1), rgba($nav-embossed-border-top, 0) 1.5px), + linear-gradient(to top, rgba($nav-embossed-border-bottom, 1), rgba($nav-embossed-border-bottom, 0) 1.5px), + $nav-subitem-bg; +} + +.tocify-wrapper { + transition: left 0.3s ease-in-out; + + overflow-y: auto; + overflow-x: hidden; + position: fixed; + z-index: 30; + top: 0; + left: 0; + bottom: 0; + width: $nav-width; + background-color: $nav-bg; + font-size: 13px; + font-weight: bold; + + // language selector for mobile devices + .lang-selector { + display: none; + a { + padding-top: 0.5em; + padding-bottom: 0.5em; + } + } + + // This is the logo at the top of the ToC + &>img { + display: block; + max-width: 100%; + } + + &>.search { + position: relative; + + input { + background: $nav-bg; + border-width: 0 0 1px 0; + border-color: $search-box-border-color; + padding: 6px 0 6px 20px; + box-sizing: border-box; + margin: $nav-v-padding $nav-padding; + width: $nav-width - 30; + outline: none; + color: $nav-text; + border-radius: 0; /* ios has a default border radius */ + } + + &:before { + position: absolute; + top: 17px; + left: $nav-padding; + color: $nav-text; + @extend %icon-search; + } + } + + img+.tocify, .lang-selector+.tocify { + margin-top: $logo-margin; + } + + .search-results { + margin-top: 0; + box-sizing: border-box; + height: 0; + overflow-y: auto; + overflow-x: hidden; + transition-property: height, margin; + transition-duration: 180ms; + transition-timing-function: ease-in-out; + &.visible { + height: 30%; + margin-bottom: 1em; + } + + @include embossed-bg; + + li { + margin: 1em $nav-padding; + line-height: 1; + } + + a { + color: $nav-text; + text-decoration: none; + + &:hover { + text-decoration: underline; + } + } + } + + + .tocify-item>a, .toc-footer li { + padding: 0 $nav-padding 0 $nav-padding; + display: block; + overflow-x: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + // The Table of Contents is composed of multiple nested + // unordered lists. These styles remove the default + // styling of an unordered list because it is ugly. + ul, li { + list-style: none; + margin: 0; + padding: 0; + line-height: 28px; + } + + li { + color: $nav-text; + transition-property: background; + transition-timing-function: linear; + transition-duration: 230ms; + } + + // This is the currently selected ToC entry + .tocify-focus { + box-shadow: 0px 1px 0px $nav-active-shadow; + background-color: $nav-active-bg; + color: $nav-active-text; + } + + // Subheaders are the submenus that slide open + // in the table of contents. + .tocify-subheader { + display: none; // tocify will override this when needed + background-color: $nav-subitem-bg; + font-weight: 500; + .tocify-item>a { + padding-left: $nav-padding + $nav-indent; + font-size: 12px; + } + + // for embossed look: + @include embossed-bg; + &>li:last-child { + box-shadow: none; // otherwise it'll overflow out of the subheader + } + } + + .toc-footer { + padding: 1em 0; + margin-top: 1em; + border-top: 1px dashed $nav-footer-border-color; + + li,a { + color: $nav-text; + text-decoration: none; + } + + a:hover { + text-decoration: underline; + } + + li { + font-size: 0.8em; + line-height: 1.7; + text-decoration: none; + } + } + +} + +// button to show navigation on mobile devices +#nav-button { + span { + display: block; + $side-pad: $main-padding / 2 - 8px; + padding: $side-pad $side-pad $side-pad; + background-color: rgba($main-bg, 0.7); + transform-origin: 0 0; + transform: rotate(-90deg) translate(-100%, 0); + border-radius: 0 0 0 5px; + } + padding: 0 1.5em 5em 0; // increase touch size area + display: none; + position: fixed; + top: 0; + left: 0; + z-index: 100; + color: #000; + text-decoration: none; + font-weight: bold; + opacity: 0.7; + line-height: 16px; + img { + height: 16px; + vertical-align: bottom; + } + + transition: left 0.3s ease-in-out; + + &:hover { opacity: 1; } + &.open {left: $nav-width} +} + + +//////////////////////////////////////////////////////////////////////////////// +// PAGE LAYOUT AND CODE SAMPLE BACKGROUND +//////////////////////////////////////////////////////////////////////////////// + +.page-wrapper { + margin-left: $nav-width; + position: relative; + z-index: 10; + background-color: $main-bg; + min-height: 100%; + + padding-bottom: 1px; // prevent margin overflow + + // The dark box is what gives the code samples their dark background. + // It sits essentially under the actual content block, which has a + // transparent background. + // I know, it's hackish, but it's the simplist way to make the left + // half of the content always this background color. + .dark-box { + width: $examples-width; + background-color: $examples-bg; + position: absolute; + right: 0; + top: 0; + bottom: 0; + } + + .lang-selector { + position: fixed; + z-index: 50; + border-bottom: 5px solid $lang-select-active-bg; + } +} + +.lang-selector { + background-color: $lang-select-bg; + width: 100%; + font-weight: bold; + a { + display: block; + float:left; + color: $lang-select-text; + text-decoration: none; + padding: 0 10px; + line-height: 30px; + outline: 0; + + &:active, &:focus { + background-color: $lang-select-pressed-bg; + color: $lang-select-pressed-text; + } + + &.active { + background-color: $lang-select-active-bg; + color: $lang-select-active-text; + } + } + + &:after { + content: ''; + clear: both; + display: block; + } +} + +//////////////////////////////////////////////////////////////////////////////// +// CONTENT STYLES +//////////////////////////////////////////////////////////////////////////////// +// This is all the stuff with the light background in the left half of the page + +.content { + // to place content above the dark box + position: relative; + z-index: 30; + + &:after { + content: ''; + display: block; + clear: both; + } + + &>h1, &>h2, &>h3, &>h4, &>h5, &>h6, &>p, &>table, &>ul, &>ol, &>aside, &>dl { + margin-right: $examples-width; + padding: 0 $main-padding; + box-sizing: border-box; + display: block; + text-shadow: $main-embossed-text-shadow; + + @extend %left-col; + } + + &>ul, &>ol { + padding-left: $main-padding + 15px; + } + + // the div is the tocify hidden div for placeholding stuff + &>h1, &>h2, &>div { + clear:both; + } + + h1 { + @extend %header-font; + font-size: 30px; + padding-top: 0.5em; + padding-bottom: 0.5em; + border-bottom: 1px solid #ccc; + margin-bottom: $h1-margin-bottom; + margin-top: 2em; + border-top: 1px solid #ddd; + background-image: linear-gradient(to bottom, #fff, #f9f9f9); + } + + h1:first-child, div:first-child + h1 { + border-top-width: 0; + margin-top: 0; + } + + h2 { + @extend %header-font; + font-size: 20px; + margin-top: 4em; + margin-bottom: 0; + border-top: 1px solid #ccc; + padding-top: 1.2em; + padding-bottom: 1.2em; + background-image: linear-gradient(to bottom, rgba(#fff, 0.4), rgba(#fff, 0)); + } + + // h2s right after h1s should bump right up + // against the h1s. + h1 + h2, h1 + div + h2 { + margin-top: $h1-margin-bottom * -1; + border-top: none; + } + + h3, h4, h5, h6 { + @extend %header-font; + font-size: 15px; + margin-top: 2.5em; + margin-bottom: 0.8em; + } + + h4, h5, h6 { + font-size: 10px; + } + + hr { + margin: 2em 0; + border-top: 2px solid $examples-bg; + border-bottom: 2px solid $main-bg; + } + + table { + margin-bottom: 1em; + overflow: auto; + th,td { + text-align: left; + vertical-align: top; + line-height: 1.6; + } + + th { + padding: 5px 10px; + border-bottom: 1px solid #ccc; + vertical-align: bottom; + } + + td { + padding: 10px; + } + + tr:last-child { + border-bottom: 1px solid #ccc; + } + + tr:nth-child(odd)>td { + background-color: lighten($main-bg,4.2%); + } + + tr:nth-child(even)>td { + background-color: lighten($main-bg,2.4%); + } + } + + dt { + font-weight: bold; + } + + dd { + margin-left: 15px; + } + + p, li, dt, dd { + line-height: 1.6; + margin-top: 0; + } + + img { + max-width: 100%; + } + + code { + background-color: rgba(0,0,0,0.05); + padding: 3px; + border-radius: 3px; + @extend %break-words; + @extend %code-font; + } + + pre>code { + background-color: transparent; + padding: 0; + } + + aside { + padding-top: 1em; + padding-bottom: 1em; + text-shadow: 0 1px 0 lighten($aside-notice-bg, 15%); + margin-top: 1.5em; + margin-bottom: 1.5em; + background: $aside-notice-bg; + line-height: 1.6; + + &.warning { + background-color: $aside-warning-bg; + text-shadow: 0 1px 0 lighten($aside-warning-bg, 15%); + } + + &.success { + background-color: $aside-success-bg; + text-shadow: 0 1px 0 lighten($aside-success-bg, 15%); + } + } + + aside:before { + vertical-align: middle; + padding-right: 0.5em; + font-size: 14px; + } + + aside.notice:before { + @extend %icon-info-sign; + } + + aside.warning:before { + @extend %icon-exclamation-sign; + } + + aside.success:before { + @extend %icon-ok-sign; + } + + .search-highlight { + padding: 2px; + margin: -2px; + border-radius: 4px; + border: 1px solid #F7E633; + text-shadow: 1px 1px 0 #666; + background: linear-gradient(to top left, #F7E633 0%, #F1D32F 100%); + } +} + +//////////////////////////////////////////////////////////////////////////////// +// CODE SAMPLE STYLES +//////////////////////////////////////////////////////////////////////////////// +// This is all the stuff that appears in the right half of the page + +.content { + pre, blockquote { + background-color: $code-bg; + color: #fff; + + padding: 2em $main-padding; + margin: 0; + width: $examples-width; + + float:right; + clear:right; + + box-sizing: border-box; + text-shadow: 0px 1px 2px rgba(0,0,0,0.4); + + @extend %right-col; + + &>p { margin: 0; } + + a { + color: #fff; + text-decoration: none; + border-bottom: dashed 1px #ccc; + } + } + + pre { + @extend %code-font; + } + + blockquote { + &>p { + background-color: $code-annotation-bg; + border-radius: 5px; + padding: $code-annotation-padding; + color: #ccc; + border-top: 1px solid #000; + border-bottom: 1px solid #404040; + } + } +} + +//////////////////////////////////////////////////////////////////////////////// +// RESPONSIVE DESIGN +//////////////////////////////////////////////////////////////////////////////// +// These are the styles for phones and tablets +// There are also a couple styles disperesed + +@media (max-width: $tablet-width) { + .tocify-wrapper { + left: -$nav-width; + + &.open { + left: 0; + } + } + + .page-wrapper { + margin-left: 0; + } + + #nav-button { + display: block; + } + + .tocify-wrapper .tocify-item > a { + padding-top: 0.3em; + padding-bottom: 0.3em; + } +} + +@media (max-width: $phone-width) { + .dark-box { + display: none; + } + + %left-col { + margin-right: 0; + } + + .tocify-wrapper .lang-selector { + display: block; + } + + .page-wrapper .lang-selector { + display: none; + } + + %right-col { + width: auto; + float: none; + } + + %right-col + %left-col { + margin-top: $main-padding; + } +} + +.highlight .c, .highlight .cm, .highlight .c1, .highlight .cs { + color: #909090; +} + +.highlight, .highlight .w { + background-color: $code-bg; +} + +#github-icon { + width: 12px; + padding-top: 0px; + margin-right: 10px; + vertical-align: middle; +} \ No newline at end of file diff --git a/docs/styles.rst b/docs/styles.rst deleted file mode 100644 index 838a4b6e..00000000 --- a/docs/styles.rst +++ /dev/null @@ -1,17 +0,0 @@ -Working with styles -=================== - -Introduction ------------- - -Styles are used to change the look of your data while displayed on screen. -They are also used to determine the number format being used for a given cell -or range of cells. - -Styles can be applied to the following aspects: - - * font to set font size, color, underlining, etc. - * fill to set a pattern or color gradient - * border to set borders on a cell - * cell alignment - * protection diff --git a/docs/tutorial.rst b/docs/tutorial.rst deleted file mode 100644 index d4c235ad..00000000 --- a/docs/tutorial.rst +++ /dev/null @@ -1,5 +0,0 @@ -Manipulating a workbook in memory -================================= - -Create a workbook ------------------ diff --git a/docs/validation.rst b/docs/validation.rst deleted file mode 100644 index 72615271..00000000 --- a/docs/validation.rst +++ /dev/null @@ -1,2 +0,0 @@ -Validating cells -================ diff --git a/docs/windows-development.rst b/docs/windows-development.rst deleted file mode 100644 index 45f690a7..00000000 --- a/docs/windows-development.rst +++ /dev/null @@ -1,2 +0,0 @@ -Testing on Windows -==================