# Changelog
All notable changes to this project will be documented in this file.

The format is based on
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to
[Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Added
### Changed
### Deprecated
### Removed
### Fixed
### Security



## [3.0.0] - 2026-07-01

### Added
- Documentation example section "Storing Data in L3 Property Lists"
- Some further additions to the documentation.

### Changed
- The default package option setting for `csvsimple` is changed from
    `legacy` to `l3`. Documents using the legacy version may have to adapt
    the way they load `csvsimple`.
    ** \usepackage{csvsimple}            CHANGED: loads csvsimple-l3 now instead of csvsimple-legacy **
    ** \usepackage[legacy]{csvsimple}    no change **
    ** \usepackage{csvsimple-legacy}     no change **
    ** \usepackage[l3]{csvsimple}        no change **
    ** \usepackage{csvsimple-l3}         no change **
- Documentation adapted to the change.
- `csvsimple.pdf` now contains the documentation for `csvsimple` / `csvsimple-l3`
- Minor code optimizations

### Removed
- The documentation `csvsimple-l3.pdf` is merged into `csvsimple.pdf`
- Removed files: `csvsimple-l3.tex` and `csvsimple-l3.pdf`



## [2.7.1] - 2026-04-27

### Changed
- `CHANGES.md` renamed to `CHANGELOG.md` following https://keepachangelog.com/en/1.1.0/
- Minor documentation improvements

### Fixed
- Warning issued when the package has already been loaded
- Code style improved with explcheck



## [2.7.0] - 2024-09-27

### Added
- Warning, if the CSV file does not contain (accepted) data lines

### Changed
- Comment lines or empty line before header line are now supported (issue #41)
- If there is no data line, `late after head` and `late after last line` are applied nonetheless 
    (loosely connected to issue #41). Note: You should not use files without data!
- Technical information: The package documentation is now produced with lualatex instead of pdflatex        
- Technical information: The documentation loads `minted2`, if it exists, to avoid encoding errors and latexmk problems with minted v3



## [2.6.1] - 2024-05-16

### Changed
- Documentation of `csvsim/filter fp`, `csvsim/and filter fp`, `\IfCsvsimFpCompareTF`, 
    and `\IfCsvsimIntCompareTF` clarified (issue #37)
- Reset `data collection` to `\csvdatacollection` for every csv reader (issue #39)

### Fixed
- Documentation typos fixed (issue #38)



## [2.6.0] - 2024-01-19

### Added
- `consume collected data`
- `\csvcollecte` (replacement for `\csvcollectx`)
- New CamelCase macro names for several existing string and number test macros
    to adapt expl3 naming conventions (issue #34):
    - `\IfCsvsimStrEqualTF`
    - `\IfCsvsimTlEqualTF`
    - `\IfCsvsimTlProtectedEqualTF`
    - `\IfCsvsimFpCompareTF`
    - `\IfCsvsimIntCompareTF`

### Changed
- Default settings for `\csvautotabularray` and friends slightly changed
    (line width and added uppercase setting)
- In documentation for `collect data`, `after first line` is 
    added to the list of collected keys (issue/pull request #31)
- Expl3 scratch variables like `\l_tmpa_tl` replaced by package variables like `\l__csvsim_tmpa_tl`
- Implementation of `\csvexpval` changed from `\exp_not:V` to `\exp_not:o`
- Implementation of `data collection` changed to piecewise token list constructions
- Implementation of `generic collected table` does not alter `after reading` anymore
- Implementation of `\ifcsvstrcmp` and `\ifcsvstrequal` changed
- Documentation of Section "String and Number Tests" updated (issue #33)
- Leading `/` removed from all l3keys inside the documentation
- `l3keys2e` removed from `csvsimple.sty` and code adapted
- Needed LaTeX version updated to 2023-11-01
- Several minor changes



## [2.5.0] - 2023-10-16

### Added
- New survey tables (issue #29):
    - `\csvautotabularray`
    - `\csvautotabularray*`
    - `\csvautolongtabularray`
    - `\csvautolongtabularray*`
- New corresponding options (issue #29)
    - `autotabularray`
    - `autotabularray*`
    - `autolongtabularray`
    - `autolongtabularray*`

### Changed
- Documentation typos fixed (issue #30)
- Survey tables moved into a separate section

### Fixed
- `collect data` does not collect `after first line` (issue #28)



## [2.4.0] - 2023-05-09

### Added
- New additive filter options (issue #24):
    - `and filter bool`
    - `and filter fp`
    - `and filter strcmp`
    - `and filter not strcmp`
    - `or filter bool`
    - `or filter fp`
    - `or filter strcmp`
    - `or filter not strcmp`
- Hook `csvsimple/csvline` added with example for doublequote replacement (issue #19)
- Option setting `separator = space` (issue #20)

### Changed
- The content of `range` is now expanded before processing it
- Implementation of `filter bool`, `filter fp`, `filter strcmp`, `filter not strcmp`



## [2.3.2] - 2022-09-20

### Fixed
- The `\ifcsvfirstrow` command doesn't work (issue #23)



## [2.3.1] - 2022-06-21

### Fixed
- Documentation: placeholder names corrected (issue #21)
- Use built-in constants instead of integers for boolexpr (issue #22)



## [2.3.0] - 2022-02-01

### Added
- Option `column names detection` (related to issue #16)
- Documentation: csvautotabular inspired example for tabularray.

### Changed
- `\csvlinetotablerow` changed to be expandable and to be
    usable inside a *Data Collection* (issue #16)
- Options `autotabular`, `autobooktabular`, `autolongtable`, `autobooklongtable`
    use `column names detection=false` now.



## [2.2.1] - 2022-01-07

### Fixed
- Option `late after first line` ignored for `csvsimple-l3` (issue #17)



## [2.2.0] - 2021-09-09

### Added
- Configurable usage of tabular-like environments (issue #12)
- Option `table centered`
- Option `generic table`
- Option `generic collected table`
- Option `generic table options`

### Changed
- The implementation of all tabular-like environments uses the new
  generic environments now internally. Should be unnoticeable for a user.

### Fixed
- documentation typo correction and small improvents (issue #15)
- Option `long tabularray`



## [2.1.0] - 2021-07-06

### Added
- Support for (limited) data collection (issue #15)
- Support for package `tabularray` (part of issue #12)
- Option `after filter`
- Option `collect data`
- Option `data collection`
- Option `tabularray`
- Option `centered tabularray`
- `\csvdatacollection`
- `\csvexpval`
- `\csvexpnot`
- `\csvcollectn`
- `\csvcollectx`
- `\csvcollectV`

### Fixed
- Line Range was not resetted
- Wrong link and word inside documentation `csvsimple.pdf` (issue #13, issue #15)
- Several inconsistent local/global assignment errors



## [2.0.0] - 2021-06-29

### Added
- New documentation `csvsimple-l3.pdf` for the new LaTeX3 version
  (revised, adapted and extended from the old documentation)
- `\thecsvcolumncount`
- Option `autotabular*`
- Option `autobooktabular*`
- Option `autolongtable*`
- Option `autobooklongtable*`
- Option `filter bool`
- Option `filter fp`
- Option `range`
- `\csvautotabular*`
- `\csvautobooktabular*`
- `\csvautolongtable*`
- `\csvautobooklongtable*`
- `\csvfilterbool`
- `\ifcsvfirstrow`
- `\ifcsvoddrow`
- `\ifcsvfpcmp`
- `\ifcsvintcmp`
- `\csvsortingrule`

### Changed
- Complete re-implementation of the hitherto existing latex package
  as LaTeX3 package using the expl3 interface. From now on, three package
  files are provided:
  ** `csvsimple-legacy.sty`   identical to csvsimple until version 1.22  **
  ** `csvsimple-l3.sty`       LaTeX3 package of csvsimple                **
  ** `csvsimple.sty`          stub to select `l3` or `legacy` (default)  **
- The LaTeX2e version (`csvsimple-legacy`) will be maintained in its
  current state with no intended changes with exceptions of bug fixes.
- The LaTeX3 version (`csvsimple-l3`) is regarded to be the main package
  and may receive feature upgrades in the future
- Existing documents using csvsimple v1.22 need no change since loading
  `csvsimple` will load `csvsimple-legacy`.
- `cvsimple-l3` is a *nearly* drop-in replacement for `csvsimple-legacy`.
  Only very few things phased out and the user interface is quite identical.
  The most significant difference is that `l3keys` are used instead of `pgfkeys`
  which may need adaptions on user side (for examples, if .styles are used)
- New documents are encouraged to apply `cvsimple-l3` instead of `csvsimple-legacy`.
- For the complete package is valid: do not upgrade from version 1.22, if your
  TeX installation has no current LateX3/expl3 support a.k.a *is too old*
- `csvinputline` and `csvrow` are no longer LaTeX2e counters
- The hitherto existing documentation `csvsimple.pdf` is now `csvsimple-legacy.pdf`
- `csvsimple.pdf` documents the stub package and differences
  between `csvsimple-l3.sty` and `csvsimple-legacy.sty`
- `column count = 0` means automatic column number detection for CSV files without head
- Option `head` does not change option `check column count` anymore
- Changelog moved from CHANGES to CHANGES.md and adapted to
  [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
- From now on version numbers adhere to
  [Semantic Versioning](http://semver.org/spec/v2.0.0.html)

### Deprecated
- `\csviffirstrow`
- `\csvifoddrow`

### Removed
- `\csvheadset`
- Option `filter`
- Option `nofilter`
- Option `nohead`



## [1.22] - 2021-06-07

### Added
- Option `head to column names prefix` (issue #7)

### Changed
- Due to changes in the LaTeX kernel 2021-06-01, the empty line
  detection of csvsimple had to be adapted. Updating csvsimple is
  essential to avoid problems with kernel 2021-06-01. (issue #11)



## [1.21] - 2019-04-09

### Changed
- Package `pgfrcs` added as required package
- Introduction augmented with additional hints for first time users (issue #3)

### Fixed
- Spurious blank in sorting code removed



## [1.20] - 2016-07-01

### Added
- New string comparison macros:
- `\ifcsvstrequal`
- `\ifcsvprostrequal`
- `\ifcsvstrcmp`
- `\ifcsvnotstrcmp`
- New filter options:
- Option `filter ifthen`
- Option `filter test`
- Option `filter expr`
- Option `full filter`
- Option `filter strcmp`
- Option `filter not strcmp`

### Changed
- Implementation changed from `\roman` to `\romannumeral`
- `\write18` replaced by `\ShellEscape` from the shellesc package
- `\csvlinetotablerow` implemented more efficiently
- `\csvloop` made long
- Code optimizations
- Documentation revised



## [1.12] - 2014-07-14

### Added
- Option `csvsorter token`
- Documentation extended with siunitx examples

### Changed
- Success of CSV-Sorter call is checked (Note: Update to CSV-Sorter v0.94 or newer!)
- Encircling column entry braces removed for all entries for better siunitx compatibility
- Documentation revised

### Fixed
- CSV-Sorter call incompatibilities with the ngerman package (not babel)



## [1.11] - 2014-07-08

### Changed
- If a CSV file with an empty first line is found, csvsimple
  stops with an error message

### Fixed
- Sorting preprocessor overwrites the input data in some combinations



## [1.10] - 2014-07-07

### Added
- `\csvautobooktabular`
- `\csvautobooklongtable`
- External sorting specifically supported for the CSV-Sorter tool with the new options
- Option `csvsorter command`
- Option `csvsorter configpath`
- Option `csvsorter log`
- Option `sort by`
- Option `new sorting rule`
- New keys for respecting special characters:
- Option `respect tab`
- Option `respect percent`
- Option `respect sharp`
- Option `respect dollar`
- Option `respect and`
- Option `respect backslash`
- Option `respect underscore`
- Option `respect tilde`
- Option `respect circumflex`
- Option `respect leftbrace`
- Option `respect rightbrace`
- Option `respect all`
- Option `respect none`
- Option setting `separator = tab`

### Changed
- If a CSV file is not found, csvsimple stops with an error message instead of a warning

### Fixed
- Table head names in curly brackets were not recognized for some cases



## [1.07] - 2013-09-25

### Added
- Option `separator` to set the data value separator to
  `comma`, `semicolon`, or `pipe`

### Changed
- Internal macro `\TrimSpaces` renamed to avoid name clashed with `xparse`



## [1.06] - 2012-11-08

### Changed
- Implementation for line breaking changed from full macro expansion to
  token expansion. This allows quite arbitrary macro code inside the data.
  Note that this may be a breaking change if your application expects
  expanded column values.
- Option values added for `\csvautotabular` and `\csvautolongtable`



## [1.05] - 2012-03-12

### Added
- Source code of the documentation added
- Provision of the csvsimple.tds.zip file for easier installation
- Option `preprocessed file`
- Option `preprocessor`
- Option `no preprocessing`

### Changed
- Documentation language changed from German to English
- Option `nocheckcolumncount` renamed to `no check column count`
- Option `nofilter` renamed to `no check column count`
- Option `nocheckcolumncount` renamed to `no filter`
- Option `nohead` renamed to `no head`

### Deprecated
- Option `nofilter`
- Option `nohead`

### Removed
- Option `@table` removed from the documentation

### Fixed
- Error in `nocheckcolumncount` corrected and key renamed to 'no check column count'



## [1.04] - 2011-11-11

### Added
- Option `head to column names` (automatic column names)
- Option `no table`
- Column numbers can now be used for column macro definitions

### Changed
- Internal behaviour of `before reading` and `after reading`
  changed for tables

### Fixed
- documentation update and correction



## [1.03] - 2011-11-04

### Fixed
- Processing error for lines starting with '00' corrected



## [1.02] - 2011-04-04

### Added
- `\csvfilteraccept`
- `\csvfilterreject`
- Option `filter accept all`
- Option `filter reject all`

### Fixed
- Error in the documentation for longtable und tabbing corrected



## [1.01] - 2010-11-10

### Added
- Option `after first line`
- Option `late after first line`
- New example for key evaluation in the documentation

### Changed
- Documentation of some options clarified



## [1.00] - 2010-07-28

### Added
- Initial public release
