[med-svn] [r-cran-stringi] 01/06: New upstream version 1.1.5

Andreas Tille tille at debian.org
Thu Oct 12 20:40:28 UTC 2017


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository r-cran-stringi.

commit e34d676b174e1b17eb1f7516ddb1f3daf7c133a4
Author: Andreas Tille <tille at debian.org>
Date:   Thu Oct 12 22:25:48 2017 +0200

    New upstream version 1.1.5
---
 DESCRIPTION                              |  21 +-
 INSTALL                                  |  40 ++-
 LICENSE                                  |   6 +-
 MD5                                      | 549 +++++++++++++++----------------
 NAMESPACE                                |   2 -
 NEWS                                     |  45 ++-
 R/ICU_settings.R                         |   2 +-
 R/compare.R                              |   2 +-
 R/draft_encdetect.R                      |  24 +-
 R/draft_files.R                          |  12 +-
 R/encoding.R                             |   2 +-
 R/encoding_conversion.R                  |   2 +-
 R/encoding_detection.R                   |   2 +-
 R/encoding_management.R                  |  12 +-
 R/escape.R                               |   2 +-
 R/install.R                              | 248 ++++++++------
 R/internal_prepare_arg.R                 |   2 +-
 R/internal_test.R                        |   2 +-
 R/join.R                                 |   2 +-
 R/length.R                               |   2 +-
 R/locale.R                               |   2 +-
 R/locale_management.R                    |   2 +-
 R/opts.R                                 |   2 +-
 R/pad.R                                  |   2 +-
 R/random.R                               |   2 +-
 R/reverse.R                              |   2 +-
 R/search.R                               |   2 +-
 R/search_count_4.R                       |   2 +-
 R/search_count_bound.R                   |   2 +-
 R/search_detect_4.R                      |   2 +-
 R/search_extract_4.R                     |   2 +-
 R/search_extract_bound.R                 |   2 +-
 R/search_locate_4.R                      |   2 +-
 R/search_locate_bound.R                  |   2 +-
 R/search_match_4.R                       |   2 +-
 R/search_replace_4.R                     |   2 +-
 R/search_replace_na.R                    |   2 +-
 R/search_split_4.R                       |   2 +-
 R/search_split_bound.R                   |   2 +-
 R/search_startsendswith_4.R              |   2 +-
 R/search_subset_4.R                      |   2 +-
 R/sort.R                                 |   2 +-
 R/stats.R                                |   2 +-
 R/stringi-package.R                      |   4 +-
 R/sub.R                                  |   4 +-
 R/time_calendar.R                        |   2 +-
 R/time_format.R                          |   2 +-
 R/time_symbols.R                         |   2 +-
 R/time_zone.R                            |   2 +-
 R/todo_charclass.R                       |   2 +-
 R/todo_justify.R                         |   2 +-
 R/todo_rbnf.R                            |   2 +-
 R/todo_search_in.R                       |   2 +-
 R/todo_split.R                           |   2 +-
 R/trans_casemap.R                        |   2 +-
 R/trans_normalization.R                  |   2 +-
 R/trans_other.R                          |   2 +-
 R/trans_transliterate.R                  |   2 +-
 R/trim.R                                 |   2 +-
 R/utils.R                                |   2 +-
 R/wrap.R                                 |   2 +-
 configure                                | 288 ++++++++++++----
 inst/AUTHORS                             |   2 +-
 inst/CITATION                            |   6 +-
 man/oper_comparison.Rd                   |  25 +-
 man/oper_plus.Rd                         |   1 -
 man/stri_compare.Rd                      |  11 +-
 man/stri_count.Rd                        |   1 -
 man/stri_count_boundaries.Rd             |   7 +-
 man/stri_datetime_add.Rd                 |   5 +-
 man/stri_datetime_create.Rd              |   1 -
 man/stri_datetime_fields.Rd              |   1 -
 man/stri_datetime_format.Rd              |   2 +-
 man/stri_datetime_fstr.Rd                |   1 -
 man/stri_datetime_now.Rd                 |   1 -
 man/stri_datetime_symbols.Rd             |   1 -
 man/stri_detect.Rd                       |   3 +-
 man/stri_dup.Rd                          |   1 -
 man/stri_duplicated.Rd                   |   1 -
 man/stri_enc_detect.Rd                   |  15 +-
 man/stri_enc_detect2.Rd                  |  21 +-
 man/stri_enc_fromutf32.Rd                |   1 -
 man/stri_enc_info.Rd                     |   3 +-
 man/stri_enc_isascii.Rd                  |   1 -
 man/stri_enc_isutf16.Rd                  |   1 -
 man/stri_enc_isutf8.Rd                   |   1 -
 man/stri_enc_list.Rd                     |   1 -
 man/stri_enc_mark.Rd                     |   3 +-
 man/stri_enc_set.Rd                      |   9 +-
 man/stri_enc_toascii.Rd                  |   1 -
 man/stri_enc_tonative.Rd                 |   1 -
 man/stri_enc_toutf32.Rd                  |   1 -
 man/stri_enc_toutf8.Rd                   |   1 -
 man/stri_encode.Rd                       |   3 +-
 man/stri_escape_unicode.Rd               |   1 -
 man/stri_extract.Rd                      |  21 +-
 man/stri_extract_boundaries.Rd           |  13 +-
 man/stri_flatten.Rd                      |   1 -
 man/stri_info.Rd                         |   1 -
 man/stri_install.Rd                      |  64 ----
 man/stri_isempty.Rd                      |   1 -
 man/stri_join.Rd                         |   3 +-
 man/stri_join_list.Rd                    |   3 +-
 man/stri_length.Rd                       |   1 -
 man/stri_list2matrix.Rd                  |   1 -
 man/stri_locale_info.Rd                  |   1 -
 man/stri_locale_list.Rd                  |   1 -
 man/stri_locale_set.Rd                   |   3 +-
 man/stri_locate.Rd                       |  27 +-
 man/stri_locate_boundaries.Rd            |  13 +-
 man/stri_match.Rd                        |   7 +-
 man/stri_numbytes.Rd                     |   1 -
 man/stri_opts_brkiter.Rd                 |   1 -
 man/stri_opts_collator.Rd                |   1 -
 man/stri_opts_fixed.Rd                   |   1 -
 man/stri_opts_regex.Rd                   |   1 -
 man/stri_order.Rd                        |   1 -
 man/stri_pad.Rd                          |   3 +-
 man/stri_rand_lipsum.Rd                  |   1 -
 man/stri_rand_shuffle.Rd                 |   1 -
 man/stri_rand_strings.Rd                 |   1 -
 man/stri_read_lines.Rd                   |   5 +-
 man/stri_read_raw.Rd                     |   7 +-
 man/stri_replace.Rd                      |  19 +-
 man/stri_replace_na.Rd                   |   1 -
 man/stri_reverse.Rd                      |   1 -
 man/stri_split.Rd                        |   5 +-
 man/stri_split_boundaries.Rd             |   7 +-
 man/stri_split_lines.Rd                  |   2 +-
 man/stri_startsendswith.Rd               |   9 +-
 man/stri_stats_general.Rd                |   1 -
 man/stri_stats_latex.Rd                  |   1 -
 man/stri_sub.Rd                          |   3 +-
 man/stri_subset.Rd                       |   5 +-
 man/stri_timezone_info.Rd                |   1 -
 man/stri_timezone_list.Rd                |   1 -
 man/stri_timezone_set.Rd                 |   1 -
 man/stri_trans_casemap.Rd                |  13 +-
 man/stri_trans_char.Rd                   |   1 -
 man/stri_trans_general.Rd                |   1 -
 man/stri_trans_list.Rd                   |   1 -
 man/stri_trans_nf.Rd                     |  13 +-
 man/stri_trim.Rd                         |  10 +-
 man/stri_unescape_unicode.Rd             |   1 -
 man/stri_unique.Rd                       |   1 -
 man/stri_width.Rd                        |   1 -
 man/stri_wrap.Rd                         |   1 -
 man/stri_write_lines.Rd                  |   1 -
 man/stringi-arguments.Rd                 |   2 +-
 man/stringi-encoding.Rd                  |  34 +-
 man/stringi-locale.Rd                    |   2 +-
 man/stringi-package.Rd                   |  18 +-
 man/stringi-search-boundaries.Rd         |  19 +-
 man/stringi-search-charclass.Rd          |   2 +-
 man/stringi-search-coll.Rd               |   8 +-
 man/stringi-search-fixed.Rd              |   2 +-
 man/stringi-search-regex.Rd              |   2 +-
 man/stringi-search.Rd                    |  47 ++-
 src/Makevars.in                          |   3 +-
 src/Makevars.win                         |   6 +-
 src/install.libs.R.in                    |   4 +
 src/stri_ICU_settings.cpp                |   2 +-
 src/stri_TODO_justify.cpp                |   2 +-
 src/stri_TODO_splitpos.cpp               |   2 +-
 src/stri_TODO_uchar.cpp                  |   2 +-
 src/stri_brkiter.cpp                     |   4 +-
 src/stri_brkiter.h                       |  27 +-
 src/stri_bytesearch_matcher.h            |   2 +-
 src/stri_collator.cpp                    |   2 +-
 src/stri_common.cpp                      |   2 +-
 src/stri_compare.cpp                     |   2 +-
 src/stri_container_base.cpp              |   2 +-
 src/stri_container_base.h                |   2 +-
 src/stri_container_bytesearch.cpp        |   2 +-
 src/stri_container_bytesearch.h          |   2 +-
 src/stri_container_charclass.h           |   2 +-
 src/stri_container_double.h              |   2 +-
 src/stri_container_integer.h             |   2 +-
 src/stri_container_listint.cpp           |   2 +-
 src/stri_container_listint.h             |   2 +-
 src/stri_container_listraw.cpp           |   2 +-
 src/stri_container_listraw.h             |   2 +-
 src/stri_container_listutf8.cpp          |   2 +-
 src/stri_container_listutf8.h            |   2 +-
 src/stri_container_logical.h             |   2 +-
 src/stri_container_regex.cpp             |   2 +-
 src/stri_container_regex.h               |   2 +-
 src/stri_container_usearch.cpp           |   2 +-
 src/stri_container_usearch.h             |   2 +-
 src/stri_container_utf16.cpp             |   2 +-
 src/stri_container_utf16.h               |   2 +-
 src/stri_container_utf8.cpp              |   2 +-
 src/stri_container_utf8.h                |   2 +-
 src/stri_container_utf8_indexable.cpp    |  12 +-
 src/stri_container_utf8_indexable.h      |   2 +-
 src/stri_encoding_conversion.cpp         |   2 +-
 src/stri_encoding_detection.cpp          |   2 +-
 src/stri_encoding_management.cpp         |  10 +-
 src/stri_escape.cpp                      |   2 +-
 src/stri_exception.cpp                   | 548 +++++++++++++++---------------
 src/stri_exception.h                     |  12 +-
 src/stri_exports.h                       |   2 +-
 src/stri_external.h                      |   9 +-
 src/stri_interval.h                      |   2 +-
 src/stri_intvec.h                        |   2 +-
 src/stri_join.cpp                        |   2 +-
 src/stri_length.cpp                      |   2 +-
 src/stri_macros.h                        |  40 ++-
 src/stri_messages.h                      |   2 +-
 src/stri_pad.cpp                         |   2 +-
 src/stri_prepare_arg.cpp                 |   2 +-
 src/stri_random.cpp                      |   2 +-
 src/stri_reverse.cpp                     |   2 +-
 src/stri_search_boundaries_count.cpp     |   2 +-
 src/stri_search_boundaries_extract.cpp   |   2 +-
 src/stri_search_boundaries_locate.cpp    |   2 +-
 src/stri_search_boundaries_split.cpp     |   2 +-
 src/stri_search_class_count.cpp          |   2 +-
 src/stri_search_class_detect.cpp         |   2 +-
 src/stri_search_class_extract.cpp        |   2 +-
 src/stri_search_class_locate.cpp         |   2 +-
 src/stri_search_class_replace.cpp        |   2 +-
 src/stri_search_class_split.cpp          |   2 +-
 src/stri_search_class_startsendswith.cpp |   2 +-
 src/stri_search_class_subset.cpp         |   2 +-
 src/stri_search_class_trim.cpp           |   2 +-
 src/stri_search_coll_count.cpp           |   2 +-
 src/stri_search_coll_detect.cpp          |   2 +-
 src/stri_search_coll_extract.cpp         |   2 +-
 src/stri_search_coll_locate.cpp          |   2 +-
 src/stri_search_coll_replace.cpp         |   2 +-
 src/stri_search_coll_split.cpp           |   2 +-
 src/stri_search_coll_startsendswith.cpp  |   2 +-
 src/stri_search_coll_subset.cpp          |   2 +-
 src/stri_search_common.cpp               |   2 +-
 src/stri_search_fixed_count.cpp          |   2 +-
 src/stri_search_fixed_detect.cpp         |   2 +-
 src/stri_search_fixed_extract.cpp        |   2 +-
 src/stri_search_fixed_locate.cpp         |   2 +-
 src/stri_search_fixed_replace.cpp        |   2 +-
 src/stri_search_fixed_split.cpp          |   2 +-
 src/stri_search_fixed_startsendswith.cpp |   2 +-
 src/stri_search_fixed_subset.cpp         |   2 +-
 src/stri_search_in.cpp                   |   2 +-
 src/stri_search_other_replace.cpp        |   2 +-
 src/stri_search_other_split.cpp          |   2 +-
 src/stri_search_regex_count.cpp          |   2 +-
 src/stri_search_regex_detect.cpp         |   2 +-
 src/stri_search_regex_extract.cpp        |   2 +-
 src/stri_search_regex_locate.cpp         |   2 +-
 src/stri_search_regex_match.cpp          |   2 +-
 src/stri_search_regex_replace.cpp        |   2 +-
 src/stri_search_regex_split.cpp          |   2 +-
 src/stri_search_regex_subset.cpp         |   2 +-
 src/stri_sort.cpp                        |   2 +-
 src/stri_stats.cpp                       |   2 +-
 src/stri_string8.h                       |   2 +-
 src/stri_string8buf.h                    |   2 +-
 src/stri_stringi.cpp                     |   7 +-
 src/stri_stringi.h                       |   2 +-
 src/stri_sub.cpp                         | 140 ++++----
 src/stri_test.cpp                        |   2 +-
 src/stri_time_calendar.cpp               |   2 +-
 src/stri_time_format.cpp                 |   2 +-
 src/stri_time_symbols.cpp                |   2 +-
 src/stri_time_zone.cpp                   |   2 +-
 src/stri_trans_casemap.cpp               |   2 +-
 src/stri_trans_normalization.cpp         |   2 +-
 src/stri_trans_other.cpp                 |   2 +-
 src/stri_trans_transliterate.cpp         |   2 +-
 src/stri_ucnv.cpp                        |   2 +-
 src/stri_ucnv.h                          |   2 +-
 src/stri_uloc.cpp                        |   2 +-
 src/stri_utils.cpp                       |   2 +-
 src/stri_wrap.cpp                        |   2 +-
 src/uconfig_local.h.in                   |   2 +-
 276 files changed, 1547 insertions(+), 1394 deletions(-)

diff --git a/DESCRIPTION b/DESCRIPTION
index 1425e19..1db29c1 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,32 +1,33 @@
 Package: stringi
-Version: 1.1.2
-Date: 2016-09-30
+Version: 1.1.5
+Date: 2017-04-07
 Title: Character String Processing Facilities
 Description: Allows for fast, correct, consistent, portable,
     as well as convenient character string/text processing in every locale
     and any native encoding. Owing to the use of the ICU library,
     the package provides R users with platform-independent functions
