--------------------------------------------------------------------------------
icesTAF 3.3-0 (2019-12-03)
--------------------------------------------------------------------------------
o Added function get.remote.sha() to look up a SHA reference code on GitHub.
  Fixed a bug introduced in 3.2-0.

o Improved clean.library() and clean.software() to remove bootstrap/library and
  bootstrap/software when SOFTWARE.bib file does not exist. Improved
  clean.software() to remove software file when version does not match
  SOFTWARE.bib.

o Improved download.github() to handle packages that are nested inside a
  repository. Set default to quiet=FALSE.

o Changed write.taf() so it no longer converts line endings.

o Removed 'remotes' package dependency.




--------------------------------------------------------------------------------
icesTAF 3.2-0 (2019-11-01)
--------------------------------------------------------------------------------
o Added functions clean.library() and clean.software() to selectively clean the
  TAF library and software folders.

o Added function download.github() to download a GitHub repository.

o Added function taf.install() to install a package in the local TAF library.

o Changed taf.bootstrap() so bootstrap/initial/config is now deprecated.
  Instead, model configuration files can be processed as a DATA.bib entry.
  Removed argument 'config'. SOFTWARE.bib is now processed before DATA.bib.

o Changed clean() so it uses clean.library() to clean bootstrap/library.

o Improved draft.data() so it detects bootstrap/*.R scripts as source files to
  consider. Added arguments 'access' and 'data.scripts'. Removed argument
  'data.dir'. Added support for file=TRUE as shorthand for
  file="bootstrap/DATA.bib".

o Improved draft.software() so it first looks for packages in bootstrap/library.
  Added support for package="owner/repo@ref" to install package on the fly.
  Added support for file=TRUE as shorthand for file="bootstrap/SOFTWARE.bib".

o Improved taf.library() so it works from a bootstrap data script.

o Improved write.taf() so it gives an error if data frame contains comma.

o Added argument 'quiet' to cp().

o Added arguments 'force' and 'recon' to make().

o Added argument 'clean' to process.bib(). Renamed argument 'data.source' to
  'data.scripts'.

o Added argument 'force' to taf.bootstrap().

o Improved convert.spaces() so it allows 'sep' to be any number of characters,
  treats %20 as space, and allows spaces in parent directories.

o Improved download() so it shaves off ?tail from the end of 'destfile', and
  converts spaces and %20 to underscores.

o Improved zoom() so it handles legend text size.

o Removed 'jsonlite' package dependency.




--------------------------------------------------------------------------------
icesTAF 3.1-1 (2019-05-24)
--------------------------------------------------------------------------------
o Added function convert.spaces() to convert spaces in filenames.

o Added function sam2taf() to convert SAM tables to TAF format.

o Added argument 'quiet' to process.bib() and support for source={script} and
  dir={TRUE}. Removed 'bundle' field.

o Added argument 'quiet' to taf.bootstrap(). Improved taf.bootstrap() so it
  doesn't clean the corresponding bootstrap subdirectories when arguments
  'config', 'data', or 'software' are FALSE. Dropped support for custom
  bootstrap.R script, superseded by source={script}.

o Improved draft.data() so it works in R versions older than 3.5. Code
  contributed by Alexandros Kokkalis.

o Changed sourceTAF() so working directory is not changed before script is run.




--------------------------------------------------------------------------------
icesTAF 3.0-0 (2019-04-25)
--------------------------------------------------------------------------------
o Added function period() to paste period string for DATA.bib entries.

o Removed argument 'name' from taf.skeleton(). The default behavior is now to
  create initial directories and scripts in the current working directory.

o Changed taf.library() so it loads a package instead of changing the library
  path.

o Changed default size of taf.png(). Changed text size in zoom() accordingly and
  renamed arguments. The zoom() function is now generic.

o Changed write.taf() so it gives a warning if column names are duplicated.

o Improved process.bib() so it supports 'prefix' field when specifying multiple
  filenames in 'source' field.

o Improved process.bib() so it doesn't install a package that is already
  installed.




--------------------------------------------------------------------------------
icesTAF 2.3-0 (2019-04-08)
--------------------------------------------------------------------------------
o Added function sourceDir() to read all *.R files from a directory.

o Added function zoom() to change text size in a lattice plot.

o Added arguments 'config', 'data', and 'software' to taf.bootstrap().

o Added argument 'append' to draft.data() and draft.software(). Code contributed
  by Alexandros Kokkalis.

o Added argument 'colname' to xtab2taf().

o Improved draft.data() so the default value of 'year' is the current year and
  user can pass period=FALSE.

o Improved file.encoding() so it handles spaces in filenames.

o Improved os.unix() so it recognizes both Linux and macOS operating systems.

o Improved process.bib() so it supports 'bundle' field and multiple filenames in
  'source' field, separated by newlines.

o Improved write.taf() so file="" prints to screen, regardless of dir.




--------------------------------------------------------------------------------
icesTAF 2.2-0 (2019-02-22)
--------------------------------------------------------------------------------
o Added function file.encoding() to examine file encoding. Added functions
  latin1.to.utf8() and utf8.to.latin1() to convert file encoding.

o Added function line.endings() to examine line endings.

o Added arguments 'author', 'year', and 'title' to draft.software(), and
  improved it so it also handles software other than R packages.

o Added argument 'clean' to taf.bootstrap().

o Added argument 'create' to taf.library().

o Improved process.bib() so it does not require taf.bootstrap() to create 'data'
  and 'software' subdirectories.

o Improved taf.skeleton() so every script starts with library(icesTAF) and
  mkdir() to create a working directory.




--------------------------------------------------------------------------------
icesTAF 2.1-0 (2019-01-08)
--------------------------------------------------------------------------------
o Added functions taf.bootstrap() and process.bib() to set up data files and
  software.

o Added functions draft.data() and draft.software() to create initial draft
  versions of metadata files.

o Added functions os(), os.linux() and os.macos() to detect more operating
  systems than before.

o Updated colors (taf.green, taf.orange, taf.blue, taf.dark, taf.light) to make
  them equally intense and easy to distinguish.

o This release introduces package dependencies to parse BibTeX files (bibtex)
  and install packages from GitHub (remotes), with further underlying package
  dependencies.




--------------------------------------------------------------------------------
icesTAF 2.0-0 (2018-12-07)
--------------------------------------------------------------------------------
o Added function taf.library() to work with packages in a local TAF library.

o Added function rmdir() to remove an empty directory.

o Added functions os.unix() and os.windows() to determine OS family.

o Added function taf.unzip() to extract files from zip archives.

o Moved functions read.dls() and write.dls() to the 'icesAdvice' package.

o Changed clean(), makeAll(), makeTAF(), sourceAll(), and taf.skeleton() to
  align with new data-model workflow.

o Renamed function tafpng() to taf.png().

o Added argument 'destfile' to download().




--------------------------------------------------------------------------------
icesTAF 1.6-2 (2018-08-03)
--------------------------------------------------------------------------------
o Added argument 'underscore' to write.taf().

o Added argument 'stringsAsFactors' to read.taf().

o Improved multitable support for read.taf() and write.taf().




--------------------------------------------------------------------------------
icesTAF 1.6-1 (2018-06-28)
--------------------------------------------------------------------------------
o Changed sourceTAF(), sourceAll(), makeTAF(), and makeAll() so they never
  delete the 'begin' folder.

o Changed sourceAll(), makeTAF(), makeAll() so they don't set the working
  directory.

o Changed clean() so user can specify directories to remove.

o Changed write.taf() to search in the global workspace if 'x' is a string.

o Changed cp() to enforce safeguards when moving files.




--------------------------------------------------------------------------------
icesTAF 1.6-0 (2018-05-15)
--------------------------------------------------------------------------------
o Removed function upload(). Initial data and model files are now in the 'begin'
  folder of each assessment.

o Added function plus() to rename plus group column.

o Added argument 'dir' to write.taf().

o Changed read.taf() and write.taf() so they can read/write many tables in one
  call.

o Changed write.taf() so the name of the data frame is the default filename.

o Changed cp() to preserve the timestamp when copying a file.




--------------------------------------------------------------------------------
icesTAF 1.5-3 (2018-04-27)
--------------------------------------------------------------------------------
o Changed default file encoding in read.taf() to UTF-8.




--------------------------------------------------------------------------------
icesTAF 1.5-1 (2018-03-20)
--------------------------------------------------------------------------------
o Replaced argument 'local' with 'rm' in sourceTAF().

o Added argument 'colname' to flr2taf().




--------------------------------------------------------------------------------
icesTAF 1.5-0 (2018-01-25)
--------------------------------------------------------------------------------
o Added functions makeTAF() and makeAll() to run TAF scripts as needed.

o Added arguments 'include' and 'engine' to make().

o Added argument 'local' to sourceTAF(), replacing the 'rm' argument.

o Changed sourceAll() to only run TAF scripts: data.R, input.R, model.R,
  output.R, and report.R.




--------------------------------------------------------------------------------
icesTAF 1.4-1 (2017-12-05)
--------------------------------------------------------------------------------
o Added argument 'grep' to div() and rnd().




--------------------------------------------------------------------------------
icesTAF 1.4-0 (2017-10-30)
--------------------------------------------------------------------------------
o Added function upload() to upload file to TAF database. Added function
  download() to download file in binary mode.

o Added function msg() to show a message, as well as the current time.

o Added function tafpng() to open a graphics device. Added function lim() to
  compute axis limits.

o Added function div() to divide column values with a common number. Added
  function rnd() to round column values.

o Added function taf.skeleton() to create an empty template for a TAF analysis.

o Added function deps() to list dependencies.

o Renamed function sourceAtoZ() to sourceAll().

o Added argument 'move' to cp(). Added argument 'clean' to sourceTAF(). Added
  argument 'column' to tt().

o Added color objects: taf.green, taf.orange, taf.blue, taf.dark, and taf.light.

o Added example data frame summary.taf to demonstrate div() and rnd().




--------------------------------------------------------------------------------
icesTAF 1.3-2 (2017-06-03)
--------------------------------------------------------------------------------
o Improved package description.




--------------------------------------------------------------------------------
icesTAF 1.3-0 (2017-05-27)
--------------------------------------------------------------------------------
o Added function make() to run script if needed, and sourceAtoZ() to run all
  scripts in alphabetical order. Added clean() to remove TAF directories.




--------------------------------------------------------------------------------
icesTAF 1.2-0 (2017-05-19)
--------------------------------------------------------------------------------
o Added function sourceTAF() to run scripts. Added cp() to copy files and
  mkdir() to create a directory. Added read.taf() and write.taf() to read and
  write TAF tables. Added long2taf(), taf2xtab(), tt(), and xtab2taf to convert
  between table formats.

o Renamed functions readDLS() and writeDLS() to read.dls() and write.dls().

o Removed function dir.remove() which is no longer needed in TAF scripts.

o Added example data frames catage.long, catage.taf, and catage.xtab to
  demonstrate different table formats.




--------------------------------------------------------------------------------
icesTAF 1.1-0 (2017-04-27)
--------------------------------------------------------------------------------
o Added functions flr2taf() and taf2long() to convert between table formats.




--------------------------------------------------------------------------------
icesTAF 1.0-0 (2017-02-17)
--------------------------------------------------------------------------------
o Initial release, with five functions: dir.remove(), dos2unix(), readDLS(),
  unix2dos(), and writeDLS().
