Updating packages for 2.1.0 =========================== Package maintainers should be aware of the following changes scheduled to appear in 2.1.0 sometime in April 2005. 1) It is possible to run R in UTF-8 and other non-European locales. This necessitates some changes to packages that use other than ASCII character strings, even for personal names. The principal difference is that in UTF-8 more that one byte may be needed to represent a character, and indeed all non-ASCII characters need at least two. On the other hand, ASCII characters can only occur as themselves and never as part of multi-byte sequences: the latter is not the case in some Asian locales. - .Rd pages with non-ASCII strings (often personal names) should declare the encoding via \encoding. - Other text documentation, especially the DESCRIPTION file, should use ASCII only if possible, and failing that Latin-1 (and not, say, UTF-8). - R code should be ASCII. Do not use non-ASCII characters in object names, for example, for if someone runs your package in the C locale it will fail. - Names in data objects (e.g. in .rda files) are problematic. It is likely that by release time these will be treated as in Latin-1. - C code that does character-by-character access can request an particular encoding via the ENCODING= argument to .C. However, this is not guaranteed to honoured but is likely to be so in multi-byte character encodings such as UTF-8. 2) There is now support for the translation of C and R warning/error messages. See the new section in `Writing R Extensions' on guidelines for writing such messages to make them translatable. Error/warning messages in C code need to be marked for translation as described in `Writing R Extensions'. Unless your package has a namespace, R stop/warning() messages need a 'domain' argument added, and in any package unnecessary uses of paste() need to be removed or explicit calls to gettext() added. Graphics Devices ================ This section applies to graphics devices in packages. The standard package 'grDevices' and the X11 device in src/modules/X11 provide reference examples. a) There is a new graphics engine API version for tracking changes to the graphics API in and . As a minimum, a call to R_GE_checkVersionOrDie(R_GE_version) should be added to device start-up code, which means that an error will be generated if the package is run on an R installation with a different graphics API version. More sophisticated handling of version mismatches is possible by calling R_GE_getVersion() to obtain the graphics API version for the R session. b) Ensure that the NewDevDesc structure is allocated with calloc(), or otherwise zeroed so that unused elements are null pointers. c) R can be run in multi-byte locales such as Linux UTF-8 locales and Japanese versions of Windows. In such locales - the text string passed to the device's strWidth and text functions may be a multibyte string and will need to be interpreted correctly (except for the symbol face 5, in Adobe Symbol encoding as now). - the character number passed to the metricinfo function may be a number greater than 255 giving the Unicode code point of the character/glyph required. Support for these extensions can be conditionalized at compile time by SUPPORT_MBCS (defined in Rconfig.h) and at run time by the Rboolean extern mbcslocale. If it is necessary to handle UTF-8 locales separately, use the Rboolean extern utf8locale.