## 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 for copies of the licenses. library(fansi) unitizer_sect("no expansion", { normalize_state("A\033[31mB") normalize_state("\033[31mAB") normalize_state("AB\033[31m") normalize_state(c("A\033[31mB", "AB")) normalize_state(c("\033[31mAB", "AB")) normalize_state(c("AB\033[31m", "AB")) }) unitizer_sect("simple expansion", { normalize_state(c("A\033[31;42mB", "AB")) normalize_state(c("\033[31;42mAB", "AB")) normalize_state(c("AB\033[31;42m", "AB")) normalize_state(c("A\033[31;42mB", "A\033[39;4mB")) normalize_state(c("A\033[31;42mB", "\033[39;4mAB")) normalize_state(c("AB\033[31;42m", "A\033[39;4mB")) normalize_state(c("AB\033[31;42m", "A\033[0;4mB")) normalize_state(c("AB\033[31;42m", "AB\033[0;4m")) normalize_state(c("AB\033[31;42m", "\033[0;4mAB")) # NA carry normalize_state(c("AB\033[31;42m", NA, "\033[0;4mAB")) normalize_state(c("AB\033[31;42m", NA, "\033[0;4mAB"), carry=TRUE) }) unitizer_sect("superflous codes", { normalize_state(c("A\033[31;44;38;5;226;36mBC\033[mD")) normalize_state(c("A\033[31;44;38;5;226;36m\033[0mBCD")) }) unitizer_sect("broad code test", { normalize_state(c("A\033[33;44mB\033[1;3;4mCD\033[mE")) normalize_state( "A\033[33;44mB\033[1;2;3;4;5;6;7;8;9;11;21;26;51;52;53;60;61;62;63;64mC\033[m" ) ## Are we somehow producing bad SGR (we did once) unhandled_ctl( normalize_state( "A\033[33;44mB\033[1;2;3;4;5;6;7;8;9;11;21;26;51;52;53;60;61;62;63;64mC\033[m" ) ) normalize_state( "A\033[33;44mB\033[1;2;3;4;5;6;7;8;9;11;21;26;51;52;53;60;61;62;63;64m\033[mC" ) normalize_state( "A\033[33;44mB\033[1;2;3;4;5;6;7;8;9;11;21;26;51;52;53;60;61;62;63;64mC\033[mD" ) }) unitizer_sect("errors and warnings", { normalize_state(list(1, 2, 3)) x <- c("A\033[38;2;100;150;3;36mBC\033[mD") ## warning, and also note 100 is _not_ written as bright not supported normalize_state(x, term.cap=c('old')) normalize_state(x, term.cap=c('bright', 'old')) ## '36' just overwrites all previous codes, but still get warning normalize_state(x, term.cap=character()) normalize_state(x, term.cap=c('bright')) ## no warning normalize_state(x, term.cap=c('bright', '256', 'truecolor')) substr_ctl(x, 1, 2, normalize="yeah baby") substr_ctl(x, 1, 2, normalize=NA) }) unitizer_sect("in functions", { string1 <- "hello \033[33;44mblue world" string2 <- "\033[4;1mgoodbye\033[7m white \033[mmoon" string3 <- c(string1, string2) strwrap_ctl(string1, 11, normalize=TRUE) strwrap_ctl(string2, 11, normalize=TRUE) strwrap_ctl(string3, 11, normalize=TRUE) strwrap_ctl(string3, 11, normalize=TRUE, simplify=FALSE) strwrap2_ctl(string3, 11, normalize=TRUE, pad.end=" ") strwrap_sgr(string3, 11, normalize=TRUE) strwrap2_sgr(string3, 11, normalize=TRUE, pad.end=" ") strtrim_sgr(string3, 8, normalize=TRUE); strtrim_sgr(string3, 8, normalize=TRUE); substr_ctl("\033[33;44mhello\033[m world", 3, 8, normalize=TRUE) substr2_ctl("\033[33;44mhello\033[m world", 3, 8, normalize=TRUE) substr_sgr("\033[33;44mhello\033[m world", 3, 8, normalize=TRUE) substr2_sgr("\033[33;44mhello\033[m world", 3, 8, normalize=TRUE) substr_ctl(string3, c(3, 3), c(8, 15), normalize=TRUE) strsplit_ctl(string3, " ", normalize=TRUE) })