1.034   2024-02-02  Released-By: PERLANCAR; Urgency: medium

        - [ux] (Re)add csv2csv as alias for csv-csv.


1.033   2023-09-06  Released-By: PERLANCAR; Urgency: medium

        - Add utility: csv-sort-fields-by-spec.


1.032   2023-09-05  Released-By: PERLANCAR; Urgency: medium

        - Add utility: csv-sort-fields-by-example.


1.031   2023-08-06  Released-By: PERLANCAR; Urgency: medium

        - [cli csv2vcf] [ux] Detect Indonesian words 'nama' and
          'telepon'/'telefon' in column names.

        - [doc] Grammar/wording.


1.030   2023-07-25  Released-By: PERLANCAR; Urgency: medium

        - [cli csv-freqtable] Add option --with-data-rows.


1.029   2023-07-21  Released-By: PERLANCAR; Urgency: low

        - No functional changes.

        - [doc] [cli csv-fill-cells] Tweak example.


1.028   2023-07-21  Released-By: PERLANCAR; Urgency: low

        - No functional changes.

        - [ux] Indicate alias utilities with "(shorter name for ...)" in
          Abstract.

        - [doc] [ux] [cli csv-fill-cells] Add illustration to show how
          different layouts fill cells differently.

        - [doc] [cli csv-sorted-rows] Add description to --quiet.


1.027   2023-06-19  Released-By: PERLANCAR; Urgency: medium

        - [bugfix][cli csv-fill-cells] Forgot to update schema in function
          metadata.


1.026   2023-06-19  Released-By: PERLANCAR; Urgency: medium

        - [cli csv-fill-cells] Add tests, fix bug, implement 'layout'
          option.


1.025   2023-06-18  Released-By: PERLANCAR; Urgency: medium

        - Add utilities: csv-pick-cells, csv-fill-cells.

        - [doc] Forgot to list {input,ouput}_{fields,fields_idx} in
          documentation on stash keys.


1.024   2023-04-01  Released-By: PERLANCAR; Urgency: low

        - [cli list-csvutils] [doc] Add examples, tweak Perinci::CmdLine
          attributes.


1.023   2023-03-31  Released-By: PERLANCAR; Urgency: medium

        - Add (meta-)utility: list-csvutils.

        - [ux] Add tags to each utility; rename csv-munge-row to
          csv-munge-rows.


1.022   2023-03-10  Released-By: PERLANCAR; Urgency: medium

        - Add utilities: csv-quote, csv-unquote.

        - [ux][cli csv-sort-rows][cli csv-find-value][cli
          csv-get-cells][cli csv-uniq] Fields can be referred by name or by
          index (1-based).

        - [ux][cli csv-sort-rows][cli csv-sorted-rows] Give default for
          --by-field if there is only a single field.


1.021   2023-03-02  Released-By: PERLANCAR; Urgency: medium

        - [cli csv-cmp] Allow excluding/selecting fields to compare.

        - [cli csv-cmp] Add examples.


1.020   2023-03-02  Released-By: PERLANCAR; Urgency: medium

        - Add utility: csv-cmp.


1.019   2023-03-01  Released-By: PERLANCAR; Urgency: medium

        - Add utilities: csv-trim, csv-ltrim, csv-rtrim.


1.018   2023-02-18  Released-By: PERLANCAR

        - Fix documentation on csv2paras.


1.017   2023-02-18  Released-By: PERLANCAR; Urgency: medium

        - [bugfix] Forgot to generate CLIs: csv2paras, paras2csv.


1.016   2023-02-18  Released-By: PERLANCAR; Urgency: low

        - No functional changes.

        - [build] Rebuild with fixed DZP:InsertExecsList to fix generated POD.


1.015   2023-02-18  Released-By: PERLANCAR; Urgency: medium

        - Add utilities: csv2paras, paras2csv.

        - [cli csv-freqtable] Add options --ignore-case (-i) and --key
          (-k).


1.014   2023-02-16  Released-By: PERLANCAR; Urgency: low

        - No functional changes.

        - [doc] Fix terminology column -> field in description & error message.

        - [doc][bugfix] Fix typo in example of csv-intrange.

        - [doc] Add some description to gen_csv_util().


