Many thanks for the hint.
The function is actually a wrapper for: stringi:::stri_wrap I will need to have a closer look to this one (documentation and maybe also peek into the code): ret <- .Call(C_stri_wrap, str, width, cost_exponent, indent, exdent, prefix, initial, whitespace_only, use_length, locale) I thought at some point about the stringi package, but somehow overlooked it. Sincerely, Leonard On 9/30/2021 1:09 AM, CALUM POLWART wrote: > Have you looked at stringr::str_wrap or its parent function > stringi::stri_wrap ? > > It applies an algorithm for the wrap. But it doesn't vectorise the > lines they are returned with \n for new lines, but you could apply a > string split to that result... > > > On 29 Sep 2021 04:57, Andrew Simmons <akwsi...@gmail.com> wrote: > > 'strwrap' should wrap at the target column, so I think it's behaving > correctly. You could do + 1 if you're expecting it to wrap > immediately > after the target column. > > As far as splitting while trying to minimize a penalty, I don't think > strwrap can do that, and I don't know of any packages that do such > a thing. > If such a thing exists in another language, there's probably an R > package > with a similar name containing ports of such functions, that might > be your > best bet. I hope this helps. > > On Tue, Sep 28, 2021, 23:51 Leonard Mada <leo.m...@syonic.eu> wrote: > > > Thank you Andrew. > > > > > > I will explore this function more, although I am struggling to > get it to > > work properly: > > > > strwrap("Abc. B. Defg", 7) > > # [1] "Abc." "B." "Defg" > > > > # both "Abc. B." and "B. Defg" are 7 characters long. > > > > strwrap(paste0(rep("ab", 7), collapse=""), 7) > > # [1] "ababababababab" > > > > > > Can I set an absolute maximum width? > > > > It would be nice to have an algorithm that computes a penalty > for the > > split and selects the split with the smallest penalty (when no > obvious > > split is possible). > > > > > > Sincerely, > > > > > > Leonard > > > > > > > > On 9/29/2021 6:30 AM, Andrew Simmons wrote: > > > > I think what you're looking for is 'strwrap', it's in package base. > > > > On Tue, Sep 28, 2021, 22:26 Leonard Mada via R-help > <r-help@r-project.org> > > wrote: > > > >> Dear R-Users, > >> > >> > >> Does anyone know any package or library that implements > functions for > >> word wrapping? > >> > >> > >> I did implement a very rudimentary one (Github link below), but > would > >> like to avoid to reinvent the wheel. Considering that > word-wrapping is a > >> very common task, it should be available even in base R (e.g. in a > >> "format" module/package). > >> > >> > >> Sincerely, > >> > >> > >> Leonard > >> > >> ======= > >> > >> The latest versions of the functions are on Github: > >> > >> https://github.com/discoleo/R/blob/master/Stat/Tools.CRAN.R > >> # Note: > >> # - the function implementing word wrapping: split.N.line(...); > >> # - for the example below: the functions defined in > Tools.CRAN.R are > >> required; > >> > >> > >> Examples: > >> ### Search CRAN > >> library(pkgsearch) > >> > >> searchCran = function(s, from=1, len=60, len.print=20, extend="*", > >> sep=" ", sep.h="-") { > >> if( ! is.null(extend)) s = paste0(s, extend); > >> x = advanced_search(s, size=len, from=from); > >> if(length(x$package_data) == 0) { > >> cat("No packages found!", sep="\n"); > >> } else { > >> scroll.pkg(x, len=len.print, sep=sep, sep.h=sep.h); > >> } > >> invisible(x) > >> } > >> > >> # with nice formatting & printing: > >> x = searchCran("text", from=60, sep.h="-") > >> > >> scroll.pkg(x, start=20, len=21, sep.h = "-*") > >> # test of sep.h=NULL vs ... > >> > >> > >> Notes: > >> > >> 1.) split.N.line: > >> > >> - was implemented to output a pre-specified number of lines > (kind of > >> "maxLines"), but this is not required from an actual word-wrapper; > >> > >> - it was an initial design decision when implementing the > format.lines() > >> function; but I plan to implement a 1-pass exact algorithm > during the > >> next few days anyway; > >> > >> 2.) Refactoring > >> > >> - I will also move the formatting code to a new file: probably > >> Tools.Formatting.R; > >> > >> - the same applies for the formatting code for ftable > (currently in file > >> Tools.Data.R); > >> > >> 3.) Package gridtext > >> > >> - seems to have some word-wrapping functionality, but does not > seem to > >> expose it; > >> > >> - I am also currently focused on character-based word wrapping > (e.g. for > >> RConsole); > >> > >> > >> > >> [[alternative HTML version deleted]] > >> > >> ______________________________________________ > >> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > >> https://stat.ethz.ch/mailman/listinfo/r-help > >> PLEASE do read the posting guide > >> http://www.R-project.org/posting-guide.html > >> and provide commented, minimal, self-contained, reproducible code. > >> > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.