Tablicious Changelog
====================

0.4.7 (2026-02-28)
------------------

* Date/time fixes
  * Add datevec() methods for duration and calendarDuration; add multi-argout form for datetime.datevec(). ([#153](https://github.com/apjanke/octave-tablicious/issues/153))
  * Add duration.hms() method.
* Fix table.rowfun() bugs that broke it. ([#155](https://github.com/apjanke/octave-tablicious/issues/155))
* Fix the "blank" ctor calling form (`table ('Size',sz, 'VariableTypes',types)`). ([#145](https://github.com/apjanke/octave-tablicious/issues/145))

0.4.6 (2026-02-16)
------------------

* Work around `unicode2native` buffer length bug in `string.strlength`. ([#143](https://github.com/apjanke/octave-tablicious/issues/143))
* Fix `datetime` TimeZone support on big-endian systems. ([#151](https://github.com/apjanke/octave-tablicious/issues/151))
* Add missing `datetime.ismissing` method.
* Fix bad `categorical.ne` true result for missing values.
* Unit tests
  * Centralize test running code in tblish.internal.runtests, and add MP-Test support to it.
  * Add some more unit tests.
* Clarify and expand licensing documentation.
  * Update source file headers to uniformly say "GPLv3+" instead of "GPLv2+", matching the `DESCRIPTION` file and my original intent. ([#149](https://github.com/apjanke/octave-tablicious/issues/149))
* Doco updates: Add category directory entry to the texi doco.
* Internal changes
  * Change some more code to GNU Octave style.

0.4.5 (2025-07-03)
------------------

* Add `startsWith` and `endsWith` methods to `string`. ([#141](https://github.com/apjanke/octave-tablicious/pull/141))
* Fix `string.regexprep` "demote_strings" error. ([#139](https://github.com/apjanke/octave-tablicious/issues/139))
* Fix `make test` failure due to missing `runtests` in Octave 8.x. ([#140](https://github.com/apjanke/octave-tablicious/issues/140))

0.4.4 (2024-10-23)
------------------

* Improvements (hopefully) to duration-related arithmetic and datatype interaction.
* Fix hi-bound and striding bugs in `datetime.colon` (`:` operator).
* Add missing `calendarDuration.mtimes` method.

0.4.3 (2024-07-06)
-------------------

* Fix "[foo (...)]" syntax-ish errors in some functions.
  * Affected datetime, calendarDuration, localdate, splitapply, mustBeCellstr, and some display functions using tblish.internal.mycombvec.
* `table` fixes
  * Correctly handle nested tables in some cases ()- and {}-indexed assignments, when indexing in to those nested tables.
  * Fix assignment to some `table.Properties.<X>` pseudo-properties.
  * Apply object validation after more mutation operations.
* Fix variable number display in table.summary.
* Fix duration ctor bug that returned NaNs in cellstr row vectors. ([#134](https://github.com/apjanke/octave-tablicious/issues/134))

0.4.2 (2024-02-07)
------------------

* Add `end` override methods to string, datetime, etc. so `x(end)` indexing works correctly.
* `table` fixes
  * table: summary: omit NaNs from mean(), include NaN counts.
  * table: Fix rownames, broken by bad internal `.Properties` reference.
* categorical.summary: include frequencies in output

### Documentation

* Alphabetize methods under classes in alphabetical index.

0.4.1 (2024-02-07)
------------------

### Bug Fixes

* string:
  * string: Fix missing trailing newline in string display in `string.disp`.
  * string: Add `+` operator overload that does string concatenation.

Version 0.4.0 (2024-02-07)
--------------------------

### Breaking Changes

* Remove `(fill,rm,standardize)missing` functions, deferring to the Statistics package.
* `table` arrays:
  * `table`: Have `fieldnames (obj)` expose variable and dimension names and Properties, instead of the internal implementation properties.
  * `table`: Remove `grpstats` method and replace with `tblish.table.grpstats()` function, to avoid overriding or interacting with Statistics' `grpstats()` function.
  * `table`: Deprecate `rows`, `columns` methods.
* `datetime:
  * Deprecate `.dnums` property access.
    * This was only public for debugging purposes during initial development, and not intended to be part of the public API. The `datenum` method is the supported way to get datenums here.
* Fix `string.missing()` to actually return a missing value, instead of "".
* Make internal-use properties on the main classes Access = private, now that the code is a little more mature.

### Changed

* Require Octave 7.x or later.
* Fix Octave 7.x and 8.x compatibility in installation and package loading.
* `table` arrays:
  * `table`: Fix "preallocation" constructor to use 0s and ""s for fill values, unless missings are requested using an alternate pseudotype. (For compatibility with Matlab.)
  * `table`: Fix some advanced ()- and {}-indexing cases, including some related to multi-variable subscripting, multi-column table variables, multi-column RHS inputs, and the combination of the three.
  * `table`: Remove `reshape`, `resize`, `vec`, `hasrownames`, and `size_equal` methods.
  * `table`: Make `congruentize` a private function.
  * Add `istable`, `istimetable`, and `istabular` functions.
* Fix `x(ix) = []` element deletion for string, datetime, table, and other classes.
* Add idempotent one-arg constructor forms for string, datetime, categorical. (But not table.)
* Add `NaS`, `NaC`, and `todatetime` functions.
* Make `head` and `tail` functions instead of methods on `table`.
* Add `string.ne` method.
* Fix concatenation of `@missing` arrays.
* Rename `+tablicious` package to `+tblish`; merge `+octave` package into `+tblish`.
* Move `+table_examples` package to `+tblish/+examples`.
* Move the `sizeof()` override methods to a `tblish.sizeof()` function to avoid shadowing core Octave's `sizeof`, until I understand if it's intended to support extension by classdefs.
* Fix the doco generation, including publishing to GitHub Pages.

### Internal

* Convert code style to GNU Octave code style, mostly.
* Move `mustBe*` functions to a `validators/` subdirectory, just for tidiness.
* Revamp doc-generation tools.
* Add experimental MP-Test based unit tests to supplement BISTs, for detailed testing of `table` behavior.

Version 0.3.7 (2023-01-06)
--------------------------

* Fix installation under Octave 7.x. (#91)
* Fix orphaned sections in documentation.
* Add table.size_equal method. (#81)
* Add string.empty static method.

Internal refactoring:

* Rearrange doco files so the main source file is named `*.texi` and its extension is recognized by editors.

Version 0.3.6 (2021-07-05)
--------------------------

* Fix multi-argout calling form of table.size. (Thanks, @rdzman!)
* Fix table dot-indexing assignment by having table.numel always return 1.
* Support arbitrary strings as variable names (#82).

Version 0.3.5 (2020-01-30)
--------------------------

* Fix compiler warnings on systems with 32-bit `octave_idx_type`

Version 0.3.4 (2020-01-28)
--------------------------

* Octave 6.x compatibility: move some mustBe* validators into compatibility shims

Version 0.3.3 (2020-01-28)
--------------------------

* Fix version metadata in the distribution

Version 0.3.2 (2020-01-28)
--------------------------

* sprintf and fprintf support for datetime, categorical, and other classes
* Added this ChangeLog
* Octave 6.x compatibility fix: use different function for registering QHelp doco

Version 0.3.1 (2020-01-27)
--------------------------

* Fix a dumb bug that broke string
* Fix "shadowed function" warning in Octave 5.x

Version 0.3.0 (2020-01-18)
--------------------------

* Various bugfixes
* Added some examples

This is the release that I think is ready for general consumption by the user community.

Version 0.2.0 (2019-05-05)
--------------------------

* More basic table stuff
* Now with datetime and duration, since I’ve merged the Chrono package into this project
* Documentation
* @string and @categorical
* The start of some example data sets
* Bug fixes, of course

Version 0.1.0 (2019-04-30)
--------------------------

Initial release!

This library is about 2/3 feature complete. Most basic table, string, categorical, and
Missing Data stuff is working, and there's documentation.
