Rev 70340 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/icuSetCollate.Rd% Part of the R package, https://www.R-project.org% Copyright 2008-2015 R Core Team% Distributed under GPL 2 or later\name{icuSetCollate}\alias{icuSetCollate}\alias{icuGetCollate}\alias{R_ICU_LOCALE}\title{ Setup Collation by ICU }\description{Controls the way collation is done by ICU (an optional part of the \Rbuild).}\usage{icuSetCollate(...)icuGetCollate(type = c("actual", "valid"))}\arguments{\item{\dots}{Named arguments, see \sQuote{Details}.}\item{type}{character string: can be abbreviated. Either the actual localein use for collation or the most specific locale which would be valid.}}\details{Optionally, \R can be built to collate character strings by ICU(\url{http://site.icu-project.org}). For such systems,\code{icuSetCollate} can be used to tune the way collation is done.On other builds calling this function does nothing, with a warning.Possible arguments are\describe{\item{\code{locale}:}{A character string such as \code{"da_DK"}giving the language and country whose collation rules are to beused. If present, this should be the first argument.}\item{\code{case_first}:}{\code{"upper"}, \code{"lower"} or\code{"default"}, asking for upper- or lower-case characters to besorted first. The default is usually lower-case first, but not inall languages (not under the default settings for Danish, for example).}\item{\code{alternate_handling}:}{Controls the handling of\sQuote{variable} characters (mainly punctuation and symbols).Possible values are \code{"non_ignorable"} (primary strength) and\code{"shifted"} (quaternary strength).}\item{\code{strength}:}{Which components should be used? Possiblevalues \code{"primary"}, \code{"secondary"}, \code{"tertiary"}(default), \code{"quaternary"} and \code{"identical"}. }\item{\code{french_collation}:}{In a French locale the way accentsaffect collation is from right to left, whereas in most other localesit is from left to right. Possible values \code{"on"}, \code{"off"}and \code{"default"}.}\item{\code{normalization}:}{Should strings be normalized? Possible valuesare \code{"on"} and \code{"off"} (default). This affects thecollation of composite characters.}\item{\code{case_level}:}{An additional level between secondary andtertiary, used to distinguish large and small Japanese Kanacharacters. Possible values \code{"on"} and \code{"off"} (default).}\item{\code{hiragana_quaternary}:}{Possible values \code{"on"} (sortHiragana first at quaternary level) and \code{"off"}.}}Only the first three are likely to be of interest except to those with adetailed understanding of collation and specialized requirements.Some special values are accepted for \code{locale}:\describe{\item{\code{"none"}:}{ICU is not used for collation: the OS'scollation services are used instead. (As from \R 3.1.2.)}\item{\code{"ASCII"}:}{ICU is not used for collation: the C function\code{strcmp} is used instead, which should sort byte-by-byte in(unsigned) numerical order. (As from \R 3.1.3.)}\item{\code{"default"}:}{obtains the locale from the OS as is done at the start of thesession. If environment variable \env{R_ICU_LOCALE} is set to anon-empty value, its value is used rather than consulting the OS.}\item{\code{""}, \code{"root"}:}{the \sQuote{root} collation: see\url{http://www.unicode.org/reports/tr35/tr35-collation.html#Root_Collation}.}}For the specifications of \sQuote{real} ICU locales, see\url{http://userguide.icu-project.org/locale}. Note that ICU does notreport that a locale is not supported, but falls back to its idea of\sQuote{best fit} (which could be rather different and is reported by\code{icuGetCollate("actual")}, often \code{"root"}). Most Englishlocales fall back to \code{"root"} as although e.g.\sspace{}\code{"en_GB"} isa valid locale (at least on some platforms), it contains no specialrules for collation. Note that \code{"C"} is not a supported ICU locale.Some examples are \code{case_level = "on", strength = "primary"} to ignoreaccent differences and \code{alternate_handling = "shifted"} to ignorespace and punctuation characters.Initially ICU will not be used for collation if the OS is set to usethe \code{C} locale for collation. Once this function is called witha value for \code{locale}, ICU will be used until it is called againwith \code{locale = "none"}.All customizations are reset to the default for the locale if\code{locale} is specified: the collation engine is reset if theOS collation locate category is changed by \code{\link{Sys.setlocale}}.}\value{For \code{icuGetCollate}, a character string describing the ICU localein use (which may be reported as \code{"ICU not in use"}). The\sQuote{actual} locale may be simpler than the requested locale: forexample \code{"da"} rather than \code{"da_DK"}: English locales arelikely to report \code{"root"}.}\note{ICU is used by default wherever it is available: this include macOS,Solaris and many Linux installations. As it works internally inUTF-8, it will be most efficient in UTF-8 locales.It is optional on Windows: if \R has been built against ICU, it willonly be used if environment variable \env{R_ICU_LOCALE} is set or once\code{icuSetCollate} is called to select the locale (as ICU andWindows differ in their idea of locale names). Note that\code{icuSetCollate(locale = "default")} should work reasonably wellfor \R >= 3.2.0 and Windows Vista/Server 2008 and later (but finds thesystem default ignoring environment variables such as \env{LC_COLLATE}).}\seealso{\link{Comparison}, \code{\link{sort}}.\code{\link{capabilities}} for whether ICU is available;\code{\link{extSoftVersion}} for its version.The ICU user guide chapter on collation(\url{http://userguide.icu-project.org/collation}).}\examples{\donttest{## These examples depend on having ICU available, and on the locale.## As we don't know the current settings, we can only reset to the default.if(capabilities("ICU")) {print(icuGetCollate())print(icuGetCollate("valid"))x <- c("Aarhus", "aarhus", "safe", "test", "Zoo")print(sort(x))icuSetCollate(case_first = "upper"); print(sort(x))icuSetCollate(case_first = "lower"); print(sort(x))## Danish collates upper-case-first and with 'aa' as a single lettericuSetCollate(locale = "da_DK", case_first = "default"); print(sort(x))## Estonian collates Z between S and TicuSetCollate(locale = "et_EE"); print(sort(x))icuSetCollate(locale = "default"); print(icuGetCollate("valid"))}}}\keyword{ utilities }