1.013   2023-02-15  Released-By: PERLANCAR; Urgency: medium

        - Add utility: csv-check-rows.

        - [cli csv-check-field-names] Check that number of fields >= 1.


1.012   2023-02-15  Released-By: PERLANCAR; Urgency: medium

        - [incompatible change] Rename utilities for clarity: csv-check-cell ->
          csv-check-cell-values, csv-check-fields -> csv-check-field-values;
          Remove csv-check-values.

        - Add utility: csv-check-field-names.

        - Handle sparse fields that caused perl warning 'splice() offset
          past end of array' (RT#146473).

        - [bugfix] Fix completion for filenames (file_ext_filter is applied
          to extension and not filename).

        - [bugfix] In inplace mode, do not rename unwritten output files
          (RT#146453, https://rt.cpan.org/Transaction/Display.html?id=2442471).

        - Update error message (field option -F is now -f).


1.011   2023-02-14  Released-By: PERLANCAR; Urgency: medium

        - [bugfix] -b was not added.


1.010   2023-02-14  Released-By: PERLANCAR; Urgency: medium

        - Add inplace mode (--inplace, --inplace-backup-ext). Forbid input and
          output as the same unless user specifies inplace mode. Ref: RT#146453.


1.009   2023-02-10  Released-By: PERLANCAR; Urgency: medium

        - Add options: --output-always-quote, --output-quote-empty.

        - [doc] Add an example of using --output-always-quote in
          Manual/Cookbook.pod


1.008   2023-02-03  Released-By: PERLANCAR; Urgency: low

        - No functional changes.

        - Fix description/example in csv-check-cell.


1.007   2023-02-03  Released-By: PERLANCAR; Urgency: medium

        - [ux] Add csv-check-values as alias for csv-check-cell.

        - [cli csv-check-cell] Add option --with-regex.


1.006   2023-02-03  Released-By: PERLANCAR; Urgency: medium

        - Add utilties: csv-check-field, csv-check-cell.


1.005   2023-02-02  Released-By: PERLANCAR; Urgency: medium

        - Add utility: csv-sorted-fields.

        - [test] Add tests for csv-sorted-{rows,fields}.


1.004   2023-02-01  Released-By: PERLANCAR; Urgency: medium

        - Add utility: csv-sorted-rows.

        - Fix tab completion message (-f is now not the option for
          input_filename).


1.003   2023-01-11  Released-By: PERLANCAR; Urgency: medium

        - Add utility: csv-find-values.


1.002   2023-01-04  Released-By: PERLANCAR; Urgency: medium

        - [cli csv-intrange] Add option --sort.

        - Fix Abstract of csv-uniq.


1.001   2023-01-04  Released-By: PERLANCAR; Urgency: medium

        - Add utilities: csv-intrange, csv-uniq.


1.000   2022-12-29  Released-By: PERLANCAR; Urgency: medium

        - No functional changes since 0.999_2.

        - Documentation tweaks.


0.999_2 2022-12-23  Released-By: PERLANCAR; Backward-Incompatible: yes

        [Incompatible changes]

        - [internal] Remove wants_repeat_* flow control because it is inherently
          broken. Utilities that want to read files out of order or repeat
          reading, like csv-concat, can construct the loop manually. Now,
          csv-concat can work with non-seekable input files like process
          substitution (e.g.: `csv-concat <(...) <(...)`).

        [Documentation]

        - Add entries to cookbook.


0.999_1 2022-12-21  Released-By: PERLANCAR; Backward-Incompatible: yes

        [Incompatible changes]

        - Rename variable given to eval codes '$main::field_idxs' to
          '$main::fields_idx'.

        - [cli csv-sort-fields] --by-code code now receives [$field_name,
          $field_idx] instead of just $field_name.

        - [cli csv-select-rows] row number spec now means *data row* number
          spec, e.g. 1 means the first *data* row.

        - [cli csv-select-rows] Will not output header row if there is no rows
          matching spec.

        - [cli csv-setop] Will not output header row if there is no result data
          rows.

        - [cli csv-convert-to-hash] Row number now means *data* row number, e.g.
          1 means the first row number.

        [New features]

        - Add utility: csv-gen.

        [Internals]

        - Make API modular. It is now possible and easier to create a new
          utility without modifying the "core" routine. No more "core" routine.

        [Enhancements]

        - [cli csv-select-fields] Add option --show-selected-fields, like in
          csv-delete-fields.

        [Removed]

        - Remove alias CLI's: csv2csv (only csv-csv now provided), dump-csv
          (only csv-dump now provided).

        - Reading from & writing to URL feature is removed to remove dependency
          to LWP::UserAgent. One can use piping to/from clipget/clipadd to read
          from/write to clipboard. There are other tools for reading/writing to
          URL addresses.

        [Documentation & UX]

        - Add example(s) to all utilities.

        - Add -a as shortcut for --include-all-fields, -A for
          --exclude-all-fields.


0.054   2022-12-14  Released-By: PERLANCAR; Urgency: medium

        - [cli csv-concat] Prevent warning & segfault because of extra
          fields in data rows (RT#145466).

        - [bugfix] [cli csv-info] Fix row counts.

        - [ux] Enable logging in CLIs.


0.053   2022-12-09  Released-By: PERLANCAR; Urgency: medium

        - [bugfix] [cli csv-select-rows] Fix function metadata (multiple
          args with pos=1).

        - [bugfix] [cli csv-fill-template] Fix function metadata (multiple
          args with pos=1).

        - [bugfix] [cli csv-concat] Fix function metadata (clashing argument
          positions --filename & --output-filename) (RT#145467).


0.052   2022-12-05  Released-By: PERLANCAR; Urgency: medium

        - [bugfix][clis csv-sort-rows, csv-sort-fields, csv-concat] Didn't
          observe -O and/or -o (RT#145283).


0.051   2022-12-02  Released-By: PERLANCAR; Urgency: medium; Backward-Incompatible: yes

        [Incompatible changes]

        - Rename csv-select-row to csv-select-rows for consistency.

        - [cli csv-sort-fields] Rename by_example to by_examples argument
          and make it an array, on CLI specify one example at a time with
          --by-example, to allow header name that contains comma.

        [Enhancements]

        - Add utilities csv-pick-rows, csv-pick-fields, csv-shuf-rows,
          csv-shuf-fields.

        - [cli csv-sort-fields] Add options --by-code, --by-sortsub.


0.050   2022-12-02  Released-By: PERLANCAR; Urgency: low

        - No functional changes.

        - [build] Rebuild to work around bug in my toolchain that still uses the
          old module to generate POD.


0.049   2022-12-02  Released-By: PERLANCAR; Urgency: low

        - No functional changes.

        - [cli csv-sort-rows] Update documentation (no more --by-fields).


0.048   2022-12-02  Released-By: PERLANCAR; Urgency: medium; Backward-Incompatible: yes

        [Incompatible changes]

        - [cli csv-sort-rows] Make by_fields argument an array and specify on
          CLI one field at a time with --by-field to allow header name which
          contains comma (RT#145282).

        [Enhancements]

        - Improve --by-field tab completion (provide +FIELD, -FIELD, ~FIELD).


0.047   2022-12-01  Released-By: PERLANCAR; Urgency: medium

        - [cli csv-add-field] Rename to csv-add-fields, now can add multiple
          fields, -e is now optional, also add -H (RT#145276, RT#145268).

        - [bugfix] [cli csv-sort, csv-sort-rows] output_filename was not
          passed to csvutil() (RT#145267).

        - [bugfix] [cli csv-setop] Fix argument parsing (output_filename
          clashes with filename) (RT#145275).

        - [doc] Tweak Abtract for csv-setop to make it a bit more discoverable.


0.046   2022-10-25  Released-By: PERLANCAR; Urgency: medium

        - Add utility: csv2vcf.


0.045   2022-10-09  Released-By: PERLANCAR; Urgency: medium

        - Add option --output-filename (-o) and --overwrite (-O); allow
          reading/writing to URL in addition to file.


0.044   2022-08-09  Released-By: PERLANCAR; Urgency: high

        - Merge releases 0.041 & 0.041.2.


0.041.2 2022-08-08  Released-By: PERLANCAR; Urgency: medium

        - Add utilities: csv-fill-template, csv-get-cells.

        - [cli cli-munge-row] Avoid warning when perl code adds a new field.

        - UPDATE 2022-08-09: rename release from 0.041 to 0.041.2 due to
          conflict.


0.043   2022-08-01  Released-By: PERLANCAR; Urgency: low

        - No functional changes.

        - Tweak POD formatting.


0.042   2022-08-01  Released-By: PERLANCAR; Urgency: low

        - No functional changes.

        - [doc] Add some examples to App::CSVUtils::Manual::Cookbook.


0.041   2022-08-01  Released-By: PERLANCAR; Urgency: medium

        - Add utility: csv-get-cells.

        - [cli cli-munge-row] Avoid warning when perl code adds a new
          field.


0.040   2022-08-01  Released-By: PERLANCAR; Urgency: medium; Backward-Incompatible: yes

        [Incompatible changes]

        - Rename csv-delete-field to csv-delete-fields to reflect the fact that
          it can now select multiple fields.

        - Short option -f now becomes shortcut for --include-field (a.k.a.
          --field) instead of for --filename.

        [clis csv-delete-fields, csv-select-fields]

        - Improve field selection ability by adding --exclude-field (-F),
          --exclude-field-pat to exclude fields. We know have four options
          to select fields: --include-field (--field, -f),
          --include-field-pat, --exclude-field (-F), and --exclude-field-pat.
          In addition to that, we also have --include-all-fields and
          --exclude-all-fields as alias for --include-field-pat .* and
          --exclude-field-pat .*, respectively.

        - Add option --ignore-unknown-fields to ignore unknown field specified
          via --include-field (--field, -f) or --exclude-field (-F).

        - Add option --show-selected-fields to show selected fields and
          immediately exit.


0.039   2022-07-27  Released-By: PERLANCAR; Urgency: low

        - No functional changes.

        - [doc] Mention more CSV-related modules.


0.038   2022-07-25  Released-By: PERLANCAR; Urgency: medium

        - Add utility: csv-munge-row.


0.037   2022-03-27  Released-By: PERLANCAR; Urgency: medium

        - Set input and output encoding to UTF8 and note this in the
          scripts' documentation (RT#141357).


0.036   2022-02-10  Released-By: PERLANCAR; Urgency: medium

        - [cli csv-freqtable] [bugfix] Extraneous first row was produced.


0.035   2022-02-10  Released-By: PERLANCAR; Urgency: medium

        - Add utility: csv-freqtable.


0.034   2021-07-10  Released-By: PERLANCAR; Urgency: medium

	- [bugfix][doc] Cookbook package was not renamed.


0.033   2021-07-10  Released-By: PERLANCAR; Urgency: medium

	- Add logging.

        - [build] Rebuild with newer Perinci::CmdLine::POD 0.023 to generate
          POD-formatted usage line.


0.032   2020-08-16  Released-By: PERLANCAR; Urgency: medium

	- Add utility: csv-transpose.

	- Add cookbook (mostly only placeholders for now).


0.031   2020-08-03  Released-By: PERLANCAR; Urgency: medium

	- Add CLI: csv-csv (csv2csv).

	- Add CSV output options --output-{sep,quote,escape}-char for CLIs
	  that output CSV, e.g. csv-sort, csv-grep, csv-sum, csv-split,
	  csv-csv, etc.

        [cli csv-info]

        - [ux] Now defaults to producing naked result (RT#133078).


0.030   2020-07-30  Released-By: PERLANCAR; Urgency: medium

	- Add common options: --sep-char, --quote-char, --escape-char
	  (RT#133079).

	[cli csv-info]

        - [bugfix] Avoid dying on invalid CSV by initializing $fields to []
	  (RT#133077).

	[cli csv-setop]

        - [bugfix][doc] Fix the documentation of --compare-fields (RT#133076).


0.029   2020-05-29  Released-By: PERLANCAR; Urgency: medium

	- Add utility: csv2td.


0.028   2019-12-27  Released-By: PERLANCAR; Urgency: medium

	[cli csv-sort-rows]

        - Add options --key (-k), --by-sortsub.


0.027   2019-12-23  Released-By: PERLANCAR; Urgency: medium

	- Tweak tab completion.


0.026   2019-12-19  Released-By: PERLANCAR; Urgency: medium

	- Add ability to read CSV from stdin.

	- [bugfix] csv-sort-rows, csv-sort-fields: didn't observe common
	  options --tsv and --no-header.


0.025   2019-11-29  Released-By: PERLANCAR; Urgency: medium

	- Update coerce rule names in Sah schemas (Data::Sah::Coerce
	  0.034+).


0.024   2019-11-14  Released-By: PERLANCAR; Urgency: medium

	- Add utility: csv-split.


0.023   2019-06-06  Released-By: PERLANCAR

	- Add utiity: csv-info.

	- [doc] Explain --no-header more.


0.022   2019-05-21  Released-By: PERLANCAR

	- Add csv2ltsv script (ltsv2csv not yet).

	- [doc] Mention App::TSVUtils and App::LTSVUtils; update that
	  csv2tsv, tsv2csv are now included by us.


0.021   2019-05-12  Released-By: PERLANCAR

	- Add scripts: csv2tsv, tsv2csv.


0.020   2019-04-29  Released-By: PERLANCAR

        - Add utilities: csv-setop, csv-sort-rows (with alias csv-sort),
          csv-lookup-fields.

        - Make $main::csv available to Perl code.

        - [bugfix] A couple of fixes.


0.019   2019-04-23  Released-By: PERLANCAR

	- Declare argument specification variables with 'our' instead of
	  'my' so they are accessible from outside.


0.018   2019-04-23  Released-By: PERLANCAR

	- Add option --tsv to parse input file as TSV instead of CSV.


0.017   2019-04-23  Released-By: PERLANCAR

	- csvutil(): forgot to update valid actions in schema.


0.016   2019-04-23  Released-By: PERLANCAR

	- Add utility: csv-dump (and its alias dump-csv).


0.015   2019-04-15  Released-By: PERLANCAR

	- Add utility: csv-each-row.

	- Make $main::field_idxs also available for Perl code.

	- [ux] CLIs do not need to read env or config.

	- Allow 'eval' argument to be coderef, for when csvutil() is called
	  from Perl.


0.014   2018-05-25  Released-By: PERLANCAR

	- Add utility: csv-map.

	- [ux] (for csv-grep, csv-map): Compile --eval code in 'main' package,
	  turn off strict & warnings.

	- csv-grep & csv-map: also set $main::row and $main::rownum like in
	  other utilities.

	- [test] Add test for csv-grep (& csv-map).


0.013   2017-07-02  Released-By: PERLANCAR

        - Add utility: csv-grep.

        - Add common option: --(no-)header to be able to handle CSV that does
          not have header row.


0.012   2017-04-25  Released-By: PERLANCAR

	- csv-select-fields: Add --field-pat to select by regular
	  expression.


0.011   2016-11-17  Released-By: PERLANCAR

	- [Bugfix] csv-select-fields CLI was not generated in previous
	  release.


0.010   2016-11-16  Released-By: PERLANCAR

	- Add utility: csv-select-fields.

	- csv-delete-field: allow deleting multiple fields in one go.


0.009   2016-11-16  Released-By: PERLANCAR

	- Add utility: csv-concat.

	- csv-add-field: add option --after, --before, --at to specify
	  position of the new field.


0.008   2016-11-16  Released-By: PERLANCAR

        - Add utilities: csv-select-row, csv-convert-to-hash.


0.007   2016-11-15  Released-By: PERLANCAR

	- Add utilities: csv-sum, csv-avg.

	- csv-add-field: Tweak completion: field should not be completed
	  with existing field names.


0.006   2016-11-03  Released-By: PERLANCAR

        - [ux] Add completion for field name (-F) and --example.


0.005   2016-11-03  Released-By: PERLANCAR

        - csv-add-field, csv-munge-field: Don't run code for header row.

        - Tweak descriptions.


0.004   2016-11-03  Released-By: PERLANCAR

        - [Removed] Remove utility csvutil.

        - Add utility csv-sort-fields.


0.003   2016-11-02  Released-By: PERLANCAR

        - [Incompatible change] Rename script replace-newline-in-csv to
          csv-replace-newline for consistency with the other utilities.

        - Add tests.


0.002   2016-11-02  Released-By: PERLANCAR

	- Add utilities: csvutil, csv-list-field-names, csv-add-field,
	  csv-delete-field, csv-munge-field.


0.001   2016-11-01  Released-By: PERLANCAR

         - First release.