612 lines
30 KiB
Markdown
612 lines
30 KiB
Markdown
# CHANGES IN xfun VERSION 0.50
|
|
|
|
- The function `isFALSE()` has been removed from this package. The deprecation notice was given two years ago: https://yihui.org/en/2023/02/xfun-isfalse/
|
|
|
|
- Added a new function `tabset()` to represent a list with a tabset. The representation is similar to `str()`, but uses a visual form.
|
|
|
|
- Factored out the function `taml_load()` and exported it (TAML is a tiny subset of YAML). Also added a new function `taml_save()` to convert simple lists to YAML.
|
|
|
|
- The `print` argument of `record()` can accept non-function values now, in which case `print()` (or `show()` for S4 objects) will be used as the print function.
|
|
|
|
- The `record()` results can also be formatted to Markdown via `format(record(), to = 'markdown')`.
|
|
|
|
- Moved `knitr::combine_words()` into this package as `xfun::join_words()`. The former has become a simple wrapper of the latter.
|
|
|
|
- Similarly, moved `knitr::write_bib()` into this package as `xfun::pkg_bib()`.
|
|
|
|
- Moved the internal function `str_wrap()` from **knitr** and exported it as `xfun::str_wrap()`.
|
|
|
|
- Exported the internal `find_globals()` and `find_locals()` functions.
|
|
|
|
- `md_table()` escapes `|` in the table to `\|` instead of `|` now.
|
|
|
|
- `yaml_load(use_yaml = FALSE)` allows for indenting sub-fields by any number of spaces now (thanks, @J-Moravec, #95). Previously, one level of indentation must use exactly 2 spaces.
|
|
|
|
- `divide_chunk()` no longer requires every line of chunk options to be commented out when the engine uses a pair of comment delimiters (such as `/*` and `*/` for CSS) instead of a single comment character. It suffices to use the opening delimiter at the beginning and closing delimiter at the end, e.g.,
|
|
|
|
````md
|
|
```{css}
|
|
/*| echo=FALSE,
|
|
label='foo' */
|
|
```
|
|
````
|
|
|
|
Previously, every line must be commented out like:
|
|
|
|
````md
|
|
```{css}
|
|
/*| echo=FALSE, */
|
|
/*| label='foo' */
|
|
```
|
|
````
|
|
|
|
# CHANGES IN xfun VERSION 0.49
|
|
|
|
- Added an argument `use_block = FALSE` to `protect_math()`. When `use_block = TRUE`, a `$$ $$` expression that spans across multiple lines will be protected in a code block.
|
|
|
|
- `protect_math()` will ignore `$ $` if there are backticks after the opening `$` or before the closing `$`, e.g., ``$`this is not math`$``.
|
|
|
|
- `protect_math()` allows for parentheses `()` around math expressions now, e.g., `($x$)` was previously not recognized but is recognized now (thanks, @AlbertLei, yihui/litedown#34).
|
|
|
|
- `record()` works with `quote()` now (thanks, @ben-schwen, yihui/litedown#38).
|
|
|
|
- `html_escape()` will not escape double quotes (i.e., convert `"`" to `"`) by default, and the conversion will be done only for `html_escape(attr = TRUE)`.
|
|
|
|
- The arguments `before` and `after` of `read_all()` can take functions of two arguments now, with the second argument being the content of each file.
|
|
|
|
- Added an argument `start` to `make_fence()`.
|
|
|
|
# CHANGES IN xfun VERSION 0.48
|
|
|
|
- Added utilities for HTML tags: `html_tag()`, `html_escape()`, `html_escape()`, and `html_view()`. Removed the soft dependency on the **htmltools** package accordingly.
|
|
|
|
- `base_pkgs()` is faster now: it calls `tools::standard_package_names()` if the function exists (R >= 4.4.0), otherwise it just returns a constant vector of base package names (thanks, @arnaudgallou, #91).
|
|
|
|
- Added a function `mime_type()` to obtain the MIME types of files via `mime::guess_type()` if **mime** is installed, otherwise it will call `tools:::mime_type()`, and fall back to using a system command (e.g., `file --mime-type`) to obtain the types.
|
|
|
|
- Added a function `file_rename()` to deal with `file.rename()` failures by calling `file.copy()` (thanks, @Giqles @katrinabrock, rstudio/bookdown#804).
|
|
|
|
- `new_app()` will use `utils::browseURL()` to open the app if `options('viewer')` is not configured (thanks, @AlbertLei, yihui/litedown#29).
|
|
|
|
- Added a method `record_print.record_asis()` to return the object as is.
|
|
|
|
# CHANGES IN xfun VERSION 0.47
|
|
|
|
- Added functions `lazy_save()` and `lazy_load()` to save objects to files and lazy-load them.
|
|
|
|
- Fixed a bug in `record(dev = svglite::svglite)` that misplaced plots when low-level plot functions are used (thanks, @liao961120, yihui/litedown#17).
|
|
|
|
- Specified the lowest R version required (v3.2.0) for this package.
|
|
|
|
# CHANGES IN xfun VERSION 0.46
|
|
|
|
- `md_table()` should add a vertical ellipsis to row names when rows are truncated by the `limit` argument.
|
|
|
|
- `session_info()` recognizes Positron now (thanks, @chuxinyuan, #89).
|
|
|
|
# CHANGES IN xfun VERSION 0.45
|
|
|
|
- For `record()` with `verbose = 1` or `2`, invisible `NULL` is no longer printed.
|
|
|
|
- `Rscript_call()` will show the actual error message (if an error occurred) during calling the function in a new R session.
|
|
|
|
# CHANGES IN xfun VERSION 0.44
|
|
|
|
- Added a function `cache_exec()` to cache the execution of an expression either in memory or on disk. It is much more general and flexible than `cache_rds()`. For example, it supports custom reading/writing methods for cache files, and can load locally created variables in the expression while loading cache.
|
|
|
|
- Added an argument `cache` to `record()` to make it possible to enable caching.
|
|
|
|
- Added arguments `message` and `warning` to `record()` to decide whether messages and warnings should be recorded.
|
|
|
|
- Changed the default value of the argument `error` of `record()` from `FALSE` to `NA`. Now `FALSE` means to suppress error messages, and `NA` means to throw errors normally. This is for consistency with the `message` and `warning` arguments.
|
|
|
|
- Added an S3 generic function `record_print()`, which is similar to `knitr::knit_print()` but for the purpose of printing visible values in `record()`.
|
|
|
|
- The `record()` function gained new arguments `print` and `print.args` to support custom printing functions and arguments.
|
|
|
|
- Added a function `md_table()`, which is a minimal Markdown table generator.
|
|
|
|
- Exported the internal function `md5()` to calculate the MD5 checksums of R objects. The function is essentially a workaround for `tools::md5sum()` (see HenrikBengtsson/Wishlist-for-R#21).
|
|
|
|
- For `fenced_block()`, a space is added between the backticks and the language name, e.g., ```` ```r ```` has become ```` ``` r ```` now. This will affect snapshot tests based on Markdown ([an example](https://github.com/yihui/knitr-examples/commit/931e0a2)).
|
|
|
|
- Added a shorthand `fenced_div()` for `fenced_block(char = ':')`.
|
|
|
|
- `write_utf8()` returns the `con` argument (typically a file path) now. Previously, it returns `NULL`.
|
|
|
|
- Added an experimental function `new_app()` to create a local web application.
|
|
|
|
- The returned value of `yaml_body()` contains a new element `lines` in the list indicating the line numbers of YAML metadata if exists.
|
|
|
|
- Removed the `skip` argument from `split_source()`.
|
|
|
|
- For `split_source(line_number = TRUE)`, the attribute name for line numbers in the returned value was changed from `line_start` (a single starting line number) to `lines` (both the starting and ending numbers).
|
|
|
|
- Fixed an edge case in `prose_index()`, in which inline code was incorrectly recognized as a code block fence.
|
|
|
|
# CHANGES IN xfun VERSION 0.43
|
|
|
|
- Added a function `upload_imgur()`, which was adapted from `knitr::imgur_upload()`. The latter will call the former in the future. `xfun::upload_imgur()` allows users to choose whether to use the system command `curl` or the R package **curl** to upload the image. It also has a new argument `include_xml` to specify whether the XML response needs to be included in the returned value.
|
|
|
|
- Added a function `fenced_block()` to create a fenced block in Markdown (thanks, @cderv, yihui/knitr#2331). The block can be either a code block or a fenced Div.
|
|
|
|
- Fixed a bug in `xfun::record()` when the argument `verbose = 1` or `2`.
|
|
|
|
# CHANGES IN xfun VERSION 0.42
|
|
|
|
- `isFALSE()` has been fully deprecated for R >= 3.5.0, and will be completely removed from this package in the future (<https://yihui.org/en/2023/02/xfun-isfalse/>).
|
|
|
|
- Added a function `record()` to run R code and record the results, which is similar to `evaluate::evaluate()` but less sophisticated and technically simpler. One major difference is that `xfun::record()` records plots directly to files instead of saving them as display lists.
|
|
|
|
- `yaml_load()` gained an `envir` argument, which can be used to specify the environment to evaluate R expressions in YAML (i.e., expressions written after `!expr` or `!r`). This is not straightforward in the upstream **yaml** package (thanks, @viking, vubiostat/r-yaml#54).
|
|
|
|
- `yaml_body()` gained the `...` argument to pass more arguments to `yaml_load()`.
|
|
|
|
- `split_source()` gained a `merge_comments` argument to merge consecutive lines of comments into the next code block, a `line_number` argument to store the line number of each expression in the returned value, and a `skip` argument to skip the rest of the code when the skip token is found.
|
|
|
|
- `check_old_package()` has been vectorized, i.e., the arguments `name` and `version` can take vectors now.
|
|
|
|
- Factored out the code for parsing chunk options and dividing a chunk into chunk options and chunk body from **knitr** to this package as functions `csv_options()` and `divide_chunk()`, respectively. They will be used by **knitr** and other packages in future.
|
|
|
|
- Added a function `decimal_dot()` to evaluate an expression after forcing `options(OutDec = '.')` and `Sys.setlocale(LC_NUMERIC = 'C')` (for rstudio/rmarkdown#2525).
|
|
|
|
# CHANGES IN xfun VERSION 0.41
|
|
|
|
- `process_file()` will write to the file only if the processed text is different with the input text. This is to avoid writing files unnecessarily.
|
|
|
|
- `session_info()` will remove extra blank lines (thanks, @chuxinyuan, #82) and also omit the time zone info.
|
|
|
|
# CHANGES IN xfun VERSION 0.40
|
|
|
|
- `number_to_words()` supports decimal numbers now (thanks, @harshvardhaniimi, #80).
|
|
|
|
- `is_ascii()` is more robust now (thanks, @bastistician, #81).
|
|
|
|
# CHANGES IN xfun VERSION 0.39
|
|
|
|
- Fixed a bug that `protect_math()` fails to protect the starting `$$` that has leading white spaces.
|
|
|
|
- Added a function `strip_html()` to remove HTML tags and comments from text.
|
|
|
|
- The function `alnum_id()` will remove HTML tags and comments from text (using `strip_html()`) before converting it to an ID string.
|
|
|
|
- Added a function `env_option()` to retrieve an option value from `options()`. If the option does not exist there, check the environment variables. This provides a way for users to set an option via either `options()` or an environment variable.
|
|
|
|
# CHANGES IN xfun VERSION 0.38
|
|
|
|
- Added an object `download_cache`, which is a list of methods to download a URL, cache the result, retrieve the result from the cache, and clear the cache.
|
|
|
|
- Added an argument `default` to `url_filename()` to provide a default filename when it cannot be determined from the URL.
|
|
|
|
- Added a function `yaml_load()` to read YAML data when the **yaml** package is not available. It only supports a limited number of data types and is supposed to be used as a fallback method. See the help page `?xfun::yaml_load` for details.
|
|
|
|
- Added a function `yaml_body()` to split a document into YAML metadata and the body.
|
|
|
|
- `is_arm64()` also supports Linux now (thanks, @eitsupi, #74).
|
|
|
|
- `is_blank()` returns a logical vector of the same length as the input vector now, indicating if each element of the input is blank. Previously it returns a logical scalar indicating whether *all* elements are blank. If you want the old behavior, you can use `all(is_blank())`.
|
|
|
|
# CHANGES IN xfun VERSION 0.37
|
|
|
|
- Added a function `is_arm64()` to test the CPU type (thanks, @AlbanSagouis, #72).
|
|
|
|
- Started deprecating `xfun::isFALSE()` in favor of `base::isFALSE()` for R >= 3.5.0 (thanks, @mmaechler, #66); `isFALSE()` will eventually be removed from **xfun** when we do not need to support R < 3.5.0.
|
|
|
|
# CHANGES IN xfun VERSION 0.36
|
|
|
|
- Added a new argument `resolve_symlink` to `normalize_path()` to get the absolute paths of symlinks without resolving them (with `resolve_symlink = FALSE`).
|
|
|
|
# CHANGES IN xfun VERSION 0.35
|
|
|
|
- Added a new argument `token` to `protect_math()` to optionally include a token around math expressions.
|
|
|
|
- `base64_uri()` relies less on the **mime** package now. For some common file extensions (e.g., `.jpg`/`.png`), this function knows their MIME types.
|
|
|
|
- `stringsAsStrings()` has been removed from this package.
|
|
|
|
# CHANGES IN xfun VERSION 0.34
|
|
|
|
- Added a new function `alnum_id()` to generate ID strings from a character vector.
|
|
|
|
- The function `stringsAsStrings()` has been deprecated.
|
|
|
|
# CHANGES IN xfun VERSION 0.33
|
|
|
|
- Reverted the change for #68: the characters `-+!_#` are no longer accepted by default in filename extensions, since they are relatively rare and caused a breakage in rstudio/bookdown#1369. If you wish to allow for these characters, you may use the new `extra` argument in `file_ext()` and related functions, e.g., `xfun::file_ext(x, extra = '-+!_#')`.
|
|
|
|
- The function `stringsAsStrings()` will be deprecated in a future release of **xfun**, because the global option `stringsAsFactors = FALSE` has become the default in base R since 4.0.0.
|
|
|
|
# CHANGES IN xfun VERSION 0.32
|
|
|
|
- Added a function `shrink_images()` to shrink images to a maximum width using the **magick** package (thanks, @apreshill, rstudio/blogdown#614).
|
|
|
|
- Added a function `tinify_dir()` as a wrapper of `tinify()` to compress images under a directory.
|
|
|
|
- `file_ext()` supports more file extensions now, such as `.c++`, `.FB2K-COMPONENT`, and so on (thanks, @tentacles-from-outer-space, #68).
|
|
|
|
- Fixed the issue that `xfun::base_pkgs()` could hang R (thanks, @mmaechler, #66).
|
|
|
|
- The `...` argument in `dir_create()` was not passed to `dir.create()`.
|
|
|
|
# CHANGES IN xfun VERSION 0.31
|
|
|
|
- `github_releases(use_jsonlite = FALSE)` supports R versions below 4.1.0 now.
|
|
|
|
- `session_info()` silently drops empty package names now (thanks, @phargarten2, #65).
|
|
|
|
# CHANGES IN xfun VERSION 0.30
|
|
|
|
- Added a new function `is_blank()` (previously existed in **knitr**) to test if all elements of a character vector are blank (white spaces or empty strings).
|
|
|
|
- Added a new argument `error = TRUE` to `existing_files()`.
|
|
|
|
# CHANGES IN xfun VERSION 0.29
|
|
|
|
- `github_releases()` can fetch all releases (tags) of a Github repo now.
|
|
|
|
- Added an argument `.error` to `download_file()` so that users can customize the error message when the download fails.
|
|
|
|
- Added functions `rest_api_raw()` and `rest_api()` to get data from a REST API; also added the function `github_api()` to get data from the Github API based on `rest_api_raw()`.
|
|
|
|
- Added a wrapper function `system3()` based on `system2()` to mark the character output of `system2()` as UTF-8 if appropriate.
|
|
|
|
- Added a function `existing_files()` to return file paths that exist (a shorthand of `x[file.exists(x)]`).
|
|
|
|
- Added a function `read_all()` to read multiple files and concatenate the content into a character vector.
|
|
|
|
- `url_accessible()` uses `curlGetHeaders()` by default (instead of `download_file()`) to test if a URL is accessible when the **curl** package is not available.
|
|
|
|
- When `options(xfun.rev_check.compare = FALSE)`, `rev_check()` will run `R CMD check` on reverse dependencies against a source package but not the CRAN version of this package. By default, this option is `TRUE`, meaning that `R CMD check` will run against both versions of the package.
|
|
|
|
# CHANGES IN xfun VERSION 0.28
|
|
|
|
- Added a new function `url_accessible()` to test if a URL can be downloaded.
|
|
|
|
- Added a new function `try_error()` to try an expression and see if it throws an error.
|
|
|
|
# CHANGES IN xfun VERSION 0.27
|
|
|
|
- Exported and documented the function `xfun::base_pkgs()` (to return base R package names).
|
|
|
|
- Changed the default value of the `status_only` argument of `compare_Rcheck()` from `FALSE` to `TRUE`.
|
|
|
|
- Added new functions `crandalf_check()` and `crandalf_results()` for checking (especially large numbers of) reverse dependencies of packages via [**crandalf**](https://github.com/yihui/crandalf).
|
|
|
|
- Added new functions `append_utf8()` and `append_unique()` based on `read_utf8()` and `write_utf8()` to append content to files or connections.
|
|
|
|
# CHANGES IN xfun VERSION 0.26
|
|
|
|
- The `windows_only` argument of `native_encode()` has been removed. Now `native_encode()` only tries the conversion to native encoding on platforms where `l10n_info()[['UTF-8']]` does not return `TRUE`.
|
|
|
|
- Added a `solaris` argument to `upload_win_builder()`.
|
|
|
|
# CHANGES IN xfun VERSION 0.25
|
|
|
|
- Fixed a bug in `broken_packages()` (thanks, @PythonCoderUnicorn, rstudio/rmarkdown#1990).
|
|
|
|
- Added a `files` argument to `optipng()` so that users can specify the list of PNG files instead of running `optipng` on a whole directory.
|
|
|
|
# CHANGES IN xfun VERSION 0.24
|
|
|
|
- Exported the internal function `broken_packages()` to reinstall broken R packages.
|
|
|
|
- Fixed the bug in `proj_root()` #54 (thanks, @clarkliming).
|
|
|
|
# CHANGES IN xfun VERSION 0.23
|
|
|
|
## NEW FEATURES
|
|
|
|
- Added a `tinify()` function to compress PNG/JPEG images via [the Tinify API](https://tinypng.com/developers).
|
|
|
|
- Added a `news2md()` function to convert package news to the Markdown format. This is mainly for converting the plain-text `NEWS` file and the `NEWS.Rd` file to `NEWS.md`.
|
|
|
|
- Added a `format_bytes()` function to format numbers of bytes using a specified unit, e.g., `1024` can be formatted as `1 Kb`.
|
|
|
|
- When using `pkg_load2()` in an **renv** project, it will use `renv::install()` to install missing packages by default to take advantage of **renv**'s caching feature (thanks, @chunyunma @cderv, #52).
|
|
|
|
- `upload_win_builder()` no longer requires the system command `curl` to be available; if `curl` is not available, the R package **curl** will be used instead, which means this R package must be installed. In addition to uploading to the `ftp` server of win-builder, it's also possible to upload to <https://win-builder.r-project.org/upload.aspx>: call `upload_win_builder(..., server = 'https')`. This change was made so that it would be possible to continue to upload to win-builder in case it should stop supporting `ftp` (CRAN has discouraged package authors from using `ftp://`).
|
|
|
|
## BUG FIXES
|
|
|
|
- Backticks are added to math environments by mistake when `\begin{}` and `\end{}` do not match (thanks, @oliviergimenez, #51).
|
|
|
|
## MINOR CHANGES
|
|
|
|
- The argument `src` was renamed to `pkg` in `install_dir()`.
|
|
|
|
- The argument `file` of `upload_win_builder()` defaults to `pkg_build()` now, i.e., by default, it will build a source package and upload it, so you do not need to build the package separately.
|
|
|
|
# CHANGES IN xfun VERSION 0.22
|
|
|
|
## NEW FEATURES
|
|
|
|
- `relative_path()` is vectorized now.
|
|
|
|
- Added a new function `retry()` to retry calling a function for a number of times in case of errors.
|
|
|
|
- Added a new function `sort_file()`, which is a shorthand for `process_file(fun = sort)` to sort the lines in a text file.
|
|
|
|
## MAJOR CHANGES
|
|
|
|
- The argument `FUN` was renamed to `fun` in `process_file()`.
|
|
|
|
## MINOR CHANGES
|
|
|
|
- Inside `download_file()`, the `timeout` option in `options()` is set to 3600 seconds when it takes the default value of 60 seconds, which may not be enough for downloading large files (thanks, @matthewgson, yihui/tinytex#286).
|
|
|
|
# CHANGES IN xfun VERSION 0.21
|
|
|
|
## NEW FEATURES
|
|
|
|
- Added a new function `pkg_available()` to test if a package with a minimal version is available (thanks, @cderv, #45).
|
|
|
|
- Added a new function `set_envvar()` to set environment variables and return their old values, so they could be restored later.
|
|
|
|
- Added a new function `exit_call()` to call a function when a parent function exits.
|
|
|
|
- Exported the internal function `read_bin()`.
|
|
|
|
- Added an argument `verbose` to `bg_process()`.
|
|
|
|
- `Rscript_call()` gains an `options` argument to pass command-line options to `Rscript` (thanks, @cderv, #48).
|
|
|
|
# CHANGES IN xfun VERSION 0.20
|
|
|
|
## NEW FEATURES
|
|
|
|
- Added a function `msg_cat()` to generate a message with `cat()`. See the help page `?xfun::msg_cat` for more information.
|
|
|
|
- Added a function `mark_dirs()` to mark directories with a trailing slash in a vector of paths to differentiate them from normal filenames (#44).
|
|
|
|
## BUG FIXES
|
|
|
|
- `xfun::proc_kill()` failed to work on *nix.
|
|
|
|
- `xfun::del_empty_dir()` failed to delete empty dirs.
|
|
|
|
- `xfun::file_string()` preserves emptiness (thanks, @MichaelChirico, #38).
|
|
|
|
- `xfun::raw_string()` preserves the class(es) of the input now (thanks, @MichaelChirico, #40).
|
|
|
|
## MINOR CHANGES
|
|
|
|
- Exported the function `dir_create()`.
|
|
|
|
# CHANGES IN xfun VERSION 0.19
|
|
|
|
## NEW FEATURES
|
|
|
|
- Added functions `bg_process()` to run a command in a background process, and `proc_kill()` to kill a process.
|
|
|
|
- Added a function `del_empty_dir()` to delete a directory if it is empty.
|
|
|
|
- Added functions `is_abs_path()` and `is_rel_path()` to check if paths are absolute or relative.
|
|
|
|
- Added a function `is_sub_path()` to test if a path is under a directory.
|
|
|
|
- Added a function `is_web_path()` to test if a path is a web path that starts with `http://` or `https://` or `ftp://` or `ftps://`.
|
|
|
|
- Documented and exported the previously internal functions `dir_exists()` and `file_exists()` (thanks, @cderv, #36).
|
|
|
|
- Added a function `dir_create()` to create a directory recursively by default when it does not exist.
|
|
|
|
- Added an argument `fail` to `Rscript_call()` to allow users to customize the error message when an error occurred in calling the function in a new R session.
|
|
|
|
## MINOR CHANGES
|
|
|
|
- `file_ext()`, `sans_ext()`, and `with_ext()` no longer use `tools::file_ext()` or `tools::file_path_sans_ext()`, but provide a slightly different implementation. They treat `tar.(gz|bz2|xz)` and `nb.html` as file extensions, and also allow extensions to contain a trailing `~` or `#`.
|
|
|
|
# CHANGES IN xfun VERSION 0.18
|
|
|
|
## NEW FEATURES
|
|
|
|
- Added a function `grep_sub()` to perform replacement with `gsub()` on elements matched from `grep()`.
|
|
|
|
- Added a function `github_releases()` to obtain the tags from the Github releases of a repo.
|
|
|
|
- Added a function `bump_version()` to increase the last digit of version numbers by one.
|
|
|
|
- Moved a function `process_file()` from the **blogdown** package to this package, and documented it.
|
|
|
|
- Added a function `valid_syntax()` to check if an R code fragment is syntactically valid. This function was moved from the **highr** package.
|
|
|
|
- Added a function `url_filename()` to extract filenames from URLs. This function is used by `download_file()` to determine the default output filename.
|
|
|
|
- Added a function `do_once()` to perform a task once in an R session.
|
|
|
|
- Added a function `proj_root()` to find the root directory of a project. Currently it only supports R package projects and RStudio projects by default.
|
|
|
|
- Added a function `relative_path()` to calculate the relative path of a path relative to a directory.
|
|
|
|
- Added a function `from_root()`, which is similar to `here::here()` but returns a relative path instead of an absolute path.
|
|
|
|
- Added a function `magic_path()` that, given an incomplete input path, tries to find the actual path recursively under subdirectories of a root directory. For example, users may only provide a base filename, and `magic_path()` will look for this file under subdirectories and return the actual path if it is found.
|
|
|
|
## MINOR CHANGES
|
|
|
|
- Now `download_file()` tries the download method `winnet` first (previously it was `libcurl`) on Windows (thanks, @cderv, #33).
|
|
|
|
# CHANGES IN xfun VERSION 0.17
|
|
|
|
## NEW FEATURES
|
|
|
|
- Supports `xfun::pkg_attach(packages, install = "pak")`, i.e., use `pak::pkg_install()` to install a package when it is not installed (thanks, @GitHunter0, #32).
|
|
|
|
- Added a new function `xfun::split_source()` to split lines of R source code into minimal complete expressions. This function was moved from the **highr** package.
|
|
|
|
# CHANGES IN xfun VERSION 0.16
|
|
|
|
- Added a new function `base64_decode()` to decode data from the base64 encoding (thanks, @wush978, #31).
|
|
|
|
# CHANGES IN xfun VERSION 0.15
|
|
|
|
## NEW FEATURES
|
|
|
|
- Added a new function `tree()`, which is based on `str()` in base R, but changes the output of `str()` into a tree diagram to make it easier to understand nested data structures.
|
|
|
|
- Added a new function `base64_encode()` to encode data into the base64 encoding (thanks, @wush978, #27).
|
|
|
|
- Added a new function `base64_uri()` to generate the Data URI (or Data URL) for a file.
|
|
|
|
## BUG FIXES
|
|
|
|
- Fenced code blocks commented out in `<!-- -->` are not longer recognized as code blocks but prose (thanks, @jarauh, #25).
|
|
|
|
# CHANGES IN xfun VERSION 0.14
|
|
|
|
## NEW FEATURES
|
|
|
|
- The `cache_rds()` function can invalidate the cache automatically when the code passed to its `expr` argument has changed. Two new arguments, `hash` and `clean` were added to this function to make it more useful and powerful. See the help page `?xfun::cache_rds()` for more information.
|
|
|
|
# CHANGES IN xfun VERSION 0.13
|
|
|
|
## NEW FEATURES
|
|
|
|
- Added a new function `cache_rds()` to cache an R expression to a `*.rds` file.
|
|
|
|
- Added a new function `Rscript_call()` to call a function (with arguments) in a new R session via the command `Rscript`.
|
|
|
|
- The `recheck` argument of `rev_check()` can take a vector of package names, and only these packages will be checked. See `?xfun::rev_check` for more details.
|
|
|
|
# CHANGES IN xfun VERSION 0.12
|
|
|
|
## NEW FEATURES
|
|
|
|
- Added a new function `split_lines()`.
|
|
|
|
# CHANGES IN xfun VERSION 0.11
|
|
|
|
## BUG FIXES
|
|
|
|
- `read_utf8()` will read the file with `options(encoding = 'native.enc')` and ignore user's setting such as `options(encoding = 'UTF-8')` (#21).
|
|
|
|
# CHANGES IN xfun VERSION 0.10
|
|
|
|
## NEW FEATURES
|
|
|
|
- Added the function `as_strict_list()` to convert an existing object to a strict list without wrapping it in another list if the object already is of type list (in contrast to how `strict_list()` behaves) (thanks, @salim-b, #20).
|
|
|
|
# CHANGES IN xfun VERSION 0.9
|
|
|
|
## NEW FEATURES
|
|
|
|
- Added a function `rename_seq()` to rename files to add an incremental numeric prefix to the filenames, e.g., rename `a.txt`, `b.txt`, `c.txt` to `1-a.txt`, `2-b.txt`, `3-c.txt`.
|
|
|
|
# CHANGES IN xfun VERSION 0.8
|
|
|
|
## MINOR CHANGES
|
|
|
|
- `xfun::write_utf8(NULL)` is equivalent to `xfun::write_utf8(character(0))` now (thanks, @schloerke, yihui/knitr#1714).
|
|
|
|
# CHANGES IN xfun VERSION 0.7
|
|
|
|
## MINOR CHANGES
|
|
|
|
- `loadable()` is quiet with R 3.6.0 (https://stat.ethz.ch/pipermail/r-devel/2019-May/077774.html).
|
|
|
|
# CHANGES IN xfun VERSION 0.6
|
|
|
|
## NEW FEATURES
|
|
|
|
- Added the `...` argument to `same_path()` to pass additional arguments to `normalize_path()`.
|
|
|
|
## BUG FIXES
|
|
|
|
- The `warn` argument in `prose_index()` failed to suppress warnings.
|
|
|
|
# CHANGES IN xfun VERSION 0.5
|
|
|
|
## NEW FEATURES
|
|
|
|
- Added functions `upload_ftp()` and `upload_win_builder()` to upload files to FTP servers.
|
|
|
|
- Added a function `stringsAsStrings()` (see its help page for details).
|
|
|
|
- Added an argument `warn` to `prose_index()` to suppress the warning when code fences are not balanced.
|
|
|
|
## BUG FIXES
|
|
|
|
- Fixed the bug that `prose_index()` recognizes double backticks as code fences (thanks, @shrektan, #14 #15).
|
|
|
|
# CHANGES IN xfun VERSION 0.4
|
|
|
|
## NEW FEATURES
|
|
|
|
- Added functions `embed_file()`, `embed_dir()`, and `embed_files()` to embed files in an HTML output file (e.g., from R Markdown), so that the files can be directly downloaded from the web browser. One use case is to call one of these functions in an R code chunk of an Rmd document to embed the Rmd source document or data files in the HTML output, so readers can download them.
|
|
|
|
- Added a new argument `message` to `pkg_attach()`, so you can suppress package startup messages via `xfun::pkg_attach(..., message = FALSE)` or set the global option `options(xfun.pkg_attach.message = FALSE)` (thanks, @wch, yihui/knitr#1583).
|
|
|
|
## MINOR CHANGES
|
|
|
|
- The argument `rw_error` was moved from `gsub_dir()` to `gsub_file()` (`gsub_dir(rw_error = ...)` will still work).
|
|
|
|
- `is_ascii()` now returns `NA` for `NA_character_` (thanks, @shrektan, #8 #9).
|
|
|
|
# CHANGES IN xfun VERSION 0.3
|
|
|
|
## NEW FEATURES
|
|
|
|
- Added a new functions `download_file()` to try various methods to download a file.
|
|
|
|
- Added a new function `is_ascii()` to test if a character vector only consists of ASCII characters.
|
|
|
|
- Added a new function `numbers_to_words()` to convert numbers to English words (thanks, @daijiang, #3).
|
|
|
|
# CHANGES IN xfun VERSION 0.2
|
|
|
|
## NEW FEATURES
|
|
|
|
- Added a `new_session` argument to `loadable()`.
|
|
|
|
- Added new functions `gsub_file()`, `gsub_files()`, `gsub_dir()`, and `gsub_ext()` to replace strings in files.
|
|
|
|
- Added new functions `Rscript` and `Rcmd` as wrappers of `system2('Rscript')` and `system2('R', 'CMD')`, respectively.
|
|
|
|
- Added a new function `install_dir()` to install a source package from a directory.
|
|
|
|
- Added a new function `file_string()` to read a text file (encoded in UTF-8) and return its content a single character string (lines concatenated by `\n`).
|
|
|
|
- Added a new function `raw_string()` to print a character vector in its "raw" form using `cat(..., sep = '\n')` instead of `print()`, because the latter may introduce `[1]`, "extra" double quotes, and escape sequences, which are not very human-readable.
|
|
|
|
- Added a new function `session_info()` as an alternative to `sessionInfo()`.
|
|
|
|
- Added a new function `rev_check()` to run `R CMD check` on the reverse dependencies of a package, and a corresponding helper function `compare_Rcheck()` for showing the differences in logs with the CRAN version and the current version of the package, respectively.
|
|
|
|
- Added new functions for dealing with Markdown text: `prose_index()` returns the line indices of text that is prose (not code blocks), and `protect_math()` protects math expressions in Markdown in backticks.
|
|
|
|
- Added an `error` argument to `read_utf8()` to signal an error if the file is not encoded in UTF-8.
|
|
|
|
# CHANGES IN xfun VERSION 0.1
|
|
|
|
## NEW FEATURES
|
|
|
|
- `attr()` as an abbreviation of `base::attr(exact = TRUE)`.
|
|
|
|
- `file_ext()`, `sans_ext()`, and `with_ext()` to manipulate extensions in filenames.
|
|
|
|
- `in_dir()` to evaluate an R expression in a directory.
|
|
|
|
- `isFALSE()` as an abbreviation of `identical(x, FALSE)`.
|
|
|
|
- `is_windows()`, `is_macos()`, `is_linux()`, and `is_unix()` to test operating systems.
|
|
|
|
- `native_encode()` to try to encode a character vector in the native encoding.
|
|
|
|
- `normalize_path()` as an abbreviation of `normalizePath(winslash = '/', mustWork = FALSE)`.
|
|
|
|
- `optipng()` to run the command `optipng` to optimize all PNG files under a directory.
|
|
|
|
- `parse_only()` parses R code without keeping the source references.
|
|
|
|
- `pkg_attach()` and `pkg_load()` to attach and load a vector of packages, respectively (and optionally, install the missing packages).
|
|
|
|
- `read_utf8()` and `write_utf8()` to read and write UTF-8 files, respectively.
|
|
|
|
- `same_path()` to test if two paths are the same.
|
|
|
|
- `strict_list()` is a version of `list()` that disables partial matching of the `$` operator.
|
|
|
|
- `tojson()` is a simple JSON serializer.
|
|
|
|
- `try_silent()` is an abbreviation of `try(silent = TRUE)`.
|