-    known to Java, Perl, Python, PHP, and Ruby programmers. Among available
-    features there are: pattern searching (e.g., with ICU Java-like regular
+    known to Java, Perl, Python, PHP, and Ruby programmers. Available
+    features include: pattern searching (e.g., with ICU Java-like regular
     expressions or the Unicode Collation Algorithm), random string generation,
     case mapping, string transliteration, concatenation,
     Unicode normalization, date-time formatting and parsing, etc.
 URL: http://www.gagolewski.com/software/stringi/
         http://site.icu-project.org/ http://www.unicode.org/
 BugReports: http://github.com/gagolews/stringi/issues
-SystemRequirements: ICU4C (>= 50, optional)
+SystemRequirements: ICU4C (>= 52, optional)
 Type: Package
-Depends: R (>= 2.13.1)
+Depends: R (>= 2.14)
 Imports: tools, utils, stats
 Biarch: TRUE
 License: file LICENSE
-Author: Marek Gagolewski [aut, cre] and Bartek Tartanus [ctb] (stringi source code);
+Author: Marek Gagolewski [aut, cre], Bartek Tartanus [ctb],
+    and other contributors (stringi source code);
     IBM and other contributors (ICU4C 55.1 source code);
     Unicode, Inc. (Unicode Character Database)
 Maintainer: Marek Gagolewski <gagolews at rexamine.com>
-RoxygenNote: 5.0.1
+RoxygenNote: 6.0.1
 NeedsCompilation: yes
-Packaged: 2016-09-30 14:18:17 UTC; gagolews
+Packaged: 2017-04-07 09:50:47 UTC; gagolews
 License_is_FOSS: yes
 Repository: CRAN
-Date/Publication: 2016-10-01 14:26:04
+Date/Publication: 2017-04-07 13:08:03 UTC
diff --git a/INSTALL b/INSTALL
index ec6b6a5..f287734 100644
--- a/INSTALL
+++ b/INSTALL
@@ -7,7 +7,7 @@ Introductory remark
 
 We are putting great effort so that the package may be installed successfully
 by simply calling `install.packages("stringi")`. However, due to the
-overwhelming complexity of the ICU4C library, on which stringi bases,
+overwhelming complexity of the ICU4C library, on which stringi is based,
 and the colorful variety of operating systems, their flavors, and particular
 setups, some users may still experience a few issues while the package
 is compiled from sources.
@@ -19,7 +19,7 @@ customized installation.
 stringi vs the ICU4C library
 ----------------------------
 
-The stringi package depends on the ICU4C >= 50 library.
+The stringi package depends on the ICU4C >= 52 library.
 
 If you build the package from sources and either:
 * these requirements are not met (check out http://site.icu-project.org/download,
@@ -56,7 +56,7 @@ of the package. It already includes the `ICU` data archives.
 You may also prepare your own `.tar.gz`-ipped distribution of `stringi`
 as follows:
 
-1. File the `git clone https://github.com/gagolews/stringi.git` command.
+1. Execute the `git clone https://github.com/gagolews/stringi.git` command.
 2. Edit the `.Rbuildignore` file and get rid of the `^src/icu55/data` line.
 3. Run `R CMD build stringi_dir_name`.
 4. Install the obtained `.tar.gz` file on your machine(s), e.g.,
@@ -67,14 +67,14 @@ via `install.packages("stringi_xxx.tar.gz")`
 C++11 support
 -------------
 
-For R >= 3.1.0  we require (by default) C++11 support to build the package
+For R >= 3.1.0  we suggest (by default) C++11 support to build the package
 from sources. This is because ICU4C uses the `long long` type in a few
 functions, and this is not part of the C++98 standard.
 
 Yet, if your compiler does not support C++11 or it has not been properly
 configured (check out `<R_inst_dir>/etc/Makeconf`) but you are sure it
 tolerates the `long long` type (which is very common -- this is checked by the
-`configure` script anyway), you may disable the C++11 usage by passing
+`configure` script anyway), you may disable the use of C++11 by passing
 the `--disable-cxx11` argument to the `configure` script.
 
 
@@ -93,10 +93,6 @@ Auxiliary `./configure` features and options:
 * `--with-extra-cxxflags=FLAGS`: Additional C++ compiler flags.
 * `--with-extra-ldflags=FLAGS`: Additional linker flags.
 * `--with-extra-libs=FLAGS`: Additional libraries to link against.
-* `--enable-gcc-debug`: Enable -UNDEBUG when compiling stringi
-  (for stringi developers).
-* `--enable-gcc-pedantic`: Enable `-Wall -Wextra -ansi -pedantic` when compiling
-  stringi with gcc/clang (for stringi developers).
 
 Some influential environment variables:
 
@@ -109,6 +105,19 @@ Some influential environment variables:
   `/usr/lib64/R`. Note that `$R_HOME/bin/R` should point to the R executable.
 * `CAT`: The `cat` command used for generating the list of source files
   to compile.
+* `PKG_CONFIG`:The `pkg-config` command used for getting necessary compiler
+  flags to link to and existing libicu installation.
+* `STRINGI_DISABLE_CXX11`: Disable the use of C++11,
+      see also `--disable-cxx11`.
+* `STRINGI_DISABLE_PKG_CONFIG`: Force the use of the ICU bundle,
+      see also `--disable-pkg-config`.
+* `STRINGI_DISABLE_ICU_BUNDLE`: Force the use of the system ICU,
+      see also `--disable-icu-bundle`.
+* `STRINGI_CFLAGS`: see `--with-extra-cflags`.
+* `STRINGI_CPPFLAGS`: see `--with-extra-cppflags`.
+* `STRINGI_CXXFLAGS`: see `--with-extra-cxxflags`.
+* `STRINGI_LDFLAGS`: see `--with-extra-ldflags`.
+* `STRINGI_LIBS`: see `--with-extra-libs`.
 
 
 Final remarks
@@ -117,11 +126,11 @@ Final remarks
 We expect that with a properly configured C++11 compiler and properly
 installed system ICU4C distribution, you should have no problems
 with installing the package. Also, if you use our ICU4C bundle and you
-have a working internet access, all is expected to lead to a happy ending.
+have a working internet access, all is expected to lead to a happy end.
 
-The package is frequently tested on the following OSes (i.a., via Docker):
-* Fedora: 20, 21, latest,
-* CentOS: 7,
+The package is frequently tested on the following OSes:
+* Fedora: 20, 24, latest,
+* CentOS: latest,
 * OpenSUSE: latest,
 * Ubuntu: xenial, trusty,
 * Debian: testing,
@@ -129,6 +138,11 @@ The package is frequently tested on the following OSes (i.a., via Docker):
 * Mageia: latest,
 * Windows (via WinBuilder),
 * Solaris 10 (gcc/i386, CC/i386, CC/Sparc),
+* Travis CI (os: linux, r: release;
+             os: linux, r: oldrel;
+             os: linux, r: devel,
+             os: osx,   r: release,
+             os: osx,   r: devel),
 and of course on CRAN machines.
 
 Yet, if you do not manage to set up a successful stringi build, do not
diff --git a/LICENSE b/LICENSE
index 312f1f7..5046b43 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,7 +1,7 @@
 ** The R and C++ source code of the stringi package **
 ** [including src/stri_* files]                     **
 
-Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -34,7 +34,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ** The ICU4C library   **
 ** [src/icu55/* files] **
 
-Copyright (c) 1991-2016 IBM; Unicode, Inc; Google, Inc; TaBE
+Copyright (c) 1991-2017 IBM; Unicode, Inc; Google, Inc; TaBE
 Project; Pai-Hsiang Hsiao; Computer Systems and Communication Lab,
 Institute of Information Science, Academia Sinica; Chih-Hao Tsai;
 Nara Institute of Science and Technology; Brian Eugene Wilson; Robert
@@ -67,7 +67,7 @@ http://source.icu-project.org/repos/icu/icuhtml/trunk/legal/copyright.html.
 
 ** Unicode Data Files and Software **
 
-Copyright (c) 1991-2016 Unicode, Inc.
+Copyright (c) 1991-2017 Unicode, Inc.
 Distributed under the Terms of Use
 in http://www.unicode.org/copyright.html.
 See also http://source.icu-project.org/repos/icu/icu/trunk/license.html.
diff --git a/MD5 b/MD5
index 7e8389c..3d42f77 100644
--- a/MD5
+++ b/MD5
@@ -1,164 +1,163 @@
-94d98723af945077e27023a4f9cc6092 *DESCRIPTION
-9c47bdb52da886a78df8171543fa053f *INSTALL
-917d54fd0de4f028322b2265d9307c5e *LICENSE
-0c7ba4582547b178091a7ddfab722771 *NAMESPACE
-c85de79f683ea06e161dd40c218e21d1 *NEWS
-041b295d49331c3a79af471c6235e2b8 *R/ICU_settings.R
-135398ce83412fceb3eafedb662534a8 *R/compare.R
-b323636ececa61126e5c47358610d4d0 *R/draft_encdetect.R
-90dc2f45e85528fd2b07140b5c660453 *R/draft_files.R
-ee8672ab56fa3348b78ee95cb3fcb30b *R/encoding.R
-02db3296cc0088c2bc08c7d0a6904b9f *R/encoding_conversion.R
-d79fadd8d5edae6c5a010cafe9ae7be4 *R/encoding_detection.R
-a618076b5803b944b78403e947ef2609 *R/encoding_management.R
-678c1020c1c2ccf9d696cfaafc0bdffd *R/escape.R
-c0639af6573d20262a64151bd49c730c *R/install.R
-16d3a813dd97d0ab0935551717272fae *R/internal_prepare_arg.R
-cebd0e205ca829e3664b050fce060b23 *R/internal_test.R
-477bba6375b930039c292ffdc82850e3 *R/join.R
-91bc84f4be70fd0b5ecc7b4bfce3e98f *R/length.R
-af8206ad54e30befccda70853bbc3f95 *R/locale.R
-51535c772198c3d01b2c22557f82051f *R/locale_management.R
-2a3130e30d5baf54596289f91a493444 *R/opts.R
-d8b9def7289c02b4bc88a1862ad8cc83 *R/pad.R
-7ae5bed1a706fcc80b528c76cdbd4e49 *R/random.R
-60dd61a03dae15e022060c16b00312ca *R/reverse.R
-80b33ae1699e71f31193d0c70f8d4b6d *R/search.R
-d61cae4ea8ab970688cff9830fcd5d8e *R/search_count_4.R
-081583656384086863ffca191dfa5063 *R/search_count_bound.R
-6a8d76dd0e79881d1c8a7ef2f04b3cbe *R/search_detect_4.R
-e5a91ba8ad0f51baca0bcf9e543ce5ce *R/search_extract_4.R
-236d97c2edfaeace8ca38d86fa2aca9d *R/search_extract_bound.R
-046237598e3cbd9354795f42cc3a8c1d *R/search_locate_4.R
-e202038508b5c580aeadc650011b12ab *R/search_locate_bound.R
-8f0247a23aea0055971b57c3b967a774 *R/search_match_4.R
-59d57f310422e93b805bb87ef5bcd3c8 *R/search_replace_4.R
-f84133ec1919ef019eb60e5de9807031 *R/search_replace_na.R
-bd596f1f4f28065f0b5b023a32e8e8bf *R/search_split_4.R
-a80f441971b542d580d9acd43a4ac79c *R/search_split_bound.R
-6f3525207ad0d54546ac9c1b237a00f3 *R/search_startsendswith_4.R
-9ca5840028310506f4dafd1dfba2d460 *R/search_subset_4.R
-8cbd4130f252d9f2b177f8f948ac4eeb *R/sort.R
-69ca17d16ee3058fb4d6b63caaeef5a4 *R/stats.R
-ddfd867e1969a3e6a7a99944b0f6ee97 *R/stringi-package.R
-120fb9bb81dc5a7a8f4e285f0e790331 *R/sub.R
-e1f9019dfc57854a8fe45aa3866e3308 *R/time_calendar.R
-29e2e8371289c2cede63524b7f467348 *R/time_format.R
-90aa00f039e4895a063e1b920215a360 *R/time_symbols.R
-a33980b4350860e1c2fdd339afb1831c *R/time_zone.R
-5682629b6521ab27d5e470cf98ca6e23 *R/todo_charclass.R
-60ab43767fa8307ba5173362642b8fb5 *R/todo_justify.R
-6880436fd5ceca3750ba50cfaa6c9f44 *R/todo_rbnf.R
-d178863770608bb4ac417a717d4722e0 *R/todo_search_in.R
-54166ca4ab558496b4b517b8d39f0a24 *R/todo_split.R
-603639f8982ffc16cddc8794884ab485 *R/trans_casemap.R
-9e98b0e5f44f29f173c2fdeb6c7d169b *R/trans_normalization.R
-66feb6b6e5431d1ecb2abe25674b2f96 *R/trans_other.R
-30ba1a549925d38ab769411afe6fcc6f *R/trans_transliterate.R
-2a1e3f39e4f0ee75e7d6ba1c72c6053a *R/trim.R
-e401b8360844994f01510e31cd32b8d7 *R/utils.R
-d9bb943f6ea5138b643f2a191102630c *R/wrap.R
+385c56c3e20a13d922d972602623aeb8 *DESCRIPTION
+ee8b16f29c99477beb6d828fe6e91595 *INSTALL
+7046c04fd6bdbea3546adb75e91cb6db *LICENSE
+913e8dae7f4b5710551952537fea0916 *NAMESPACE
+d4852820ea7b69f70c58a3df90ba82b6 *NEWS
+c81ac36a300bf461a0f29a37040defa1 *R/ICU_settings.R
+9bdd87ab2a81cda87f488233507e6aa1 *R/compare.R
+bf6f90295ce7e54700b045e587a0e087 *R/draft_encdetect.R
+91353e5979961a59e44da8ff898d44e8 *R/draft_files.R
+1a9f79d94b2ef225b5839b8e2a2ca74e *R/encoding.R
+f8eae4bb15945176cde77cb727cf51a3 *R/encoding_conversion.R
+a7eac5951ea21c4c30066f4e56459aec *R/encoding_detection.R
+0a96a5c4303fff13da9b113e5f2bce5a *R/encoding_management.R
+4dbeaa05b0029d059299c3079bd3960a *R/escape.R
+5bbb1051a5ac8688a1ffa52e3fdd35e8 *R/install.R
+3dc00a1272b9f9b2a97649351c8bde2b *R/internal_prepare_arg.R
+78c575e30e1afba9e775272003096d05 *R/internal_test.R
+86532c4f060183da7794e078ff10f1a2 *R/join.R
+09b4b730a4e1a0cf21f81085aca019e2 *R/length.R
+dd68e339c8809f97f5558289e6fa9028 *R/locale.R
+4c3258077a514647593f06109e132e5a *R/locale_management.R
+71775f48ad1d507e47f9c72d7cb84b82 *R/opts.R
+4ad424314866e784b45aa5de52e3f90d *R/pad.R
+bcbc6c83a2e3b3f206aba2841ed9a881 *R/random.R
+91f24c91cc37ced12dbbc731c759320a *R/reverse.R
+710e851377719659c1504291238a8da4 *R/search.R
+c173af972d96b772f1d68fefbc9fd489 *R/search_count_4.R
+ca2f35225446f55879f3f3b2637d5ba7 *R/search_count_bound.R
+608c4e3646888367802a3d4c3c629b12 *R/search_detect_4.R
+0578e1734bc2c497ff5f7074ad287f5e *R/search_extract_4.R
+40693bf761a48b16585b3a5912eb3238 *R/search_extract_bound.R
+f3aacf1e82e7c1904b5b1480b702cfb2 *R/search_locate_4.R
+19795d881dd30fae5f3e3a1047f42b0b *R/search_locate_bound.R
+e5c8233ee4ed93dd1c64301536e0abe6 *R/search_match_4.R
+2476f38d0531ad288c27998b48e02049 *R/search_replace_4.R
+f75af2938ebc9b25d087f24338c34f46 *R/search_replace_na.R
+cc0d7f5509fd2999024b1021a1b9388d *R/search_split_4.R
+98127b2026b5c296e0e76fb638612fe8 *R/search_split_bound.R
+c53f03926544896f382189fb70a6a8f2 *R/search_startsendswith_4.R
+2d618c7d5a81cccb5fe7fbe78598015c *R/search_subset_4.R
+dc8cae5f0b0b5e615b285909595a6d79 *R/sort.R
+c7918d77003afbdc7b73617e12cd522b *R/stats.R
+3e270d5c0da94d4158cb440d3c87aecf *R/stringi-package.R
+79a1799eaafdb9da46df272d89b52bb1 *R/sub.R
+0c9439ca1f4948216944a8f3888b148f *R/time_calendar.R
+02f3bd9e2e61b34b1ab264f40c7c571c *R/time_format.R
+b38a9455e88df9aaf78f640c3021e895 *R/time_symbols.R
+16fe8b544e285238f55dc31623277369 *R/time_zone.R
+c023f5b2dd8a6bb3c5d66a3fa5467905 *R/todo_charclass.R
+ee4bc2a14cc038eed8ddd6cb258a26ff *R/todo_justify.R
+04e396a213695fd2d158191861da02af *R/todo_rbnf.R
+54d104aeb5965a1391ba855cc3285ed9 *R/todo_search_in.R
+007d4eef9f1aa9fc5ca34001605d5975 *R/todo_split.R
+31e14d3e1bfdcb0f502d4edc042e1478 *R/trans_casemap.R
+2f4579b7add274ff04ad496251f74eae *R/trans_normalization.R
+c2b9cff7e4a3930d0e415f77fb440dc8 *R/trans_other.R
+f37ba50803cdf6e6254a5fd35480d78e *R/trans_transliterate.R
+7f6ed76b2b142b811293a23fe109a77b *R/trim.R
+9a39ed292c422093c87b321b08e04c1d *R/utils.R
+726393464c54b2e68439fafc37177f1e *R/wrap.R
 8b7d9182fddf64d7eb7187569a79483d *cleanup
-937f6d1015f6d6f8134727aaa6570eb3 *configure
+83b2ae8e138d637c0609c11f744a90d7 *configure
 01eb39501669fa9713bb7afdc2aa79bd *configure.win
-01d914cf4094ab4bac3ca743eef219f1 *inst/AUTHORS
-e1feb43ce365e9d593e84d4f0fe3176b *inst/CITATION
-ef9e3a3a94520648d33fc868ff48f242 *man/oper_comparison.Rd
-137d279eec6958e2f944a1b4586dbe43 *man/oper_plus.Rd
-b0949f5dd0ccd47aa4d00119ef733302 *man/stri_compare.Rd
-3dc4121f03e0dcc20aec23a651316332 *man/stri_count.Rd
-71dc9a55fbf1b148d722023d014e918d *man/stri_count_boundaries.Rd
-fb5a2de049beeceb0274835903bf8f78 *man/stri_datetime_add.Rd
-c0b0a52c15ec7395215c6198e9bdebb9 *man/stri_datetime_create.Rd
-dd4bdf2d240a4d21592affa1708433aa *man/stri_datetime_fields.Rd
-276a56b8bcbe36478ae899fe95ba1ddc *man/stri_datetime_format.Rd
-88cfcaeb3c1a0e3f04b170f7d118a7ca *man/stri_datetime_fstr.Rd
-c57ed60bc178ce0e3e62b5a9dbff4012 *man/stri_datetime_now.Rd
-ceb5cf228bc8bd48dc31b6331b8610bf *man/stri_datetime_symbols.Rd
-e6b2f1cad62d2dc17095ccd22e0d1b19 *man/stri_detect.Rd
-aec1c9605d5c4521696169cfbdb85a42 *man/stri_dup.Rd
-1da5b1dfe32f7f9e276d45f578f09337 *man/stri_duplicated.Rd
-3cbc8c04027ccf030e261883dfb72494 *man/stri_enc_detect.Rd
-9c6787dc5cc151818414fc1054783711 *man/stri_enc_detect2.Rd
-77b63ccef9247be8767a41eae1343806 *man/stri_enc_fromutf32.Rd
-4a5c56e366b043db08cb3d0f4a8174b7 *man/stri_enc_info.Rd
-d72baf3acb178f918493520b34af26af *man/stri_enc_isascii.Rd
-5e25764cb8ccbc8686eca881cabccef3 *man/stri_enc_isutf16.Rd
-b6406d6e163c445bf344a906e5229025 *man/stri_enc_isutf8.Rd
-693f4d6a7d8ec69e68ddcdbd06a3a45e *man/stri_enc_list.Rd
-305d4c4ceda4e6508c41522f9673639b *man/stri_enc_mark.Rd
-e222a2aac86e4b4a66a85fae18b256e0 *man/stri_enc_set.Rd
-36b06e82796242f34c2aa4a83e46984c *man/stri_enc_toascii.Rd
-732a6dcda27b6483296f4878aef2f3fe *man/stri_enc_tonative.Rd
-2a459a3504ca2a881ceac3b794747050 *man/stri_enc_toutf32.Rd
-225cc4a93167d2b95fd704e8f8a9abf3 *man/stri_enc_toutf8.Rd
-e5b18cb9ad83c256875693174981bc64 *man/stri_encode.Rd
-c28f8ce09c6124325d688ccbdf35ecc6 *man/stri_escape_unicode.Rd
-df733c42bbcfbc2802ba41708b6f63f2 *man/stri_extract.Rd
-f41b9bc78b21b4bf06606248c80fda1e *man/stri_extract_boundaries.Rd
-56916c74a55761d1e347a0f8b02a8fba *man/stri_flatten.Rd
-e94a75d1cae2d5f7a3b86baa819f793a *man/stri_info.Rd
-4f8bafca5d1c7032aae33330863cfb76 *man/stri_install.Rd
-7e8960f912fe48d1e347a33c3dc5bb80 *man/stri_isempty.Rd
-d70e1ba76f089ba6bf34e072bb36c5fa *man/stri_join.Rd
-65ee390bafa39b8385cd9e7085f36137 *man/stri_join_list.Rd
-6558e8aa02824e3b72a8e7c3ae997c98 *man/stri_length.Rd
-21d16db9ba1d0f53f52acebb3eb99125 *man/stri_list2matrix.Rd
-57da94524c2a45aecb8cfd30ce3ddb47 *man/stri_locale_info.Rd
-40ed3662914b0e373ccbaed0b5f0f33e *man/stri_locale_list.Rd
-00bd61cf31226b60d59d2c13d2852b03 *man/stri_locale_set.Rd
-790166a79fc251d50634684a325dca21 *man/stri_locate.Rd
-fb014a4dca60ad81295b0de7e4bd126a *man/stri_locate_boundaries.Rd
-02b2c7e3ea0bffbdd18cc0b4fa4438a2 *man/stri_match.Rd
-a5ad7d12d595e719239ed84c2f4ed3a0 *man/stri_numbytes.Rd
-27e952ebc9912cf4781c8acb2d457d0d *man/stri_opts_brkiter.Rd
-3ea43c7505f379ec83569eb071bff78b *man/stri_opts_collator.Rd
-e0c6e435b7e6201b0b294fa1135c78fb *man/stri_opts_fixed.Rd
-fa19cd9fbbcc5cc641de867266d62fcc *man/stri_opts_regex.Rd
-5c9a2016b320ac23fa1e75137bd9383b *man/stri_order.Rd
-58b06a5315b2cb6872387fdebae1e58b *man/stri_pad.Rd
-6dc427d0de44e2042a662a7ecc46ae19 *man/stri_rand_lipsum.Rd
-c4da82a5fa97866eaa4faeccdac9335d *man/stri_rand_shuffle.Rd
-42b9bfa83889c3f167a2b2d75c1450be *man/stri_rand_strings.Rd
-9671f6e0e72439d92abae5f36a758b1a *man/stri_read_lines.Rd
-17928f8c239e74bbd88dd32f01dccfd4 *man/stri_read_raw.Rd
-516a69f9643a16ef4e5ecf3c5667eb47 *man/stri_replace.Rd
-2259c583f75cc9bfeab31fc1e21c67c4 *man/stri_replace_na.Rd
-385bc02abd9311e4e876acc1778e3c76 *man/stri_reverse.Rd
-c1a3497ca77db9a2007d54f7a984286e *man/stri_split.Rd
-291340a59fac09976f66644c3a3da89d *man/stri_split_boundaries.Rd
-c634473ab2fdba500a879e5149c4551c *man/stri_split_lines.Rd
-93a8440524102ecda662f35d815771f0 *man/stri_startsendswith.Rd
-64e46e31b133333f518f90d32cd0f2e5 *man/stri_stats_general.Rd
-613ea773e8cb58f0e2284a4df9dcfecd *man/stri_stats_latex.Rd
-2f39df3cc0ca8b378058767e1b919919 *man/stri_sub.Rd
-a2e2d9d4e0e0aaa325acb118a82c27d3 *man/stri_subset.Rd
-40ed3fd617b5aacb91bccd3a83f10b63 *man/stri_timezone_info.Rd
-b6f064d11d1b363cf402178a7e6859d1 *man/stri_timezone_list.Rd
-6d4aa2484fea39483d3e825dc8d3c049 *man/stri_timezone_set.Rd
-2dfafe63602598984fa8160206d17c8a *man/stri_trans_casemap.Rd
-a547e0a095dd1b3f36275f90bad1634c *man/stri_trans_char.Rd
-1c7eccf06b125f182bd1675e949c213c *man/stri_trans_general.Rd
-463a284bc5c10ba855d6413f372789ae *man/stri_trans_list.Rd
-716a5ec5f52859be7a38fe4cb76d1580 *man/stri_trans_nf.Rd
-e31ecbe8c31ff3149b543c574a6753cf *man/stri_trim.Rd
-71a69abbe2c479dde7cef2891580121e *man/stri_unescape_unicode.Rd
-6b37092472252440a22e847daa54c797 *man/stri_unique.Rd
-3a15758b8a50dc839dfaaa9b50126ef3 *man/stri_width.Rd
-4fe324c6beb0a4d339b6940c798f45f7 *man/stri_wrap.Rd
-5c745da059392cd933b3597e83d62839 *man/stri_write_lines.Rd
-44ca889c15cb78026d5451ca9eb0af66 *man/stringi-arguments.Rd
-bbef11284e0980a2b033354d3a07ff54 *man/stringi-encoding.Rd
-f2a7b4252833363c44dc84a86f0afd71 *man/stringi-locale.Rd
-96262c4bedb7333b1fd241b8fc51ee1b *man/stringi-package.Rd
-d114ba60534e79d627f9e4a7dc6d0cf0 *man/stringi-search-boundaries.Rd
-6c1b9307ae97e60951960d90ac902d30 *man/stringi-search-charclass.Rd
-97ae4d1759bcd6ed743ceeecd6290a88 *man/stringi-search-coll.Rd
-3ddf8a1475e3690658c3fd5f8162cbeb *man/stringi-search-fixed.Rd
-af0bb3c5f907b3263b39e9ad5596be46 *man/stringi-search-regex.Rd
-1a170e5d4791f1a43dddb7208b9ff6be *man/stringi-search.Rd
-9612f038d81fe66c822adc2d5091c895 *src/Makevars.in
-eeecf90b7a9443da06e7cc6d6505af11 *src/Makevars.win
+bdcd0c49082bf7bf93122474e958d8ff *inst/AUTHORS
+dbff8d774fa477bd3b2025e8d73efd2c *inst/CITATION
+15588b9d62e1c296d432a8e26983d4dd *man/oper_comparison.Rd
+dc278dae56fde988bd69a5bd60b6c375 *man/oper_plus.Rd
+44594f86307e4d3ffe16c0e01789067d *man/stri_compare.Rd
+5e1b9b6176078b30c3b57217880bfc10 *man/stri_count.Rd
+f986ea1bfd8be8a78531c3732e426437 *man/stri_count_boundaries.Rd
+02955a6d446b84214e52b22837ea1da9 *man/stri_datetime_add.Rd
+ac63706d478b516b76ff37ddad6d0b34 *man/stri_datetime_create.Rd
+e142d7447a09ab888a82472295f9cf3b *man/stri_datetime_fields.Rd
+b20ab28a9b4eb1eca659a4cd96a90e52 *man/stri_datetime_format.Rd
+2fd82dfcd06a7f5cc52a58858d3685ec *man/stri_datetime_fstr.Rd
+6412622446aa285eee4c7a2247359676 *man/stri_datetime_now.Rd
+94156536ca92a93f82169be754f600c3 *man/stri_datetime_symbols.Rd
+98f15440ed081367dabea36d462da64d *man/stri_detect.Rd
+01a1d51ab4ea44bab17052d901c9f96b *man/stri_dup.Rd
+47ac5f9198b8aadc311022c2fb865d48 *man/stri_duplicated.Rd
+c44f4108118ac4c4a9ea011d1424628a *man/stri_enc_detect.Rd
+eba1f303c6cff1c4becc4d3b2c2963c1 *man/stri_enc_detect2.Rd
+0fb085072d713fa3f24ed06316655cd4 *man/stri_enc_fromutf32.Rd
+74f9b1edb9cdd3f724b7691d2b8c16d5 *man/stri_enc_info.Rd
+60b8274fe7e4be80b363ed12582808e1 *man/stri_enc_isascii.Rd
+dc25030a6200126851d19a3b478b3bc7 *man/stri_enc_isutf16.Rd
+ae2862b575c8dd89b5e3c9b6a19d39cd *man/stri_enc_isutf8.Rd
+7e8bcb4bb1ed255f337b36d505ac91fb *man/stri_enc_list.Rd
+9bb6890bbae440ed56f386394992f918 *man/stri_enc_mark.Rd
+647408e28f788204616ea95caddb92c0 *man/stri_enc_set.Rd
+8c24ed79483356e110f5591cf2ce7823 *man/stri_enc_toascii.Rd
+84202fe14108acf031518710be2b0d66 *man/stri_enc_tonative.Rd
+270b8b6d2f79adf27708881b9bb2e058 *man/stri_enc_toutf32.Rd
+c324fa2e7f63b3d7a37978e02e46602f *man/stri_enc_toutf8.Rd
+3b45913a491338b87b79fc14e728076b *man/stri_encode.Rd
+e8fa1792aad1bb9273cd156292f284d9 *man/stri_escape_unicode.Rd
+c7db9e1f65d4d5d8d3b8e9c9221eef1f *man/stri_extract.Rd
+881695763d0df0b4a87f881b9a40bc00 *man/stri_extract_boundaries.Rd
+2b1241b500861ca0db508a028712e446 *man/stri_flatten.Rd
+7ededaa6dfab59a9c1707ba56f3def0c *man/stri_info.Rd
+0ad63180fece939705741ff12d2d056d *man/stri_isempty.Rd
+45e41ed4e40dc0df20f93d3a00c69cf6 *man/stri_join.Rd
+75e49f00cadd62ab2c4b9dbc01032728 *man/stri_join_list.Rd
+09b8b7e35949ffae9c23b05a903b0e63 *man/stri_length.Rd
+4a644f3799ff8a6bd69d17a90e30ecda *man/stri_list2matrix.Rd
+76da993ff822a63415e1cdade419bb29 *man/stri_locale_info.Rd
+e78d1d8391a76c574bda1ebca0e9a328 *man/stri_locale_list.Rd
+e5757a261f35d2a043bae01c1aaac82f *man/stri_locale_set.Rd
+e62f5b726e95f761ea8096ff8d9273ad *man/stri_locate.Rd
+79aab9ce68426397df8126a999d25a88 *man/stri_locate_boundaries.Rd
+e172b0704268e508df5a12405b96d756 *man/stri_match.Rd
+5d875353f4d641f44767823cae7b04af *man/stri_numbytes.Rd
+4ec55f96b3f67373624c09c71e6a30bc *man/stri_opts_brkiter.Rd
+2d399c2525262543bad90715db294bff *man/stri_opts_collator.Rd
+5e9fba621a6b886e5591e648e97b131e *man/stri_opts_fixed.Rd
+b95486d98d0b565088c9bd393ee8bea1 *man/stri_opts_regex.Rd
+fee89075b029347c921af5f6d12a94a1 *man/stri_order.Rd
+431f360342d248c3f0ce03a779f6c523 *man/stri_pad.Rd
+796c2f3cfeb748ffff2971508b18bd66 *man/stri_rand_lipsum.Rd
+8fa1d7562a12300ea023047c64d9b154 *man/stri_rand_shuffle.Rd
+ad18ad7cc26177dabd21d6fa2031a139 *man/stri_rand_strings.Rd
+bf8c8c59784e055aaeded1a7c835a6ed *man/stri_read_lines.Rd
+58a84bca88229750b5825c60a257ab5b *man/stri_read_raw.Rd
+8c1327a34aae583175ae0c29ed1d49d9 *man/stri_replace.Rd
+3347d2f732147a3e2b4750fc522c45b8 *man/stri_replace_na.Rd
+b7465654101c1c902c128aeac1dd6248 *man/stri_reverse.Rd
+34f63546939ed8ffc8878dd511c8bfae *man/stri_split.Rd
+961edd3f060aa8781af83e6d4e2376ae *man/stri_split_boundaries.Rd
+b96f311fe838a34b2a19532f7aeb7831 *man/stri_split_lines.Rd
+8a522a8ea9178020ebb1930c2a5b4156 *man/stri_startsendswith.Rd
+1772c43e509a6623b44f69d39d3906be *man/stri_stats_general.Rd
+c9c7574157005d6eb78719c1993113aa *man/stri_stats_latex.Rd
+011623e4bfaaefa0fcdd5b163d0437d2 *man/stri_sub.Rd
+f50bbb055cea299044207a6bed8b9296 *man/stri_subset.Rd
+ada401a07b12245bdd175d5c37e28a97 *man/stri_timezone_info.Rd
+33f6fa48c85c31a88c0bc63c566fd7f3 *man/stri_timezone_list.Rd
+fe0ab8db348bc2287923f361702e85d8 *man/stri_timezone_set.Rd
+1c7cc14e3ee5464c30320983205506e2 *man/stri_trans_casemap.Rd
+1b5b7ec0b1454f1c84ea4c1c1efdef84 *man/stri_trans_char.Rd
+43a549d49f4ea1fdcb38a135b0393825 *man/stri_trans_general.Rd
+80a4d51ef171c4aae0b861d83167a46a *man/stri_trans_list.Rd
+eb7a3e54d887d0890d0ec0d1bbfb7ea6 *man/stri_trans_nf.Rd
+f3f5b310309644d7ff9337ba816a7b41 *man/stri_trim.Rd
+62b1c57ffc343353e65b8d2d3d55a955 *man/stri_unescape_unicode.Rd
+44ab25c42385d0b538840310d652b2f3 *man/stri_unique.Rd
+caf2b2c5fc42cabffba6a2ae9d371252 *man/stri_width.Rd
+97abe47392cd57a37c9d098100f41211 *man/stri_wrap.Rd
+31afcd570890fc4d3ad70a522849a93b *man/stri_write_lines.Rd
+d15ba71c5da0f7de2789b1917502b2f5 *man/stringi-arguments.Rd
+d6bb05c10abd98b24ecf3e86cc45d4da *man/stringi-encoding.Rd
+56bd0b4e9aaf3d7061648a861b9e1d80 *man/stringi-locale.Rd
+7787514f84c5f89b0b01ec9a6aa5c1b2 *man/stringi-package.Rd
+e5b72c2a9febcbc14357b52233be3095 *man/stringi-search-boundaries.Rd
+93b7360481471e1fdfe3fe783d01eb09 *man/stringi-search-charclass.Rd
+38e7e8d6dc3b294f4cb919a21b5f063a *man/stringi-search-coll.Rd
+134d2f24fe61334ec6f2c1346fd9f0bb *man/stringi-search-fixed.Rd
+36ca45bd29defd5a4f23879d4ecc8d28 *man/stringi-search-regex.Rd
+91e81faefac576b549bcb172bf88d8ab *man/stringi-search.Rd
+ecde906ce156481a413325ce9fcdd2ac *src/Makevars.in
+fc24b0aa2722078367c49a673d045999 *src/Makevars.win
 d6120ec4bb4b513e4be2792675f39649 *src/icu55/common/appendable.cpp
 c8aeea058b0e06604b4cae4f88bae984 *src/icu55/common/bmpset.cpp
 91d168ef63acabeb9c16d2b65245d8c8 *src/icu55/common/bmpset.h
@@ -919,120 +918,120 @@ fbcaf02b188edfa1be62b062e9c0bb4c *src/icu55/unicode/uversion.h
 bc176c3b849857ea76d0924b2646d408 *src/icu55_i18n_cpp.txt
 2d5bced0165af1e31b8b89a4ca58dd23 *src/icu55_stubdata_c.txt
 d41d8cd98f00b204e9800998ecf8427e *src/icu55_stubdata_cpp.txt
-143aca567faf0ba17e1e7b91d08adb99 *src/install.libs.R.in
-6c89542e800e7384bd52fbdca10ad20a *src/stri_ICU_settings.cpp
-6eb3b329943408f0306f91d28b6814e5 *src/stri_TODO_justify.cpp
-d92e32cca75d8ae8a30ed6d98d76c149 *src/stri_TODO_splitpos.cpp
-7c3dd76ca6ec57bd9546544ff7ee600d *src/stri_TODO_uchar.cpp
-fe6d06a799631428ac50cf65d6f06094 *src/stri_brkiter.cpp
-2b14f53bab9163163ebaa05a9e95bcc0 *src/stri_brkiter.h
-01a6f685c8090cda961a7c0cf00ae93d *src/stri_bytesearch_matcher.h
-f233762ec52d6ec6e26ba93242e1a78f *src/stri_collator.cpp
-739f14b9ce9bd25f757cecfb6148ec0c *src/stri_common.cpp
-6d6e24eb31092706ba14d4d66ca9f4d0 *src/stri_compare.cpp
-319a1453af3da64e576fe1efc4ddf349 *src/stri_container_base.cpp
-bdf6bf6329756a5323011c613b5b4799 *src/stri_container_base.h
-09292ba806f45572809abbeb3ec06af5 *src/stri_container_bytesearch.cpp
-2ef1538c7efb6be5c2cd6133bac5a2f2 *src/stri_container_bytesearch.h
-c98414ed20d557a5562a39208383407c *src/stri_container_charclass.h
-b96270d47e870993f9e9a35e06b8d3ca *src/stri_container_double.h
-4641236323e8fe8322e52b9a084704a9 *src/stri_container_integer.h
-dadfd0eb0b12b28ec751e765d892a14c *src/stri_container_listint.cpp
-5b355137f24f5015bcc32c68502a0513 *src/stri_container_listint.h
-ca5f38cb8ff7565ec78518b6efb8dacb *src/stri_container_listraw.cpp
-02e39170ae3a1dd96daa4686421512db *src/stri_container_listraw.h
-04d410756bb38bef1375089afc2abd4d *src/stri_container_listutf8.cpp
-493cd0c2477b258894e9e712f4ad1eed *src/stri_container_listutf8.h
-172c7b64784664a72a8701da0e3db551 *src/stri_container_logical.h
-14a7df1a652290f4818ff5f792460407 *src/stri_container_regex.cpp
-87427b1962a0bd5c9511a657d889394b *src/stri_container_regex.h
-d9c3d058487a4813c82c0307e8c52be2 *src/stri_container_usearch.cpp
-094a15f8d0df9a313dcf25a2b939ecac *src/stri_container_usearch.h
-2a0fb65a21fa74f76a6db5f9f33be134 *src/stri_container_utf16.cpp
-3aace42b7734030e7154eeb20e6ed21f *src/stri_container_utf16.h
-bd2c73ab64c55f79f61b8eced599b7ec *src/stri_container_utf8.cpp
-36981539a3de7227b6710ab2f7c48278 *src/stri_container_utf8.h
-3f153a60386b36f9f52aac05eb543d1d *src/stri_container_utf8_indexable.cpp
-af90f8e1c0bb8f3616eb76dc7d81fbaa *src/stri_container_utf8_indexable.h
+c243c834b392ad6c34d3326f983f032d *src/install.libs.R.in
+7c5ffe8ad29e037e72621e775180448f *src/stri_ICU_settings.cpp
+ba647fe26a1b79bff385787aa18e37ec *src/stri_TODO_justify.cpp
+4d94406e0667bd12d230e388360d6f46 *src/stri_TODO_splitpos.cpp
+477ecb853266ee5927f6501cff3b9120 *src/stri_TODO_uchar.cpp
+d4fd984caed48c2df709f6f829f04eed *src/stri_brkiter.cpp
+13b912adffac61cb012756e35b853293 *src/stri_brkiter.h
+3deace6ffb49ef4b5e0f89facbf6c72f *src/stri_bytesearch_matcher.h
+d118eeb04f21bd5d6cd6e07906fb7341 *src/stri_collator.cpp
+c0c2c4cca6916764e0cd983cb2f3e98a *src/stri_common.cpp
+afb99cfbd73d7b7c9dd29d0619d106e1 *src/stri_compare.cpp
+570f14b8a343e3cb18cd090e064ce96d *src/stri_container_base.cpp
+63b7b957013fdc44fc180904e93adebb *src/stri_container_base.h
+c3d4173d85dcddb0a522b1866a4f4a66 *src/stri_container_bytesearch.cpp
+2ecf67bd1bcd1d3cf31841905a2368da *src/stri_container_bytesearch.h
+ed7b4027ac81e8854445bfaa488ad952 *src/stri_container_charclass.h
+a138d27d76c6d16566ab6de8de7fe497 *src/stri_container_double.h
+0134f2ee2a56b3c56a173869e93e432b *src/stri_container_integer.h
+d67e7a50443c58d392c7df1e43d0e41f *src/stri_container_listint.cpp
+7d5fd54cb64d9056ce3a15eb704f3687 *src/stri_container_listint.h
+7330346e22bdf5942309d4e2799fe71c *src/stri_container_listraw.cpp
+96bff8ccbd04eda413aba22bf897a047 *src/stri_container_listraw.h
+0270c7327c6bbaa0c84c0739be677905 *src/stri_container_listutf8.cpp
+40297ed82be0ca2093c72b792f99ccad *src/stri_container_listutf8.h
+07e04c0688fc4a369d5aa68687b5ce94 *src/stri_container_logical.h
+f3957ade52810e77bc2df5a0a397393b *src/stri_container_regex.cpp
+0925b615641dedc3c727680020f5173a *src/stri_container_regex.h
+8a99105a3e8ae6cdcf30b199878dc766 *src/stri_container_usearch.cpp
+4ff13df08fded2c1f6224c48855258b3 *src/stri_container_usearch.h
+9216bb4e70a63401e74dbfef268542e6 *src/stri_container_utf16.cpp
+f0d8889b042b30059f2b9524765e5d29 *src/stri_container_utf16.h
+021b6bd4873784eff92680d0cf57bc5d *src/stri_container_utf8.cpp
+0e24cdb965811e55ee0ec360751bac54 *src/stri_container_utf8.h
+4535e78a2bdf56cb324ce149634f8063 *src/stri_container_utf8_indexable.cpp
+c2d2d5e31de68aa8c278b7533c5f261e *src/stri_container_utf8_indexable.h
 3b18001624aeb493392a7108dfbe4ed9 *src/stri_cpp.txt
-2d605e5387171a6cc0dbe30d3c2ce936 *src/stri_encoding_conversion.cpp
-7cf8406d818b6d6b4b7108b996d8090e *src/stri_encoding_detection.cpp
-11fff3ba0a4ebe3c224de3e73b60be65 *src/stri_encoding_management.cpp
-6b0afde7949bf0f88784be7716164a9f *src/stri_escape.cpp
-b3c6a8f231a5db567caae49a2970b997 *src/stri_exception.cpp
-4da66fc741981c702713a63d4c626ced *src/stri_exception.h
-728e5fb21927f3f00d9646e4274f757a *src/stri_exports.h
-63083479eb8109bc09d382ae345a2ddd *src/stri_external.h
-04498def5e0758c0cf736dcf150a2d27 *src/stri_interval.h
-3aad034fb8e3e34475f898a9b3dd9f85 *src/stri_intvec.h
-410ee6155a28f6e9979b5447b44296c0 *src/stri_join.cpp
-9e9b91991e6d37a0febfd887c9460fbd *src/stri_length.cpp
-8e368950bf943129f2162302a71bb62c *src/stri_macros.h
-7d507e7b9608a51d3ac8a9879d842d55 *src/stri_messages.h
-4f0afb44099249e519d2c7ac0d32b76c *src/stri_pad.cpp
-5e0671ecc7e1b6b47573b0dbd06f1f37 *src/stri_prepare_arg.cpp
-5377e358f9f60c20c138b8d120535484 *src/stri_random.cpp
-a175ca03d512319d1b50132118df04a9 *src/stri_reverse.cpp
-71cb5875faee4233661f4b8cff95923d *src/stri_search_boundaries_count.cpp
-ce8638a33a595890570fa4c08785fb9f *src/stri_search_boundaries_extract.cpp
-4f475739430840f63e427881d80a2dc8 *src/stri_search_boundaries_locate.cpp
-dc92f189a1c9a4993fc5c009ef4df40f *src/stri_search_boundaries_split.cpp
-746b71c48eb712f402d3b7b7cb31e239 *src/stri_search_class_count.cpp
-1c51019cd08e74124d34223db27cc32f *src/stri_search_class_detect.cpp
-785f9c44ca50cdd8b8eb6fbc63a991e6 *src/stri_search_class_extract.cpp
-9882351bb4a6d464e0578774d55f1c5c *src/stri_search_class_locate.cpp
-9168aeec13585acf93055cf17719d853 *src/stri_search_class_replace.cpp
-0f821675bbda261d9a956993d82001eb *src/stri_search_class_split.cpp
-6a1a932614ee8c3629f3047cb1a0681a *src/stri_search_class_startsendswith.cpp
-f81d53a126e29d7b60e69d4787a427ef *src/stri_search_class_subset.cpp
-3c7a87d87a284dc241786e0e27b6724b *src/stri_search_class_trim.cpp
-06796577de189c0487f74c323e2806d6 *src/stri_search_coll_count.cpp
-cfb6f5ad6c40a5518078b0d501b83c39 *src/stri_search_coll_detect.cpp
-059c5b5c5f6ee11c2be194eeaaf7f9af *src/stri_search_coll_extract.cpp
-dfc22b8e6a0f5d485716a106ff7de3b4 *src/stri_search_coll_locate.cpp
-8e394582f9ffa7f0bbdaba6e49cfd892 *src/stri_search_coll_replace.cpp
-f3ebabbe645cbc8b7f9aecb438ae2c42 *src/stri_search_coll_split.cpp
-32fe9d1cd33682d174d36f96a63e9bd7 *src/stri_search_coll_startsendswith.cpp
-111ca2609c5567d4369d909fe759b5ee *src/stri_search_coll_subset.cpp
-64e1cd0cd10b6fc9a12158fd9baf57d9 *src/stri_search_common.cpp
-3fe5fa3fcaad5067c4a518d1a9ebdfbf *src/stri_search_fixed_count.cpp
-1bba8f88232a40850e200c15ee0b2cc3 *src/stri_search_fixed_detect.cpp
-7ed4c950279905e971deb9bb84d93601 *src/stri_search_fixed_extract.cpp
-576f8ef42f8a1209bdeb2c63f4b56ba2 *src/stri_search_fixed_locate.cpp
-708e4b90dd48c2702043ded8a1fecb1d *src/stri_search_fixed_replace.cpp
-90c09e264a726dade2a59736d92a4401 *src/stri_search_fixed_split.cpp
-93602aeff93ee83f5ed87c551af84de9 *src/stri_search_fixed_startsendswith.cpp
-f5400af755a84ea17011ef254604196a *src/stri_search_fixed_subset.cpp
-ddfbcba63b7dd1805ea5f54ca0db3cdc *src/stri_search_in.cpp
-e2c5c7064f18d01de3eff5f30868bff2 *src/stri_search_other_replace.cpp
-52c0d5ea1948d74356773111818dba3a *src/stri_search_other_split.cpp
-8f966c4a6a0dfd1a57eb3515988688b2 *src/stri_search_regex_count.cpp
-cde404bc13aa72ae8677182229bf6ce5 *src/stri_search_regex_detect.cpp
-a57b4cb7bcd3696381a8bbda3126fc0a *src/stri_search_regex_extract.cpp
-06b21decf1a7e1a5e241f77044289f9b *src/stri_search_regex_locate.cpp
-eb6ae12465461d31704d291b2da3898b *src/stri_search_regex_match.cpp
-2a9d27d6761eb86940dff5d2923c45ab *src/stri_search_regex_replace.cpp
-9297afa7cb651093aeed3fcf260a2b58 *src/stri_search_regex_split.cpp
-2aa7f377cfbb94378ad067f68c25081b *src/stri_search_regex_subset.cpp
-cb56b6e0f1879f622576564cfef2244e *src/stri_sort.cpp
-aaa6e1b456b0134fdced617cd7bf8725 *src/stri_stats.cpp
-874e9a6bb75f6686e13f8663d067ee06 *src/stri_string8.h
-b3041dfab6f87001e0eee89e3b494aa9 *src/stri_string8buf.h
-501a15663af43d4f4f52dfd40abe6a36 *src/stri_stringi.cpp
-4e730b900eab5490dc5af599420c17dd *src/stri_stringi.h
-c064a7b651c42ed00c0bde6e0824ebf1 *src/stri_sub.cpp
-aca94d72c6c03739881cfe431c31671e *src/stri_test.cpp
-3c14ecb7b40872d59ccb8f6833f687ee *src/stri_time_calendar.cpp
-74588b302e39ae6549b84e28c9a17970 *src/stri_time_format.cpp
-feeb76d4823ccb34f60469214d702825 *src/stri_time_symbols.cpp
-10a41cc3db89223527b1a056aa5a9cfe *src/stri_time_zone.cpp
-a47bd98d72a025d91d23d6d2a7dade49 *src/stri_trans_casemap.cpp
-7c40f12292f290a9c027e76b0aa9e5fe *src/stri_trans_normalization.cpp
-ac5f5d63b7385f1f1a5f60f7ca4c3f2b *src/stri_trans_other.cpp
-3160fc5bdd4a3b7ee5ad01891b431108 *src/stri_trans_transliterate.cpp
-ad51e40d5075445fca98a3e3777de2fc *src/stri_ucnv.cpp
-10c527747d12e8ccdec94d66cd60d19d *src/stri_ucnv.h
-585773dbb203ad2255b8bee41f507438 *src/stri_uloc.cpp
-616b21fd3ad131d6dd676489384d69eb *src/stri_utils.cpp
-35c0b559d6fd2693d3dad12370fb3c81 *src/stri_wrap.cpp
-a62dfc2bfc5d7d64a769a9d412017d2d *src/uconfig_local.h.in
+3da4ddc93586b26385a41f8a3a57b0fe *src/stri_encoding_conversion.cpp
+f262c6635c383fd8f04511235a9d3a2e *src/stri_encoding_detection.cpp
+35b78673d352b72755cfafbea26aff13 *src/stri_encoding_management.cpp
+c8cfd861ba2aff8eaef2f72723f02d3b *src/stri_escape.cpp
+88faae74025909c16637fef77eff7583 *src/stri_exception.cpp
+6bc8b3d28aa6215d74011a918b5cc82c *src/stri_exception.h
+2d5b3d10ac8010363a8822c52f5c05c7 *src/stri_exports.h
+1c2b0a222a0d7dc4e4f5359d92413339 *src/stri_external.h
+b9a820bbd5d593afda7b602ff5e9cbda *src/stri_interval.h
+8ac85cd51ea2b77b3af194ab5ea35219 *src/stri_intvec.h
+a1bdf9995de1b5eb4dae2bb1beafc6ef *src/stri_join.cpp
+64cea2d0034153eaff061b89dffcc9d5 *src/stri_length.cpp
+3219e9f771bc5be77adb6f3c4ef0a5f3 *src/stri_macros.h
+7cf89193ccce3a2d684e61225f132074 *src/stri_messages.h
+d36cc491a7ecf2ef1ce1c03d4cee299a *src/stri_pad.cpp
+53abfefd98aac3ddfabcd0f55fda557a *src/stri_prepare_arg.cpp
+9e1a522240a9e1600b3f979e062a4976 *src/stri_random.cpp
+8ed9cc4f769fd6e8acab340f5b29f5ea *src/stri_reverse.cpp
+67ef54f7230a594f304ef8a19648053d *src/stri_search_boundaries_count.cpp
+1fa039e012943b7c2f9c9227955e4596 *src/stri_search_boundaries_extract.cpp
+725f38b39ec808719ddc8e75ffb48e34 *src/stri_search_boundaries_locate.cpp
+7f20b7851b1836ed523823a54157dd27 *src/stri_search_boundaries_split.cpp
+04cb1d51acf451616c1e417fe81e6dfc *src/stri_search_class_count.cpp
+4d7e6255875713ebbe4fee2136a08e6d *src/stri_search_class_detect.cpp
+992b1898536e464dee39be870199efa4 *src/stri_search_class_extract.cpp
+80fd955351dec707cf8a3242c71cf0f9 *src/stri_search_class_locate.cpp
+5de26cbea73a7471a21ffa4eeafd7598 *src/stri_search_class_replace.cpp
+2a7353c39232fc6c05e95c8cdbff1233 *src/stri_search_class_split.cpp
+1069c29ee589f1440e7e4468dc8855b4 *src/stri_search_class_startsendswith.cpp
+a6c660e7fc15e659eade2f638125c025 *src/stri_search_class_subset.cpp
+3283a68e836fb16d1ecab8ec9f0128ca *src/stri_search_class_trim.cpp
+0ba0c8e48caaff469e7503bc722bd416 *src/stri_search_coll_count.cpp
+f8d451670839979c4f0b8953d1bd3f06 *src/stri_search_coll_detect.cpp
+e9965c1571de6b20fda13679eebb280f *src/stri_search_coll_extract.cpp
+3248674f0e270c1103ef7a920df7f67a *src/stri_search_coll_locate.cpp
+3c67e3877f55566b22bcb049a24b1992 *src/stri_search_coll_replace.cpp
+1f74f26f3a9a23a909fc9f38ad185493 *src/stri_search_coll_split.cpp
+9b5f8e9d75e9ba10763eb81f7ab65ea1 *src/stri_search_coll_startsendswith.cpp
+1cfa5233fd0df1ad68bee428400d6a75 *src/stri_search_coll_subset.cpp
+07b04ec5f1f95c2c689145c53847fe54 *src/stri_search_common.cpp
+5a2427240d19cbbc319cf30498220400 *src/stri_search_fixed_count.cpp
+a30f87883a79a5ca81dada0aebc93c25 *src/stri_search_fixed_detect.cpp
+5703151ae664215657705adde7bf7747 *src/stri_search_fixed_extract.cpp
+e3e35892141ff244015e77887265f22e *src/stri_search_fixed_locate.cpp
+a452a740244b18104b7e6efb2d8f787e *src/stri_search_fixed_replace.cpp
+0f69e9657d2ef897eef396d2cebb51c6 *src/stri_search_fixed_split.cpp
+919dffd21273759b718fbdc6587e79c2 *src/stri_search_fixed_startsendswith.cpp
+d7f24bc33baf7c85d8289beec3f65bc0 *src/stri_search_fixed_subset.cpp
+1ca298307da1d29faf36d7fd92f040c4 *src/stri_search_in.cpp
+5956739d7582ec077286712155e77808 *src/stri_search_other_replace.cpp
+9680c5834cb84bdb7072c90d19031adf *src/stri_search_other_split.cpp
+dede39966d1aa21569972b49712a6410 *src/stri_search_regex_count.cpp
+87395b467c21a4ae38f6146eda05ee94 *src/stri_search_regex_detect.cpp
+87144fd24e247800a5a4950f54060936 *src/stri_search_regex_extract.cpp
+f1ba53d73e8dc313944a61e78626862c *src/stri_search_regex_locate.cpp
+b37b99a4107e3a46f2a8a6b0cbaf4017 *src/stri_search_regex_match.cpp
+2edbe159c5aeab71e04cd79d43eb20da *src/stri_search_regex_replace.cpp
+f2611cfdb3d8ae96d7c42357504a4050 *src/stri_search_regex_split.cpp
+e8c117059e2e5a9e0389b9e3decc4cd6 *src/stri_search_regex_subset.cpp
+5ca7596a235cbc47ba5a0de99ce7e4d8 *src/stri_sort.cpp
+9af40dfd200636cc2bd27d55b7cd7be3 *src/stri_stats.cpp
+394c1c37fe396d80a021cfae56b4a8ea *src/stri_string8.h
+9ec3eb328720a9da00f332dc87476b09 *src/stri_string8buf.h
+fcfba2b7136f32811c0242c29c916531 *src/stri_stringi.cpp
+4c0124f46b8dfbf713e963f449e6b143 *src/stri_stringi.h
+2e5d441db9e6c7a221137c25947c3340 *src/stri_sub.cpp
+1a548da707b9cc1de5537e3f554eae4a *src/stri_test.cpp
+bd10dcf550770f9d399ab6433784e4d2 *src/stri_time_calendar.cpp
+cefb59d556a129b1d1ad586a59f65499 *src/stri_time_format.cpp
+7713b57afacb669115c16d3e41f03dc6 *src/stri_time_symbols.cpp
+aa17ef68160577797c3ac2af37ee885a *src/stri_time_zone.cpp
+40e5d7ca41cfd99f4881897906c4ab08 *src/stri_trans_casemap.cpp
+28d8335e370c09753096799d454378c4 *src/stri_trans_normalization.cpp
+6b6c7ba085629e1cee10dc704fde9607 *src/stri_trans_other.cpp
+b3a9037ac7945a82bbc6406457bf8c74 *src/stri_trans_transliterate.cpp
+844cbcc567b5fb3bcb38dd9042dd7da8 *src/stri_ucnv.cpp
+d9d08e5b0d7eb16bdb00c558ddfe96d6 *src/stri_ucnv.h
+b247553b0afead8c6407f54c199abd3f *src/stri_uloc.cpp
+8ae2c03485913996d36a769d74aea535 *src/stri_utils.cpp
+55110e1f35df17cbccd878bcaf8e2982 *src/stri_wrap.cpp
+7f41ae5e48a6671b23524bd0e7b30103 *src/uconfig_local.h.in
diff --git a/NAMESPACE b/NAMESPACE
index 00879b1..57375cb 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -109,8 +109,6 @@ export(stri_extract_last_regex)
 export(stri_extract_last_words)
 export(stri_flatten)
 export(stri_info)
-export(stri_install_check)
-export(stri_install_icudt)
 export(stri_isempty)
 export(stri_join)
 export(stri_join_list)
diff --git a/NEWS b/NEWS
index c85723d..01f51b7 100644
--- a/NEWS
+++ b/NEWS
@@ -1,11 +1,48 @@
                    stringi package NEWS and CHANGELOG
 ===============================================================================
 
-## Known bugs in ICU
+## 1.1.5 (2017-04-07) **CRAN**
 
-* [REGEX] #147: regex look-behind assertions may fail to find a multibyte
-Unicode search pattern [solved in ICU4C 57m1, see
-http://bugs.icu-project.org/trac/ticket/11554]
+* [GENERAL] `stringi` now requires ICU4C >= 52.
+
+* [BUGFIX] Fixed errors pointed out by `clang-UBSAN` in `stri_brkiter.h`.
+
+-------------------------------------------------------------------------------
+
+## 1.1.4 (2017-04-06) **devel**
+
+* [GENERAL] `stringi` now requires R >= 2.14.
+
+* [BUILD TIME] #238, #220: Try "standard" ICU4C build flags if a call
+to `pkg-config` fails.
+
+* [BUILD TIME] #258: Use `CXX11` instead of `CXX1X` on R >= 3.4.
+
+* [BUILD TIME, BUGFIX] #254: `dir.exists()` is R >= 3.2.
+
+-------------------------------------------------------------------------------
+
+## 1.1.3 (2017-03-21) **CRAN**
+
+* [REMOVE DEPRECATED] `stri_install_check()` and `stri_install_icudt()`
+marked as deprecated in `stringi` 0.5-5 are no longer being exported.
+
+* [BUGFIX] #227: Incorrect behavior of `stri_sub()` and `stri_sub<-()`
+if the empty string was the result.
+
+* [BUILD TIME] #231: The `./configure` (*NIX only) script now reads the
+following environment variables: `STRINGI_CFLAGS`, `STRINGI_CPPFLAGS`,
+`STRINGI_CXXFLAGS`, `STRINGI_LDFLAGS`, `STRINGI_LIBS`, `STRINGI_DISABLE_CXX11`,
+`STRINGI_DISABLE_ICU_BUNDLE`, `STRINGI_DISABLE_PKG_CONFIG`, `PKG_CONFIG`,
+see `INSTALL` for more information.
+
+* [BUILD TIME] #253: call to `R_useDynamicSymbols` added.
+
+* [BUILD TIME] #230: icudt is now being downloaded by
+`./configure` (*NIX only) *before* building.
+
+* [BUILD TIME] #242: `_COUNT/_LIMIT` enum constants have been deprecated
+as of ICU 58.2, stringi code has been upgraded accordingly.
 
 -------------------------------------------------------------------------------
 
diff --git a/R/ICU_settings.R b/R/ICU_settings.R
index 603a61c..9ea1706 100644
--- a/R/ICU_settings.R
+++ b/R/ICU_settings.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/compare.R b/R/compare.R
index cea4226..6631172 100644
--- a/R/compare.R
+++ b/R/compare.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/draft_encdetect.R b/R/draft_encdetect.R
index 9b4fdf3..2253488 100644
--- a/R/draft_encdetect.R
+++ b/R/draft_encdetect.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
@@ -42,14 +42,14 @@
 #' This is, at best, an imprecise operation using statistics and heuristics.
 #' Because of this, detection works best if you supply at least a few hundred
 #' bytes of character data that's mostly in a single language.
-#' However, Because the detection only looks at a limited amount of the input
-#' byte data, some of the returned charsets may fail to handle the
-#' all of input data. Note that in some cases,
+#' However, because the detection only looks at a limited amount of the input
+#' data, some of the returned charsets may fail to handle all of the
+#' input data. Note that in some cases,
 #' the language can be determined along with the encoding.
 #'
 #' Several different techniques are used for character set detection.
-#' For multi-byte encodings, the sequence of bytes is checked for legal patterns.
-#' The detected characters are also check against a list of frequently
+#' For multi-byte encodings, the sequence of bytes is checked for legible patterns.
+#' The detected characters are also checked against a list of frequently
 #' used characters in that encoding. For single byte encodings, the data
 #' is checked against a list of the most commonly occurring three letter groups
 #' for each language that can be written using that encoding.
@@ -101,7 +101,7 @@
 #' IBM424 \tab Hebrew \cr
 #' }
 #'
-#' If you have some initial guess on language and encoding, try with
+#' If you have some initial guess at language and encoding, try with
 #' \code{\link{stri_enc_detect2}}.
 #'
 #' @param str character vector, a raw vector, or
@@ -121,7 +121,7 @@
 #'    \item \code{Confidence} -- numeric in [0,1]; the higher the value,
 #'    the more confidence there is in the match; \code{NA} on failure.
 #' }
-#' The guesses are ordered w.r.t. nonincreasing confidence.
+#' The guesses are ordered by decreasing confidence.
 #'
 #' @examples
 #' \dontrun{
@@ -164,12 +164,12 @@ stri_enc_detect <- function(str, filter_angle_brackets=FALSE) {
 #' of language-specific code points (data provided by the \pkg{ICU} library)
 #' converted to all possible 8-bit encodings
 #' that fully cover the indicated language.
-#' The encoding is selected basing on the greatest number of total
+#' The encoding is selected based on the greatest number of total
 #' byte hits.
 #'
 #' The guess is of course imprecise
 #' [\bold{This is DRAFT API - still does not work as expected}],
-#' as it is obtained using statistics.
+#' as it is obtained using statistics and heuristics.
 #' Because of this, detection works best if you supply at least a few hundred
 #' bytes of character data that's in a single language.
 #'
@@ -178,7 +178,7 @@ stri_enc_detect <- function(str, filter_angle_brackets=FALSE) {
 #' \code{\link{stri_enc_detect}} (uses \pkg{ICU} facilities).
 #' However, it turns out that (empirically) \code{stri_enc_detect2}
 #' works better than the \pkg{ICU}-based one if UTF-* text
-#' is provided. Test yourself.
+#' is provided. Try it yourself.
 #'
 #' @param str character vector, a raw vector, or
 #' a list of \code{raw} vectors
@@ -198,7 +198,7 @@ stri_enc_detect <- function(str, filter_angle_brackets=FALSE) {
 #'    \item \code{Confidence} -- numeric in [0,1]; the higher the value,
 #'    the more confidence there is in the match; \code{NA} on failure.
 #' }
-#' The guesses are ordered w.r.t. nonincreasing confidence.
+#' The guesses are ordered by decreasing confidence.
 #'
 #' @family locale_sensitive
 #' @family encoding_detection
diff --git a/R/draft_files.R b/R/draft_files.R
index aa5f0fe..c247353 100644
--- a/R/draft_files.R
+++ b/R/draft_files.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
@@ -38,11 +38,11 @@
 #' \bold{[THIS IS AN EXPERIMENTAL FUNCTION]}
 #'
 #' @details
-#' After reading a text file into memory (vast majority of them
-#' will fit into RAM without any problems), you may perform e.g.
+#' After reading a text file into memory (the vast majority of them
+#' will fit into RAM without any problems), you may perform 
 #' encoding detection (cf. \code{\link{stri_enc_detect2}}),
 #' conversion (cf. \code{\link{stri_encode}}),
-#' and e.g. split it into text lines with
+#' and for example split it into text lines with
 #' \code{\link{stri_split_lines1}}.
 #'
 #' @param fname file name
@@ -69,13 +69,13 @@ stri_read_raw <- function(fname) {
 #'
 #' @details
 #' It is a substitute for the system's \code{\link{readLines}} function,
-#' with the ability to auto-detect input encodings (or specify
+#' with the ability to auto-detect input encodings (or to specify
 #' one manually), re-encode input without any strange function calls
 #' or sys options change,
 #' and split the text into lines with \code{\link{stri_split_lines1}}
 #' (which conforms with the Unicode guidelines for newline markers).
 #'
-#' If \code{locale} is \code{NA} and auto-detect of UTF-32/16/8 fails,
+#' If \code{locale} is \code{NA} and auto-detection of UTF-32/16/8 fails,
 #' then \code{fallback_encoding} is used.
 #'
 #' @param fname single string with file name
diff --git a/R/encoding.R b/R/encoding.R
index 99a0eae..d39ef12 100644
--- a/R/encoding.R
+++ b/R/encoding.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/encoding_conversion.R b/R/encoding_conversion.R
index c2eb7ec..a34e91d 100644
--- a/R/encoding_conversion.R
+++ b/R/encoding_conversion.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/encoding_detection.R b/R/encoding_detection.R
index dc3194e..45c5ef3 100644
--- a/R/encoding_detection.R
+++ b/R/encoding_detection.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/encoding_management.R b/R/encoding_management.R
index 65db315..9d1c98f 100644
--- a/R/encoding_management.R
+++ b/R/encoding_management.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
@@ -75,7 +75,7 @@ stri_enc_list <- function(simplify=FALSE) {
 #' Gets basic information on a character encoding.
 #'
 #' @details
-#' An error is raised if the encoding provided is unknown to \pkg{ICU}
+#' An error is raised if the provided encoding is unknown to \pkg{ICU}
 #' (see \code{\link{stri_enc_list}} for more details)
 #'
 #'
@@ -130,12 +130,12 @@ stri_enc_info <- function(enc=NULL) {
 #' Unless you are an expert user and you know what you are doing,
 #' \code{stri_enc_set} should only be used if \pkg{ICU} fails to detect
 #' your system's encoding correctly (while testing \pkg{stringi}
-#' we only encountered such a situation on a very old Solaris machine, though).
+#' we only encountered such a situation on a very old Solaris machine).
 #' Note that \pkg{ICU} tries to match the encoding part of the \code{LC_CTYPE}
 #' category as given by \code{\link{Sys.getlocale}}.
 #'
-#' If you set a default encoding that is not a superset of ASCII
-#' or it is not an 8-bit encoding, a warning will be generated,
+#' If you set a default encoding that is neither a superset of ASCII,
+#' nor an 8-bit encoding, a warning will be generated,
 #' see \link{stringi-encoding} for discussion.
 #'
 #' @param enc single string; character encoding name,
@@ -208,7 +208,7 @@ stri_enc_get <- function() {
 #' \code{ASCII}, \code{latin1}, \code{bytes}, \code{native},
 #' and \code{UTF-8}. Additionally, missing values are handled properly.
 #'
-#' This is exactly the same information which is used by
+#' This is exactly the same information that is used by
 #' all the functions in \pkg{stringi} to re-encode their inputs.
 #'
 #' @family encoding_management
diff --git a/R/escape.R b/R/escape.R
index 90d560d..f2e99f8 100644
--- a/R/escape.R
+++ b/R/escape.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/install.R b/R/install.R
index 18311d1..bcc06c0 100644
--- a/R/install.R
+++ b/R/install.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
@@ -29,62 +29,61 @@
 ## EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-#' @title
-#' Installation-Related Utilities [DEPRECATED]
-#'
-#' @description
-#' These functions are responsible for checking and guaranteeing
-#' that the ICU data library (icudt) is available and that \pkg{stringi}
-#' is ready to use.
-#'
-#' These functions are deprecated and will no longer be available
-#' in future \pkg{stringi} releases.
-#'
-#' @details
-#' ICU makes use of a wide variety of data tables to provide many
-#' of its services. Examples include converter mapping tables,
-#' collation rules, transliteration rules, break iterator rules
-#' and dictionaries, and other locale data.
-#'
-#' Without the ICU data library (icudt) many \pkg{stringi} features
-#' will not be available. icudt size is approx. 10-30 MB.
-#'
-#' \code{stri_install_check()} tests whether some ICU services
-#' are available. If they are not, it is most likely due to
-#' unavailable ICU data library.
-#'
-#' \code{stri_install_icudt()} downloads and installs the ICU data library
-#' specific for your platform (little/big-endian). The downloaded
-#' file will be decompressed into the directory where the package has been
-#' installed, see \code{\link{find.package}}, so make sure
-#' you have sufficient write permissions.
-#'
-#' @param silent suppress diagnostic messages
-#' @param check enable \code{stri_install_check()} tests
-#' @param outpath path to install icudt to. If \code{NULL}, then
-#' \code{file.path(path.package("stringi"), "libs")} will be used.
-#' @param inpath path to search icudt archive in.
-#' If \code{NULL}, then only stringi mirror servers will be used.
-#' Mainly of interest to system admins and software developers.
-#'
-#' @return These functions return a logical value, invisibly.
-#' \code{TRUE} denotes that the requested operation has been completed
-#' successfully.
-#'
-#' @references
-#' \emph{ICU Data} -- ICU User Guide,
-#' \url{http://userguide.icu-project.org/icudata}
-#'
-#' @examples
-#' stri_install_check()
-#'
-#' @rdname stri_install
-#' @export
+# @title
+# Installation-Related Utilities [DEPRECATED]
+#
+# @description
+# These functions are responsible for checking and guaranteeing
+# that the ICU data library (icudt) is available and that \pkg{stringi}
+# is ready to use.
+#
+# These functions are deprecated and will no longer be available
+# in future \pkg{stringi} releases.
+#
+# @details
+# ICU makes use of a wide variety of data tables to provide many
+# of its services. Examples include converter mapping tables,
+# collation rules, transliteration rules, break iterator rules
+# and dictionaries, and other locale data.
+#
+# Without the ICU data library (icudt) many \pkg{stringi} features
+# will not be available. icudt size is approx. 10-30 MB.
+#
+# \code{stri_install_check()} tests whether some ICU services
+# are available. If they are not, it is most likely due to
+# unavailable ICU data library.
+#
+# \code{stri_install_icudt()} downloads and installs the ICU data library
+# specific for your platform (little/big-endian). The downloaded
+# file will be decompressed into the directory where the package has been
+# installed, see \code{\link{find.package}}, so make sure
+# you have sufficient write permissions.
+#
+# @param silent suppress diagnostic messages
+# @param check enable \code{stri_install_check()} tests
+# @param outpath path to install icudt to. If \code{NULL}, then
+# \code{file.path(path.package("stringi"), "libs")} will be used.
+# @param inpath path to search icudt archive in.
+# If \code{NULL}, then only stringi mirror servers will be used.
+# Mainly of interest to system admins and software developers.
+#
+# @return These functions return a logical value, invisibly.
+# \code{TRUE} denotes that the requested operation has been completed
+# successfully.
+#
+# @references
+# \emph{ICU Data} -- ICU User Guide,
+# \url{http://userguide.icu-project.org/icudata}
+#
+# @examples
+# stri_install_check()
+#
+# @rdname stri_install
 stri_install_check <- function(silent=FALSE) {
-   stopifnot(is.logical(silent), length(silent) == 1)
+   # As of v1.1.3, this function is no longer exported.
+   # It was deprecated in 0.5-5.
 
-   warning("THIS FUNCTION IS DEPRECATED")
-   # this function may stay as-is, but should no longer be exported in the future
+   stopifnot(is.logical(silent), length(silent) == 1)
 
    allok <- tryCatch({
       if (!silent) message(stri_info(TRUE)) # this may also throw an error
@@ -107,88 +106,125 @@ stri_install_check <- function(silent=FALSE) {
 }
 
 
-#' @rdname stri_install
-#' @export
-stri_install_icudt <- function(check=TRUE, outpath=NULL, inpath=NULL) {
-   stopifnot(is.logical(check), length(check) == 1, !is.na(check))
-   if (check && stri_install_check(TRUE)) {
-      message("icudt has been already installed.")
-      return(invisible(TRUE))
-   }
 
-   if (check) # install.libs.R calls it with check=FALSE
-      warning("THIS FUNCTION IS DEPRECATED")
-   # this function should be removed
-   # remember about importFrom tools md5sum -> stringi-package.R
-   # use this very code in install.libs.R directly
 
-   if (is.null(outpath))
-      outpath <- file.path(path.package("stringi"), "libs")
-   stopifnot(is.character(outpath), length(outpath) == 1, file.exists(outpath))
+icudt_fname <- c("little"="icudt55l.zip",
+                 "big"   ="icudt55b.zip")
+
+icudt_md5ex <- c("little"="ff345529f230cc39bb8d450af0607708",
+                 "big"   ="1194f0dd879d3c1c1f189cde5fd90efe")
+
+icudt_mirrors <- c("https://raw.githubusercontent.com/gagolews/stringi/master/src/icu55/data/",
+                   "http://www.mini.pw.edu.pl/~gagolews/stringi/",
+                   "http://www.ibspan.waw.pl/~gagolews/stringi/")
+
+
+
+# @rdname stri_install
+stri_download_icudt <- function(inpath) {
 
-   fname <- if (.Platform$endian == 'little') "icudt55l.zip"
-                                         else "icudt55b.zip"
+   fname <- icudt_fname[.Platform$endian]
 
-   md5ex <- if (.Platform$endian == 'little') "ff345529f230cc39bb8d450af0607708"
-                                         else "1194f0dd879d3c1c1f189cde5fd90efe"
+   md5ex <- icudt_md5ex[.Platform$endian]
 
-   mirrors <- c("http://static.rexamine.com/packages/",
-                "http://www.mini.pw.edu.pl/~gagolews/stringi/",
-                "http://www.ibspan.waw.pl/~gagolews/stringi/")
+   mirrors <- icudt_mirrors
 
-   if (!is.null(inpath)) {
-      stopifnot(is.character(inpath), length(inpath) > 0, !is.na(inpath))
-      mirrors <- c(inpath, mirrors)
+   icudtzipfname <- file.path(inpath, fname) #tempfile(fileext=".zip")
+
+   if (file.exists(icudtzipfname)) {
+      md5ob <- tools::md5sum(icudtzipfname)
+      if (is.na(md5ob)) {
+         message("error checking md5sum for icudt")
+         return(invisible(FALSE))
+      }
+      if (md5ob != md5ex) {
+         message("md5sum mismatch for icudt")
+         return(invisible(FALSE))
+      }
+      message("icudt already downloaded")
+      return(icudtzipfname)
    }
 
-   outfname <- tempfile(fileext=".zip")
-   download_from_mirror <- function(href, fname, outfname) {
+   # if (!is.null(inpath)) {
+   #    stopifnot(is.character(inpath), length(inpath) > 0, !is.na(inpath))
+   #    mirrors <- c(inpath, mirrors)
+   # }
+
+   download_from_mirror <- function(href, fname, icudtzipfname) {
       tryCatch({
-         suppressWarnings(file.remove(outfname))
-         if (!grepl("^https?://", href)) {
-            # try to copy icudt from a local repo
-            if (!file.exists(file.path(href, fname))) return("no icudt in a local repo")
-            message("icudt has been found in a local repo")
-            file.copy(file.path(href, fname), outfname)
+         suppressWarnings(file.remove(icudtzipfname))
+         # download icudt
+         if (download.file(paste(href, fname, sep=""), icudtzipfname, mode="wb") != 0) {
+            return("download error")
+         }
+         if (!file.exists(icudtzipfname)) return("download error")
+         md5ob <- tools::md5sum(icudtzipfname)
+         if (is.na(md5ob)) {
+            return("error checking md5sum")
          }
-         else {
-            # download icudt
-            if (download.file(paste(href, fname, sep=""), outfname, mode="wb") != 0)
-               return("download error")
+         if (md5ob != md5ex) {
+            return("md5sum mismatch")
          }
-         if (!file.exists(outfname)) return("download error")
-         md5ob <- tools::md5sum(outfname)
-         if (is.na(md5ob)) return("error checking md5sum")
-         if (md5ob != md5ex) return("md5sum mismatch")
          TRUE
       }, error = function(e) as.character(e))
    }
 
-   message("downloading ICU data library (icudt)")
-   message("the files will be extracted to: ", outpath)
+   message("downloading the ICU data library (icudt)")
+   message("output path: ", icudtzipfname)
+   if (!exists("dir.exists") || !dir.exists(inpath)) # dir.exists is R >= 3.2.0
+      suppressWarnings(dir.create(inpath))
+
    allok <- FALSE
    for (m in mirrors) {
-      if (identical(status <- download_from_mirror(m, fname, outfname), TRUE)) {
+      if (identical(status <- download_from_mirror(m, fname, icudtzipfname), TRUE)) {
          allok <- TRUE
          break
       }
       else message(status)
    }
 
-   if (!allok) {
+   if (!allok || !file.exists(icudtzipfname)) {
+      suppressWarnings(file.remove(icudtzipfname))
       message("icudt download failed")
       return(invisible(FALSE))
    }
-   message("icudt fetch OK")
 
-   message("decompressing downloaded archive")
-   res <- unzip(outfname, exdir=outpath, overwrite=TRUE)
+   message("icudt fetch successful")
+   return(icudtzipfname)
+}
+
+
+# @rdname stri_install
+stri_install_icudt <- function(check=TRUE, outpath=NULL, inpath=NULL) {
+   # As of v1.1.3, this function is no longer exported.
+   # It was deprecated in 0.5-5.
+
+   stopifnot(is.logical(check), length(check) == 1, !is.na(check))
+   if (check && stri_install_check(TRUE)) {
+      message("icudt is already installed.")
+      return(invisible(TRUE))
+   }
+
+   # remember about importFrom tools md5sum -> stringi-package.R
+   # use this very code in install.libs.R directly
+
+   icudtzipfname <- stri_download_icudt(inpath)
+   if (identical(icudtzipfname, FALSE) || !file.exists(icudtzipfname)) {
+      return(invisible(FALSE))
+   }
+
+   if (is.null(outpath))
+      outpath <- file.path(path.package("stringi"), "libs")
+
+   stopifnot(is.character(outpath), length(outpath) == 1, file.exists(outpath))
+
+   message("decompressing icudt archive ", icudtzipfname, " to: ", outpath)
+   res <- unzip(icudtzipfname, exdir=outpath, overwrite=TRUE)
    if (!is.character(res) || length(res) <= 0) {
-      message("error decompressing archive")
+      message("error decompressing icudt archive")
       return(invisible(FALSE))
    }
 
-   suppressWarnings(file.remove(outfname))
    message("icudt has been installed successfully")
    invisible(TRUE)
 }
diff --git a/R/internal_prepare_arg.R b/R/internal_prepare_arg.R
index 933b6c4..d544664 100644
--- a/R/internal_prepare_arg.R
+++ b/R/internal_prepare_arg.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/internal_test.R b/R/internal_test.R
index 1ea550e..526e3b9 100644
--- a/R/internal_test.R
+++ b/R/internal_test.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/join.R b/R/join.R
index a3846db..7298501 100644
--- a/R/join.R
+++ b/R/join.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/length.R b/R/length.R
index 8d0486e..2ebf317 100644
--- a/R/length.R
+++ b/R/length.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/locale.R b/R/locale.R
index 82e6485..ea78fca 100644
--- a/R/locale.R
+++ b/R/locale.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/locale_management.R b/R/locale_management.R
index b3ca762..287fddb 100644
--- a/R/locale_management.R
+++ b/R/locale_management.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/opts.R b/R/opts.R
index ed4f9fe..2fab356 100644
--- a/R/opts.R
+++ b/R/opts.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/pad.R b/R/pad.R
index 37b9495..7aa5b9e 100644
--- a/R/pad.R
+++ b/R/pad.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/random.R b/R/random.R
index f28b08e..7aab2ad 100644
--- a/R/random.R
+++ b/R/random.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/reverse.R b/R/reverse.R
index 47e37fe..8ca85f1 100644
--- a/R/reverse.R
+++ b/R/reverse.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/search.R b/R/search.R
index 1935a77..469da7a 100644
--- a/R/search.R
+++ b/R/search.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/search_count_4.R b/R/search_count_4.R
index 355c8b2..45114ab 100644
--- a/R/search_count_4.R
+++ b/R/search_count_4.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/search_count_bound.R b/R/search_count_bound.R
index b35723e..08f53c0 100644
--- a/R/search_count_bound.R
+++ b/R/search_count_bound.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/search_detect_4.R b/R/search_detect_4.R
index 6d3bf63..cf6c244 100644
--- a/R/search_detect_4.R
+++ b/R/search_detect_4.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/search_extract_4.R b/R/search_extract_4.R
index 5b61f55..502239a 100644
--- a/R/search_extract_4.R
+++ b/R/search_extract_4.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/search_extract_bound.R b/R/search_extract_bound.R
index fb9b1fa..b343d28 100644
--- a/R/search_extract_bound.R
+++ b/R/search_extract_bound.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/search_locate_4.R b/R/search_locate_4.R
index e8f7182..32ef8be 100644
--- a/R/search_locate_4.R
+++ b/R/search_locate_4.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/search_locate_bound.R b/R/search_locate_bound.R
index cd3cb97..df3f6e2 100644
--- a/R/search_locate_bound.R
+++ b/R/search_locate_bound.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/search_match_4.R b/R/search_match_4.R
index e84e3a2..8eb75e3 100644
--- a/R/search_match_4.R
+++ b/R/search_match_4.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/search_replace_4.R b/R/search_replace_4.R
index 5adaa28..3404650 100644
--- a/R/search_replace_4.R
+++ b/R/search_replace_4.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/search_replace_na.R b/R/search_replace_na.R
index 81bc09d..6da35d1 100644
--- a/R/search_replace_na.R
+++ b/R/search_replace_na.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/search_split_4.R b/R/search_split_4.R
index 8801a36..29bcc22 100644
--- a/R/search_split_4.R
+++ b/R/search_split_4.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/search_split_bound.R b/R/search_split_bound.R
index 66e3dec..31ac827 100644
--- a/R/search_split_bound.R
+++ b/R/search_split_bound.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/search_startsendswith_4.R b/R/search_startsendswith_4.R
index 839d923..3a8eeab 100644
--- a/R/search_startsendswith_4.R
+++ b/R/search_startsendswith_4.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/search_subset_4.R b/R/search_subset_4.R
index d5bf2f3..1f98268 100644
--- a/R/search_subset_4.R
+++ b/R/search_subset_4.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/sort.R b/R/sort.R
index bc055ae..3666e92 100644
--- a/R/sort.R
+++ b/R/sort.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/stats.R b/R/stats.R
index 4664077..63d004e 100644
--- a/R/stats.R
+++ b/R/stats.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/stringi-package.R b/R/stringi-package.R
index 87ecfa4..caf5023 100644
--- a/R/stringi-package.R
+++ b/R/stringi-package.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
@@ -143,7 +143,7 @@
 #' @aliases stringi
 #' @docType package
 #' @author Marek Gagolewski,
-#' with contributions from Bartek Tartanus.
+#' with contributions from Bartek Tartanus and others.
 #' ICU4C was developed by IBM and others.
 #' The Unicode Character Database is due to Unicode, Inc.;
 #' see the COPYRIGHTS file for more details.
diff --git a/R/sub.R b/R/sub.R
index 12a7a3a..f35ea25 100644
--- a/R/sub.R
+++ b/R/sub.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
@@ -61,7 +61,7 @@
 #' For negative indices in \code{from} or \code{to},
 #' counting starts at the end of the string.
 #' For instance, index -1 denotes the last code point in the string.
-#' Negative \code{length} means counting backwards.
+#' Non-positive \code{length} gives an empty string.
 #'
 #'
 #' In \code{stri_sub}, out-of-bound indices are silently
diff --git a/R/time_calendar.R b/R/time_calendar.R
index 6d730e9..cadf10a 100644
--- a/R/time_calendar.R
+++ b/R/time_calendar.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/time_format.R b/R/time_format.R
index 411564f..83fe09f 100644
--- a/R/time_format.R
+++ b/R/time_format.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/time_symbols.R b/R/time_symbols.R
index d402925..c4cc2da 100644
--- a/R/time_symbols.R
+++ b/R/time_symbols.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/time_zone.R b/R/time_zone.R
index f46ab26..732933f 100644
--- a/R/time_zone.R
+++ b/R/time_zone.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/todo_charclass.R b/R/todo_charclass.R
index a77e36d..6817260 100644
--- a/R/todo_charclass.R
+++ b/R/todo_charclass.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/todo_justify.R b/R/todo_justify.R
index 63046ae..3e2c01f 100644
--- a/R/todo_justify.R
+++ b/R/todo_justify.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/todo_rbnf.R b/R/todo_rbnf.R
index 0d936fc..67143f1 100644
--- a/R/todo_rbnf.R
+++ b/R/todo_rbnf.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/todo_search_in.R b/R/todo_search_in.R
index ba7c791..312d03c 100644
--- a/R/todo_search_in.R
+++ b/R/todo_search_in.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/todo_split.R b/R/todo_split.R
index 863dbee..df836b9 100644
--- a/R/todo_split.R
+++ b/R/todo_split.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/trans_casemap.R b/R/trans_casemap.R
index 9d7ee5b..a323423 100644
--- a/R/trans_casemap.R
+++ b/R/trans_casemap.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/trans_normalization.R b/R/trans_normalization.R
index 1089e46..285e6b7 100644
--- a/R/trans_normalization.R
+++ b/R/trans_normalization.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/trans_other.R b/R/trans_other.R
index cb372eb..bfd33b3 100644
--- a/R/trans_other.R
+++ b/R/trans_other.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/trans_transliterate.R b/R/trans_transliterate.R
index 0fb25e7..9f925b5 100644
--- a/R/trans_transliterate.R
+++ b/R/trans_transliterate.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/trim.R b/R/trim.R
index 0aab6c0..0e7c85d 100644
--- a/R/trim.R
+++ b/R/trim.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/utils.R b/R/utils.R
index 36e8c14..5d42f1a 100644
--- a/R/utils.R
+++ b/R/utils.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/R/wrap.R b/R/wrap.R
index 05b36cd..e40c990 100644
--- a/R/wrap.R
+++ b/R/wrap.R
@@ -1,5 +1,5 @@
 ## This file is part of the 'stringi' package for R.
-## Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
 ## All rights reserved.
 ##
 ## Redistribution and use in source and binary forms, with or without
diff --git a/configure b/configure
index 5cc9af5..7ab524d 100755
--- a/configure
+++ b/configure
@@ -624,11 +624,6 @@ ac_includes_default="\
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
 ICU_FOUND
-STRINGI_LIBS
-STRINGI_LDFLAGS
-STRINGI_CFLAGS
-STRINGI_CPPFLAGS
-STRINGI_CXXFLAGS
 STRINGI_CXXSTD
 STRINGI_OBJECTS
 STRINGI_ICU_STUBDATA_SOURCES_C
@@ -638,24 +633,32 @@ STRINGI_ICU_I18N_SOURCES_CPP
 STRINGI_ICU_COMMON_SOURCES_C
 STRINGI_ICU_COMMON_SOURCES_CPP
 STRINGI_SOURCES_CPP
-PKG_CONFIG
 ac_ct_CXX
 EGREP
 GREP
-CPP
 OBJEXT
 EXEEXT
 ac_ct_CC
+STRINGI_LIBS
+STRINGI_LDFLAGS
+STRINGI_CXXFLAGS
+STRINGI_CPPFLAGS
+STRINGI_CFLAGS
+STRINGI_DISABLE_PKG_CONFIG
+STRINGI_DISABLE_ICU_BUNDLE
+STRINGI_DISABLE_CXX11
+LDFLAGS
 CXXCPP
 CXXFLAGS
 CXX
 CPPFLAGS
-LDFLAGS
+CPP
 CFLAGS
 CC
-CAT
 PKG_CONFIG_PATH
 ICUDT_DIR
+PKG_CONFIG
+CAT
 R_HOME
 target_alias
 host_alias
@@ -713,18 +716,27 @@ with_extra_libs
 host_alias
 target_alias
 R_HOME
+CAT
+PKG_CONFIG
 ICUDT_DIR
 PKG_CONFIG_PATH
-CAT
 CC
 CFLAGS
-LDFLAGS
-LIBS
+CPP
 CPPFLAGS
 CXX
 CXXFLAGS
 CXXCPP
-CPP
+LDFLAGS
+LIBS
+STRINGI_DISABLE_CXX11
+STRINGI_DISABLE_ICU_BUNDLE
+STRINGI_DISABLE_PKG_CONFIG
+STRINGI_CFLAGS
+STRINGI_CPPFLAGS
+STRINGI_CXXFLAGS
+STRINGI_LDFLAGS
+STRINGI_LIBS
 CCC'
 
 
@@ -1335,7 +1347,7 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --disable-cxx11         Disable use of C++11; if you build ICU4C from
+  --disable-cxx11         Disable the use of C++11; if you build ICU4C from
                           sources, make sure your C++ compiler supports the
                           long long type.
   --disable-icu-bundle    Force the use of the system ICU.
@@ -1350,19 +1362,28 @@ Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --with-extra-cflags=FLAGS
-                          Additional C compiler flags
+                          Additional C compiler flags, see also the
+                          STRINGI_CFLAGS environment variable
   --with-extra-cppflags=FLAGS
-                          Additional C/C++ preprocessor flags
+                          Additional C/C++ preprocessor flags, see also the
+                          STRINGI_CPPFLAGS environment variable
   --with-extra-cxxflags=FLAGS
-                          Additional C++ compiler flags
+                          Additional C++ compiler flags, see also the
+                          STRINGI_CXXFLAGS environment variable
   --with-extra-ldflags=FLAGS
-                          Additional linker flags
-  --with-extra-libs=FLAGS Additional libraries to link against
+                          Additional linker flags, see also the
+                          STRINGI_LDFLAGS environment variable
+  --with-extra-libs=FLAGS Additional libraries to link against, see also the
+                          STRINGI_LIBS environment variable
 
 Some influential environment variables:
   R_HOME      Override the default directory with R installation, e.g.,
               /usr/lib64/R, where /usr/lib64 is in the search path. Note that
               $R_HOME/bin/R should point to the R executable.
+  CAT         The 'cat' command used for generating the list of source files
+              to compile.
+  PKG_CONFIG  The 'pkg-config' command used for getting necessary compiler
+              flags to link to and existing libicu installation.
   ICUDT_DIR   Optional directory from which an already downloaded ICU data
               archive (icudt*.zip) may be copied; either an absolute path or a
               path relative to <package source dir>/src; defaults to
@@ -1370,17 +1391,33 @@ Some influential environment variables:
   PKG_CONFIG_PATH
               An optional list of directories to search for pkg-config's .pc
               files.
-  CAT         The 'cat' command used for generating the list of source files
-              to compile.
   CC          Purposedly ignored.
   CFLAGS      Purposedly ignored.
-  LDFLAGS     Purposedly ignored.
-  LIBS        Purposedly ignored.
+  CPP         Purposedly ignored.
   CPPFLAGS    Purposedly ignored.
   CXX         Purposedly ignored.
   CXXFLAGS    Purposedly ignored.
   CXXCPP      Purposedly ignored.
-  CPP         C preprocessor
+  LDFLAGS     Purposedly ignored.
+  LIBS        Purposedly ignored.
+  STRINGI_DISABLE_CXX11
+              Disable the use of C++11, see also --disable-cxx11.
+  STRINGI_DISABLE_ICU_BUNDLE
+              Force the use of the system ICU, see also --disable-icu-bundle.
+  STRINGI_DISABLE_PKG_CONFIG
+              Force the use of the ICU bundle, see also --disable-pkg-config.
+  STRINGI_CFLAGS
+              Additional C compiler flags, see also --with-extra-cflags.
+  STRINGI_CPPFLAGS
+              Additional C/C++ preprocessor flags, see also
+              --with-extra-cppflags.
+  STRINGI_CXXFLAGS
+              Additional C++ compiler flags, see also --with-extra-cxxflags.
+  STRINGI_LDFLAGS
+              Additional linker flags, see also --with-extra-ldflags.
+  STRINGI_LIBS
+              Additional libraries to link against, see also
+              --with-extra-libs.
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -2137,7 +2174,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-ICU_VERSION_NEEDED="50" # minimal version of ICU4C required to build stringi
+ICU_VERSION_NEEDED="52" # minimal version of ICU4C required to build stringi
 
 ##### OPTIONS #################################################################
 
@@ -2167,34 +2204,57 @@ ICU_VERSION_NEEDED="50" # minimal version of ICU4C required to build stringi
 
 
 
+
+
+
+
+
+
+
 # Check whether --enable-cxx11 was given.
 if test "${enable_cxx11+set}" = set; then :
   enableval=$enable_cxx11;
 fi
 
-if test "x$enable_cxx11" != "xno"; then
+
+
+
+if test "x$enable_cxx11" != "xno" -a -z "${STRINGI_DISABLE_CXX11}"; then
    enable_cxx11="yes"
 else
    enable_cxx11="no"
 fi
 
+
+
 # Check whether --enable-icu_bundle was given.
 if test "${enable_icu_bundle+set}" = set; then :
   enableval=$enable_icu_bundle;
 fi
 
-if test "x$enable_icu_bundle" != "xno"; then
+
+
+
+if test "x$enable_icu_bundle" != "xno" -a -z "${STRINGI_DISABLE_ICU_BUNDLE}"; then
    enable_icu_bundle="yes"
 else
    enable_icu_bundle="no"
 fi
 
+
+
+
+
+
 # Check whether --enable-pkg_config was given.
 if test "${enable_pkg_config+set}" = set; then :
   enableval=$enable_pkg_config;
 fi
 
-if test "x$enable_pkg_config" != "xno"; then
+
+
+
+if test "x$enable_pkg_config" != "xno" -a -z "${STRINGI_DISABLE_PKG_CONFIG}"; then
    enable_pkg_config="yes"
 else
    enable_pkg_config="no"
@@ -2223,6 +2283,7 @@ else
 fi
 
 
+
 # Check whether --with-extra_cflags was given.
 if test "${with_extra_cflags+set}" = set; then :
   withval=$with_extra_cflags;
@@ -2257,6 +2318,23 @@ if test "${with_extra_libs+set}" = set; then :
 fi
 
 
+
+
+
+
+
+
+
+
+
+
+
+with_extra_cflags="${with_extra_cflags} ${STRINGI_CFLAGS}"
+with_extra_cppflags="${with_extra_cppflags} ${STRINGI_CPPFLAGS}"
+with_extra_cxxflags="${with_extra_cxxflags} ${STRINGI_CXXFLAGS}"
+with_extra_ldflags="${with_extra_ldflags} ${STRINGI_LDFLAGS}"
+with_extra_libs="${with_extra_libs} ${STRINGI_LIBS}"
+
 ##### CHECK FOR R #############################################################
 
 # set ICUDT_DIR
@@ -2301,8 +2379,8 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $R_PATH" >&5
 $as_echo "$R_PATH" >&6; }
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for R >= 3.1.0" >&5
-$as_echo_n "checking for R >= 3.1.0... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for R >= 3.1.0 for C++11 use" >&5
+$as_echo_n "checking for R >= 3.1.0 for C++11 use... " >&6; }
 R_GE_31=`"${R_PATH}" --vanilla --slave -e 'cat(if (getRversion() >= numeric_version("3.1.0")) "yes" else "no")'`
 if test "x$R_GE_31" == "xyes"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -2316,6 +2394,19 @@ $as_echo "no" >&6; }
    fi
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for R < 3.4.0 for CXX1X flag use" >&5
+$as_echo_n "checking for R < 3.4.0 for CXX1X flag use... " >&6; }
+R_GE_34=`"${R_PATH}" --vanilla --slave -e 'cat(if (getRversion() >= numeric_version("3.4.0")) "yes" else "no")'`
+if test "x$R_GE_34" == "xyes"; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+   STRINGI_CXX1X="CXX11"
+else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+   STRINGI_CXX1X="CXX1X"
+fi
+
 ##### CHECK FOR CAT ############################################################
 
 # Check for 'cat' and get full path.
@@ -2392,11 +2483,11 @@ LIBS=
 LDFLAGS=
 
 if test "x$enable_cxx11" == "xyes"; then
-   CXX_tmp1=`"${R_PATH}" CMD config CXX1X`
-   CXX_tmp2=`"${R_PATH}" CMD config CXX1XSTD`
+   CXX_tmp1=`"${R_PATH}" CMD config ${STRINGI_CXX1X}`
+   CXX_tmp2=`"${R_PATH}" CMD config ${STRINGI_CXX1X}STD`
    CXX="${CXX_tmp1} ${CXX_tmp2}"
-   CXXFLAGS_base=`"${R_PATH}" CMD config CXX1XFLAGS`
-   CXXFLAGS_pic=`"${R_PATH}" CMD config CXX1XPICFLAGS`
+   CXXFLAGS_base=`"${R_PATH}" CMD config ${STRINGI_CXX1X}FLAGS`
+   CXXFLAGS_pic=`"${R_PATH}" CMD config ${STRINGI_CXX1X}PICFLAGS`
    CXXFLAGS="${CXXFLAGS_base} ${CXXFLAGS_pic}"
    STRINGI_CXXSTD="CXX_STD=CXX11"
 else
@@ -4091,17 +4182,12 @@ fi
 
 
 
-##### 1. Get settings from pkg-config
+##### 1. Get settings from pkg-config or system
 # Note that according to http://userguide.icu-project.org/howtouseicu,
 # icu-config is supported, but no longer recommended for production use.
 
 
 detect_icu_with_pkg_config() {
-   if test $enable_pkg_config = "no"; then
-      # Use of pkg-config disabled, nothing to do
-      return 1
-   fi
-
    # Retrieve pkg-config's path
    # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
@@ -4147,20 +4233,18 @@ fi
  # auto-detect
 
    if test ! -f "${PKG_CONFIG}"; then
-      echo "*** The pkg-config script could not be found"
-      echo "*** Make sure it is installed if you want to use system ICU4C-devel installation"
+      echo "*** pkg-config could not be found"
       return 1 # go back immediately
    fi
 
    # check if pkg-config knows about icu-i18n
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking with pkg-config for ICU4C installed" >&5
-$as_echo_n "checking with pkg-config for ICU4C installed... " >&6; }
-   if ! `"${PKG_CONFIG}" --exists icu-i18n  icu-uc`; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking with pkg-config for the system ICU4C" >&5
+$as_echo_n "checking with pkg-config for the system ICU4C... " >&6; }
+   if ! `"${PKG_CONFIG}" --exists icu-i18n icu-uc`; then
       # pkg config doesn't know about icu-i18n
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-      echo "*** The pkg-config script did not detect ICU4C-devel libraries installed"
-      echo "*** We will build ICU4C from sources"
+      echo "*** pkg-config did not detect ICU4C-devel libraries installed"
       return 1 # nothing more to do
    fi
 
@@ -4174,20 +4258,19 @@ $as_echo "$ICU_VERSION" >&6; }
 $as_echo_n "checking for ICU4C >= $ICU_VERSION_NEEDED... " >&6; }
    #VERSION_CHECK=`expr $ICU_VERSION ">=" $ICU_VERSION_NEEDED`
    #if test "$VERSION_CHECK" != "1" ; then
-   if ! `"${PKG_CONFIG}" --atleast-version=${ICU_VERSION_NEEDED} icu-i18n  icu-uc`; then
+   if ! `"${PKG_CONFIG}" --atleast-version=${ICU_VERSION_NEEDED} icu-i18n icu-uc`; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
       echo "*** ICU4C ${ICU_VERSION} has been detected"
-      echo "*** Minimal requirements, i.e. ICU4C >= ${ICU_VERSION_NEEDED}, are not met"
-      echo "*** We will build ICU4C from sources"
+      echo "*** Minimal requirements, i.e., ICU4C >= ${ICU_VERSION_NEEDED}, are not met"
       return 1 # you may quit querying pkg-config here
    fi
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; } # detected version of ICU4C is sufficient
 
    export PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 # always provide system -L
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for proper CPPFLAGS, LDFLAGS, and LIBS" >&5
-$as_echo_n "checking for proper CPPFLAGS, LDFLAGS, and LIBS... " >&6; }
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for additional required CPPFLAGS, LDFLAGS, and LIBS" >&5
+$as_echo_n "checking for additional required CPPFLAGS, LDFLAGS, and LIBS... " >&6; }
    ICU_CPPFLAGS=`"${PKG_CONFIG}" --cflags icu-uc icu-i18n`
    ICU_LDFLAGS=`"${PKG_CONFIG}" --libs-only-L icu-uc icu-i18n`
    ICU_LIBS=`"${PKG_CONFIG}" --libs-only-l icu-uc icu-i18n`
@@ -4196,7 +4279,12 @@ $as_echo "done" >&6; }
 
    # It has been indicated that icu-config may return 32bit libs
    # when 64bit libs are not available, even if we compile a 64bit version.
-   # Thus, let us check if everything works
+   # Thus, we should then check if the current settings are valid anyway.
+
+   return 0
+}
+
+check_icu_with_pkg_config() {
    CPPFLAGS="${CPPFLAGS} ${ICU_CPPFLAGS}"
    LDFLAGS="${LDFLAGS} ${ICU_LDFLAGS}"
    LIBS="${LIBS} ${ICU_LIBS}"
@@ -4208,8 +4296,8 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we may build an ICU-based project" >&5
-$as_echo_n "checking whether we may build an ICU-based project... " >&6; }
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we may build an ICU4C-based project" >&5
+$as_echo_n "checking whether we may build an ICU4C-based project... " >&6; }
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -4240,7 +4328,38 @@ else
 
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-      echo "*** ICU4C will be built from sources"
+      echo "*** The available ICU4C cannot be used"
+      return 1
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking programmatically for sufficient U_ICU_VERSION_MAJOR_NUM" >&5
+$as_echo_n "checking programmatically for sufficient U_ICU_VERSION_MAJOR_NUM... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+      #include <unicode/uvernum.h>
+      #if U_ICU_VERSION_MAJOR_NUM < ${ICU_VERSION_NEEDED}
+      #error "insufficient U_ICU_VERSION_MAJOR_NUM"
+      #endif
+
+      int main() {
+        return 0;
+      }
+
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+else
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+      echo "*** The available ICU4C cannot be used"
       return 1
 
 fi
@@ -4322,7 +4441,7 @@ else
 
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-      echo "*** ICU4C will be built from sources"
+      echo "*** The available ICU4C cannot be used"
       return 1
 
 fi
@@ -4387,7 +4506,7 @@ else
 
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-      echo "*** ICU4C will be built from sources"
+      echo "*** The available ICU4C cannot be used"
       return 1
 
 fi
@@ -4401,13 +4520,25 @@ rm -f core conftest.err conftest.$ac_objext \
 ICU_FOUND=0
 
 if test $ICU_FOUND = 0; then
-   OLD_CPPFLAGS=$CPPFLAGS
-   OLD_LDFLAGS=$LDFLAGS
-   OLD_LIBS=$LIBS
-   detect_icu_with_pkg_config
-   CPPFLAGS=$OLD_CPPFLAGS
-   LDFLAGS=$OLD_LDFLAGS
-   LIBS=$OLD_LIBS
+   if test $enable_pkg_config = "no"; then
+      # Use of pkg-config disabled, nothing to do
+      echo "*** The (possible) use of system ICU4C has been disabled. Skipping."
+   else
+      OLD_CPPFLAGS=$CPPFLAGS
+      OLD_LDFLAGS=$LDFLAGS
+      OLD_LIBS=$LIBS
+      if ! detect_icu_with_pkg_config; then
+         echo "*** Trying with \"standard\" fallback flags"
+         # (#238, #220) trying "standard" fallback flags
+         ICU_CPPFLAGS=""
+         ICU_LDFLAGS=""
+         ICU_LIBS="-licui18n -licuuc -licudata"
+      fi
+      check_icu_with_pkg_config
+      CPPFLAGS=$OLD_CPPFLAGS
+      LDFLAGS=$OLD_LDFLAGS
+      LIBS=$OLD_LIBS
+   fi
 fi
 
 
@@ -4515,7 +4646,7 @@ else
 
          { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-         echo "*** The ICU bundle cannot be build. Upgrade your compiler flags."
+         echo "*** The ICU4C bundle could not be build. Upgrade your compiler flags."
          exit 1
 
 fi
@@ -4528,6 +4659,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 }
 
 if test $ICU_FOUND = 0; then
+   if test $enable_icu_bundle = "no"; then
+      echo "*** Failed to configure package build with forced system ICU usage"
+      echo "*** Consider installing, e.g., libicu-devel (RHEL, Fedora) or libicu-dev (Debian, Ubuntu)"
+      echo "*** together with pkg-config"
+      exit 1
+   fi
+
    OLD_CFLAGS=$CFLAGS
    OLD_CXXFLAGS=$CXXFLAGS
    OLD_CPPFLAGS=$CPPFLAGS
@@ -4536,6 +4674,17 @@ if test $ICU_FOUND = 0; then
    CFLAGS=$OLD_CFLAGS
    CXXFLAGS=$OLD_CXXFLAGS
    CPPFLAGS=$OLD_CPPFLAGS
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can fetch icudt" >&5
+$as_echo_n "checking whether we can fetch icudt... " >&6; }
+   "${R_PATH}" --vanilla --slave -e "setwd(\"src/\"); \
+                           source(\"../R/install.R\"); \
+                           if (identical(FALSE,stri_download_icudt(\"${ICUDT_DIR}\"))) \
+                               stop(\"Stopping on error\")"
+   if test $? -ne 0; then
+      echo "*** icudt could not be downloaded. stopping."
+      exit 1
+   fi
 fi
 
 ##### PREPARE LIST OF SOURCE FILES #############################################
@@ -4567,7 +4716,8 @@ STRINGI_ICU_STUBDATA_SOURCES_C=`${CAT} src/icu55_stubdata_c.txt`
 if test $ICU_FOUND = 0; then
    if test $enable_icu_bundle = "no"; then
       echo "*** Failed to configure package build with forced system ICU usage"
-      echo "*** Make sure that libicu-dev is properly installed"
+      echo "*** Consider installing, e.g., libicu-devel (RHEL, Fedora) or libicu-dev (Debian, Ubuntu)"
+      echo "*** together with pkg-config"
       exit 1
    fi
 
@@ -5778,7 +5928,9 @@ fi
 echo ""
 echo "*** stringi configure summary:"
 echo "    ICU_FOUND=${ICU_FOUND}"
-echo "    ICUDT_DIR=${ICUDT_DIR}"
+if test $ICU_FOUND = 0; then
+   echo "    ICUDT_DIR=${ICUDT_DIR}"
+fi
 echo "    STRINGI_CXXSTD=${STRINGI_CXXSTD}"
 echo "    STRINGI_CFLAGS=${STRINGI_CFLAGS}"
 echo "    STRINGI_CPPFLAGS=${STRINGI_CPPFLAGS}"
diff --git a/inst/AUTHORS b/inst/AUTHORS
index 5e5acc3..bb18a1e 100644
--- a/inst/AUTHORS
+++ b/inst/AUTHORS
@@ -2,7 +2,7 @@
 
 * Marek Gagolewski (gagolews at rexamine dot com) [aut,cre]
 * Bartek Tartanus [ctb]
-
+and others (see https://github.com/gagolews/stringi/graphs/contributors).
 
 ** ICU source code contributors **
 
diff --git a/inst/CITATION b/inst/CITATION
index d408921..b960229 100644
--- a/inst/CITATION
+++ b/inst/CITATION
@@ -2,11 +2,11 @@ citHeader("To cite package 'stringi' in publications use:")
 
 citEntry(entry = "Manual",
   title = "R package stringi: Character string processing facilities",
-  author = personList(as.person("Marek Gagolewski"), as.person("Bartek Tartanus")),
-  year = "2016",
+  author = personList(as.person("Marek Gagolewski")),
+  year = "2017",
   url = "http://www.gagolewski.com/software/stringi/",
   textVersion =
-  paste("Gagolewski M., Tartanus B. (2016).",
+  paste("Gagolewski M. and others (2017).",
         "R package stringi: Character string processing facilities.",
         "http://www.gagolewski.com/software/stringi/.",
         "DOI:10.5281/zenodo.32557")
diff --git a/man/oper_comparison.Rd b/man/oper_comparison.Rd
index fe4b004..8274e90 100644
--- a/man/oper_comparison.Rd
+++ b/man/oper_comparison.Rd
@@ -1,22 +1,22 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/compare.R
 \name{\%s<\%}
-\alias{\%s!==\%}
-\alias{\%s!=\%}
-\alias{\%s<=\%}
 \alias{\%s<\%}
-\alias{\%s===\%}
-\alias{\%s==\%}
-\alias{\%s>=\%}
+\alias{\%s<=\%}
 \alias{\%s>\%}
-\alias{\%stri!==\%}
-\alias{\%stri!=\%}
-\alias{\%stri<=\%}
+\alias{\%s>=\%}
+\alias{\%s==\%}
+\alias{\%s!=\%}
+\alias{\%s===\%}
+\alias{\%s!==\%}
 \alias{\%stri<\%}
-\alias{\%stri===\%}
-\alias{\%stri==\%}
-\alias{\%stri>=\%}
+\alias{\%stri<=\%}
 \alias{\%stri>\%}
+\alias{\%stri>=\%}
+\alias{\%stri==\%}
+\alias{\%stri!=\%}
+\alias{\%stri===\%}
+\alias{\%stri!==\%}
 \title{Compare Strings with or without Collation}
 \usage{
 e1 \%s<\% e2
@@ -94,4 +94,3 @@ Other locale_sensitive: \code{\link{stri_compare}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search-coll}}
 }
-
diff --git a/man/oper_plus.Rd b/man/oper_plus.Rd
index 3fb8693..12eff9f 100644
--- a/man/oper_plus.Rd
+++ b/man/oper_plus.Rd
@@ -35,4 +35,3 @@ c('abc', '123', '\\u0105\\u0104') \%stri+\% letters[1:6]
 'ID_' \%stri+\% 1:5
 
 }
-
diff --git a/man/stri_compare.Rd b/man/stri_compare.Rd
index 420bb1b..68f26d8 100644
--- a/man/stri_compare.Rd
+++ b/man/stri_compare.Rd
@@ -1,16 +1,16 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/compare.R
 \name{stri_compare}
+\alias{stri_compare}
 \alias{stri_cmp}
 \alias{stri_cmp_eq}
+\alias{stri_cmp_neq}
 \alias{stri_cmp_equiv}
-\alias{stri_cmp_ge}
+\alias{stri_cmp_nequiv}
+\alias{stri_cmp_lt}
 \alias{stri_cmp_gt}
 \alias{stri_cmp_le}
-\alias{stri_cmp_lt}
-\alias{stri_cmp_neq}
-\alias{stri_cmp_nequiv}
-\alias{stri_compare}
+\alias{stri_cmp_ge}
 \title{Compare Strings with or without Collation}
 \usage{
 stri_compare(e1, e2, ..., opts_collator = NULL)
@@ -148,4 +148,3 @@ Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search-coll}}
 }
-
diff --git a/man/stri_count.Rd b/man/stri_count.Rd
index 47f27b3..4a3f6a0 100644
--- a/man/stri_count.Rd
+++ b/man/stri_count.Rd
@@ -81,4 +81,3 @@ stri_count_regex(c("stringi", "123"), "^(s|1)")
 Other search_count: \code{\link{stri_count_boundaries}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_count_boundaries.Rd b/man/stri_count_boundaries.Rd
index b3ad894..0b504e9 100644
--- a/man/stri_count_boundaries.Rd
+++ b/man/stri_count_boundaries.Rd
@@ -68,6 +68,9 @@ stri_numbytes(test2)
 
 }
 \seealso{
+Other search_count: \code{\link{stri_count}},
+  \code{\link{stringi-search}}
+
 Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stri_compare}},
   \code{\link{stri_duplicated}},
@@ -83,9 +86,6 @@ Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search-coll}}
 
-Other search_count: \code{\link{stri_count}},
-  \code{\link{stringi-search}}
-
 Other text_boundaries: \code{\link{stri_extract_all_boundaries}},
   \code{\link{stri_locate_all_boundaries}},
   \code{\link{stri_opts_brkiter}},
@@ -96,4 +96,3 @@ Other text_boundaries: \code{\link{stri_extract_all_boundaries}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_datetime_add.Rd b/man/stri_datetime_add.Rd
index 95b4457..eaea4b5 100644
--- a/man/stri_datetime_add.Rd
+++ b/man/stri_datetime_add.Rd
@@ -8,8 +8,8 @@
 stri_datetime_add(time, value = 1L, units = "seconds", tz = NULL,
   locale = NULL)
 
-stri_datetime_add(time, units = "seconds", tz = NULL, locale = NULL) <-
-  value
+stri_datetime_add(time, units = "seconds", tz = NULL,
+  locale = NULL) <- value
 }
 \arguments{
 \item{time}{an object of class \code{\link{POSIXct}} or an object coercible to}
@@ -68,4 +68,3 @@ Other datetime: \code{\link{stri_datetime_create}},
   \code{\link{stri_timezone_info}},
   \code{\link{stri_timezone_list}}
 }
-
diff --git a/man/stri_datetime_create.Rd b/man/stri_datetime_create.Rd
index 9f038c5..55a2f62 100644
--- a/man/stri_datetime_create.Rd
+++ b/man/stri_datetime_create.Rd
@@ -57,4 +57,3 @@ Other datetime: \code{\link{stri_datetime_add}},
   \code{\link{stri_timezone_info}},
   \code{\link{stri_timezone_list}}
 }
-
diff --git a/man/stri_datetime_fields.Rd b/man/stri_datetime_fields.Rd
index 9ed52d0..4a10af7 100644
--- a/man/stri_datetime_fields.Rd
+++ b/man/stri_datetime_fields.Rd
@@ -62,4 +62,3 @@ Other datetime: \code{\link{stri_datetime_add}},
   \code{\link{stri_timezone_info}},
   \code{\link{stri_timezone_list}}
 }
-
diff --git a/man/stri_datetime_format.Rd b/man/stri_datetime_format.Rd
index 86359f7..7ce434f 100644
--- a/man/stri_datetime_format.Rd
+++ b/man/stri_datetime_format.Rd
@@ -3,6 +3,7 @@
 \name{stri_datetime_format}
 \alias{stri_datetime_format}
 \alias{stri_datetime_parse}
+\alias{stri_datetime_format}
 \title{[DRAFT API] Date and Time Formatting and Parsing}
 \usage{
 stri_datetime_format(time, format = "uuuu-MM-dd HH:mm:ss", tz = NULL,
@@ -212,4 +213,3 @@ Other datetime: \code{\link{stri_datetime_add}},
   \code{\link{stri_timezone_info}},
   \code{\link{stri_timezone_list}}
 }
-
diff --git a/man/stri_datetime_fstr.Rd b/man/stri_datetime_fstr.Rd
index 4a96d70..df27a2e 100644
--- a/man/stri_datetime_fstr.Rd
+++ b/man/stri_datetime_fstr.Rd
@@ -45,4 +45,3 @@ Other datetime: \code{\link{stri_datetime_add}},
   \code{\link{stri_timezone_info}},
   \code{\link{stri_timezone_list}}
 }
-
diff --git a/man/stri_datetime_now.Rd b/man/stri_datetime_now.Rd
index a51ae45..f9566b1 100644
--- a/man/stri_datetime_now.Rd
+++ b/man/stri_datetime_now.Rd
@@ -28,4 +28,3 @@ Other datetime: \code{\link{stri_datetime_add}},
   \code{\link{stri_timezone_info}},
   \code{\link{stri_timezone_list}}
 }
-
diff --git a/man/stri_datetime_symbols.Rd b/man/stri_datetime_symbols.Rd
index cbbf46d..43f0b1d 100644
--- a/man/stri_datetime_symbols.Rd
+++ b/man/stri_datetime_symbols.Rd
@@ -75,4 +75,3 @@ Other datetime: \code{\link{stri_datetime_add}},
   \code{\link{stri_timezone_info}},
   \code{\link{stri_timezone_list}}
 }
-
diff --git a/man/stri_detect.Rd b/man/stri_detect.Rd
index deb21b0..a7e371f 100644
--- a/man/stri_detect.Rd
+++ b/man/stri_detect.Rd
@@ -2,9 +2,9 @@
 % Please edit documentation in R/search_detect_4.R
 \name{stri_detect}
 \alias{stri_detect}
+\alias{stri_detect_fixed}
 \alias{stri_detect_charclass}
 \alias{stri_detect_coll}
-\alias{stri_detect_fixed}
 \alias{stri_detect_regex}
 \title{Detect a Pattern Match}
 \usage{
@@ -79,4 +79,3 @@ stri_detect_regex("stringi", "STRING.", case_insensitive=TRUE)
 Other search_detect: \code{\link{stri_startswith}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_dup.Rd b/man/stri_dup.Rd
index 116bcee..26d6313 100644
--- a/man/stri_dup.Rd
+++ b/man/stri_dup.Rd
@@ -30,4 +30,3 @@ stri_dup(c("abc", "pqrst"), c(4, 2))
 Other join: \code{\link{stri_flatten}},
   \code{\link{stri_join_list}}, \code{\link{stri_join}}
 }
-
diff --git a/man/stri_duplicated.Rd b/man/stri_duplicated.Rd
index b308a5a..17ce150 100644
--- a/man/stri_duplicated.Rd
+++ b/man/stri_duplicated.Rd
@@ -101,4 +101,3 @@ Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search-coll}}
 }
-
diff --git a/man/stri_enc_detect.Rd b/man/stri_enc_detect.Rd
index 09c5085..a3e3536 100644
--- a/man/stri_enc_detect.Rd
+++ b/man/stri_enc_detect.Rd
@@ -25,7 +25,7 @@ representing all guesses:
    \item \code{Confidence} -- numeric in [0,1]; the higher the value,
    the more confidence there is in the match; \code{NA} on failure.
 }
-The guesses are ordered w.r.t. nonincreasing confidence.
+The guesses are ordered by decreasing confidence.
 }
 \description{
 This function uses the \pkg{ICU} engine to determine the character set,
@@ -37,14 +37,14 @@ Vectorized over \code{str} and \code{filter_angle_brackets}.
 This is, at best, an imprecise operation using statistics and heuristics.
 Because of this, detection works best if you supply at least a few hundred
 bytes of character data that's mostly in a single language.
-However, Because the detection only looks at a limited amount of the input
-byte data, some of the returned charsets may fail to handle the
-all of input data. Note that in some cases,
+However, because the detection only looks at a limited amount of the input
+data, some of the returned charsets may fail to handle all of the
+input data. Note that in some cases,
 the language can be determined along with the encoding.
 
 Several different techniques are used for character set detection.
-For multi-byte encodings, the sequence of bytes is checked for legal patterns.
-The detected characters are also check against a list of frequently
+For multi-byte encodings, the sequence of bytes is checked for legible patterns.
+The detected characters are also checked against a list of frequently
 used characters in that encoding. For single byte encodings, the data
 is checked against a list of the most commonly occurring three letter groups
 for each language that can be written using that encoding.
@@ -96,7 +96,7 @@ IBM420 \tab Arabic \cr
 IBM424 \tab Hebrew \cr
 }
 
-If you have some initial guess on language and encoding, try with
+If you have some initial guess at language and encoding, try with
 \code{\link{stri_enc_detect2}}.
 }
 \examples{
@@ -117,4 +117,3 @@ Other encoding_detection: \code{\link{stri_enc_detect2}},
   \code{\link{stri_enc_isutf8}},
   \code{\link{stringi-encoding}}
 }
-
diff --git a/man/stri_enc_detect2.Rd b/man/stri_enc_detect2.Rd
index d7f7a0f..0536f70 100644
--- a/man/stri_enc_detect2.Rd
+++ b/man/stri_enc_detect2.Rd
@@ -26,7 +26,7 @@ Each list element is a list with the following three named components:
    \item \code{Confidence} -- numeric in [0,1]; the higher the value,
    the more confidence there is in the match; \code{NA} on failure.
 }
-The guesses are ordered w.r.t. nonincreasing confidence.
+The guesses are ordered by decreasing confidence.
 }
 \description{
 This function tries to detect character encoding
@@ -49,12 +49,12 @@ the text is checked for the number of occurrences
 of language-specific code points (data provided by the \pkg{ICU} library)
 converted to all possible 8-bit encodings
 that fully cover the indicated language.
-The encoding is selected basing on the greatest number of total
+The encoding is selected based on the greatest number of total
 byte hits.
 
 The guess is of course imprecise
 [\bold{This is DRAFT API - still does not work as expected}],
-as it is obtained using statistics.
+as it is obtained using statistics and heuristics.
 Because of this, detection works best if you supply at least a few hundred
 bytes of character data that's in a single language.
 
@@ -63,15 +63,9 @@ If you have no initial guess on language and encoding, try with
 \code{\link{stri_enc_detect}} (uses \pkg{ICU} facilities).
 However, it turns out that (empirically) \code{stri_enc_detect2}
 works better than the \pkg{ICU}-based one if UTF-* text
-is provided. Test yourself.
+is provided. Try it yourself.
 }
 \seealso{
-Other encoding_detection: \code{\link{stri_enc_detect}},
-  \code{\link{stri_enc_isascii}},
-  \code{\link{stri_enc_isutf16be}},
-  \code{\link{stri_enc_isutf8}},
-  \code{\link{stringi-encoding}}
-
 Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stri_compare}},
   \code{\link{stri_count_boundaries}},
@@ -86,5 +80,10 @@ Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stringi-locale}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search-coll}}
-}
 
+Other encoding_detection: \code{\link{stri_enc_detect}},
+  \code{\link{stri_enc_isascii}},
+  \code{\link{stri_enc_isutf16be}},
+  \code{\link{stri_enc_isutf8}},
+  \code{\link{stringi-encoding}}
+}
diff --git a/man/stri_enc_fromutf32.Rd b/man/stri_enc_fromutf32.Rd
index 450aea6..f334c72 100644
--- a/man/stri_enc_fromutf32.Rd
+++ b/man/stri_enc_fromutf32.Rd
@@ -44,4 +44,3 @@ Other encoding_conversion: \code{\link{stri_enc_toascii}},
   \code{\link{stri_enc_toutf8}}, \code{\link{stri_encode}},
   \code{\link{stringi-encoding}}
 }
-
diff --git a/man/stri_enc_info.Rd b/man/stri_enc_info.Rd
index 0fcba08..3a8eb35 100644
--- a/man/stri_enc_info.Rd
+++ b/man/stri_enc_info.Rd
@@ -38,7 +38,7 @@ scheme reversible?;
 Gets basic information on a character encoding.
 }
 \details{
-An error is raised if the encoding provided is unknown to \pkg{ICU}
+An error is raised if the provided encoding is unknown to \pkg{ICU}
 (see \code{\link{stri_enc_list}} for more details)
 }
 \seealso{
@@ -46,4 +46,3 @@ Other encoding_management: \code{\link{stri_enc_list}},
   \code{\link{stri_enc_mark}}, \code{\link{stri_enc_set}},
   \code{\link{stringi-encoding}}
 }
-
diff --git a/man/stri_enc_isascii.Rd b/man/stri_enc_isascii.Rd
index b9b0047..9fc1d35 100644
--- a/man/stri_enc_isascii.Rd
+++ b/man/stri_enc_isascii.Rd
@@ -34,4 +34,3 @@ Other encoding_detection: \code{\link{stri_enc_detect2}},
   \code{\link{stri_enc_isutf8}},
   \code{\link{stringi-encoding}}
 }
-
diff --git a/man/stri_enc_isutf16.Rd b/man/stri_enc_isutf16.Rd
index 50f7944..06408e2 100644
--- a/man/stri_enc_isutf16.Rd
+++ b/man/stri_enc_isutf16.Rd
@@ -44,4 +44,3 @@ Other encoding_detection: \code{\link{stri_enc_detect2}},
   \code{\link{stri_enc_isutf8}},
   \code{\link{stringi-encoding}}
 }
-
diff --git a/man/stri_enc_isutf8.Rd b/man/stri_enc_isutf8.Rd
index bff4742..49c892d 100644
--- a/man/stri_enc_isutf8.Rd
+++ b/man/stri_enc_isutf8.Rd
@@ -50,4 +50,3 @@ Other encoding_detection: \code{\link{stri_enc_detect2}},
   \code{\link{stri_enc_isutf16be}},
   \code{\link{stringi-encoding}}
 }
-
diff --git a/man/stri_enc_list.Rd b/man/stri_enc_list.Rd
index bdd9a6a..cd5957a 100644
--- a/man/stri_enc_list.Rd
+++ b/man/stri_enc_list.Rd
@@ -36,4 +36,3 @@ Other encoding_management: \code{\link{stri_enc_info}},
   \code{\link{stri_enc_mark}}, \code{\link{stri_enc_set}},
   \code{\link{stringi-encoding}}
 }
-
diff --git a/man/stri_enc_mark.Rd b/man/stri_enc_mark.Rd
index b5e6cc6..1cef697 100644
--- a/man/stri_enc_mark.Rd
+++ b/man/stri_enc_mark.Rd
@@ -16,7 +16,7 @@ Unlike in \code{\link{Encoding}}, possible encodings are:
 \code{ASCII}, \code{latin1}, \code{bytes}, \code{native},
 and \code{UTF-8}. Additionally, missing values are handled properly.
 
-This is exactly the same information which is used by
+This is exactly the same information that is used by
 all the functions in \pkg{stringi} to re-encode their inputs.
 }
 \description{
@@ -50,4 +50,3 @@ Other encoding_management: \code{\link{stri_enc_info}},
   \code{\link{stri_enc_list}}, \code{\link{stri_enc_set}},
   \code{\link{stringi-encoding}}
 }
-
diff --git a/man/stri_enc_set.Rd b/man/stri_enc_set.Rd
index f3f81e4..ef78ddf 100644
--- a/man/stri_enc_set.Rd
+++ b/man/stri_enc_set.Rd
@@ -1,8 +1,8 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/encoding_management.R
 \name{stri_enc_set}
-\alias{stri_enc_get}
 \alias{stri_enc_set}
+\alias{stri_enc_get}
 \title{Set or Get Default Character Encoding in \pkg{stringi}}
 \usage{
 stri_enc_set(enc)
@@ -34,12 +34,12 @@ Note that changing the default encoding may have undesired consequences.
 Unless you are an expert user and you know what you are doing,
 \code{stri_enc_set} should only be used if \pkg{ICU} fails to detect
 your system's encoding correctly (while testing \pkg{stringi}
-we only encountered such a situation on a very old Solaris machine, though).
+we only encountered such a situation on a very old Solaris machine).
 Note that \pkg{ICU} tries to match the encoding part of the \code{LC_CTYPE}
 category as given by \code{\link{Sys.getlocale}}.
 
-If you set a default encoding that is not a superset of ASCII
-or it is not an 8-bit encoding, a warning will be generated,
+If you set a default encoding that is neither a superset of ASCII,
+nor an 8-bit encoding, a warning will be generated,
 see \link{stringi-encoding} for discussion.
 }
 \seealso{
@@ -47,4 +47,3 @@ Other encoding_management: \code{\link{stri_enc_info}},
   \code{\link{stri_enc_list}}, \code{\link{stri_enc_mark}},
   \code{\link{stringi-encoding}}
 }
-
diff --git a/man/stri_enc_toascii.Rd b/man/stri_enc_toascii.Rd
index 894a9d3..8fe60d5 100644
--- a/man/stri_enc_toascii.Rd
+++ b/man/stri_enc_toascii.Rd
@@ -38,4 +38,3 @@ Other encoding_conversion: \code{\link{stri_enc_fromutf32}},
   \code{\link{stri_enc_toutf8}}, \code{\link{stri_encode}},
   \code{\link{stringi-encoding}}
 }
-
diff --git a/man/stri_enc_tonative.Rd b/man/stri_enc_tonative.Rd
index 65d4a63..d145627 100644
--- a/man/stri_enc_tonative.Rd
+++ b/man/stri_enc_tonative.Rd
@@ -32,4 +32,3 @@ Other encoding_conversion: \code{\link{stri_enc_fromutf32}},
   \code{\link{stri_enc_toutf8}}, \code{\link{stri_encode}},
   \code{\link{stringi-encoding}}
 }
-
diff --git a/man/stri_enc_toutf32.Rd b/man/stri_enc_toutf32.Rd
index 0e66107..14db535 100644
--- a/man/stri_enc_toutf32.Rd
+++ b/man/stri_enc_toutf32.Rd
@@ -40,4 +40,3 @@ Other encoding_conversion: \code{\link{stri_enc_fromutf32}},
   \code{\link{stri_enc_toutf8}}, \code{\link{stri_encode}},
   \code{\link{stringi-encoding}}
 }
-
diff --git a/man/stri_enc_toutf8.Rd b/man/stri_enc_toutf8.Rd
index 783334f..2aee51b 100644
--- a/man/stri_enc_toutf8.Rd
+++ b/man/stri_enc_toutf8.Rd
@@ -57,4 +57,3 @@ Other encoding_conversion: \code{\link{stri_enc_fromutf32}},
   \code{\link{stri_enc_toutf32}},
   \code{\link{stri_encode}}, \code{\link{stringi-encoding}}
 }
-
diff --git a/man/stri_encode.Rd b/man/stri_encode.Rd
index c5153c6..9c0b9ea 100644
--- a/man/stri_encode.Rd
+++ b/man/stri_encode.Rd
@@ -1,8 +1,8 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/encoding_conversion.R
 \name{stri_encode}
-\alias{stri_conv}
 \alias{stri_encode}
+\alias{stri_conv}
 \title{Convert Strings Between Given Encodings}
 \usage{
 stri_encode(str, from = NULL, to = NULL, to_raw = FALSE)
@@ -96,4 +96,3 @@ Other encoding_conversion: \code{\link{stri_enc_fromutf32}},
   \code{\link{stri_enc_toutf8}},
   \code{\link{stringi-encoding}}
 }
-
diff --git a/man/stri_escape_unicode.Rd b/man/stri_escape_unicode.Rd
index f8b97c9..0dee159 100644
--- a/man/stri_escape_unicode.Rd
+++ b/man/stri_escape_unicode.Rd
@@ -36,4 +36,3 @@ stri_escape_unicode("a\\u0105!")
 \seealso{
 Other escape: \code{\link{stri_unescape_unicode}}
 }
-
diff --git a/man/stri_extract.Rd b/man/stri_extract.Rd
index 7e6e280..8f14620 100644
--- a/man/stri_extract.Rd
+++ b/man/stri_extract.Rd
@@ -1,22 +1,22 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/search_extract_4.R
 \name{stri_extract_all}
-\alias{stri_extract}
 \alias{stri_extract_all}
-\alias{stri_extract_all_charclass}
-\alias{stri_extract_all_coll}
-\alias{stri_extract_all_fixed}
-\alias{stri_extract_all_regex}
 \alias{stri_extract_first}
-\alias{stri_extract_first_charclass}
-\alias{stri_extract_first_coll}
-\alias{stri_extract_first_fixed}
-\alias{stri_extract_first_regex}
 \alias{stri_extract_last}
+\alias{stri_extract}
+\alias{stri_extract_all_charclass}
+\alias{stri_extract_first_charclass}
 \alias{stri_extract_last_charclass}
+\alias{stri_extract_all_coll}
+\alias{stri_extract_first_coll}
 \alias{stri_extract_last_coll}
-\alias{stri_extract_last_fixed}
+\alias{stri_extract_all_regex}
+\alias{stri_extract_first_regex}
 \alias{stri_extract_last_regex}
+\alias{stri_extract_all_fixed}
+\alias{stri_extract_first_fixed}
+\alias{stri_extract_last_fixed}
 \title{Extract Occurrences of a Pattern}
 \usage{
 stri_extract_all(str, ..., regex, fixed, coll, charclass)
@@ -156,4 +156,3 @@ Other search_extract: \code{\link{stri_extract_all_boundaries}},
   \code{\link{stri_match_all}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_extract_boundaries.Rd b/man/stri_extract_boundaries.Rd
index cfe1ec6..080b1c4 100644
--- a/man/stri_extract_boundaries.Rd
+++ b/man/stri_extract_boundaries.Rd
@@ -2,10 +2,10 @@
 % Please edit documentation in R/search_extract_bound.R
 \name{stri_extract_all_boundaries}
 \alias{stri_extract_all_boundaries}
-\alias{stri_extract_all_words}
+\alias{stri_extract_last_boundaries}
 \alias{stri_extract_first_boundaries}
+\alias{stri_extract_all_words}
 \alias{stri_extract_first_words}
-\alias{stri_extract_last_boundaries}
 \alias{stri_extract_last_words}
 \title{Extract Text Between Text Boundaries}
 \usage{
@@ -82,6 +82,10 @@ stri_extract_all_words("stringi: THE string processing package 123.48...")
 
 }
 \seealso{
+Other search_extract: \code{\link{stri_extract_all}},
+  \code{\link{stri_match_all}},
+  \code{\link{stringi-search}}
+
 Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stri_compare}},
   \code{\link{stri_count_boundaries}},
@@ -97,10 +101,6 @@ Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search-coll}}
 
-Other search_extract: \code{\link{stri_extract_all}},
-  \code{\link{stri_match_all}},
-  \code{\link{stringi-search}}
-
 Other text_boundaries: \code{\link{stri_count_boundaries}},
   \code{\link{stri_locate_all_boundaries}},
   \code{\link{stri_opts_brkiter}},
@@ -111,4 +111,3 @@ Other text_boundaries: \code{\link{stri_count_boundaries}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_flatten.Rd b/man/stri_flatten.Rd
index e990ff8..d235495 100644
--- a/man/stri_flatten.Rd
+++ b/man/stri_flatten.Rd
@@ -41,4 +41,3 @@ stri_flatten(stri_dup(letters[1:6],1:3))
 Other join: \code{\link{stri_dup}},
   \code{\link{stri_join_list}}, \code{\link{stri_join}}
 }
-
diff --git a/man/stri_info.Rd b/man/stri_info.Rd
index 9d6c316..0ccf64f 100644
--- a/man/stri_info.Rd
+++ b/man/stri_info.Rd
@@ -31,4 +31,3 @@ are used (\code{TRUE}) or if \pkg{ICU} was built together with \pkg{stringi}.
 \description{
 Presents current default settings used by the \pkg{ICU} library.
 }
-
diff --git a/man/stri_install.Rd b/man/stri_install.Rd
deleted file mode 100644
index 522ab63..0000000
--- a/man/stri_install.Rd
+++ /dev/null
@@ -1,64 +0,0 @@
-% Generated by roxygen2: do not edit by hand
-% Please edit documentation in R/install.R
-\name{stri_install_check}
-\alias{stri_install_check}
-\alias{stri_install_icudt}
-\title{Installation-Related Utilities [DEPRECATED]}
-\usage{
-stri_install_check(silent = FALSE)
-
-stri_install_icudt(check = TRUE, outpath = NULL, inpath = NULL)
-}
-\arguments{
-\item{silent}{suppress diagnostic messages}
-
-\item{check}{enable \code{stri_install_check()} tests}
-
-\item{outpath}{path to install icudt to. If \code{NULL}, then
-\code{file.path(path.package("stringi"), "libs")} will be used.}
-
-\item{inpath}{path to search icudt archive in.
-If \code{NULL}, then only stringi mirror servers will be used.
-Mainly of interest to system admins and software developers.}
-}
-\value{
-These functions return a logical value, invisibly.
-\code{TRUE} denotes that the requested operation has been completed
-successfully.
-}
-\description{
-These functions are responsible for checking and guaranteeing
-that the ICU data library (icudt) is available and that \pkg{stringi}
-is ready to use.
-
-These functions are deprecated and will no longer be available
-in future \pkg{stringi} releases.
-}
-\details{
-ICU makes use of a wide variety of data tables to provide many
-of its services. Examples include converter mapping tables,
-collation rules, transliteration rules, break iterator rules
-and dictionaries, and other locale data.
-
-Without the ICU data library (icudt) many \pkg{stringi} features
-will not be available. icudt size is approx. 10-30 MB.
-
-\code{stri_install_check()} tests whether some ICU services
-are available. If they are not, it is most likely due to
-unavailable ICU data library.
-
-\code{stri_install_icudt()} downloads and installs the ICU data library
-specific for your platform (little/big-endian). The downloaded
-file will be decompressed into the directory where the package has been
-installed, see \code{\link{find.package}}, so make sure
-you have sufficient write permissions.
-}
-\examples{
-stri_install_check()
-
-}
-\references{
-\emph{ICU Data} -- ICU User Guide,
-\url{http://userguide.icu-project.org/icudata}
-}
-
diff --git a/man/stri_isempty.Rd b/man/stri_isempty.Rd
index de22753..3755ce3 100644
--- a/man/stri_isempty.Rd
+++ b/man/stri_isempty.Rd
@@ -30,4 +30,3 @@ stri_isempty(character(1))
 Other length: \code{\link{stri_length}},
   \code{\link{stri_numbytes}}, \code{\link{stri_width}}
 }
-
diff --git a/man/stri_join.Rd b/man/stri_join.Rd
index 378db33..7e333cd 100644
--- a/man/stri_join.Rd
+++ b/man/stri_join.Rd
@@ -1,8 +1,8 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/join.R
 \name{stri_join}
-\alias{stri_c}
 \alias{stri_join}
+\alias{stri_c}
 \alias{stri_paste}
 \title{Concatenate Character Vectors}
 \usage{
@@ -70,4 +70,3 @@ do.call(stri_c, list(c("a", "b", "c"), c("1", "2"), sep='!', collapse='$'))
 Other join: \code{\link{stri_dup}},
   \code{\link{stri_flatten}}, \code{\link{stri_join_list}}
 }
-
diff --git a/man/stri_join_list.Rd b/man/stri_join_list.Rd
index 359b7da..f9da07f 100644
--- a/man/stri_join_list.Rd
+++ b/man/stri_join_list.Rd
@@ -1,8 +1,8 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/join.R
 \name{stri_join_list}
-\alias{stri_c_list}
 \alias{stri_join_list}
+\alias{stri_c_list}
 \alias{stri_paste_list}
 \title{Concatenate Strings in a List}
 \usage{
@@ -56,4 +56,3 @@ stri_join_list(stri_extract_all_regex(c("R is OK.", "123 456", "Hey!"),
 Other join: \code{\link{stri_dup}},
   \code{\link{stri_flatten}}, \code{\link{stri_join}}
 }
-
diff --git a/man/stri_length.Rd b/man/stri_length.Rd
index add0a98..fea83de 100644
--- a/man/stri_length.Rd
+++ b/man/stri_length.Rd
@@ -47,4 +47,3 @@ stri_count_boundaries(stri_trans_nfkd('\\u0105'), type="character") # ...and one
 Other length: \code{\link{stri_isempty}},
   \code{\link{stri_numbytes}}, \code{\link{stri_width}}
 }
-
diff --git a/man/stri_list2matrix.Rd b/man/stri_list2matrix.Rd
index 8a456a7..6866569 100644
--- a/man/stri_list2matrix.Rd
+++ b/man/stri_list2matrix.Rd
@@ -55,4 +55,3 @@ stri_list2matrix(list("a", c("b", "c")), fill="")
 stri_list2matrix(list("a", c("b", "c")), fill="", n_min=5)
 
 }
-
diff --git a/man/stri_locale_info.Rd b/man/stri_locale_info.Rd
index 1fdc831..03b32ac 100644
--- a/man/stri_locale_info.Rd
+++ b/man/stri_locale_info.Rd
@@ -42,4 +42,3 @@ Other locale_management: \code{\link{stri_locale_list}},
   \code{\link{stri_locale_set}},
   \code{\link{stringi-locale}}
 }
-
diff --git a/man/stri_locale_list.Rd b/man/stri_locale_list.Rd
index 03e9495..6fc77b6 100644
--- a/man/stri_locale_list.Rd
+++ b/man/stri_locale_list.Rd
@@ -25,4 +25,3 @@ Other locale_management: \code{\link{stri_locale_info}},
   \code{\link{stri_locale_set}},
   \code{\link{stringi-locale}}
 }
-
diff --git a/man/stri_locale_set.Rd b/man/stri_locale_set.Rd
index 7c7437c..fc5f6c3 100644
--- a/man/stri_locale_set.Rd
+++ b/man/stri_locale_set.Rd
@@ -1,8 +1,8 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/locale_management.R
 \name{stri_locale_set}
-\alias{stri_locale_get}
 \alias{stri_locale_set}
+\alias{stri_locale_get}
 \title{Set or Get Default Locale in \pkg{stringi}}
 \usage{
 stri_locale_set(locale)
@@ -49,4 +49,3 @@ Other locale_management: \code{\link{stri_locale_info}},
   \code{\link{stri_locale_list}},
   \code{\link{stringi-locale}}
 }
-
diff --git a/man/stri_locate.Rd b/man/stri_locate.Rd
index 06e3773..26a6c59 100644
--- a/man/stri_locate.Rd
+++ b/man/stri_locate.Rd
@@ -1,22 +1,22 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/search_locate_4.R
 \name{stri_locate_all}
-\alias{stri_locate}
 \alias{stri_locate_all}
-\alias{stri_locate_all_charclass}
-\alias{stri_locate_all_coll}
-\alias{stri_locate_all_fixed}
-\alias{stri_locate_all_regex}
 \alias{stri_locate_first}
-\alias{stri_locate_first_charclass}
-\alias{stri_locate_first_coll}
-\alias{stri_locate_first_fixed}
-\alias{stri_locate_first_regex}
 \alias{stri_locate_last}
+\alias{stri_locate}
+\alias{stri_locate_all_charclass}
+\alias{stri_locate_first_charclass}
 \alias{stri_locate_last_charclass}
+\alias{stri_locate_all_coll}
+\alias{stri_locate_first_coll}
 \alias{stri_locate_last_coll}
-\alias{stri_locate_last_fixed}
+\alias{stri_locate_all_regex}
+\alias{stri_locate_first_regex}
 \alias{stri_locate_last_regex}
+\alias{stri_locate_all_fixed}
+\alias{stri_locate_first_fixed}
+\alias{stri_locate_last_fixed}
 \title{Locate Occurrences of a Pattern}
 \usage{
 stri_locate_all(str, ..., regex, fixed, coll, charclass)
@@ -167,10 +167,9 @@ stri_locate_all_regex("ACAGAGACTTTAGATAGAGAAGA", "(?=AGA)")
 
 }
 \seealso{
-Other indexing: \code{\link{stri_locate_all_boundaries}},
-  \code{\link{stri_sub}}
-
 Other search_locate: \code{\link{stri_locate_all_boundaries}},
   \code{\link{stringi-search}}
-}
 
+Other indexing: \code{\link{stri_locate_all_boundaries}},
+  \code{\link{stri_sub}}
+}
diff --git a/man/stri_locate_boundaries.Rd b/man/stri_locate_boundaries.Rd
index 43421f4..ee7178e 100644
--- a/man/stri_locate_boundaries.Rd
+++ b/man/stri_locate_boundaries.Rd
@@ -2,11 +2,11 @@
 % Please edit documentation in R/search_locate_bound.R
 \name{stri_locate_all_boundaries}
 \alias{stri_locate_all_boundaries}
-\alias{stri_locate_all_words}
-\alias{stri_locate_first_boundaries}
-\alias{stri_locate_first_words}
 \alias{stri_locate_last_boundaries}
+\alias{stri_locate_first_boundaries}
+\alias{stri_locate_all_words}
 \alias{stri_locate_last_words}
+\alias{stri_locate_first_words}
 \title{Locate Specific Text Boundaries}
 \usage{
 stri_locate_all_boundaries(str, omit_no_match = FALSE, ...,
@@ -86,6 +86,9 @@ stri_locate_all_words(test)
 
 }
 \seealso{
+Other search_locate: \code{\link{stri_locate_all}},
+  \code{\link{stringi-search}}
+
 Other indexing: \code{\link{stri_locate_all}},
   \code{\link{stri_sub}}
 
@@ -104,9 +107,6 @@ Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search-coll}}
 
-Other search_locate: \code{\link{stri_locate_all}},
-  \code{\link{stringi-search}}
-
 Other text_boundaries: \code{\link{stri_count_boundaries}},
   \code{\link{stri_extract_all_boundaries}},
   \code{\link{stri_opts_brkiter}},
@@ -117,4 +117,3 @@ Other text_boundaries: \code{\link{stri_count_boundaries}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_match.Rd b/man/stri_match.Rd
index 12de362..7567b44 100644
--- a/man/stri_match.Rd
+++ b/man/stri_match.Rd
@@ -1,12 +1,12 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/search_match_4.R
 \name{stri_match_all}
-\alias{stri_match}
 \alias{stri_match_all}
-\alias{stri_match_all_regex}
 \alias{stri_match_first}
-\alias{stri_match_first_regex}
 \alias{stri_match_last}
+\alias{stri_match}
+\alias{stri_match_all_regex}
+\alias{stri_match_first_regex}
 \alias{stri_match_last_regex}
 \title{Extract Regex Pattern Matches, Together with Capture Groups}
 \usage{
@@ -111,4 +111,3 @@ Other search_extract: \code{\link{stri_extract_all_boundaries}},
   \code{\link{stri_extract_all}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_numbytes.Rd b/man/stri_numbytes.Rd
index f507389..2c494ad 100644
--- a/man/stri_numbytes.Rd
+++ b/man/stri_numbytes.Rd
@@ -49,4 +49,3 @@ stri_numbytes('\\U7fffffff') # compare stri_length('\\U7fffffff')
 Other length: \code{\link{stri_isempty}},
   \code{\link{stri_length}}, \code{\link{stri_width}}
 }
-
diff --git a/man/stri_opts_brkiter.Rd b/man/stri_opts_brkiter.Rd
index 1d424a0..d532f9c 100644
--- a/man/stri_opts_brkiter.Rd
+++ b/man/stri_opts_brkiter.Rd
@@ -80,4 +80,3 @@ Other text_boundaries: \code{\link{stri_count_boundaries}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_opts_collator.Rd b/man/stri_opts_collator.Rd
index 1c1230e..8edc6d0 100644
--- a/man/stri_opts_collator.Rd
+++ b/man/stri_opts_collator.Rd
@@ -105,4 +105,3 @@ Other locale_sensitive: \code{\link{\%s<\%}},
 Other search_coll: \code{\link{stringi-search-coll}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_opts_fixed.Rd b/man/stri_opts_fixed.Rd
index a5da6e8..9d7957d 100644
--- a/man/stri_opts_fixed.Rd
+++ b/man/stri_opts_fixed.Rd
@@ -45,4 +45,3 @@ stri_detect_fixed("ala", "ALA", case_insensitive=TRUE) # equivalent
 Other search_fixed: \code{\link{stringi-search-fixed}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_opts_regex.Rd b/man/stri_opts_regex.Rd
index 39609b4..747abc6 100644
--- a/man/stri_opts_regex.Rd
+++ b/man/stri_opts_regex.Rd
@@ -75,4 +75,3 @@ stri_detect_regex("ala", "(?i)ALA") # equivalent
 Other search_regex: \code{\link{stringi-search-regex}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_order.Rd b/man/stri_order.Rd
index 1aa61b8..654bd55 100644
--- a/man/stri_order.Rd
+++ b/man/stri_order.Rd
@@ -77,4 +77,3 @@ Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search-coll}}
 }
-
diff --git a/man/stri_pad.Rd b/man/stri_pad.Rd
index 9d43537..45bcee7 100644
--- a/man/stri_pad.Rd
+++ b/man/stri_pad.Rd
@@ -1,10 +1,10 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/pad.R
 \name{stri_pad_both}
-\alias{stri_pad}
 \alias{stri_pad_both}
 \alias{stri_pad_left}
 \alias{stri_pad_right}
+\alias{stri_pad}
 \title{Pad (Center/Left/Right Align) a String}
 \usage{
 stri_pad_both(str, width = floor(0.9 * getOption("width")), pad = " ",
@@ -70,4 +70,3 @@ cat(stri_pad_both(c("\\ud6c8\\ubbfc\\uc815\\uc74c", # takes width into account
    stri_trans_nfkd("\\ud6c8\\ubbfc\\uc815\\uc74c"), "abcd"),
    width=10), sep="\\n")
 }
-
diff --git a/man/stri_rand_lipsum.Rd b/man/stri_rand_lipsum.Rd
index 649a010..2c8b8c3 100644
--- a/man/stri_rand_lipsum.Rd
+++ b/man/stri_rand_lipsum.Rd
@@ -41,4 +41,3 @@ cat(stri_rand_lipsum(10), sep="\\n\\n")
 Other random: \code{\link{stri_rand_shuffle}},
   \code{\link{stri_rand_strings}}
 }
-
diff --git a/man/stri_rand_shuffle.Rd b/man/stri_rand_shuffle.Rd
index 751ad8a..fa11a8f 100644
--- a/man/stri_rand_shuffle.Rd
+++ b/man/stri_rand_shuffle.Rd
@@ -33,4 +33,3 @@ stri_rand_shuffle(rep(stri_paste(letters, collapse=''), 10))
 Other random: \code{\link{stri_rand_lipsum}},
   \code{\link{stri_rand_strings}}
 }
-
diff --git a/man/stri_rand_strings.Rd b/man/stri_rand_strings.Rd
index e5b6a4a..d6e6e16 100644
--- a/man/stri_rand_strings.Rd
+++ b/man/stri_rand_strings.Rd
@@ -53,4 +53,3 @@ stri_rand_shuffle(stri_paste(
 Other random: \code{\link{stri_rand_lipsum}},
   \code{\link{stri_rand_shuffle}}
 }
-
diff --git a/man/stri_read_lines.Rd b/man/stri_read_lines.Rd
index d8450ec..754b85d 100644
--- a/man/stri_read_lines.Rd
+++ b/man/stri_read_lines.Rd
@@ -32,17 +32,16 @@ Reads a text file, re-encodes it, and splits it into text lines.
 }
 \details{
 It is a substitute for the system's \code{\link{readLines}} function,
-with the ability to auto-detect input encodings (or specify
+with the ability to auto-detect input encodings (or to specify
 one manually), re-encode input without any strange function calls
 or sys options change,
 and split the text into lines with \code{\link{stri_split_lines1}}
 (which conforms with the Unicode guidelines for newline markers).
 
-If \code{locale} is \code{NA} and auto-detect of UTF-32/16/8 fails,
+If \code{locale} is \code{NA} and auto-detection of UTF-32/16/8 fails,
 then \code{fallback_encoding} is used.
 }
 \seealso{
 Other files: \code{\link{stri_read_raw}},
   \code{\link{stri_write_lines}}
 }
-
diff --git a/man/stri_read_raw.Rd b/man/stri_read_raw.Rd
index 25a1a9e..191c19b 100644
--- a/man/stri_read_raw.Rd
+++ b/man/stri_read_raw.Rd
@@ -18,15 +18,14 @@ Reads a text file as-is, with no conversion or text line splitting.
 \bold{[THIS IS AN EXPERIMENTAL FUNCTION]}
 }
 \details{
-After reading a text file into memory (vast majority of them
-will fit into RAM without any problems), you may perform e.g.
+After reading a text file into memory (the vast majority of them
+will fit into RAM without any problems), you may perform 
 encoding detection (cf. \code{\link{stri_enc_detect2}}),
 conversion (cf. \code{\link{stri_encode}}),
-and e.g. split it into text lines with
+and for example split it into text lines with
 \code{\link{stri_split_lines1}}.
 }
 \seealso{
 Other files: \code{\link{stri_read_lines}},
   \code{\link{stri_write_lines}}
 }
-
diff --git a/man/stri_replace.Rd b/man/stri_replace.Rd
index 5050ff5..4a2c4ac 100644
--- a/man/stri_replace.Rd
+++ b/man/stri_replace.Rd
@@ -1,21 +1,21 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/search_replace_4.R
 \name{stri_replace_all}
-\alias{stri_replace}
 \alias{stri_replace_all}
-\alias{stri_replace_all_charclass}
-\alias{stri_replace_all_coll}
-\alias{stri_replace_all_fixed}
-\alias{stri_replace_all_regex}
 \alias{stri_replace_first}
-\alias{stri_replace_first_charclass}
-\alias{stri_replace_first_coll}
-\alias{stri_replace_first_fixed}
-\alias{stri_replace_first_regex}
 \alias{stri_replace_last}
+\alias{stri_replace}
+\alias{stri_replace_all_charclass}
+\alias{stri_replace_first_charclass}
 \alias{stri_replace_last_charclass}
+\alias{stri_replace_all_coll}
+\alias{stri_replace_first_coll}
 \alias{stri_replace_last_coll}
+\alias{stri_replace_all_fixed}
+\alias{stri_replace_first_fixed}
 \alias{stri_replace_last_fixed}
+\alias{stri_replace_all_regex}
+\alias{stri_replace_first_regex}
 \alias{stri_replace_last_regex}
 \title{Replace Occurrences of a Pattern}
 \usage{
@@ -162,4 +162,3 @@ Other search_replace: \code{\link{stri_replace_na}},
   \code{\link{stri_trim_both}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_replace_na.Rd b/man/stri_replace_na.Rd
index 6537230..794426e 100644
--- a/man/stri_replace_na.Rd
+++ b/man/stri_replace_na.Rd
@@ -38,4 +38,3 @@ Other search_replace: \code{\link{stri_replace_all}},
   \code{\link{stri_trim_both}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_reverse.Rd b/man/stri_reverse.Rd
index 575fec5..b5cf20c 100644
--- a/man/stri_reverse.Rd
+++ b/man/stri_reverse.Rd
@@ -28,4 +28,3 @@ stri_reverse("ZXY (\\u0105\\u0104123$^).")
 stri_reverse(stri_trans_nfd('\\u0105')) == stri_trans_nfd('\\u0105') # A, ogonek -> agonek, A
 
 }
-
diff --git a/man/stri_split.Rd b/man/stri_split.Rd
index 157bcdf..3a78138 100644
--- a/man/stri_split.Rd
+++ b/man/stri_split.Rd
@@ -2,10 +2,10 @@
 % Please edit documentation in R/search_split_4.R
 \name{stri_split}
 \alias{stri_split}
-\alias{stri_split_charclass}
-\alias{stri_split_coll}
 \alias{stri_split_fixed}
 \alias{stri_split_regex}
+\alias{stri_split_coll}
+\alias{stri_split_charclass}
 \title{Split a String By Pattern Matches}
 \usage{
 stri_split(str, ..., regex, fixed, coll, charclass)
@@ -130,4 +130,3 @@ Other search_split: \code{\link{stri_split_boundaries}},
   \code{\link{stri_split_lines}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_split_boundaries.Rd b/man/stri_split_boundaries.Rd
index 3d8852c..f046641 100644
--- a/man/stri_split_boundaries.Rd
+++ b/man/stri_split_boundaries.Rd
@@ -74,6 +74,9 @@ So am I, Prof. Smith.", type="sentence", locale="@ss=standard") # ICU >= 56 only
 
 }
 \seealso{
+Other search_split: \code{\link{stri_split_lines}},
+  \code{\link{stri_split}}, \code{\link{stringi-search}}
+
 Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stri_compare}},
   \code{\link{stri_count_boundaries}},
@@ -89,9 +92,6 @@ Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search-coll}}
 
-Other search_split: \code{\link{stri_split_lines}},
-  \code{\link{stri_split}}, \code{\link{stringi-search}}
-
 Other text_boundaries: \code{\link{stri_count_boundaries}},
   \code{\link{stri_extract_all_boundaries}},
   \code{\link{stri_locate_all_boundaries}},
@@ -102,4 +102,3 @@ Other text_boundaries: \code{\link{stri_count_boundaries}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_split_lines.Rd b/man/stri_split_lines.Rd
index 010ae28..a98724a 100644
--- a/man/stri_split_lines.Rd
+++ b/man/stri_split_lines.Rd
@@ -3,6 +3,7 @@
 \name{stri_split_lines}
 \alias{stri_split_lines}
 \alias{stri_split_lines1}
+\alias{stri_split_lines1}
 \title{Split a String Into Text Lines}
 \usage{
 stri_split_lines(str, omit_empty = FALSE)
@@ -70,4 +71,3 @@ Other text_boundaries: \code{\link{stri_count_boundaries}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_startsendswith.Rd b/man/stri_startsendswith.Rd
index a6fa45d..2a4462e 100644
--- a/man/stri_startsendswith.Rd
+++ b/man/stri_startsendswith.Rd
@@ -1,14 +1,14 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/search_startsendswith_4.R
 \name{stri_startswith}
+\alias{stri_startswith}
 \alias{stri_endswith}
-\alias{stri_endswith_charclass}
-\alias{stri_endswith_coll}
+\alias{stri_startswith_fixed}
 \alias{stri_endswith_fixed}
-\alias{stri_startswith}
 \alias{stri_startswith_charclass}
+\alias{stri_endswith_charclass}
 \alias{stri_startswith_coll}
-\alias{stri_startswith_fixed}
+\alias{stri_endswith_coll}
 \title{Determine if the Start or End of a String Matches a Pattern}
 \usage{
 stri_startswith(str, ..., fixed, coll, charclass)
@@ -102,4 +102,3 @@ stri_endswith_coll("\\ufdfa\\ufdfa\\ufdfaXYZ", pat, strength=1)
 Other search_detect: \code{\link{stri_detect}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_stats_general.Rd b/man/stri_stats_general.Rd
index 55841db..fa2c2c8 100644
--- a/man/stri_stats_general.Rd
+++ b/man/stri_stats_general.Rd
@@ -46,4 +46,3 @@ stri_stats_general(s)
 \seealso{
 Other stats: \code{\link{stri_stats_latex}}
 }
-
diff --git a/man/stri_stats_latex.Rd b/man/stri_stats_latex.Rd
index fe0d4e9..761c8a2 100644
--- a/man/stri_stats_latex.Rd
+++ b/man/stri_stats_latex.Rd
@@ -57,4 +57,3 @@ CharsWord CharsCmdEnvir    CharsWhite         Words          Cmds        Envirs
 \seealso{
 Other stats: \code{\link{stri_stats_general}}
 }
-
diff --git a/man/stri_sub.Rd b/man/stri_sub.Rd
index 4a3e6b4..61b394f 100644
--- a/man/stri_sub.Rd
+++ b/man/stri_sub.Rd
@@ -60,7 +60,7 @@ Argument \code{to} defines the last index of the substring, inclusive.
 For negative indices in \code{from} or \code{to},
 counting starts at the end of the string.
 For instance, index -1 denotes the last code point in the string.
-Negative \code{length} means counting backwards.
+Non-positive \code{length} gives an empty string.
 
 
 In \code{stri_sub}, out-of-bound indices are silently
@@ -87,4 +87,3 @@ x <- c("a;b", "c:d")
 Other indexing: \code{\link{stri_locate_all_boundaries}},
   \code{\link{stri_locate_all}}
 }
-
diff --git a/man/stri_subset.Rd b/man/stri_subset.Rd
index 628340f..48a9072 100644
--- a/man/stri_subset.Rd
+++ b/man/stri_subset.Rd
@@ -3,12 +3,12 @@
 \name{stri_subset}
 \alias{stri_subset}
 \alias{stri_subset<-}
+\alias{stri_subset_fixed}
+\alias{stri_subset_fixed<-}
 \alias{stri_subset_charclass}
 \alias{stri_subset_charclass<-}
 \alias{stri_subset_coll}
 \alias{stri_subset_coll<-}
-\alias{stri_subset_fixed}
-\alias{stri_subset_fixed<-}
 \alias{stri_subset_regex}
 \alias{stri_subset_regex<-}
 \title{Select Elements that Match a Given Pattern}
@@ -98,4 +98,3 @@ print(x)
 \seealso{
 Other search_subset: \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_timezone_info.Rd b/man/stri_timezone_info.Rd
index bc10752..56b4f2b 100644
--- a/man/stri_timezone_info.Rd
+++ b/man/stri_timezone_info.Rd
@@ -63,4 +63,3 @@ Other datetime: \code{\link{stri_datetime_add}},
 Other timezone: \code{\link{stri_timezone_get}},
   \code{\link{stri_timezone_list}}
 }
-
diff --git a/man/stri_timezone_list.Rd b/man/stri_timezone_list.Rd
index ce1eeca..5b7cd6c 100644
--- a/man/stri_timezone_list.Rd
+++ b/man/stri_timezone_list.Rd
@@ -91,4 +91,3 @@ Other datetime: \code{\link{stri_datetime_add}},
 Other timezone: \code{\link{stri_timezone_get}},
   \code{\link{stri_timezone_info}}
 }
-
diff --git a/man/stri_timezone_set.Rd b/man/stri_timezone_set.Rd
index f97d64a..76f3c41 100644
--- a/man/stri_timezone_set.Rd
+++ b/man/stri_timezone_set.Rd
@@ -59,4 +59,3 @@ Other datetime: \code{\link{stri_datetime_add}},
 Other timezone: \code{\link{stri_timezone_info}},
   \code{\link{stri_timezone_list}}
 }
-
diff --git a/man/stri_trans_casemap.Rd b/man/stri_trans_casemap.Rd
index 31bb6e1..3d817e6 100644
--- a/man/stri_trans_casemap.Rd
+++ b/man/stri_trans_casemap.Rd
@@ -2,8 +2,8 @@
 % Please edit documentation in R/trans_casemap.R
 \name{stri_trans_tolower}
 \alias{stri_trans_tolower}
-\alias{stri_trans_totitle}
 \alias{stri_trans_toupper}
+\alias{stri_trans_totitle}
 \title{Transform String with Case Mapping}
 \usage{
 stri_trans_tolower(str, locale = NULL)
@@ -85,6 +85,11 @@ Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search-coll}}
 
+Other transform: \code{\link{stri_trans_char}},
+  \code{\link{stri_trans_general}},
+  \code{\link{stri_trans_list}},
+  \code{\link{stri_trans_nfc}}
+
 Other text_boundaries: \code{\link{stri_count_boundaries}},
   \code{\link{stri_extract_all_boundaries}},
   \code{\link{stri_locate_all_boundaries}},
@@ -93,10 +98,4 @@ Other text_boundaries: \code{\link{stri_count_boundaries}},
   \code{\link{stri_split_lines}}, \code{\link{stri_wrap}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search}}
-
-Other transform: \code{\link{stri_trans_char}},
-  \code{\link{stri_trans_general}},
-  \code{\link{stri_trans_list}},
-  \code{\link{stri_trans_nfc}}
 }
-
diff --git a/man/stri_trans_char.Rd b/man/stri_trans_char.Rd
index 8fa472e..99f39d2 100644
--- a/man/stri_trans_char.Rd
+++ b/man/stri_trans_char.Rd
@@ -40,4 +40,3 @@ Other transform: \code{\link{stri_trans_general}},
   \code{\link{stri_trans_nfc}},
   \code{\link{stri_trans_tolower}}
 }
-
diff --git a/man/stri_trans_general.Rd b/man/stri_trans_general.Rd
index fa99d71..8d54f36 100644
--- a/man/stri_trans_general.Rd
+++ b/man/stri_trans_general.Rd
@@ -70,4 +70,3 @@ Other transform: \code{\link{stri_trans_char}},
   \code{\link{stri_trans_nfc}},
   \code{\link{stri_trans_tolower}}
 }
-
diff --git a/man/stri_trans_list.Rd b/man/stri_trans_list.Rd
index ac4abd2..75431c6 100644
--- a/man/stri_trans_list.Rd
+++ b/man/stri_trans_list.Rd
@@ -24,4 +24,3 @@ Other transform: \code{\link{stri_trans_char}},
   \code{\link{stri_trans_nfc}},
   \code{\link{stri_trans_tolower}}
 }
-
diff --git a/man/stri_trans_nf.Rd b/man/stri_trans_nf.Rd
index 9260cc5..13b9c72 100644
--- a/man/stri_trans_nf.Rd
+++ b/man/stri_trans_nf.Rd
@@ -1,16 +1,16 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/trans_normalization.R
 \name{stri_trans_nfc}
-\alias{stri_trans_isnfc}
-\alias{stri_trans_isnfd}
-\alias{stri_trans_isnfkc}
-\alias{stri_trans_isnfkc_casefold}
-\alias{stri_trans_isnfkd}
 \alias{stri_trans_nfc}
 \alias{stri_trans_nfd}
+\alias{stri_trans_nfkd}
 \alias{stri_trans_nfkc}
 \alias{stri_trans_nfkc_casefold}
-\alias{stri_trans_nfkd}
+\alias{stri_trans_isnfc}
+\alias{stri_trans_isnfd}
+\alias{stri_trans_isnfkd}
+\alias{stri_trans_isnfkc}
+\alias{stri_trans_isnfkc_casefold}
 \title{Perform or Check For Unicode Normalization}
 \usage{
 stri_trans_nfc(str)
@@ -107,4 +107,3 @@ Other transform: \code{\link{stri_trans_char}},
   \code{\link{stri_trans_list}},
   \code{\link{stri_trans_tolower}}
 }
-
diff --git a/man/stri_trim.Rd b/man/stri_trim.Rd
index 54817a1..0b53942 100644
--- a/man/stri_trim.Rd
+++ b/man/stri_trim.Rd
@@ -1,10 +1,11 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/trim.R
 \name{stri_trim_both}
-\alias{stri_trim}
 \alias{stri_trim_both}
+\alias{stri_trim}
 \alias{stri_trim_left}
 \alias{stri_trim_right}
+\alias{stri_trim}
 \title{Trim Characters from the Left and/or Right Side of a String}
 \usage{
 stri_trim_both(str, pattern = "\\\\P{Wspace}")
@@ -63,11 +64,10 @@ stri_trim_both(" Total of 23.5 bitcoins. ", "\\\\p{L}")
 
 }
 \seealso{
-Other search_charclass: \code{\link{stringi-search-charclass}},
-  \code{\link{stringi-search}}
-
 Other search_replace: \code{\link{stri_replace_all}},
   \code{\link{stri_replace_na}},
   \code{\link{stringi-search}}
-}
 
+Other search_charclass: \code{\link{stringi-search-charclass}},
+  \code{\link{stringi-search}}
+}
diff --git a/man/stri_unescape_unicode.Rd b/man/stri_unescape_unicode.Rd
index 2f450b4..02dabd0 100644
--- a/man/stri_unescape_unicode.Rd
+++ b/man/stri_unescape_unicode.Rd
@@ -44,4 +44,3 @@ stri_unescape_unicode("a\\\\u0105!\\\\u0032\\\\n")
 \seealso{
 Other escape: \code{\link{stri_escape_unicode}}
 }
-
diff --git a/man/stri_unique.Rd b/man/stri_unique.Rd
index e40b5a3..a5e70df 100644
--- a/man/stri_unique.Rd
+++ b/man/stri_unique.Rd
@@ -61,4 +61,3 @@ Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search-coll}}
 }
-
diff --git a/man/stri_width.Rd b/man/stri_width.Rd
index a60e036..33ecac9 100644
--- a/man/stri_width.Rd
+++ b/man/stri_width.Rd
@@ -56,4 +56,3 @@ stri_width(stri_trans_nfkd("\\ubc1f")) # includes Hangul Jamo medial vowels and
 Other length: \code{\link{stri_isempty}},
   \code{\link{stri_length}}, \code{\link{stri_numbytes}}
 }
-
diff --git a/man/stri_wrap.Rd b/man/stri_wrap.Rd
index 9fcacb3..fc32c03 100644
--- a/man/stri_wrap.Rd
+++ b/man/stri_wrap.Rd
@@ -138,4 +138,3 @@ Other text_boundaries: \code{\link{stri_count_boundaries}},
   \code{\link{stringi-search-boundaries}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stri_write_lines.Rd b/man/stri_write_lines.Rd
index 4308731..4af2e3c 100644
--- a/man/stri_write_lines.Rd
+++ b/man/stri_write_lines.Rd
@@ -37,4 +37,3 @@ thus, it is the default one for the output.
 Other files: \code{\link{stri_read_lines}},
   \code{\link{stri_read_raw}}
 }
-
diff --git a/man/stringi-arguments.Rd b/man/stringi-arguments.Rd
index 7601d81..eeb7068 100644
--- a/man/stringi-arguments.Rd
+++ b/man/stringi-arguments.Rd
@@ -67,6 +67,7 @@ Thus, if arguments' preserving is needed,
 please remember to copy important attributes manually
 or use, e.g., the subsetting operation like \code{x[] <- stri_...(x, ...)}.
 }
+
 \seealso{
 Other stringi_general_topics: \code{\link{stringi-encoding}},
   \code{\link{stringi-locale}},
@@ -78,4 +79,3 @@ Other stringi_general_topics: \code{\link{stringi-encoding}},
   \code{\link{stringi-search-regex}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stringi-encoding.Rd b/man/stringi-encoding.Rd
index 17511da..7433b1a 100644
--- a/man/stringi-encoding.Rd
+++ b/man/stringi-encoding.Rd
@@ -197,6 +197,7 @@ sequence is quite rare (statistically speaking).
 Check out \code{\link{stri_enc_detect}} (among others) for a useful
 function in this category.
 }
+
 \references{
 \emph{Unicode Basics} -- ICU User Guide,
 \url{http://userguide.icu-project.org/unicode}
@@ -210,22 +211,6 @@ function in this category.
 \emph{UTF-8, UTF-16, UTF-32 & BOM} -- ICU FAQ, \url{http://www.unicode.org/faq/utf_bom.html}
 }
 \seealso{
-Other encoding_conversion: \code{\link{stri_enc_fromutf32}},
-  \code{\link{stri_enc_toascii}},
-  \code{\link{stri_enc_tonative}},
-  \code{\link{stri_enc_toutf32}},
-  \code{\link{stri_enc_toutf8}}, \code{\link{stri_encode}}
-
-Other encoding_detection: \code{\link{stri_enc_detect2}},
-  \code{\link{stri_enc_detect}},
-  \code{\link{stri_enc_isascii}},
-  \code{\link{stri_enc_isutf16be}},
-  \code{\link{stri_enc_isutf8}}
-
-Other encoding_management: \code{\link{stri_enc_info}},
-  \code{\link{stri_enc_list}}, \code{\link{stri_enc_mark}},
-  \code{\link{stri_enc_set}}
-
 Other stringi_general_topics: \code{\link{stringi-arguments}},
   \code{\link{stringi-locale}},
   \code{\link{stringi-package}},
@@ -235,5 +220,20 @@ Other stringi_general_topics: \code{\link{stringi-arguments}},
   \code{\link{stringi-search-fixed}},
   \code{\link{stringi-search-regex}},
   \code{\link{stringi-search}}
-}
 
+Other encoding_management: \code{\link{stri_enc_info}},
+  \code{\link{stri_enc_list}}, \code{\link{stri_enc_mark}},
+  \code{\link{stri_enc_set}}
+
+Other encoding_detection: \code{\link{stri_enc_detect2}},
+  \code{\link{stri_enc_detect}},
+  \code{\link{stri_enc_isascii}},
+  \code{\link{stri_enc_isutf16be}},
+  \code{\link{stri_enc_isutf8}}
+
+Other encoding_conversion: \code{\link{stri_enc_fromutf32}},
+  \code{\link{stri_enc_toascii}},
+  \code{\link{stri_enc_tonative}},
+  \code{\link{stri_enc_toutf32}},
+  \code{\link{stri_enc_toutf8}}, \code{\link{stri_encode}}
+}
diff --git a/man/stringi-locale.Rd b/man/stringi-locale.Rd
index 19c0b55..f864262 100644
--- a/man/stringi-locale.Rd
+++ b/man/stringi-locale.Rd
@@ -90,6 +90,7 @@ argument in particular.
 Other locale-sensitive functions include, e.g.,
  \code{\link{stri_trans_tolower}} (that does character case mapping).
 }
+
 \references{
 \emph{Locale} -- ICU User Guide, \url{http://userguide.icu-project.org/locale}
 
@@ -128,4 +129,3 @@ Other stringi_general_topics: \code{\link{stringi-arguments}},
   \code{\link{stringi-search-regex}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stringi-package.Rd b/man/stringi-package.Rd
index 0609bb4..eea536b 100644
--- a/man/stringi-package.Rd
+++ b/man/stringi-package.Rd
@@ -2,8 +2,8 @@
 % Please edit documentation in R/stringi-package.R
 \docType{package}
 \name{stringi-package}
-\alias{stringi}
 \alias{stringi-package}
+\alias{stringi}
 \title{THE String Processing Package}
 \description{
 \pkg{stringi} is THE \R package for fast, correct, consistent,
@@ -112,13 +112,7 @@ for reading and writing text files.
 Note that each man page provides many further links to other
 interesting facilities and topics.
 }
-\author{
-Marek Gagolewski,
-with contributions from Bartek Tartanus.
-ICU4C was developed by IBM and others.
-The Unicode Character Database is due to Unicode, Inc.;
-see the COPYRIGHTS file for more details.
-}
+
 \references{
 \emph{\pkg{stringi} Package homepage}, \url{http://www.gagolewski.com/software/stringi/}
 
@@ -142,4 +136,10 @@ Other stringi_general_topics: \code{\link{stringi-arguments}},
   \code{\link{stringi-search-regex}},
   \code{\link{stringi-search}}
 }
-
+\author{
+Marek Gagolewski,
+with contributions from Bartek Tartanus and others.
+ICU4C was developed by IBM and others.
+The Unicode Character Database is due to Unicode, Inc.;
+see the COPYRIGHTS file for more details.
+}
diff --git a/man/stringi-search-boundaries.Rd b/man/stringi-search-boundaries.Rd
index 472f31e..f56e5de 100644
--- a/man/stringi-search-boundaries.Rd
+++ b/man/stringi-search-boundaries.Rd
@@ -69,6 +69,15 @@ Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stringi-locale}},
   \code{\link{stringi-search-coll}}
 
+Other text_boundaries: \code{\link{stri_count_boundaries}},
+  \code{\link{stri_extract_all_boundaries}},
+  \code{\link{stri_locate_all_boundaries}},
+  \code{\link{stri_opts_brkiter}},
+  \code{\link{stri_split_boundaries}},
+  \code{\link{stri_split_lines}},
+  \code{\link{stri_trans_tolower}},
+  \code{\link{stri_wrap}}, \code{\link{stringi-search}}
+
 Other stringi_general_topics: \code{\link{stringi-arguments}},
   \code{\link{stringi-encoding}},
   \code{\link{stringi-locale}},
@@ -78,14 +87,4 @@ Other stringi_general_topics: \code{\link{stringi-arguments}},
   \code{\link{stringi-search-fixed}},
   \code{\link{stringi-search-regex}},
   \code{\link{stringi-search}}
-
-Other text_boundaries: \code{\link{stri_count_boundaries}},
-  \code{\link{stri_extract_all_boundaries}},
-  \code{\link{stri_locate_all_boundaries}},
-  \code{\link{stri_opts_brkiter}},
-  \code{\link{stri_split_boundaries}},
-  \code{\link{stri_split_lines}},
-  \code{\link{stri_trans_tolower}},
-  \code{\link{stri_wrap}}, \code{\link{stringi-search}}
 }
-
diff --git a/man/stringi-search-charclass.Rd b/man/stringi-search-charclass.Rd
index 961ee16..2005417 100644
--- a/man/stringi-search-charclass.Rd
+++ b/man/stringi-search-charclass.Rd
@@ -257,6 +257,7 @@ to portable code (again, in POSIX-like regex engines).
 So a POSIX flavor of \code{[:punct:]} is more like
 \code{[\\p{P}\\p{S}]} in \pkg{ICU}. You have been warned.
 }
+
 \references{
 \emph{The Unicode Character Database} -- Unicode Standard Annex #44,
 \url{http://www.unicode.org/reports/tr44/}
@@ -289,4 +290,3 @@ Other stringi_general_topics: \code{\link{stringi-arguments}},
   \code{\link{stringi-search-regex}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stringi-search-coll.Rd b/man/stringi-search-coll.Rd
index 4df7d28..6a9c4bf 100644
--- a/man/stringi-search-coll.Rd
+++ b/man/stringi-search-coll.Rd
@@ -32,6 +32,7 @@ often exhibit poor performance. These functions are not intended to
 be fast; they are made to give \emph{correct} in natural
 language processing tasks.
 }
+
 \references{
 \emph{ICU String Search Service} -- ICU User Guide,
  \url{http://userguide.icu-project.org/collation/icu-string-search-service}
@@ -40,6 +41,9 @@ L. Werner, \emph{Efficient Text Searching in Java}, 1999,
 \url{http://icu-project.org/docs/papers/efficient_text_searching_in_java.html}
 }
 \seealso{
+Other search_coll: \code{\link{stri_opts_collator}},
+  \code{\link{stringi-search}}
+
 Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stri_compare}},
   \code{\link{stri_count_boundaries}},
@@ -55,9 +59,6 @@ Other locale_sensitive: \code{\link{\%s<\%}},
   \code{\link{stringi-locale}},
   \code{\link{stringi-search-boundaries}}
 
-Other search_coll: \code{\link{stri_opts_collator}},
-  \code{\link{stringi-search}}
-
 Other stringi_general_topics: \code{\link{stringi-arguments}},
   \code{\link{stringi-encoding}},
   \code{\link{stringi-locale}},
@@ -68,4 +69,3 @@ Other stringi_general_topics: \code{\link{stringi-arguments}},
   \code{\link{stringi-search-regex}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stringi-search-fixed.Rd b/man/stringi-search-fixed.Rd
index 81bc65e..7694788 100644
--- a/man/stringi-search-fixed.Rd
+++ b/man/stringi-search-fixed.Rd
@@ -30,6 +30,7 @@ see also \link{stringi-search-coll}.
 Note that the conversion of input data
 to Unicode is done as usual.
 }
+
 \seealso{
 Other search_fixed: \code{\link{stri_opts_fixed}},
   \code{\link{stringi-search}}
@@ -44,4 +45,3 @@ Other stringi_general_topics: \code{\link{stringi-arguments}},
   \code{\link{stringi-search-regex}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stringi-search-regex.Rd b/man/stringi-search-regex.Rd
index e0191c7..1e35124 100644
--- a/man/stringi-search-regex.Rd
+++ b/man/stringi-search-regex.Rd
@@ -183,6 +183,7 @@ refer to \link{stringi-search-coll} or \link{stringi-search-fixed}.
 This allows to do a locale-aware text lookup,
 or a very fast exact-byte search, respectively.
 }
+
 \references{
 \emph{Regular expressions} -- ICU User Guide,
  \url{http://userguide.icu-project.org/strings/regexp}
@@ -209,4 +210,3 @@ Other stringi_general_topics: \code{\link{stringi-arguments}},
   \code{\link{stringi-search-fixed}},
   \code{\link{stringi-search}}
 }
-
diff --git a/man/stringi-search.Rd b/man/stringi-search.Rd
index 65403b0..8b43a2d 100644
--- a/man/stringi-search.Rd
+++ b/man/stringi-search.Rd
@@ -52,31 +52,37 @@ These may include:
 }
 }
 \seealso{
-Other search_charclass: \code{\link{stri_trim_both}},
-  \code{\link{stringi-search-charclass}}
+Other text_boundaries: \code{\link{stri_count_boundaries}},
+  \code{\link{stri_extract_all_boundaries}},
+  \code{\link{stri_locate_all_boundaries}},
+  \code{\link{stri_opts_brkiter}},
+  \code{\link{stri_split_boundaries}},
+  \code{\link{stri_split_lines}},
+  \code{\link{stri_trans_tolower}},
+  \code{\link{stri_wrap}},
+  \code{\link{stringi-search-boundaries}}
+
+Other search_regex: \code{\link{stri_opts_regex}},
+  \code{\link{stringi-search-regex}}
+
+Other search_fixed: \code{\link{stri_opts_fixed}},
+  \code{\link{stringi-search-fixed}}
 
 Other search_coll: \code{\link{stri_opts_collator}},
   \code{\link{stringi-search-coll}}
 
-Other search_count: \code{\link{stri_count_boundaries}},
-  \code{\link{stri_count}}
+Other search_charclass: \code{\link{stri_trim_both}},
+  \code{\link{stringi-search-charclass}}
 
 Other search_detect: \code{\link{stri_detect}},
   \code{\link{stri_startswith}}
 
-Other search_extract: \code{\link{stri_extract_all_boundaries}},
-  \code{\link{stri_extract_all}},
-  \code{\link{stri_match_all}}
-
-Other search_fixed: \code{\link{stri_opts_fixed}},
-  \code{\link{stringi-search-fixed}}
+Other search_count: \code{\link{stri_count_boundaries}},
+  \code{\link{stri_count}}
 
 Other search_locate: \code{\link{stri_locate_all_boundaries}},
   \code{\link{stri_locate_all}}
 
-Other search_regex: \code{\link{stri_opts_regex}},
-  \code{\link{stringi-search-regex}}
-
 Other search_replace: \code{\link{stri_replace_all}},
   \code{\link{stri_replace_na}},
   \code{\link{stri_trim_both}}
@@ -86,6 +92,10 @@ Other search_split: \code{\link{stri_split_boundaries}},
 
 Other search_subset: \code{\link{stri_subset}}
 
+Other search_extract: \code{\link{stri_extract_all_boundaries}},
+  \code{\link{stri_extract_all}},
+  \code{\link{stri_match_all}}
+
 Other stringi_general_topics: \code{\link{stringi-arguments}},
   \code{\link{stringi-encoding}},
   \code{\link{stringi-locale}},
@@ -95,15 +105,4 @@ Other stringi_general_topics: \code{\link{stringi-arguments}},
   \code{\link{stringi-search-coll}},
   \code{\link{stringi-search-fixed}},
   \code{\link{stringi-search-regex}}
-
-Other text_boundaries: \code{\link{stri_count_boundaries}},
-  \code{\link{stri_extract_all_boundaries}},
-  \code{\link{stri_locate_all_boundaries}},
-  \code{\link{stri_opts_brkiter}},
-  \code{\link{stri_split_boundaries}},
-  \code{\link{stri_split_lines}},
-  \code{\link{stri_trans_tolower}},
-  \code{\link{stri_wrap}},
-  \code{\link{stringi-search-boundaries}}
 }
-
diff --git a/src/Makevars.in b/src/Makevars.in
index 24c0502..c08b5cf 100644
--- a/src/Makevars.in
+++ b/src/Makevars.in
@@ -1,5 +1,6 @@
 ## `stringi` Makevars
-## Copyright (C) 2013-2015, M. Gagolewski
+## Copyright (c) 2013-2017, M. Gagolewski
+## All rights reserved.
 
 @STRINGI_CXXSTD@
 
diff --git a/src/Makevars.win b/src/Makevars.win
index 91b9c0c..332d191 100644
--- a/src/Makevars.win
+++ b/src/Makevars.win
@@ -1,5 +1,5 @@
 ## `stringi` Makevars.win
-## Copyright (C) 2013-2015, M. Gagolewski
+## Copyright (c) 2013-2017, M. Gagolewski
 
 CXX_STD=CXX11
 
@@ -8,9 +8,9 @@ PKG_CPPFLAGS=-I. -Iicu55/ -Iicu55/unicode -Iicu55/common -Iicu55/i18n \
 -DU_I18N_IMPLEMENTATION -DUCONFIG_USE_LOCAL \
 -DU_TOOLUTIL_IMPLEMENTATION -DNDEBUG
 
-## There is a Cygwin bug, which reports "mem alloc error" while linking
+## There is a Cygwin bug which reports "mem alloc error" while linking
 ## too much .o files at once (I suppose this is the reason, at least).
-## Thus, below we split the process into 4 parts, using static libs.
+## Thus, below we split the process into a few parts using static libs.
 ## Voila, it's fixed.
 
 STRI_SOURCES_CPP=$(wildcard stri_*.cpp)
diff --git a/src/install.libs.R.in b/src/install.libs.R.in
index a229d1d..fe48819 100644
--- a/src/install.libs.R.in
+++ b/src/install.libs.R.in
@@ -1,3 +1,7 @@
+## This file is part of the 'stringi' package for R.
+## Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
+## All rights reserved.
+
 # copy lib:
 libfile <- paste("stringi", SHLIB_EXT, sep="")
 dest <- file.path(R_PACKAGE_DIR, paste("libs", R_ARCH, sep=""))
diff --git a/src/stri_ICU_settings.cpp b/src/stri_ICU_settings.cpp
index e84d2d9..c32a568 100644
--- a/src/stri_ICU_settings.cpp
+++ b/src/stri_ICU_settings.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_TODO_justify.cpp b/src/stri_TODO_justify.cpp
index 31d84c4..7432233 100644
--- a/src/stri_TODO_justify.cpp
+++ b/src/stri_TODO_justify.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_TODO_splitpos.cpp b/src/stri_TODO_splitpos.cpp
index 94b3b86..900d01d 100644
--- a/src/stri_TODO_splitpos.cpp
+++ b/src/stri_TODO_splitpos.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_TODO_uchar.cpp b/src/stri_TODO_uchar.cpp
index 5354791..62085fa 100644
--- a/src/stri_TODO_uchar.cpp
+++ b/src/stri_TODO_uchar.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_brkiter.cpp b/src/stri_brkiter.cpp
index 90f434b..a2eed20 100644
--- a/src/stri_brkiter.cpp
+++ b/src/stri_brkiter.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -259,7 +259,7 @@ bool StriRuleBasedBreakIterator::ignoreBoundary() {
 
    if (skip_size <= 0) return false;
 
-   int rule = rbiterator->getRuleStatus();
+   int rule = rbiterator->getRuleStatus();   /* this is ICU 52 */
    for (int i=0; i<skip_size; i += 2) {
       // skip_size is even - that's sure
       if (rule >= skip_rules[i] && rule < skip_rules[i+1])
diff --git a/src/stri_brkiter.h b/src/stri_brkiter.h
index 6d3fe85..94116fa 100644
--- a/src/stri_brkiter.h
+++ b/src/stri_brkiter.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -45,6 +45,8 @@
  * A class to manage a break iterator's options
  *
  * @version 0.4-1 (Marek Gagolewski, 2014-12-02)
+ *
+ * @version 1.1.3 (Marek Gagolewski, 2017-01-07) UBRK_COUNT deprecated
  */
 class StriBrkIterOptions {
    protected:
@@ -59,7 +61,7 @@ class StriBrkIterOptions {
 
       void setEmptyOpts() {
          locale = NULL;
-         type = UBRK_COUNT;
+         type = UBRK_CHARACTER;
          skip_rules = NULL;
          skip_size = 0;
       }
@@ -90,8 +92,9 @@ class StriBrkIterOptions {
  *
  * @version 0.3-1 (Marek Gagolewski, 2014-10-30)
  *
- * @version 0.4-1 (Marek Gagolewski, 2014-12-02)
- * separate class
+ * @version 0.4-1 (Marek Gagolewski, 2014-12-02) separate class
+ *
+ * @version 1.1.3 (Marek Gagolewski, 2017-01-07) UBRK_COUNT deprecated
  */
 class StriUBreakIterator : public StriBrkIterOptions {
    private:
@@ -104,10 +107,10 @@ class StriUBreakIterator : public StriBrkIterOptions {
 #endif
          UErrorCode status = U_ZERO_ERROR;
          switch (type) {
-            case UBRK_CHARACTER: // character [this is not documented]
+            case UBRK_CHARACTER: // character
                uiterator = ubrk_open(UBRK_CHARACTER, locale, NULL, 0, &status);
                break;
-            case UBRK_LINE: // line_break [this is not documented]
+            case UBRK_LINE: // line_break
                uiterator = ubrk_open(UBRK_LINE, locale, NULL, 0, &status);
                break;
             case UBRK_SENTENCE: // sentence
@@ -116,7 +119,6 @@ class StriUBreakIterator : public StriBrkIterOptions {
             case UBRK_WORD: // word
                uiterator = ubrk_open(UBRK_WORD, locale, NULL, 0, &status);
                break;
-            case UBRK_COUNT:
             default:
                throw StriException(MSG__INTERNAL_ERROR);
          }
@@ -181,7 +183,7 @@ class StriUBreakIterator : public StriBrkIterOptions {
 class StriRuleBasedBreakIterator : public StriBrkIterOptions {
    private:
 
-      RuleBasedBreakIterator* rbiterator;
+      BreakIterator* rbiterator;
       UText* searchText;
       R_len_t searchPos; // may be BreakIterator::DONE
       const char* searchStr; // owned by caller
@@ -200,18 +202,17 @@ class StriRuleBasedBreakIterator : public StriBrkIterOptions {
          Locale loc = Locale::createFromName(locale);
          switch (type) {
             case UBRK_CHARACTER: // character
-               rbiterator = (RuleBasedBreakIterator*)BreakIterator::createCharacterInstance(loc, status);
+               rbiterator = (BreakIterator*)BreakIterator::createCharacterInstance(loc, status);
                break;
             case UBRK_LINE: // line_break
-               rbiterator = (RuleBasedBreakIterator*)BreakIterator::createLineInstance(loc, status);
+               rbiterator = (BreakIterator*)BreakIterator::createLineInstance(loc, status);
                break;
             case UBRK_SENTENCE: // sentence
-               rbiterator = (RuleBasedBreakIterator*)BreakIterator::createSentenceInstance(loc, status);
+               rbiterator = (BreakIterator*)BreakIterator::createSentenceInstance(loc, status);
                break;
             case UBRK_WORD: // word
-               rbiterator = (RuleBasedBreakIterator*)BreakIterator::createWordInstance(loc, status);
+               rbiterator = (BreakIterator*)BreakIterator::createWordInstance(loc, status);
                break;
-            case UBRK_COUNT:
             default:
                throw StriException(MSG__INTERNAL_ERROR);
          }
diff --git a/src/stri_bytesearch_matcher.h b/src/stri_bytesearch_matcher.h
index d6e8e4a..30ad40d 100644
--- a/src/stri_bytesearch_matcher.h
+++ b/src/stri_bytesearch_matcher.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_collator.cpp b/src/stri_collator.cpp
index 8a8b073..a12aba0 100644
--- a/src/stri_collator.cpp
+++ b/src/stri_collator.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_common.cpp b/src/stri_common.cpp
index e7538e5..b0f808a 100644
--- a/src/stri_common.cpp
+++ b/src/stri_common.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_compare.cpp b/src/stri_compare.cpp
index 2923cf8..cccd8e2 100644
--- a/src/stri_compare.cpp
+++ b/src/stri_compare.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_base.cpp b/src/stri_container_base.cpp
index 65af992..373f521 100644
--- a/src/stri_container_base.cpp
+++ b/src/stri_container_base.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_base.h b/src/stri_container_base.h
index 244e34b..7bf9a1c 100644
--- a/src/stri_container_base.h
+++ b/src/stri_container_base.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_bytesearch.cpp b/src/stri_container_bytesearch.cpp
index 4cb7502..e34a398 100644
--- a/src/stri_container_bytesearch.cpp
+++ b/src/stri_container_bytesearch.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_bytesearch.h b/src/stri_container_bytesearch.h
index 4e6da7b..24d6bf9 100644
--- a/src/stri_container_bytesearch.h
+++ b/src/stri_container_bytesearch.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_charclass.h b/src/stri_container_charclass.h
index e69d9db..99c34dc 100644
--- a/src/stri_container_charclass.h
+++ b/src/stri_container_charclass.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_double.h b/src/stri_container_double.h
index 6dc58ff..e7e19be 100644
--- a/src/stri_container_double.h
+++ b/src/stri_container_double.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_integer.h b/src/stri_container_integer.h
index 6f70d6f..e9026bd 100644
--- a/src/stri_container_integer.h
+++ b/src/stri_container_integer.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_listint.cpp b/src/stri_container_listint.cpp
index 7d4f192..5fa4341 100644
--- a/src/stri_container_listint.cpp
+++ b/src/stri_container_listint.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_listint.h b/src/stri_container_listint.h
index 8fb4a4d..83369c9 100644
--- a/src/stri_container_listint.h
+++ b/src/stri_container_listint.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_listraw.cpp b/src/stri_container_listraw.cpp
index 29075ce..ea737d3 100644
--- a/src/stri_container_listraw.cpp
+++ b/src/stri_container_listraw.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_listraw.h b/src/stri_container_listraw.h
index 5047c5c..0e9329a 100644
--- a/src/stri_container_listraw.h
+++ b/src/stri_container_listraw.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_listutf8.cpp b/src/stri_container_listutf8.cpp
index f02a1f4..fd83fac 100644
--- a/src/stri_container_listutf8.cpp
+++ b/src/stri_container_listutf8.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_listutf8.h b/src/stri_container_listutf8.h
index 5919e8d..9f7991b 100644
--- a/src/stri_container_listutf8.h
+++ b/src/stri_container_listutf8.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_logical.h b/src/stri_container_logical.h
index 1f5d049..65c3794 100644
--- a/src/stri_container_logical.h
+++ b/src/stri_container_logical.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_regex.cpp b/src/stri_container_regex.cpp
index 83e7dc5..178b470 100644
--- a/src/stri_container_regex.cpp
+++ b/src/stri_container_regex.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_regex.h b/src/stri_container_regex.h
index 22792b4..72bdf46 100644
--- a/src/stri_container_regex.h
+++ b/src/stri_container_regex.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_usearch.cpp b/src/stri_container_usearch.cpp
index 3c04030..eba87cc 100644
--- a/src/stri_container_usearch.cpp
+++ b/src/stri_container_usearch.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_usearch.h b/src/stri_container_usearch.h
index 43f771b..e4a2f90 100644
--- a/src/stri_container_usearch.h
+++ b/src/stri_container_usearch.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_utf16.cpp b/src/stri_container_utf16.cpp
index e647bb2..325cb58 100644
--- a/src/stri_container_utf16.cpp
+++ b/src/stri_container_utf16.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_utf16.h b/src/stri_container_utf16.h
index 2d85424..ae8db99 100644
--- a/src/stri_container_utf16.h
+++ b/src/stri_container_utf16.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_utf8.cpp b/src/stri_container_utf8.cpp
index e1a812f..edad421 100644
--- a/src/stri_container_utf8.cpp
+++ b/src/stri_container_utf8.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_utf8.h b/src/stri_container_utf8.h
index 9b4ae65..a25b0ec 100644
--- a/src/stri_container_utf8.h
+++ b/src/stri_container_utf8.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_container_utf8_indexable.cpp b/src/stri_container_utf8_indexable.cpp
index 1c52938..3f9950d 100644
--- a/src/stri_container_utf8_indexable.cpp
+++ b/src/stri_container_utf8_indexable.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -117,6 +117,9 @@ StriContainerUTF8_indexable& StriContainerUTF8_indexable::operator=(StriContaine
  *
  * @version 0.5-1 (Marek Gagolewski, 2015-02-14)
  *          use String8::isASCII
+ *
+ * @version 1.1.3 (Marek Gagolewski, 2017-03-21)
+ *          Issue#227: buffering bug in stri_sub
  */
 R_len_t StriContainerUTF8_indexable::UChar32_to_UTF8_index_back(R_len_t i, R_len_t wh)
 {
@@ -172,7 +175,7 @@ R_len_t StriContainerUTF8_indexable::UChar32_to_UTF8_index_back(R_len_t i, R_len
       ++j;
    }
 
-   last_ind_back_codepoint = wh;
+   last_ind_back_codepoint = j; // it's not wh, as we can advance at the end of the string, compare #227
    last_ind_back_utf8 = jres;
 
    return jres;
@@ -201,6 +204,9 @@ R_len_t StriContainerUTF8_indexable::UChar32_to_UTF8_index_back(R_len_t i, R_len
  *
  * @version 0.5-1 (Marek Gagolewski, 2015-02-14)
  *          use String8::isASCII
+ *
+ * @version 1.1.3 (Marek Gagolewski, 2017-03-21)
+ *          Issue#227: buffering bug in stri_sub
  */
 R_len_t StriContainerUTF8_indexable::UChar32_to_UTF8_index_fwd(R_len_t i, R_len_t wh)
 {
@@ -257,7 +263,7 @@ R_len_t StriContainerUTF8_indexable::UChar32_to_UTF8_index_fwd(R_len_t i, R_len_
       ++j;
    }
 
-   last_ind_fwd_codepoint = wh;
+   last_ind_fwd_codepoint = j; // it's not wh, as we can advance at the end of the string, compare #227
    last_ind_fwd_utf8 = jres;
    return jres;
 }
diff --git a/src/stri_container_utf8_indexable.h b/src/stri_container_utf8_indexable.h
index ce1095f..2bb6da2 100644
--- a/src/stri_container_utf8_indexable.h
+++ b/src/stri_container_utf8_indexable.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_encoding_conversion.cpp b/src/stri_encoding_conversion.cpp
index fa726e3..a2a189e 100644
--- a/src/stri_encoding_conversion.cpp
+++ b/src/stri_encoding_conversion.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_encoding_detection.cpp b/src/stri_encoding_detection.cpp
index d2835e1..83e20a8 100644
--- a/src/stri_encoding_detection.cpp
+++ b/src/stri_encoding_detection.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_encoding_management.cpp b/src/stri_encoding_management.cpp
index a439a68..acb6c12 100644
--- a/src/stri_encoding_management.cpp
+++ b/src/stri_encoding_management.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -66,6 +66,14 @@ SEXP stri_enc_set(SEXP enc)
    // get "official" encoding name:
    const char* name = ucnv_getName(uconv, &status);
    STRI__CHECKICUSTATUS_THROW(status, {/* do nothing special on err */})
+
+   /*
+    DO NOT call this function when ANY ICU function is being used
+    from more than one thread! This function sets the current default
+    converter name. If this function needs to be called, it should be
+    called during application initialization.
+    Do not use unless you know what you are doing.
+    */
    ucnv_setDefaultName(name); // set as default
 
    return R_NilValue;
diff --git a/src/stri_escape.cpp b/src/stri_escape.cpp
index e783570..91c8fcd 100644
--- a/src/stri_escape.cpp
+++ b/src/stri_escape.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_exception.cpp b/src/stri_exception.cpp
index 03c03e9..b2ae347 100644
--- a/src/stri_exception.cpp
+++ b/src/stri_exception.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -42,11 +42,12 @@
  *
  * @version 0.4-1  (Marek Gagolewski, 2014-11-30)
  *    ICU warning info added
+ *
+ * @version 1.1.2 (Marek Gagolewski, 2017-01-07) _LIMIT, _COUNT deprecated
  */
 const char* StriException::getICUerrorName(UErrorCode status)
 {
-   if (status <= U_ERROR_WARNING_LIMIT) {
-      switch(status) {
+   switch(status) {
       case U_USING_FALLBACK_WARNING:
          return "A resource bundle lookup returned a fallback result. (not an error)";
       case U_USING_DEFAULT_WARNING:
@@ -65,279 +66,276 @@ const char* StriException::getICUerrorName(UErrorCode status)
          return "ucol_open encountered a mismatch between UCA version and collator image version, so the collator was constructed from rules. No impact to further function.";
       case U_PLUGIN_CHANGED_LEVEL_WARNING:
          return "A plugin caused a level change. May not be an error, but later plugins may not load.";
-   //      case U_ERROR_WARNING_LIMIT:
-   //         return "This must always be the last warning value to indicate the limit for UErrorCode warnings (last warning code +1)";
-      default:
-         return "Unknown ICU warning.";
-      }
-   }
-   else {
-      switch(status) {
-        case U_ZERO_ERROR:
-           return "No error, no warning [THIS IS A BUG].";
-         case U_ILLEGAL_ARGUMENT_ERROR:
-            return "Start of codes indicating failure.";
-         case U_MISSING_RESOURCE_ERROR:
-            return "The requested ICU resource cannot be found.";
-         case U_INVALID_FORMAT_ERROR:
-            return "Data format is not what is expected.";
-         case U_FILE_ACCESS_ERROR: // udata.cpp only
-            return "The requested ICU resource file cannot be found.";
-         case U_INTERNAL_PROGRAM_ERROR:
-            return "Internal ICU error, might be a bug in the library code.";
-         case U_MESSAGE_PARSE_ERROR:
-            return "Unable to parse a message (message format).";
-         case U_MEMORY_ALLOCATION_ERROR:
-            return "Memory allocation error.";
-         case U_INDEX_OUTOFBOUNDS_ERROR:
-            return "Trying to access the index that is out of bounds.";
-         case U_PARSE_ERROR:
-            return "ICU Parse error.";
-         case U_INVALID_CHAR_FOUND:
-            return "Character conversion: Unmappable input sequence / Invalid character.";
-         case U_TRUNCATED_CHAR_FOUND:
-            return "Character conversion: Incomplete input sequence.";
-         case U_ILLEGAL_CHAR_FOUND:
-            return "Character conversion: Illegal input sequence/combination of input units.";
-         case U_INVALID_TABLE_FORMAT:
-            return "Conversion table file found, but corrupted.";
-         case U_INVALID_TABLE_FILE:
-            return "Conversion table file not found.";
-         case U_BUFFER_OVERFLOW_ERROR:
-            return "A result would not fit in the supplied buffer.";
-         case U_UNSUPPORTED_ERROR:
-            return "Requested operation not supported in current context.";
-         case U_RESOURCE_TYPE_MISMATCH:
-            return "An operation is requested over a resource that does not support it";
-         case U_ILLEGAL_ESCAPE_SEQUENCE:
-            return "ISO-2022 illlegal escape sequence.";
-         case U_UNSUPPORTED_ESCAPE_SEQUENCE:
-            return "ISO-2022 unsupported escape sequence.";
-         case U_NO_SPACE_AVAILABLE:
-            return "No space available for in-buffer expansion for Arabic shaping.";
-         case U_CE_NOT_FOUND_ERROR:
-            return "Currently used only while setting variable top, but can be used generally.";
-         case U_PRIMARY_TOO_LONG_ERROR:
-            return "User tried to set variable top to a primary that is longer than two bytes.";
-         case U_STATE_TOO_OLD_ERROR:
-            return "ICU cannot construct a service from this state, as it is no longer supported.";
-         case U_TOO_MANY_ALIASES_ERROR:
-            return "There are too many aliases in the path to the requested resource. It is very possible that a circular alias definition has occured";
-         case U_ENUM_OUT_OF_SYNC_ERROR:
-            return "UEnumeration out of sync with underlying collection.";
-         case U_INVARIANT_CONVERSION_ERROR:
-            return "Unable to convert a UChar* string to char* with the invariant converter.";
-         case U_INVALID_STATE_ERROR:
-            return "Requested operation can not be completed with ICU in its current state.";
-         case U_COLLATOR_VERSION_MISMATCH:
-            return "Collator version is not compatible with the base version.";
-         case U_USELESS_COLLATOR_ERROR:
-            return "Collator is options only and no base is specified.";
-         case U_NO_WRITE_PERMISSION:
-            return "Attempt to modify read-only or constant data.";
-         case U_STANDARD_ERROR_LIMIT:
-            return "This must always be the last value to indicate the limit for standard errors.";
-         case U_BAD_VARIABLE_DEFINITION:
-            return "Missing '$' or duplicate variable name.";
-   //      case U_PARSE_ERROR_START:
-   //         return "Start of Transliterator errors.";
-         case U_MALFORMED_RULE:
-            return "Elements of a rule are misplaced.";
-         case U_MALFORMED_SET:
-            return "A UnicodeSet pattern is invalid.";
-   //      case U_MALFORMED_SYMBOL_REFERENCE:
-   //         return "UNUSED as of ICU 2.4.";
-         case U_MALFORMED_UNICODE_ESCAPE:
-            return "A Unicode escape pattern is invalid.";
-         case U_MALFORMED_VARIABLE_DEFINITION:
-            return "A variable definition is invalid.";
-         case U_MALFORMED_VARIABLE_REFERENCE:
-            return "A variable reference is invalid.";
-   //      case U_MISMATCHED_SEGMENT_DELIMITERS:
-   //         return "UNUSED as of ICU 2.4.";
-         case U_MISPLACED_ANCHOR_START:
-            return "A start anchor appears at an illegal position.";
-         case U_MISPLACED_CURSOR_OFFSET:
-            return "A cursor offset occurs at an illegal position.";
-         case U_MISPLACED_QUANTIFIER:
-            return "A quantifier appears after a segment close delimiter.";
-         case U_MISSING_OPERATOR:
-            return "A rule contains no operator.";
-   //      case U_MISSING_SEGMENT_CLOSE:
-   //         return "UNUSED as of ICU 2.4.";
-         case U_MULTIPLE_ANTE_CONTEXTS:
-            return "More than one ante context.";
-         case U_MULTIPLE_CURSORS:
-            return "More than one cursor.";
-         case U_MULTIPLE_POST_CONTEXTS:
-            return "More than one post context.";
-         case U_TRAILING_BACKSLASH:
-            return "A dangling backslash.";
-         case U_UNDEFINED_SEGMENT_REFERENCE:
-            return "A segment reference does not correspond to a defined segment.";
-         case U_UNDEFINED_VARIABLE:
-            return "A variable reference does not correspond to a defined variable.";
-         case U_UNQUOTED_SPECIAL:
-            return "A special character was not quoted or escaped.";
-         case U_UNTERMINATED_QUOTE:
-            return "A closing single quote is missing.";
-         case U_RULE_MASK_ERROR:
-            return "A rule is hidden by an earlier more general rule.";
-         case U_MISPLACED_COMPOUND_FILTER:
-            return "A compound filter is in an invalid location.";
-         case U_MULTIPLE_COMPOUND_FILTERS:
-            return "More than one compound filter.";
-         case U_INVALID_RBT_SYNTAX:
-            return "A '::id' rule was passed to the RuleBasedTransliterator parser.";
-   //      case U_INVALID_PROPERTY_PATTERN:
-   //         return "UNUSED as of ICU 2.4.";
-         case U_MALFORMED_PRAGMA:
-            return "A 'use' pragma is invlalid.";
-         case U_UNCLOSED_SEGMENT:
-            return "A closing ')' is missing.";
-   //      case U_ILLEGAL_CHAR_IN_SEGMENT:
-   //         return "UNUSED as of ICU 2.4.";
-         case U_VARIABLE_RANGE_EXHAUSTED:
-            return "Too many stand-ins generated for the given variable range.";
-         case U_VARIABLE_RANGE_OVERLAP:
-            return "The variable range overlaps characters used in rules.";
-         case U_ILLEGAL_CHARACTER:
-            return "A special character is outside its allowed context.";
-         case U_INTERNAL_TRANSLITERATOR_ERROR:
-            return "Internal transliterator system error.";
-         case U_INVALID_ID:
-            return "A '::id' rule specifies an unknown transliterator.";
-         case U_INVALID_FUNCTION:
-            return "A '&fn()' rule specifies an unknown transliterator.";
-         case U_PARSE_ERROR_LIMIT:
-            return "The limit for Transliterator errors.";
-         case U_UNEXPECTED_TOKEN:
-            return "Syntax error in format pattern.";
-   //      case U_FMT_PARSE_ERROR_START:
-   //         return "Start of format library errors.";
-         case U_MULTIPLE_DECIMAL_SEPARATORS:
-   //      case U_MULTIPLE_DECIMAL_SEPERATORS:
-            return "More than one decimal separator in number pattern.";
-         case U_MULTIPLE_EXPONENTIAL_SYMBOLS:
-            return "More than one exponent symbol in number pattern.";
-         case U_MALFORMED_EXPONENTIAL_PATTERN:
-            return "Grouping symbol in exponent pattern.";
-         case U_MULTIPLE_PERCENT_SYMBOLS:
-            return "More than one percent symbol in number pattern.";
-         case U_MULTIPLE_PERMILL_SYMBOLS:
-            return "More than one permill symbol in number pattern.";
-         case U_MULTIPLE_PAD_SPECIFIERS:
-            return "More than one pad symbol in number pattern.";
-         case U_PATTERN_SYNTAX_ERROR:
-            return "Syntax error in format pattern.";
-         case U_ILLEGAL_PAD_POSITION:
-            return "Pad symbol misplaced in number pattern.";
-         case U_UNMATCHED_BRACES:
-            return "Braces do not match in message pattern.";
-   //      case U_UNSUPPORTED_PROPERTY:
-   //         return "UNUSED as of ICU 2.4.";
-   //      case U_UNSUPPORTED_ATTRIBUTE:
-   //         return "UNUSED as of ICU 2.4.";
-         case U_ARGUMENT_TYPE_MISMATCH:
-            return "Argument name and argument index mismatch in MessageFormat functions.";
-         case U_DUPLICATE_KEYWORD:
-            return "Duplicate keyword in PluralFormat.";
-         case U_UNDEFINED_KEYWORD:
-            return "Undefined Plural keyword.";
-         case U_DEFAULT_KEYWORD_MISSING:
-            return "Missing DEFAULT rule in plural rules.";
-         case U_DECIMAL_NUMBER_SYNTAX_ERROR:
-            return "Decimal number syntax error.";
-         case U_FORMAT_INEXACT_ERROR:
-            return "Cannot format a number exactly and rounding mode is ROUND_UNNECESSARY.";
-         case U_FMT_PARSE_ERROR_LIMIT:
-            return "The limit for format library errors.";
-         case U_BRK_INTERNAL_ERROR:
-            return "An internal error (bug) was detected in ICU.";
-   //      case U_BRK_ERROR_START:
-   //         return "Start of codes indicating Break Iterator failures.";
-         case U_BRK_HEX_DIGITS_EXPECTED:
-            return "Hex digits expected as part of a escaped char in a rule.";
-         case U_BRK_SEMICOLON_EXPECTED:
-            return "Missing ';' at the end of a RBBI rule.";
-         case U_BRK_RULE_SYNTAX:
-            return "Syntax error in RBBI rule.";
-         case U_BRK_UNCLOSED_SET:
-            return "UnicodeSet witing an RBBI rule missing a closing ']'.";
-         case U_BRK_ASSIGN_ERROR:
-            return "Syntax error in RBBI rule assignment statement.";
-         case U_BRK_VARIABLE_REDFINITION:
-            return "RBBI rule $Variable redefined.";
-         case U_BRK_MISMATCHED_PAREN:
-            return "Mis-matched parentheses in an RBBI rule.";
-         case U_BRK_NEW_LINE_IN_QUOTED_STRING:
-            return "Missing closing quote in an RBBI rule.";
-         case U_BRK_UNDEFINED_VARIABLE:
-            return "Use of an undefined $Variable in an RBBI rule.";
-         case U_BRK_INIT_ERROR:
-            return "Initialization failure. Probable missing ICU Data.";
-         case U_BRK_RULE_EMPTY_SET:
-            return "Rule contains an empty Unicode Set.";
-         case U_BRK_UNRECOGNIZED_OPTION:
-            return "!!option in RBBI rules not recognized.";
-         case U_BRK_MALFORMED_RULE_TAG:
-            return "The {nnn} tag on a rule is mal formed.";
-         case U_BRK_ERROR_LIMIT:
-            return "This must always be the last value to indicate the limit for Break Iterator failures.";
-         case U_REGEX_INTERNAL_ERROR:
-            return "An internal error (bug) was detected in ICU.";
-   //      case U_REGEX_ERROR_START:
-   //         return "Start of codes indicating Regexp failures.";
-         case U_REGEX_RULE_SYNTAX:
-            return "Syntax error in regexp pattern.";
-         case U_REGEX_INVALID_STATE:
-            return "RegexMatcher in invalid state for requested operation.";
-         case U_REGEX_BAD_ESCAPE_SEQUENCE:
-            return "Unrecognized backslash escape sequence in pattern.";
-         case U_REGEX_PROPERTY_SYNTAX:
-            return "Incorrect Unicode property.";
-         case U_REGEX_UNIMPLEMENTED:
-            return "Use of regexp feature that is not yet implemented.";
-         case U_REGEX_MISMATCHED_PAREN:
-            return "Incorrectly nested parentheses in regexp pattern.";
-         case U_REGEX_NUMBER_TOO_BIG:
-            return "Decimal number is too large.";
-         case U_REGEX_BAD_INTERVAL:
-            return "Error in {min,max} interval.";
-         case U_REGEX_MAX_LT_MIN:
-            return "In {min,max}, max is less than min.";
-         case U_REGEX_INVALID_BACK_REF:
-            return "Back-reference to a non-existent capture group.";
-         case U_REGEX_INVALID_FLAG:
-            return "Invalid value for match mode flags.";
-         case U_REGEX_LOOK_BEHIND_LIMIT:
-            return "Look-Behind pattern matches must have a bounded maximum length.";
-         case U_REGEX_SET_CONTAINS_STRING:
-            return "Regexps cannot have UnicodeSets containing strings.";
+     case U_ZERO_ERROR:
+        return "No error, no warning (why stringi reports that??? file a bug report, please)";
+      case U_ILLEGAL_ARGUMENT_ERROR:
+         return "Start of codes indicating failure.";
+      case U_MISSING_RESOURCE_ERROR:
+         return "The requested ICU resource cannot be found.";
+      case U_INVALID_FORMAT_ERROR:
+         return "Data format is not what is expected.";
+      case U_FILE_ACCESS_ERROR: // udata.cpp only
+         return "The requested ICU resource file cannot be found.";
+      case U_INTERNAL_PROGRAM_ERROR:
+         return "Internal ICU error, might be a bug in the library code.";
+      case U_MESSAGE_PARSE_ERROR:
+         return "Unable to parse a message (message format).";
+      case U_MEMORY_ALLOCATION_ERROR:
+         return "Memory allocation error.";
+      case U_INDEX_OUTOFBOUNDS_ERROR:
+         return "Trying to access the index that is out of bounds.";
+      case U_PARSE_ERROR:
+         return "ICU Parse error.";
+      case U_INVALID_CHAR_FOUND:
+         return "Character conversion: Unmappable input sequence / Invalid character.";
+      case U_TRUNCATED_CHAR_FOUND:
+         return "Character conversion: Incomplete input sequence.";
+      case U_ILLEGAL_CHAR_FOUND:
+         return "Character conversion: Illegal input sequence/combination of input units.";
+      case U_INVALID_TABLE_FORMAT:
+         return "Conversion table file found, but corrupted.";
+      case U_INVALID_TABLE_FILE:
+         return "Conversion table file not found.";
+      case U_BUFFER_OVERFLOW_ERROR:
+         return "A result would not fit in the supplied buffer.";
+      case U_UNSUPPORTED_ERROR:
+         return "Requested operation not supported in current context.";
+      case U_RESOURCE_TYPE_MISMATCH:
+         return "An operation is requested over a resource that does not support it";
+      case U_ILLEGAL_ESCAPE_SEQUENCE:
+         return "ISO-2022 illlegal escape sequence.";
+      case U_UNSUPPORTED_ESCAPE_SEQUENCE:
+         return "ISO-2022 unsupported escape sequence.";
+      case U_NO_SPACE_AVAILABLE:
+         return "No space available for in-buffer expansion for Arabic shaping.";
+      case U_CE_NOT_FOUND_ERROR:
+         return "Currently used only while setting variable top, but can be used generally.";
+      case U_PRIMARY_TOO_LONG_ERROR:
+         return "User tried to set variable top to a primary that is longer than two bytes.";
+      case U_STATE_TOO_OLD_ERROR:
+         return "ICU cannot construct a service from this state, as it is no longer supported.";
+      case U_TOO_MANY_ALIASES_ERROR:
+         return "There are too many aliases in the path to the requested resource. It is very possible that a circular alias definition has occured";
+      case U_ENUM_OUT_OF_SYNC_ERROR:
+         return "UEnumeration out of sync with underlying collection.";
+      case U_INVARIANT_CONVERSION_ERROR:
+         return "Unable to convert a UChar* string to char* with the invariant converter.";
+      case U_INVALID_STATE_ERROR:
+         return "Requested operation can not be completed with ICU in its current state.";
+      case U_COLLATOR_VERSION_MISMATCH:
+         return "Collator version is not compatible with the base version.";
+      case U_USELESS_COLLATOR_ERROR:
+         return "Collator is options only and no base is specified.";
+      case U_NO_WRITE_PERMISSION:
+         return "Attempt to modify read-only or constant data.";
+      // case U_STANDARD_ERROR_LIMIT:
+         // return "This must always be the last value to indicate the limit for standard errors.";
+      case U_BAD_VARIABLE_DEFINITION:
+         return "Missing '$' or duplicate variable name.";
+//      case U_PARSE_ERROR_START:
+//         return "Start of Transliterator errors.";
+      case U_MALFORMED_RULE:
+         return "Elements of a rule are misplaced.";
+      case U_MALFORMED_SET:
+         return "A UnicodeSet pattern is invalid.";
+//      case U_MALFORMED_SYMBOL_REFERENCE:
+//         return "UNUSED as of ICU 2.4.";
+      case U_MALFORMED_UNICODE_ESCAPE:
+         return "A Unicode escape pattern is invalid.";
+      case U_MALFORMED_VARIABLE_DEFINITION:
+         return "A variable definition is invalid.";
+      case U_MALFORMED_VARIABLE_REFERENCE:
+         return "A variable reference is invalid.";
+//      case U_MISMATCHED_SEGMENT_DELIMITERS:
+//         return "UNUSED as of ICU 2.4.";
+      case U_MISPLACED_ANCHOR_START:
+         return "A start anchor appears at an illegal position.";
+      case U_MISPLACED_CURSOR_OFFSET:
+         return "A cursor offset occurs at an illegal position.";
+      case U_MISPLACED_QUANTIFIER:
+         return "A quantifier appears after a segment close delimiter.";
+      case U_MISSING_OPERATOR:
+         return "A rule contains no operator.";
+//      case U_MISSING_SEGMENT_CLOSE:
+//         return "UNUSED as of ICU 2.4.";
+      case U_MULTIPLE_ANTE_CONTEXTS:
+         return "More than one ante context.";
+      case U_MULTIPLE_CURSORS:
+         return "More than one cursor.";
+      case U_MULTIPLE_POST_CONTEXTS:
+         return "More than one post context.";
+      case U_TRAILING_BACKSLASH:
+         return "A dangling backslash.";
+      case U_UNDEFINED_SEGMENT_REFERENCE:
+         return "A segment reference does not correspond to a defined segment.";
+      case U_UNDEFINED_VARIABLE:
+         return "A variable reference does not correspond to a defined variable.";
+      case U_UNQUOTED_SPECIAL:
+         return "A special character was not quoted or escaped.";
+      case U_UNTERMINATED_QUOTE:
+         return "A closing single quote is missing.";
+      case U_RULE_MASK_ERROR:
+         return "A rule is hidden by an earlier more general rule.";
+      case U_MISPLACED_COMPOUND_FILTER:
+         return "A compound filter is in an invalid location.";
+      case U_MULTIPLE_COMPOUND_FILTERS:
+         return "More than one compound filter.";
+      case U_INVALID_RBT_SYNTAX:
+         return "A '::id' rule was passed to the RuleBasedTransliterator parser.";
+//      case U_INVALID_PROPERTY_PATTERN:
+//         return "UNUSED as of ICU 2.4.";
+      case U_MALFORMED_PRAGMA:
+         return "A 'use' pragma is invlalid.";
+      case U_UNCLOSED_SEGMENT:
+         return "A closing ')' is missing.";
+//      case U_ILLEGAL_CHAR_IN_SEGMENT:
+//         return "UNUSED as of ICU 2.4.";
+      case U_VARIABLE_RANGE_EXHAUSTED:
+         return "Too many stand-ins generated for the given variable range.";
+      case U_VARIABLE_RANGE_OVERLAP:
+         return "The variable range overlaps characters used in rules.";
+      case U_ILLEGAL_CHARACTER:
+         return "A special character is outside its allowed context.";
+      case U_INTERNAL_TRANSLITERATOR_ERROR:
+         return "Internal transliterator system error.";
+      case U_INVALID_ID:
+         return "A '::id' rule specifies an unknown transliterator.";
+      case U_INVALID_FUNCTION:
+         return "A '&fn()' rule specifies an unknown transliterator.";
+      // case U_PARSE_ERROR_LIMIT:
+      //    return "The limit for Transliterator errors.";
+      case U_UNEXPECTED_TOKEN:
+         return "Syntax error in format pattern.";
+//      case U_FMT_PARSE_ERROR_START:
+//         return "Start of format library errors.";
+      case U_MULTIPLE_DECIMAL_SEPARATORS:
+//      case U_MULTIPLE_DECIMAL_SEPERATORS:
+         return "More than one decimal separator in number pattern.";
+      case U_MULTIPLE_EXPONENTIAL_SYMBOLS:
+         return "More than one exponent symbol in number pattern.";
+      case U_MALFORMED_EXPONENTIAL_PATTERN:
+         return "Grouping symbol in exponent pattern.";
+      case U_MULTIPLE_PERCENT_SYMBOLS:
+         return "More than one percent symbol in number pattern.";
+      case U_MULTIPLE_PERMILL_SYMBOLS:
+         return "More than one permill symbol in number pattern.";
+      case U_MULTIPLE_PAD_SPECIFIERS:
+         return "More than one pad symbol in number pattern.";
+      case U_PATTERN_SYNTAX_ERROR:
+         return "Syntax error in format pattern.";
+      case U_ILLEGAL_PAD_POSITION:
+         return "Pad symbol misplaced in number pattern.";
+      case U_UNMATCHED_BRACES:
+         return "Braces do not match in message pattern.";
+//      case U_UNSUPPORTED_PROPERTY:
+//         return "UNUSED as of ICU 2.4.";
+//      case U_UNSUPPORTED_ATTRIBUTE:
+//         return "UNUSED as of ICU 2.4.";
+      case U_ARGUMENT_TYPE_MISMATCH:
+         return "Argument name and argument index mismatch in MessageFormat functions.";
+      case U_DUPLICATE_KEYWORD:
+         return "Duplicate keyword in PluralFormat.";
+      case U_UNDEFINED_KEYWORD:
+         return "Undefined Plural keyword.";
+      case U_DEFAULT_KEYWORD_MISSING:
+         return "Missing DEFAULT rule in plural rules.";
+      case U_DECIMAL_NUMBER_SYNTAX_ERROR:
+         return "Decimal number syntax error.";
+      case U_FORMAT_INEXACT_ERROR:
+         return "Cannot format a number exactly and rounding mode is ROUND_UNNECESSARY.";
+      // case U_FMT_PARSE_ERROR_LIMIT:
+      //    return "The limit for format library errors.";
+      case U_BRK_INTERNAL_ERROR:
+         return "An internal error (bug) was detected in ICU.";
+//      case U_BRK_ERROR_START:
+//         return "Start of codes indicating Break Iterator failures.";
+      case U_BRK_HEX_DIGITS_EXPECTED:
+         return "Hex digits expected as part of a escaped char in a rule.";
+      case U_BRK_SEMICOLON_EXPECTED:
+         return "Missing ';' at the end of a RBBI rule.";
+      case U_BRK_RULE_SYNTAX:
+         return "Syntax error in RBBI rule.";
+      case U_BRK_UNCLOSED_SET:
+         return "UnicodeSet witing an RBBI rule missing a closing ']'.";
+      case U_BRK_ASSIGN_ERROR:
+         return "Syntax error in RBBI rule assignment statement.";
+      case U_BRK_VARIABLE_REDFINITION:
+         return "RBBI rule $Variable redefined.";
+      case U_BRK_MISMATCHED_PAREN:
+         return "Mis-matched parentheses in an RBBI rule.";
+      case U_BRK_NEW_LINE_IN_QUOTED_STRING:
+         return "Missing closing quote in an RBBI rule.";
+      case U_BRK_UNDEFINED_VARIABLE:
+         return "Use of an undefined $Variable in an RBBI rule.";
+      case U_BRK_INIT_ERROR:
+         return "Initialization failure. Probable missing ICU Data.";
+      case U_BRK_RULE_EMPTY_SET:
+         return "Rule contains an empty Unicode Set.";
+      case U_BRK_UNRECOGNIZED_OPTION:
+         return "!!option in RBBI rules not recognized.";
+      case U_BRK_MALFORMED_RULE_TAG:
+         return "The {nnn} tag on a rule is mal formed.";
+      // case U_BRK_ERROR_LIMIT:
+      //    return "This must always be the last value to indicate the limit for Break Iterator failures.";
+      case U_REGEX_INTERNAL_ERROR:
+         return "An internal error (bug) was detected in ICU.";
+//      case U_REGEX_ERROR_START:
+//         return "Start of codes indicating Regexp failures.";
+      case U_REGEX_RULE_SYNTAX:
+         return "Syntax error in regexp pattern.";
+      case U_REGEX_INVALID_STATE:
+         return "RegexMatcher in invalid state for requested operation.";
+      case U_REGEX_BAD_ESCAPE_SEQUENCE:
+         return "Unrecognized backslash escape sequence in pattern.";
+      case U_REGEX_PROPERTY_SYNTAX:
+         return "Incorrect Unicode property.";
+      case U_REGEX_UNIMPLEMENTED:
+         return "Use of regexp feature that is not yet implemented.";
+      case U_REGEX_MISMATCHED_PAREN:
+         return "Incorrectly nested parentheses in regexp pattern.";
+      case U_REGEX_NUMBER_TOO_BIG:
+         return "Decimal number is too large.";
+      case U_REGEX_BAD_INTERVAL:
+         return "Error in {min,max} interval.";
+      case U_REGEX_MAX_LT_MIN:
+         return "In {min,max}, max is less than min.";
+      case U_REGEX_INVALID_BACK_REF:
+         return "Back-reference to a non-existent capture group.";
+      case U_REGEX_INVALID_FLAG:
+         return "Invalid value for match mode flags.";
+      case U_REGEX_LOOK_BEHIND_LIMIT:
+         return "Look-Behind pattern matches must have a bounded maximum length.";
+      case U_REGEX_SET_CONTAINS_STRING:
+         return "Regexps cannot have UnicodeSets containing strings.";
 //         case U_REGEX_OCTAL_TOO_BIG: //Deprecated ICU 54. This error cannot occur.
 //            return "Octal character constants must be <= 0377.";
-         case U_REGEX_MISSING_CLOSE_BRACKET:
-            return "Missing closing bracket on a bracket expression.";
-         case U_REGEX_INVALID_RANGE:
-            return "In a character range [x-y], x is greater than y.";
-         case U_REGEX_STACK_OVERFLOW:
-            return "Regular expression backtrack stack overflow.";
-         case U_REGEX_TIME_OUT:
-            return "Maximum allowed match time exceeded.";
-         case U_REGEX_STOPPED_BY_CALLER:
-            return "Matching operation aborted by user callback fn.";
-         case U_REGEX_ERROR_LIMIT:
-            return "This must always be the last value to indicate the limit for regexp errors.";
-   //      case U_PLUGIN_ERROR_START:
-   //         return "Start of codes indicating plugin failures.";
-         case U_PLUGIN_TOO_HIGH:
-            return "The plugin's level is too high to be loaded right now.";
-         case U_PLUGIN_DIDNT_SET_LEVEL:
-            return "The plugin didn't call uplug_setPlugLevel in response to a QUERY.";
-   //       case U_PLUGIN_ERROR_LIMIT:
-   //          return "This must always be the last value to indicate the limit for plugin errors. ";
-         default:
-            return "Unknown ICU error.";
-      }
+      case U_REGEX_MISSING_CLOSE_BRACKET:
+         return "Missing closing bracket on a bracket expression.";
+      case U_REGEX_INVALID_RANGE:
+         return "In a character range [x-y], x is greater than y.";
+      case U_REGEX_STACK_OVERFLOW:
+         return "Regular expression backtrack stack overflow.";
+      case U_REGEX_TIME_OUT:
+         return "Maximum allowed match time exceeded.";
+      case U_REGEX_STOPPED_BY_CALLER:
+         return "Matching operation aborted by user callback fn.";
+      // case U_REGEX_ERROR_LIMIT:
+      //    return "This must always be the last value to indicate the limit for regexp errors.";
+//      case U_PLUGIN_ERROR_START:
+//         return "Start of codes indicating plugin failures.";
+      case U_PLUGIN_TOO_HIGH:
+         return "The plugin's level is too high to be loaded right now.";
+      case U_PLUGIN_DIDNT_SET_LEVEL:
+         return "The plugin didn't call uplug_setPlugLevel in response to a QUERY.";
+//       case U_PLUGIN_ERROR_LIMIT:
+//          return "This must always be the last value to indicate the limit for plugin errors. ";
+#if U_ICU_VERSION_MAJOR_NUM>=55
+      case U_REGEX_PATTERN_TOO_BIG:
+         return "Pattern exceeds limits on size or complexity.";
+      case U_REGEX_INVALID_CAPTURE_GROUP_NAME:
+         return "Invalid capture group name.";
+#endif
+      default:
+         return "Unknown ICU error or warning.";
    }
 }
diff --git a/src/stri_exception.h b/src/stri_exception.h
index 8acfc5a..0f4f3cb 100644
--- a/src/stri_exception.h
+++ b/src/stri_exception.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -87,11 +87,6 @@ using namespace std;
       onerror;                                              \
       throw StriException(status);                          \
    }                                                        \
-   else if (status <= U_ERROR_WARNING_LIMIT && status > U_USING_DEFAULT_WARNING) { \
-      Rf_warning(MSG__ICU_WARNING,                          \
-         StriException::getICUerrorName(status),            \
-         u_errorName(status));                              \
-   }                                                        \
 }
 
 
@@ -102,11 +97,6 @@ using namespace std;
          StriException::getICUerrorName(status),            \
          u_errorName(status));                              \
    }                                                        \
-   else if (status <= U_ERROR_WARNING_LIMIT && status > U_USING_DEFAULT_WARNING) { \
-      Rf_warning(MSG__ICU_WARNING,                          \
-         StriException::getICUerrorName(status),            \
-         u_errorName(status));                              \
-   }                                                        \
 }
 
 
diff --git a/src/stri_exports.h b/src/stri_exports.h
index 883598a..3b4a23f 100644
--- a/src/stri_exports.h
+++ b/src/stri_exports.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_external.h b/src/stri_external.h
index 6c805de..b510143 100644
--- a/src/stri_external.h
+++ b/src/stri_external.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -39,10 +39,10 @@
 #undef U_CHARSET_IS_UTF8
 #endif
 
-#ifndef NDEBUG
+//#ifndef NDEBUG
 //#define U_HIDE_DRAFT_API
-#define U_HIDE_DEPRECATED_API
-#endif
+//#define U_HIDE_DEPRECATED_API
+//#endif
 
 #define  UNISTR_FROM_CHAR_EXPLICIT   explicit
 #define  UNISTR_FROM_STRING_EXPLICIT explicit
@@ -64,6 +64,7 @@ using namespace icu;
 #define USE_RINTERNALS
 #define R_NO_REMAP
 #include <R.h>
+#include <Rversion.h>
 #include <Rinternals.h>
 #include <Rmath.h>
 #include <Rdefines.h>
diff --git a/src/stri_interval.h b/src/stri_interval.h
index 4f98ee4..ae1c70a 100644
--- a/src/stri_interval.h
+++ b/src/stri_interval.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_intvec.h b/src/stri_intvec.h
index 63300e7..9464987 100644
--- a/src/stri_intvec.h
+++ b/src/stri_intvec.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_join.cpp b/src/stri_join.cpp
index 969a163..e6babcd 100644
--- a/src/stri_join.cpp
+++ b/src/stri_join.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_length.cpp b/src/stri_length.cpp
index 998cc6e..c5b7af5 100644
--- a/src/stri_length.cpp
+++ b/src/stri_length.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_macros.h b/src/stri_macros.h
index efd1e64..78d98ce 100644
--- a/src/stri_macros.h
+++ b/src/stri_macros.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -107,23 +107,55 @@
    (STRI__GET_INT32_LE(str_cur_s, 0) == 0x0000FEFFUL))
 
 
-// taken from R's Defn.h - sorry, this is needed
-// CHARSXP charset bits
+/* ************************************************************************
+ * based on R's Defn.h
+ * CHARSXP charset bits
+*/
+#ifndef BYTES_MASK
 #define BYTES_MASK (1<<1)
+#endif
+
+#ifndef LATIN1_MASK
 #define LATIN1_MASK (1<<2)
+#endif
+
+#ifndef UTF8_MASK
 #define UTF8_MASK (1<<3)
+#endif
+
+#ifndef ASCII_MASK
 #define ASCII_MASK (1<<6)
+#endif
+
+#ifndef IS_BYTES
 #define IS_BYTES(x) ((x)->sxpinfo.gp & BYTES_MASK)
+#endif
+
+#ifndef IS_LATIN1
 #define IS_LATIN1(x) ((x)->sxpinfo.gp & LATIN1_MASK)
+#endif
+
+#ifndef IS_ASCII
 #define IS_ASCII(x) ((x)->sxpinfo.gp & ASCII_MASK)
+#endif
+
+#ifndef IS_UTF8
 #define IS_UTF8(x) ((x)->sxpinfo.gp & UTF8_MASK)
+#endif
+
+#ifndef ENC_KNOWN
 #define ENC_KNOWN(x) ((x)->sxpinfo.gp & (LATIN1_MASK | UTF8_MASK | ASCII_MASK))
+#endif
 
+#ifndef isRaw
 #define isRaw(x) (TYPEOF(x) == RAWSXP)
+#endif
 
+/* ************************************************************************ */
 
-/// Unicode replacement character
+/* Unicode replacement character */
 #define UCHAR_REPLACEMENT 0xFFFD
+
 #define ASCII_SUBSTITUTE  0x1A
 #define ASCII_MAXCHARCODE 127
 #define UCHAR_REPLACEMENT_UTF8_BYTE1 0xef
diff --git a/src/stri_messages.h b/src/stri_messages.h
index ed89320..14e9ce4 100644
--- a/src/stri_messages.h
+++ b/src/stri_messages.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_pad.cpp b/src/stri_pad.cpp
index 6be27f3..7c9d331 100644
--- a/src/stri_pad.cpp
+++ b/src/stri_pad.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_prepare_arg.cpp b/src/stri_prepare_arg.cpp
index ef9e6d6..ff919d5 100644
--- a/src/stri_prepare_arg.cpp
+++ b/src/stri_prepare_arg.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_random.cpp b/src/stri_random.cpp
index 528e72a..54aa750 100644
--- a/src/stri_random.cpp
+++ b/src/stri_random.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_reverse.cpp b/src/stri_reverse.cpp
index 7740c30..40fa428 100644
--- a/src/stri_reverse.cpp
+++ b/src/stri_reverse.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_boundaries_count.cpp b/src/stri_search_boundaries_count.cpp
index 141280b..da06816 100644
--- a/src/stri_search_boundaries_count.cpp
+++ b/src/stri_search_boundaries_count.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_boundaries_extract.cpp b/src/stri_search_boundaries_extract.cpp
index 150b2c4..23a32a0 100644
--- a/src/stri_search_boundaries_extract.cpp
+++ b/src/stri_search_boundaries_extract.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_boundaries_locate.cpp b/src/stri_search_boundaries_locate.cpp
index 1578ad3..5379077 100644
--- a/src/stri_search_boundaries_locate.cpp
+++ b/src/stri_search_boundaries_locate.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_boundaries_split.cpp b/src/stri_search_boundaries_split.cpp
index 816cfb8..4983916 100644
--- a/src/stri_search_boundaries_split.cpp
+++ b/src/stri_search_boundaries_split.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_class_count.cpp b/src/stri_search_class_count.cpp
index 771eb0b..860aee6 100644
--- a/src/stri_search_class_count.cpp
+++ b/src/stri_search_class_count.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_class_detect.cpp b/src/stri_search_class_detect.cpp
index 846265b..34ddc92 100644
--- a/src/stri_search_class_detect.cpp
+++ b/src/stri_search_class_detect.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_class_extract.cpp b/src/stri_search_class_extract.cpp
index 4a970e2..4f37011 100644
--- a/src/stri_search_class_extract.cpp
+++ b/src/stri_search_class_extract.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_class_locate.cpp b/src/stri_search_class_locate.cpp
index 99deff9..27c58fe 100644
--- a/src/stri_search_class_locate.cpp
+++ b/src/stri_search_class_locate.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_class_replace.cpp b/src/stri_search_class_replace.cpp
index 632346e..adad425 100644
--- a/src/stri_search_class_replace.cpp
+++ b/src/stri_search_class_replace.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_class_split.cpp b/src/stri_search_class_split.cpp
index 641031f..8eade24 100644
--- a/src/stri_search_class_split.cpp
+++ b/src/stri_search_class_split.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_class_startsendswith.cpp b/src/stri_search_class_startsendswith.cpp
index dac77ec..b90dd16 100644
--- a/src/stri_search_class_startsendswith.cpp
+++ b/src/stri_search_class_startsendswith.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_class_subset.cpp b/src/stri_search_class_subset.cpp
index ab35349..905dff9 100644
--- a/src/stri_search_class_subset.cpp
+++ b/src/stri_search_class_subset.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_class_trim.cpp b/src/stri_search_class_trim.cpp
index fea38ff..182a62c 100644
--- a/src/stri_search_class_trim.cpp
+++ b/src/stri_search_class_trim.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_coll_count.cpp b/src/stri_search_coll_count.cpp
index d0974e5..c700b15 100644
--- a/src/stri_search_coll_count.cpp
+++ b/src/stri_search_coll_count.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_coll_detect.cpp b/src/stri_search_coll_detect.cpp
index cd9c4df..d38f7d4 100644
--- a/src/stri_search_coll_detect.cpp
+++ b/src/stri_search_coll_detect.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_coll_extract.cpp b/src/stri_search_coll_extract.cpp
index f148321..f060d3b 100644
--- a/src/stri_search_coll_extract.cpp
+++ b/src/stri_search_coll_extract.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_coll_locate.cpp b/src/stri_search_coll_locate.cpp
index 35142a2..523c01d 100644
--- a/src/stri_search_coll_locate.cpp
+++ b/src/stri_search_coll_locate.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_coll_replace.cpp b/src/stri_search_coll_replace.cpp
index 4f6555b..436e37b 100644
--- a/src/stri_search_coll_replace.cpp
+++ b/src/stri_search_coll_replace.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_coll_split.cpp b/src/stri_search_coll_split.cpp
index e1f86cd..0b2660c 100644
--- a/src/stri_search_coll_split.cpp
+++ b/src/stri_search_coll_split.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_coll_startsendswith.cpp b/src/stri_search_coll_startsendswith.cpp
index 8d73bfd..fcdaf18 100644
--- a/src/stri_search_coll_startsendswith.cpp
+++ b/src/stri_search_coll_startsendswith.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_coll_subset.cpp b/src/stri_search_coll_subset.cpp
index fd70ee9..23327ac 100644
--- a/src/stri_search_coll_subset.cpp
+++ b/src/stri_search_coll_subset.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_common.cpp b/src/stri_search_common.cpp
index 0e2d006..f7d0d83 100644
--- a/src/stri_search_common.cpp
+++ b/src/stri_search_common.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_fixed_count.cpp b/src/stri_search_fixed_count.cpp
index e26163f..4019e65 100644
--- a/src/stri_search_fixed_count.cpp
+++ b/src/stri_search_fixed_count.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_fixed_detect.cpp b/src/stri_search_fixed_detect.cpp
index 6771c46..2e77c57 100644
--- a/src/stri_search_fixed_detect.cpp
+++ b/src/stri_search_fixed_detect.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_fixed_extract.cpp b/src/stri_search_fixed_extract.cpp
index 5f99f4e..ae033a9 100644
--- a/src/stri_search_fixed_extract.cpp
+++ b/src/stri_search_fixed_extract.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_fixed_locate.cpp b/src/stri_search_fixed_locate.cpp
index 718518c..3a368ed 100644
--- a/src/stri_search_fixed_locate.cpp
+++ b/src/stri_search_fixed_locate.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_fixed_replace.cpp b/src/stri_search_fixed_replace.cpp
index c0f87d9..5054f1e 100644
--- a/src/stri_search_fixed_replace.cpp
+++ b/src/stri_search_fixed_replace.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_fixed_split.cpp b/src/stri_search_fixed_split.cpp
index c670f82..6379cf4 100644
--- a/src/stri_search_fixed_split.cpp
+++ b/src/stri_search_fixed_split.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_fixed_startsendswith.cpp b/src/stri_search_fixed_startsendswith.cpp
index a60d8a0..36f14f2 100644
--- a/src/stri_search_fixed_startsendswith.cpp
+++ b/src/stri_search_fixed_startsendswith.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_fixed_subset.cpp b/src/stri_search_fixed_subset.cpp
index 0598327..5fe3f04 100644
--- a/src/stri_search_fixed_subset.cpp
+++ b/src/stri_search_fixed_subset.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_in.cpp b/src/stri_search_in.cpp
index 0cc5e4a..b89a80a 100644
--- a/src/stri_search_in.cpp
+++ b/src/stri_search_in.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_other_replace.cpp b/src/stri_search_other_replace.cpp
index b223fff..faa5bd5 100644
--- a/src/stri_search_other_replace.cpp
+++ b/src/stri_search_other_replace.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_other_split.cpp b/src/stri_search_other_split.cpp
index f2a5ee2..f44def7 100644
--- a/src/stri_search_other_split.cpp
+++ b/src/stri_search_other_split.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_regex_count.cpp b/src/stri_search_regex_count.cpp
index f66f83e..3d68d3f 100644
--- a/src/stri_search_regex_count.cpp
+++ b/src/stri_search_regex_count.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_regex_detect.cpp b/src/stri_search_regex_detect.cpp
index f593729..e0f6c5d 100644
--- a/src/stri_search_regex_detect.cpp
+++ b/src/stri_search_regex_detect.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_regex_extract.cpp b/src/stri_search_regex_extract.cpp
index cabd258..9cdcd86 100644
--- a/src/stri_search_regex_extract.cpp
+++ b/src/stri_search_regex_extract.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_regex_locate.cpp b/src/stri_search_regex_locate.cpp
index b4298e6..a5583fe 100644
--- a/src/stri_search_regex_locate.cpp
+++ b/src/stri_search_regex_locate.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_regex_match.cpp b/src/stri_search_regex_match.cpp
index d8558cc..7180b73 100644
--- a/src/stri_search_regex_match.cpp
+++ b/src/stri_search_regex_match.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_regex_replace.cpp b/src/stri_search_regex_replace.cpp
index 746a73a..a8bef42 100644
--- a/src/stri_search_regex_replace.cpp
+++ b/src/stri_search_regex_replace.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_regex_split.cpp b/src/stri_search_regex_split.cpp
index e0012bc..2842e32 100644
--- a/src/stri_search_regex_split.cpp
+++ b/src/stri_search_regex_split.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_search_regex_subset.cpp b/src/stri_search_regex_subset.cpp
index c23fc30..44f89eb 100644
--- a/src/stri_search_regex_subset.cpp
+++ b/src/stri_search_regex_subset.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_sort.cpp b/src/stri_sort.cpp
index 0d6d23a..1022c2e 100644
--- a/src/stri_sort.cpp
+++ b/src/stri_sort.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_stats.cpp b/src/stri_stats.cpp
index 065d06b..4da454f 100644
--- a/src/stri_stats.cpp
+++ b/src/stri_stats.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_string8.h b/src/stri_string8.h
index e43749a..6d4726f 100644
--- a/src/stri_string8.h
+++ b/src/stri_string8.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_string8buf.h b/src/stri_string8buf.h
index 549b571..cc6b614 100644
--- a/src/stri_string8buf.h
+++ b/src/stri_string8buf.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_stringi.cpp b/src/stri_stringi.cpp
index 3f1f894..dd3a95b 100644
--- a/src/stri_stringi.cpp
+++ b/src/stri_stringi.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -305,7 +305,10 @@ extern "C" void R_init_stringi(DllInfo* dll)
       Rf_error("ICU init failed: %s", u_errorName(status));
 
    R_registerRoutines(dll, NULL, cCallMethods, NULL, NULL);
-//   R_useDynamicSymbols(dll, Rboolean(FALSE)); // slower
+   R_useDynamicSymbols(dll, (Rboolean)FALSE);
+#if defined(R_VERSION) && R_VERSION >= R_Version(3, 0, 0)
+   R_forceSymbols(dll, (Rboolean)TRUE);
+#endif
 
    const R_CallMethodDef* methods = cCallMethods;
    while (methods->name) {
diff --git a/src/stri_stringi.h b/src/stri_stringi.h
index 8ade0b2..1ab25e7 100644
--- a/src/stri_stringi.h
+++ b/src/stri_stringi.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_sub.cpp b/src/stri_sub.cpp
index 4f5132f..602b8bf 100644
--- a/src/stri_sub.cpp
+++ b/src/stri_sub.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -34,66 +34,82 @@
 #include "stri_container_utf8_indexable.h"
 #include "stri_string8buf.h"
 
-
-#define STRI__SUB_PREPARE_FROM_TO_LENGTH                                     \
-   bool from_ismatrix = Rf_isMatrix(from);                                   \
-   if (from_ismatrix) {                                                      \
-      SEXP t = Rf_getAttrib(from, R_DimSymbol);                              \
-      if (INTEGER(t)[1] == 1)                                                \
-         from_ismatrix = false; /* it's a column vector */                   \
-      else if (INTEGER(t)[1] > 2) {                                          \
-         /* error() is allowed here */                                       \
-         Rf_error(MSG__ARG_EXPECTED_MATRIX_WITH_GIVEN_COLUMNS, "from", 2);   \
-      }                                                                      \
-   }                                                                         \
-   PROTECT(from = stri_prepare_arg_integer(from, "from"));                   \
-   /* may remove R_DimSymbol */                                              \
-                                                                             \
-   if (from_ismatrix) {                                                      \
-      from_len      = LENGTH(from)/2;                                        \
-      to_len        = from_len;                                              \
-      from_tab      = INTEGER(from);                                         \
-      to_tab        = from_tab+from_len;                                     \
-      PROTECT(to); /* fake - not to provoke stack imbalance */               \
-      PROTECT(length); /* fake - not to provoke stack imbalance */           \
-   }                                                                         \
-   else if (isNull(length)) {                                                \
-      PROTECT(to    = stri_prepare_arg_integer(to, "to"));                   \
-      from_len      = LENGTH(from);                                          \
-      from_tab      = INTEGER(from);                                         \
-      to_len        = LENGTH(to);                                            \
-      to_tab        = INTEGER(to);                                           \
-      PROTECT(length); /* fake - not to provoke stack imbalance */           \
-   }                                                                         \
-   else {                                                                    \
-      PROTECT(length= stri_prepare_arg_integer(length, "length"));           \
-      from_len      = LENGTH(from);                                          \
-      from_tab      = INTEGER(from);                                         \
-      length_len    = LENGTH(length);                                        \
-      length_tab    = INTEGER(length);                                       \
-      PROTECT(to); /* fake - not to provoke stack imbalance */               \
+/***
+ * used both in stri_sub and stri_sub_replacement
+ *
+ * PROTECTs both `to` and `length`
+ */
+void stri__sub_prepare_from_to_length(SEXP& from, SEXP& to, SEXP& length,
+   R_len_t& from_len, R_len_t& to_len, R_len_t& length_len,
+   int*& from_tab, int*& to_tab, int*& length_tab)
+{
+   bool from_ismatrix = Rf_isMatrix(from);
+   if (from_ismatrix) {
+      SEXP t;
+      PROTECT(t = Rf_getAttrib(from, R_DimSymbol));
+      if (INTEGER(t)[1] == 1)
+         from_ismatrix = false; /* it's a column vector */
+      else if (INTEGER(t)[1] > 2) {
+         /* error() is allowed here */
+         Rf_error(MSG__ARG_EXPECTED_MATRIX_WITH_GIVEN_COLUMNS, "from", 2);
+      }
+      UNPROTECT(1); // t
+   }
+   PROTECT(from = stri_prepare_arg_integer(from, "from"));
+   /* may remove R_DimSymbol */
+
+   if (from_ismatrix) {
+      from_len      = LENGTH(from)/2;
+      to_len        = from_len;
+      from_tab      = INTEGER(from);
+      to_tab        = from_tab+from_len;
+      PROTECT(to); /* fake - not to provoke stack imbalance */
+      PROTECT(length); /* fake - not to provoke stack imbalance */
+   }
+   else if (isNull(length)) {
+      PROTECT(to    = stri_prepare_arg_integer(to, "to"));
+      from_len      = LENGTH(from);
+      from_tab      = INTEGER(from);
+      to_len        = LENGTH(to);
+      to_tab        = INTEGER(to);
+      PROTECT(length); /* fake - not to provoke stack imbalance */
+   }
+   else {
+      PROTECT(length= stri_prepare_arg_integer(length, "length"));
+      from_len      = LENGTH(from);
+      from_tab      = INTEGER(from);
+      length_len    = LENGTH(length);
+      length_tab    = INTEGER(length);
+      PROTECT(to); /* fake - not to provoke stack imbalance */
    }
+}
 
 
-#define STRI__SUB_GET_INDICES(cur_from, cur_to, cur_from2, cur_to2) \
-                                                                    \
-   if (cur_from >= 0) {                                             \
-      cur_from--; /* 1-based -> 0-based index */                    \
-      cur_from2 = str_cont.UChar32_to_UTF8_index_fwd(i, cur_from);  \
-   }                                                                \
-   else {                                                           \
-      cur_from  = -cur_from;                                        \
-      cur_from2 = str_cont.UChar32_to_UTF8_index_back(i, cur_from); \
-   }                                                                \
-   if (cur_to >= 0) {                                               \
-      ; /* do nothing with cur_to ; 1-based -> 0-based index */     \
-        /* but +1 as we need the next one (bound) */                \
-      cur_to2 = str_cont.UChar32_to_UTF8_index_fwd(i, cur_to);      \
-   }                                                                \
-   else {                                                           \
-      cur_to  = -cur_to - 1;                                        \
-      cur_to2 = str_cont.UChar32_to_UTF8_index_back(i, cur_to);     \
+/***
+ * used both in stri_sub and stri_sub_replacement
+ */
+inline void stri__sub_get_indices(StriContainerUTF8_indexable& str_cont, R_len_t& i,
+                           R_len_t& cur_from,  R_len_t& cur_to,
+                           R_len_t& cur_from2, R_len_t& cur_to2)
+{
+   if (cur_from >= 0) {
+      cur_from--; /* 1-based -> 0-based index */
+      cur_from2 = str_cont.UChar32_to_UTF8_index_fwd(i, cur_from);
+   }
+   else {
+      cur_from  = -cur_from;
+      cur_from2 = str_cont.UChar32_to_UTF8_index_back(i, cur_from);
    }
+   if (cur_to >= 0) {
+      ; /* do nothing with cur_to ; 1-based -> 0-based index */
+        /* but +1 as we need the next one (bound) */
+      cur_to2 = str_cont.UChar32_to_UTF8_index_fwd(i, cur_to);
+   }
+   else {
+      cur_to  = -cur_to - 1;
+      cur_to2 = str_cont.UChar32_to_UTF8_index_back(i, cur_to);
+   }
+}
 
 
 /**
@@ -142,7 +158,8 @@ SEXP stri_sub(SEXP str, SEXP from, SEXP to, SEXP length)
    int* to_tab           = 0;
    int* length_tab       = 0;
 
-   STRI__SUB_PREPARE_FROM_TO_LENGTH /* does 3 PROTECTs */
+   stri__sub_prepare_from_to_length(from, to, length,  /* PROTECTs 3 objects */
+      from_len, to_len, length_len, from_tab, to_tab, length_tab);
 
    R_len_t vectorize_len = stri__recycling_rule(true, 3,
       str_len, from_len, (to_len>length_len)?to_len:length_len);
@@ -182,7 +199,7 @@ SEXP stri_sub(SEXP str, SEXP from, SEXP to, SEXP length)
       R_len_t cur_from2; // UTF-8 byte indices
       R_len_t cur_to2;   // UTF-8 byte indices
 
-      STRI__SUB_GET_INDICES(cur_from, cur_to, cur_from2, cur_to2)
+      stri__sub_get_indices(str_cont, i, cur_from, cur_to, cur_from2, cur_to2);
 
       if (cur_to2 > cur_from2) { // just copy
          SET_STRING_ELT(ret, i, Rf_mkCharLenCE(str_cur_s+cur_from2, cur_to2-cur_from2, CE_UTF8));
@@ -252,7 +269,8 @@ SEXP stri_sub_replacement(SEXP str, SEXP from, SEXP to, SEXP length, SEXP omit_n
    int* to_tab           = 0; // see below
    int* length_tab       = 0; // see below
 
-   STRI__SUB_PREPARE_FROM_TO_LENGTH /* does 3 PROTECTs */
+   stri__sub_prepare_from_to_length(from, to, length,  /* PROTECTs 3 objects */
+      from_len, to_len, length_len, from_tab, to_tab, length_tab);
 
    R_len_t vectorize_len = stri__recycling_rule(true, 4,
       str_len, value_len, from_len, (to_len>length_len)?to_len:length_len);
@@ -310,7 +328,7 @@ SEXP stri_sub_replacement(SEXP str, SEXP from, SEXP to, SEXP length, SEXP omit_n
       R_len_t cur_from2; // UTF-8 byte indices
       R_len_t cur_to2;   // UTF-8 byte indices
 
-      STRI__SUB_GET_INDICES(cur_from, cur_to, cur_from2, cur_to2)
+      stri__sub_get_indices(str_cont, i, cur_from, cur_to, cur_from2, cur_to2);
       if (cur_to2 < cur_from2) cur_to2 = cur_from2;
 
       R_len_t buflen = str_cur_n-(cur_to2-cur_from2)+value_cur_n;
diff --git a/src/stri_test.cpp b/src/stri_test.cpp
index 6c70a41..ec3396a 100644
--- a/src/stri_test.cpp
+++ b/src/stri_test.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_time_calendar.cpp b/src/stri_time_calendar.cpp
index b1492e4..3db4703 100644
--- a/src/stri_time_calendar.cpp
+++ b/src/stri_time_calendar.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_time_format.cpp b/src/stri_time_format.cpp
index 6b4750f..18ca05c 100644
--- a/src/stri_time_format.cpp
+++ b/src/stri_time_format.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_time_symbols.cpp b/src/stri_time_symbols.cpp
index c571a7c..8b20d8d 100644
--- a/src/stri_time_symbols.cpp
+++ b/src/stri_time_symbols.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_time_zone.cpp b/src/stri_time_zone.cpp
index c8deeb5..6226470 100644
--- a/src/stri_time_zone.cpp
+++ b/src/stri_time_zone.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_trans_casemap.cpp b/src/stri_trans_casemap.cpp
index 372fe10..e82bdd4 100644
--- a/src/stri_trans_casemap.cpp
+++ b/src/stri_trans_casemap.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_trans_normalization.cpp b/src/stri_trans_normalization.cpp
index f05238d..768b0cc 100644
--- a/src/stri_trans_normalization.cpp
+++ b/src/stri_trans_normalization.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_trans_other.cpp b/src/stri_trans_other.cpp
index adab4b2..d459740 100644
--- a/src/stri_trans_other.cpp
+++ b/src/stri_trans_other.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_trans_transliterate.cpp b/src/stri_trans_transliterate.cpp
index 8ed5536..2696e83 100644
--- a/src/stri_trans_transliterate.cpp
+++ b/src/stri_trans_transliterate.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_ucnv.cpp b/src/stri_ucnv.cpp
index 5ec49ee..b591d4c 100644
--- a/src/stri_ucnv.cpp
+++ b/src/stri_ucnv.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_ucnv.h b/src/stri_ucnv.h
index cf10919..e7617d1 100644
--- a/src/stri_ucnv.h
+++ b/src/stri_ucnv.h
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_uloc.cpp b/src/stri_uloc.cpp
index e507a4b..a04eefc 100644
--- a/src/stri_uloc.cpp
+++ b/src/stri_uloc.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_utils.cpp b/src/stri_utils.cpp
index 65e5af6..71e8565 100644
--- a/src/stri_utils.cpp
+++ b/src/stri_utils.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/stri_wrap.cpp b/src/stri_wrap.cpp
index 44bf74c..40e0c6c 100644
--- a/src/stri_wrap.cpp
+++ b/src/stri_wrap.cpp
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2016, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/uconfig_local.h.in b/src/uconfig_local.h.in
index 6e8285d..03f1fcf 100644
--- a/src/uconfig_local.h.in
+++ b/src/uconfig_local.h.in
@@ -1,5 +1,5 @@
 /* This file is part of the 'stringi' package for R.
- * Copyright (C) 2013-2015, Marek Gagolewski and Bartek Tartanus
+ * Copyright (c) 2013-2017, Marek Gagolewski and other contributors.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/r-cran-stringi.git



More information about the debian-med-commit mailing list