deprecate generalized vectors in favor of arrays
[bpt/guile.git] / libguile / strings.h
index 6eafafa..42e57ac 100644 (file)
@@ -3,7 +3,7 @@
 #ifndef SCM_STRINGS_H
 #define SCM_STRINGS_H
 
-/* Copyright (C) 1995,1996,1997,1998,2000,2001, 2004, 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1996,1997,1998,2000,2001, 2004, 2005, 2006, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -85,7 +85,7 @@
    - SCM_STRING_CHARS uses scm_i_string_writable_chars and immediately
      calls scm_i_stop_writing, hoping for the best.  SCM_STRING_LENGTH
      is the same as scm_i_string_length.  SCM_STRING_CHARS will throw
-     an error for for strings that are not null-terminated.  There is
+     an error for strings that are not null-terminated.  There is
      no wide version of this interface.
 */
 
@@ -113,10 +113,8 @@ SCM_API SCM scm_substring_shared (SCM str, SCM start, SCM end);
 SCM_API SCM scm_substring_copy (SCM str, SCM start, SCM end);
 SCM_API SCM scm_string_append (SCM args);
 
-SCM_API SCM scm_from_stringn (const char *str, size_t len, 
-                                     const char *encoding,
-                                     scm_t_string_failed_conversion_handler 
-                                     handler);
+SCM_API SCM scm_from_stringn (const char *str, size_t len, const char *encoding,
+                              scm_t_string_failed_conversion_handler handler);
 SCM_API SCM scm_c_make_string (size_t len, SCM chr);
 SCM_API size_t scm_c_string_length (SCM str);
 SCM_API size_t scm_c_symbol_length (SCM sym);
@@ -127,19 +125,36 @@ SCM_API SCM scm_c_substring_read_only (SCM str, size_t start, size_t end);
 SCM_API SCM scm_c_substring_shared (SCM str, size_t start, size_t end);
 SCM_API SCM scm_c_substring_copy (SCM str, size_t start, size_t end);
 
-SCM_API int scm_is_string (SCM x);
+/* Use locale encoding for user input, user output, or interacting with
+   the C library.  Use latin1 for ASCII, and for literals in source
+   code.  Use utf8 for interaction with modern libraries which deal in
+   UTF-8.  Otherwise use scm_to_stringn or scm_from_stringn with a
+   specific encoding. */
+
 SCM_API SCM scm_from_locale_string (const char *str);
 SCM_API SCM scm_from_locale_stringn (const char *str, size_t len);
-SCM_INTERNAL SCM scm_i_from_utf8_string (const scm_t_uint8 *str);
 SCM_API SCM scm_take_locale_string (char *str);
 SCM_API SCM scm_take_locale_stringn (char *str, size_t len);
 SCM_API char *scm_to_locale_string (SCM str);
 SCM_API char *scm_to_locale_stringn (SCM str, size_t *lenp);
-SCM_INTERNAL char *scm_to_stringn (SCM str, size_t *lenp, 
-                                   const char *encoding,
-                                   scm_t_string_failed_conversion_handler
-                                   handler);
-SCM_INTERNAL scm_t_uint8 *scm_i_to_utf8_string (SCM str);
+
+SCM_API SCM scm_from_latin1_string (const char *str);
+SCM_API SCM scm_from_latin1_stringn (const char *str, size_t len);
+SCM_API char *scm_to_latin1_string (SCM str);
+SCM_API char *scm_to_latin1_stringn (SCM str, size_t *lenp);
+
+SCM_API char *scm_to_utf8_string (SCM str);
+SCM_API char *scm_to_utf8_stringn (SCM str, size_t *lenp);
+SCM_API SCM scm_from_utf8_string (const char *str);
+SCM_API SCM scm_from_utf8_stringn (const char *str, size_t len);
+
+SCM_API scm_t_wchar *scm_to_utf32_string (SCM str);
+SCM_API scm_t_wchar *scm_to_utf32_stringn (SCM str, size_t *lenp);
+SCM_API SCM scm_from_utf32_string (const scm_t_wchar *str);
+SCM_API SCM scm_from_utf32_stringn (const scm_t_wchar *str, size_t len);
+
+SCM_API char *scm_to_stringn (SCM str, size_t *lenp, const char *encoding,
+                              scm_t_string_failed_conversion_handler handler);
 SCM_API size_t scm_to_locale_stringbuf (SCM str, char *buf, size_t max_len);
 
 SCM_API SCM scm_string_normalize_nfd (SCM str);
@@ -162,8 +177,11 @@ SCM_API SCM scm_makfromstrs (int argc, char **argv);
 
 /* internal accessor functions.  Arguments must be valid. */
 
-SCM_INTERNAL SCM scm_i_make_string (size_t len, char **datap);
-SCM_INTERNAL SCM scm_i_make_wide_string (size_t len, scm_t_wchar **datap);
+SCM_INTERNAL SCM scm_i_make_string (size_t len, char **datap,
+                                   int read_only_p);
+SCM_INTERNAL SCM scm_i_make_wide_string (size_t len, scm_t_wchar **datap,
+                                        int read_only_p);
+SCM_INTERNAL SCM scm_i_set_string_read_only_x (SCM str);
 SCM_INTERNAL SCM scm_i_substring (SCM str, size_t start, size_t end);
 SCM_INTERNAL SCM scm_i_substring_read_only (SCM str, size_t start, size_t end);
 SCM_INTERNAL SCM scm_i_substring_shared (SCM str, size_t start, size_t end);
@@ -172,6 +190,8 @@ SCM_INTERNAL size_t scm_i_string_length (SCM str);
 SCM_API /* FIXME: not internal */ const char *scm_i_string_chars (SCM str);
 SCM_API /* FIXME: not internal */ char *scm_i_string_writable_chars (SCM str);
 SCM_INTERNAL const scm_t_wchar *scm_i_string_wide_chars (SCM str);
+SCM_INTERNAL const void *scm_i_string_data (SCM str);
+
 SCM_INTERNAL SCM scm_i_string_start_writing (SCM str);
 SCM_INTERNAL void scm_i_string_stop_writing (void);
 SCM_INTERNAL int scm_i_is_narrow_string (SCM str);
@@ -193,6 +213,10 @@ SCM_INTERNAL int scm_i_is_narrow_symbol (SCM str);
 SCM_INTERNAL int scm_i_try_narrow_string (SCM str);
 SCM_INTERNAL SCM scm_i_symbol_substring (SCM sym, size_t start, size_t end);
 SCM_INTERNAL scm_t_wchar scm_i_symbol_ref (SCM sym, size_t x);
+SCM_INTERNAL void scm_encoding_error (const char *subr, int err,
+                                     const char *message, SCM port, SCM chr);
+SCM_INTERNAL void scm_decoding_error (const char *subr, int err,
+                                     const char *message, SCM port);
 
 /* internal utility functions. */
 
@@ -209,6 +233,8 @@ SCM_API SCM scm_sys_symbol_dump (SCM);
 SCM_API SCM scm_sys_stringbuf_hist (void);
 #endif
 
+
+
 /* deprecated stuff */
 
 #if SCM_ENABLE_DEPRECATED