Nothing
## Copyright (C) Brodie Gaslam
##
## This file is part of "fansi - ANSI Control Sequence Aware String Functions"
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 2 or 3 of the License.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## Go to <https://www.r-project.org/Licenses> for copies of the licenses.
library(fansi)
unitizer_sect('basic tests', {
nchar_ctl(c('hello', 'world'))
nchar_ctl(c('hello', 'world'), type='width')
nchar_ctl(c('hello', 'world'), type='wi') # partial match
# Keep NA
na.world <- c('hello', NA, 'world', '')
identical(nchar_ctl(na.world), nchar(na.world))
identical(
nchar_ctl(na.world, keepNA=FALSE),
nchar(na.world, keepNA=FALSE)
)
identical(
nchar_ctl(na.world, keepNA=NA, type='width'),
nchar(na.world, keepNA=NA, type='width')
)
identical(
nchar_ctl(na.world, keepNA=TRUE, type='width'),
nchar(na.world, keepNA=TRUE, type='width')
)
identical(nzchar_ctl(na.world), nzchar(na.world))
identical(nzchar_ctl(na.world, keepNA=TRUE), nzchar(na.world, keepNA=TRUE))
identical(nzchar_ctl(na.world, keepNA=NA), nzchar(na.world, keepNA=NA))
identical(nchar_ctl(na.world, type='bytes'), nchar(na.world, type='bytes'))
identical(
nchar_ctl(na.world, keepNA=FALSE, type='bytes'),
nchar(na.world, keepNA=FALSE, type='bytes')
)
identical(
nchar_ctl(na.world, keepNA=TRUE, type='bytes'),
nchar(na.world, keepNA=TRUE, type='bytes')
)
w.names <- c(a='hello', b='world')
identical(nchar_ctl(w.names), nchar(w.names))
w.dim <- matrix(
letters[1:6], 2, 3, dimnames=list(X=LETTERS[2:3], Y=LETTERS[24:26])
)
identical(nchar_ctl(w.dim), nchar(w.dim))
# Strip equivalence
hw.sgr <- c(
'hello', 'wo\033[42mrld', '\033[31m', 'mo\non', 'star\033[p',
'link: \033]8;;xy.z\033\\hello\033]8;;\033\\ world'
)
identical(nchar_ctl(hw.sgr), nchar(strip_ctl(hw.sgr)))
# Bad encoding
x <- "\xf0"
if(isTRUE(l10n_info()[['UTF-8']])) {
# don't translate unknown in UTF-8 locale
inherits(try(nchar_ctl(x), silent=TRUE), "try-error")
} else TRUE
Encoding(x) <- "UTF-8"
identical(nzchar_ctl(x), nzchar(x))
nchar_ctl(x)
nchar_ctl(c("", x))
identical(nchar_ctl(x, allowNA=TRUE), nchar(x, allowNA=TRUE))
})
unitizer_sect('with escapes', {
esc.2 <- "\n\r\033P\033[31m\a"
nchar_ctl(esc.2)
nchar_ctl(esc.2, warn=FALSE)
nzchar_ctl(esc.2)
nzchar_ctl(esc.2, warn=FALSE)
# not an SGR
nchar_ctl("\033[31#mworld", ctl="sgr")
nchar_ctl("\033[31#mworld", ctl="csi")
})
unitizer_sect('ctl', {
esc.3 <- "\n\t\033[31m\033[41!m\033p"
nzchar_ctl(esc.3, warn=FALSE)
nzchar_ctl(sprintf("%sa", esc.3), warn=FALSE)
nzchar_ctl(esc.3, ctl=c('sgr', 'csi', 'esc'), warn=FALSE)
nzchar_ctl(esc.3, ctl=c('c0', 'nl'), warn=FALSE)
nzchar_ctl("\n\t\n", ctl=c('nl'), warn=FALSE)
nzchar_ctl("\t\n", ctl=c('nl'), warn=FALSE)
})
unitizer_sect('corner cases', {
## Bad byte in ESC, generally okay as they are not emitted, saving to
## variables to avoid issues with parse/deparse in unitizer < 1.4.18
ncbad <- c(
"\033\x80", "\033[31;\x80m", "\033[31;\x80p", "\033]8;\x80;a.b\033\\",
"\033];\x80;a.b\033\\"
)
Encoding(ncbad) <- "UTF-8"
nchar_ctl(ncbad)
## Old R version behavior
fansi:::set_rver(numeric_version("3.2.1"))
nzchar_ctl(c("\033[31mA", "\033[31m"))
nchar_ctl(c("\033[31mA", "\033[31m"))
fansi:::set_rver()
})
unitizer_sect('bad inputs', {
nchar_ctl(9:10, warn=1:3)
nchar_ctl("hello\033[31m world", allowNA=1:3)
nchar_ctl("hello\033[31m world", keepNA=1:3)
nchar_ctl("hello\033[31m world", strip=1:3)
nchar_ctl("hello\033[31m world", ctl="bananas")
nchar_ctl("hello\033[31m world", type=NA_character_)
nchar_ctl("hello\033[31m world", type=1)
nchar_ctl("hello\033[31m world", type="bananas")
nzchar_ctl(9:10, warn=1:3)
nzchar_ctl("hello\033[31m world", keepNA=1:3)
nzchar_ctl("hello\033[31m world", ctl=1)
nzchar_ctl("hello\033[31m world", ctl="bananas")
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.