1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357
|
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/diff.R
\name{diffChr}
\alias{diffChr}
\alias{diffChr,ANY-method}
\title{Diff Character Vectors Element By Element}
\usage{
diffChr(target, current, ...)
\S4method{diffChr}{ANY}(
target,
current,
mode = gdo("mode"),
context = gdo("context"),
format = gdo("format"),
brightness = gdo("brightness"),
color.mode = gdo("color.mode"),
word.diff = gdo("word.diff"),
pager = gdo("pager"),
guides = gdo("guides"),
trim = gdo("trim"),
rds = gdo("rds"),
unwrap.atomic = gdo("unwrap.atomic"),
max.diffs = gdo("max.diffs"),
disp.width = gdo("disp.width"),
ignore.white.space = gdo("ignore.white.space"),
convert.hz.white.space = gdo("convert.hz.white.space"),
tab.stops = gdo("tab.stops"),
line.limit = gdo("line.limit"),
hunk.limit = gdo("hunk.limit"),
align = gdo("align"),
style = gdo("style"),
palette.of.styles = gdo("palette"),
frame = par_frame(),
interactive = gdo("interactive"),
term.colors = gdo("term.colors"),
tar.banner = NULL,
cur.banner = NULL,
strip.sgr = gdo("strip.sgr"),
sgr.supported = gdo("sgr.supported"),
extra = list()
)
}
\arguments{
\item{target}{the reference object}
\item{current}{the object being compared to \code{target}}
\item{...}{unused, for compatibility of methods with generics}
\item{mode}{character(1L), one of:
\itemize{
\item \dQuote{unified}: diff mode used by \code{git diff}
\item \dQuote{sidebyside}: line up the differences side by side
\item \dQuote{context}: show the target and current hunks in their
entirety; this mode takes up a lot of screen space but makes it easier
to see what the objects actually look like
\item \dQuote{auto}: default mode; pick one of the above, will favor
\dQuote{sidebyside} unless \code{getOption("width")} is less than 80,
or in \code{diffPrint} and objects are dimensioned and do not fit side
by side, or in \code{diffChr}, \code{diffDeparse}, \code{diffFile} and
output does not fit in side by side without wrapping
}}
\item{context}{integer(1L) how many lines of context are shown on either side
of differences (defaults to 2). Set to \code{-1L} to allow as many as
there are. Set to \dQuote{auto} to display as many as 10 lines or as few
as 1 depending on whether total screen lines fit within the number of lines
specified in \code{line.limit}. Alternatively pass the return value of
\code{\link{auto_context}} to fine tune the parameters of the auto context
calculation.}
\item{format}{character(1L), controls the diff output format, one of:
\itemize{
\item \dQuote{auto}: to select output format based on terminal
capabilities; will attempt to use one of the ANSI formats if they
appear to be supported, and if not or if you are in the Rstudio console
it will attempt to use HTML and browser output if in interactive mode.
\item \dQuote{raw}: plain text
\item \dQuote{ansi8}: color and format diffs using basic ANSI escape
sequences
\item \dQuote{ansi256}: like \dQuote{ansi8}, except using the full range
of ANSI formatting options
\item \dQuote{html}: color and format using HTML markup; the resulting
string is processed with \code{\link{enc2utf8}} when output as a full
web page (see docs for \code{html.output} under \code{\link{Style}}).
}
Defaults to \dQuote{auto}. See \code{palette.of.styles} for details
on customization, \code{\link{style}} for full control of output format.
See `pager` parameter for more discussion of Rstudio behavior.}
\item{brightness}{character, one of \dQuote{light}, \dQuote{dark},
\dQuote{neutral}, useful for adjusting color scheme to light or dark
terminals. \dQuote{neutral} by default. See \code{\link{PaletteOfStyles}}
for details and limitations. Advanced: you may specify brightness as a
function of \code{format}. For example, if you typically wish to use a
\dQuote{dark} color scheme, except for when in \dQuote{html} format when
you prefer the \dQuote{light} scheme, you may use
\code{c("dark", html="light")} as the value for this parameter. This is
particularly useful if \code{format} is set to \dQuote{auto} or if you
want to specify a default value for this parameter via options. Any names
you use should correspond to a \code{format}. You must have one unnamed
value which will be used as the default for all \code{format}s that are
not explicitly specified.}
\item{color.mode}{character, one of \dQuote{rgb} or \dQuote{yb}.
Defaults to \dQuote{yb}. \dQuote{yb} stands for \dQuote{Yellow-Blue} for
color schemes that rely primarily on those colors to style diffs.
Those colors can be easily distinguished by individuals with
limited red-green color sensitivity. See \code{\link{PaletteOfStyles}} for
details and limitations. Also offers the same advanced usage as the
\code{brightness} parameter.}
\item{word.diff}{TRUE (default) or FALSE, whether to run a secondary word
diff on the in-hunk differences. For atomic vectors setting this to
FALSE could make the diff \emph{slower} (see the \code{unwrap.atomic}
parameter). For other uses, particularly with \code{\link{diffChr}}
setting this to FALSE can substantially improve performance.}
\item{pager}{one of \dQuote{auto} (default), \dQuote{on},
\dQuote{off}, a \code{\link{Pager}} object, or a list; controls whether and
how a pager is used to display the diff output. If you require a
particular pager behavior you must use a \code{\link{Pager}}
object, or \dQuote{off} to turn off the pager. All other settings will
interact with other parameters such as \code{format}, \code{style}, as well
as with your system capabilities in order to select the pager expected to
be most useful.
\dQuote{auto} and \dQuote{on} are the same, except that in non-interactive
mode \dQuote{auto} is equivalent to \dQuote{off}. \dQuote{off} will always
send output to the console. If \dQuote{on}, whether the output
actually gets routed to the pager depends on the pager \code{threshold}
setting (see \code{\link{Pager}}). The default behavior is to use the
pager associated with the \code{Style} object. The \code{Style} object is
itself is determined by the \code{format} or \code{style} parameters.
Depending on your system configuration different styles and corresponding
pagers will get selected, unless you specify a \code{Pager} object
directly. On a system with a system pager that supports ANSI CSI SGR
colors, the pager will only trigger if the output is taller than one
window. If the system pager is not known to support ANSI colors then the
output will be sent as HTML to the IDE viewer if available or to the web
browser if not. Even though Rstudio now supports ANSI CSI SGR at the
console output is still formatted as HTML and sent to the IDE viewer.
Partly this is for continuity of behavior, but also because the default
Rstudio pager does not support ANSI CSI SGR, at least as of this writing.
If \code{pager} is a list, then the same as with \dQuote{on}, except that
the \code{Pager} object associated with the selected \code{Style} object is
re-instantiated with the union of the list elements and the existing
settings of that \code{Pager}. The list should contain named elements that
correspond to the \code{\link{Pager}} instantiation parameters. The names
must be specified in full as partial parameter matching will not be carried
out because the pager is re-instantiated with \code{\link{new}}.
See \code{\link{Pager}}, \code{\link{Style}}, and
\code{\link{PaletteOfStyles}} for more details and for instructions on how
to modify the default behavior.}
\item{guides}{TRUE (default), FALSE, or a function that accepts at least two
arguments and requires no more than two arguments. Guides
are additional context lines that are not strictly part of a hunk, but
provide important contextual data (e.g. column headers). If TRUE, the
context lines are shown in addition to the normal diff output, typically
in a different color to indicate they are not part of the hunk. If a
function, the function should accept as the first argument the object
being diffed, and the second the character representation of the object.
The function should return the indices of the elements of the
character representation that should be treated as guides. See
\code{\link{guides}} for more details.}
\item{trim}{TRUE (default), FALSE, or a function that accepts at least two
arguments and requires no more than two arguments. Function should compute
for each line in captured output what portion of those lines should be
diffed. By default, this is used to remove row meta data differences
(e.g. \code{[1,]}) so they alone do not show up as differences in the
diff. See \code{\link{trim}} for more details.}
\item{rds}{TRUE (default) or FALSE, if TRUE will check whether
\code{target} and/or \code{current} point to a file that can be read with
\code{\link{readRDS}} and if so, loads the R object contained in the file
and carries out the diff on the object instead of the original argument.
Currently there is no mechanism for specifying additional arguments to
\code{readRDS}}
\item{unwrap.atomic}{TRUE (default) or FALSE. Relevant primarily for
\code{diffPrint}, if TRUE, and \code{word.diff} is also TRUE, and both
\code{target} and \code{current} are \emph{unnamed} one-dimension atomics ,
the vectors are unwrapped and diffed element by element, and then
re-wrapped. Since \code{diffPrint} is fundamentally a line diff, the
re-wrapped lines are lined up in a manner that is as consistent as possible
with the unwrapped diff. Lines that contain the location of the word
differences will be paired up. Since the vectors may well be wrapped with
different periodicities this will result in lines that are paired up that
look like they should not be paired up, though the locations of the
differences should be. If is entirely possible that setting this parameter
to FALSE will result in a slower diff. This happens if two vectors are
actually fairly similar, but their line representations are not. For
example, in comparing \code{1:100} to \code{c(100, 1:99)}, there is really
only one difference at the \dQuote{word} level, but every screen line is
different. \code{diffChr} will also do the unwrapping if it is given a
character vector that contains output that looks like the atomic vectors
described above. This is a bug, but as the functionality could be useful
when diffing e.g. \code{capture.output} data, we now declare it a feature.}
\item{max.diffs}{integer(1L), number of \emph{differences} (default 50000L)
after which we abandon the \code{O(n^2)} diff algorithm in favor of a naive
\code{O(n)} one. Set to \code{-1L} to stick to the original algorithm up to
the maximum allowed (~INT_MAX/4).}
\item{disp.width}{integer(1L) number of display columns to take up; note that
in \dQuote{sidebyside} \code{mode} the effective display width is half this
number (set to 0L to use default widths which are \code{getOption("width")}
for normal styles and \code{80L} for HTML styles. Future versions of
\code{diffobj} may change this to larger values for two dimensional objects
for better diffs (see details).}
\item{ignore.white.space}{TRUE or FALSE, whether to consider differences in
horizontal whitespace (i.e. spaces and tabs) as differences (defaults to
TRUE).}
\item{convert.hz.white.space}{TRUE or FALSE, whether modify input strings
that contain tabs and carriage returns in such a way that they display as
they would \bold{with} those characters, but without using those
characters (defaults to TRUE). The conversion assumes that tab stops are
spaced evenly eight characters apart on the terminal. If this is not the
case you may specify the tab stops explicitly with \code{tab.stops}.}
\item{tab.stops}{integer, what tab stops to use when converting hard tabs to
spaces. If not integer will be coerced to integer (defaults to 8L). You
may specify more than one tab stop. If display width exceeds that
addressable by your tab stops the last tab stop will be repeated.}
\item{line.limit}{integer(2L) or integer(1L), if length 1 how many lines of
output to show, where \code{-1} means no limit. If length 2, the first
value indicates the threshold of screen lines to begin truncating output,
and the second the number of lines to truncate to, which should be fewer
than the threshold. Note that this parameter is implemented on a
best-efforts basis and should not be relied on to produce the exact
number of lines requested. In particular do not expect it to work well for
for values small enough that the banner portion of the diff would have to
be trimmed. If you want a specific number of lines use \code{[} or
\code{head} / \code{tail}. One advantage of \code{line.limit} over these
other options is that you can combine it with \code{context="auto"} and
auto \code{max.level} selection (the latter for \code{diffStr}), which
allows the diff to dynamically adjust to make best use of the available
display lines. \code{[}, \code{head}, and \code{tail} just subset the text
of the output.}
\item{hunk.limit}{integer(2L) or integer (1L), how many diff hunks to show.
Behaves similarly to \code{line.limit}. How many hunks are in a
particular diff is a function of how many differences, and also how much
\code{context} is used since context can cause two hunks to bleed into
each other and become one.}
\item{align}{numeric(1L) between 0 and 1, proportion of
words in a line of \code{target} that must be matched in a line of
\code{current} in the same hunk for those lines to be paired up when
displayed (defaults to 0.25), or an \code{\link{AlignThreshold}} object.
Set to \code{1} to turn off alignment which will cause all lines in a hunk
from \code{target} to show up first, followed by all lines from
\code{current}. Note that in order to be aligned lines must meet the
threshold and have at least 3 matching alphanumeric characters (see
\code{\link{AlignThreshold}} for details).}
\item{style}{\dQuote{auto}, a \code{\link{Style}} object, or a list.
\dQuote{auto} by default. If a \code{Style} object, will override the
the \code{format}, \code{brightness}, and \code{color.mode} parameters.
The \code{Style} object provides full control of diff output styling.
If a list, then the same as \dQuote{auto}, except that if the auto-selected
\code{Style} requires instantiation (see \code{\link{PaletteOfStyles}}),
then the list contents will be used as arguments when instantiating the
style object. See \code{\link{Style}} for more details, in particular the
examples.}
\item{palette.of.styles}{\code{\link{PaletteOfStyles}} object; advanced
usage, contains all the \code{\link{Style}} objects or
\dQuote{classRepresentation} objects extending \code{\link{Style}} that are
selected by specifying the \code{format}, \code{brightness}, and
\code{color.mode} parameters. See \code{\link{PaletteOfStyles}} for more
details.}
\item{frame}{an environment to use as the evaluation frame for the
\code{print/show/str}, calls and for \code{diffObj}, the evaluation frame
for the \code{diffPrint} / \code{diffStr} calls. Defaults to the return
value of \code{\link{par_frame}}.}
\item{interactive}{TRUE or FALSE whether the function is being run in
interactive mode, defaults to the return value of
\code{\link{interactive}}. If in interactive mode, pager will be used if
\code{pager} is \dQuote{auto}, and if ANSI styles are not supported and
\code{style} is \dQuote{auto}, output will be send to viewer/browser as
HTML.}
\item{term.colors}{integer(1L) how many ANSI colors are supported by the
terminal. This variable is provided for when
\code{\link[=num_colors]{crayon::num_colors}} does not properly detect how
many ANSI colors are supported by your terminal. Defaults to return value
of \code{\link[=num_colors]{crayon::num_colors}} and should be 8 or 256 to
allow ANSI colors, or any other number to disallow them. This only
impacts output format selection when \code{style} and \code{format} are
both set to \dQuote{auto}.}
\item{tar.banner}{character(1L), language, or NULL, used to generate the
text to display ahead of the diff section representing the target output.
If NULL will use the deparsed \code{target} expression, if language, will
use the language as it would the \code{target} expression, if
character(1L), will use the string with no modifications. The language
mode is provided because \code{diffStr} modifies the expression prior to
display (e.g. by wrapping it in a call to \code{str}). Note that it is
possible in some cases that the substituted value of \code{target} actually
is character(1L), but if you provide a character(1L) value here it will be
assumed you intend to use that value literally.}
\item{cur.banner}{character(1L) like \code{tar.banner}, but for
\code{current}}
\item{strip.sgr}{TRUE, FALSE, or NULL (default), whether to strip ANSI CSI
SGR sequences prior to comparison and for display of diff. If NULL,
resolves to TRUE if `style` resolves to an ANSI formatted diff, and
FALSE otherwise. The default behavior is to avoid confusing diffs where
the original SGR and the SGR added by the diff are mixed together.}
\item{sgr.supported}{TRUE, FALSE, or NULL (default), whether to assume the
standard output device supports ANSI CSI SGR sequences. If TRUE, strings
will be manipulated accounting for the SGR sequences. If NULL,
resolves to TRUE if `style` resolves to an ANSI formatted diff, and
to `crayon::has_color()` otherwise. This only controls how the strings are
manipulated, not whether SGR is added to format the diff, which is
controlled by the `style` parameter. This parameter is exposed for the
rare cases where you might wish to control string manipulation behavior
directly.}
\item{extra}{list additional arguments to pass on to the functions used to
create text representation of the objects to diff (e.g. \code{print},
\code{str}, etc.)}
}
\value{
a \code{Diff} object; see \code{\link{diffPrint}}.
}
\description{
Will perform the diff on the actual string values of the character vectors
instead of capturing the printed screen output. Each vector element is
treated as a line of text. NA elements are treated as the string
\dQuote{NA}. Non character inputs are coerced to character and attributes
are dropped with \code{\link{c}}.
}
\examples{
## `pager="off"` for CRAN compliance; you may omit in normal use
diffChr(LETTERS[1:5], LETTERS[2:6], pager="off")
}
\seealso{
\code{\link{diffPrint}} for details on the \code{diff*} functions,
\code{\link{diffObj}}, \code{\link{diffStr}},
\code{\link{diffDeparse}} to compare deparsed objects,
\code{\link{ses}} for a minimal and fast diff
}
|