1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-28 22:10:29 +02:00
Commit graph

46 commits

Author SHA1 Message Date
Michael Gran
211683cc5c open-file should handle binary mode and coding declarations
The open-file port should use the 8-bit ISO-8859-1 encoding when
a file is opened using mode "b".  Also, it should honor a "coding:"
declaration at the top of a file when reading files where it is present.

* libguile/fports.c (scm_open_file): modified
* test-suite/tests/ports.test: more tests for open-file
* doc/ref/api-io.texi (File Ports): more documentation for open-file
2010-07-17 03:50:52 -07:00
Michael Gran
e50d921bd8 read-line should use port's encoding, not locale's encoding
* libguile/rdelim.c (scm_read_line): modified, use port's encoding
* test-suite/test/ports.test: new test
2010-07-16 06:44:59 -07:00
Ludovic Courtès
ef7e4ba373 Improve encoding error reporting.
* libguile/strings.c (scm_encoding_error): Change arguments to convey
  more information.  Raise the error with `scm_throw ()', passing all
  the information to the handler.
  (scm_from_stringn, scm_to_stringn): Update accordingly.

* test-suite/tests/ports.test ("string ports")["wrong encoding"]: Check
  the arguments passed to the `throw' handler.

* test-suite/tests/r6rs-ports.test ("7.2.11 Binary
  Output")["put-bytevector with wrong-encoding string port"]: Likewise.
2010-03-18 20:41:03 +01:00
Ludovic Courtès
7b0419128b Have string ports honor `%default-port-encoding'.
* libguile/strports.c (scm_i_mkstrport): Remove.
  (scm_mkstrport): Don't change the port's encoding to UTF-8; convert
  STR to the default port encoding.
  (scm_strport_to_string): Fix documentation & indentation.

* libguile/strports.h (scm_i_mkstrport): Remove.

* test-suite/lib.scm (exception:encoding-error): New variable.
  (format-test-name): Set `%default-port-encoding' to "UTF-8".

* test-suite/tests/ports.test ("string ports")["%default-port-encoding
  is honored", "suitable encoding [latin-1]", "suitable encoding
  [latin-3]", "wrong encoding"]: New tests.

* test-suite/tests/r6rs-ports.test ("7.2.11 Binary
  Output")["put-bytevector with UTF-16 string port", "put-bytevector
  with wrong-encoding string port"]: New tests.

* test-suite/tests/reader.test (read-string): Set
  `%default-port-encoding' to `#f'.
  ("reading")["unprintable symbol"]: Use a string that doesn't contain
  zeros.

* doc/ref/api-io.texi (String Ports): Document encoding issues with
  `call-with-output-string' and `with-output-to-string'.
2010-01-07 11:10:35 +01:00
Ludovic Courtès
d6a6989e08 Replace setbinary' by a public %default-port-encoding' fluid.
* doc/ref/api-evaluation.texi (Character Encoding of Source Files): Add
  reference to the "Ports" node.

* doc/ref/api-io.texi (Ports): Document `%default-port-encoding'.

* libguile/ports.c (scm_port_encoding_var): Rename to...
  (default_port_encoding_var): ... this; update callers.  Make `static'.

* libguile/posix.c (scm_setbinary): Remove.

* libguile/posix.h: Adjust accordingly.

* test-suite/tests/numbers.test: Remove unneeded `setbinary' call.

* test-suite/tests/ports.test: Replace `setbinary' call by equivalent
  `%default-port-encoding' mutation and `set-port-encoding!' calls.

* test-suite/tests/r6rs-ports.test: Replace `setbinary' call by
  equivalent `%default-port-encoding' mutation.
2009-11-14 16:59:25 +01:00
Michael Gran
889975e51a Add full Unicode capability to ports and the default reader
Ports are given two additional properties: a character encoding and
a conversion failure strategy.  These properties have getters and setters.
The new properties are used to convert any locale text to/from the
internal representation of strings.

If unspecified, ports use a default value. The default value of these
properties is held in a fluid.  The default character encoding can be
modified by calling setlocale.

ISO-8859-1 is treated specially.  Since it is a native encoding of
strings, it can be processed more quickly.  Source code is assumed to be
ISO-8859-1 unless otherwise specified.  The encoding of a source code
file can be given as 'coding: XXXXX' in a magic comment at the top of a
file.

The C functions that deal with encoding often use a null pointer
as shorthand for the native Latin-1 encoding, for efficiency's sake.

* test-suite/tests/encoding-iso88591.test: new tests
* test-suite/tests/encoding-iso88597.test: new tests
* test-suite/tests/encoding-utf8.test: new tests
* test-suite/tests/encoding-escapes.test: new tests
* test-suite/tests/numbers.test: declare 'binary' encoding
* test-suite/tests/ports.test: declare 'binary' encoding
* test-suite/tests/r6rs-ports.test: declare 'binary' encoding

* module/system/base/compile.scm (compile-file): use source-code
  file's self-declared encoding when compiling files

* libguile/strports.c: store string ports in locale encoding
  (scm_strport_to_locale_u8vector, scm_call_with_output_locale_u8vector)
  (scm_open_input_locale_u8vector, scm_get_output_locale_u8vector):
  new functions

* libguile/strings.h: new declaration for scm_i_string_contains_char

* libguile/strings.c (scm_i_string_contains_char): new function
  (scm_from_stringn, scm_to_stringn):  use NULL for Latin-1
  (scm_from_locale_stringn, scm_to_locale_stringn): respect character
  encoding of input and output ports

* libguile/read.h: declaration for scm_scan_for_encoding

* libguile/read.c:
  (read_token): now takes scheme string instead of C string/length
  (read_complete_token): new function
  (scm_read_sexp, scm_read_number, scm_read_mixed_case_symbol)
  (scm_read_number_and_radix, scm_read_quote, scm_read_semicolon_comment)
  (scm_read_srfi4_vector, scm_read_bytevector, scm_read_guile_bit_vector)
  (scm_read_scsh_block_comment, scm_read_commented_expression)
  (scm_read_extended_symbol, scm_read_sharp_extension, scm_read_shart)
  (scm_read_expression): use scm_t_wchar for char type, use read_complete_token
  (scm_scan_for_encoding): new function to find a file's character encoding
  (scm_file_encoding): new function to find a port's character encoding

* libguile/rdelim.c: don't unpack strings

* libguile/print.h: declaration for modified function
  scm_i_charprint

* libguile/print.c: use locale when printing characters and
  strings
  (scm_i_charprint): input parameter is now scm_t_wchar
  (scm_simple_format): don't unpack strings

* libguile/posix.h: new declaration for scm_setbinary.

* libguile/posix.c (scm_setlocale): set default and stdio port
  encodings based on the locale's character encoding
  (scm_setbinary): new function

* libguile/ports.h (scm_t_port): add encoding and failed
  conversion handler to port type.  Declarations for new or modified
  functions scm_getc, scm_unget_byte, scm_ungetc,
  scm_i_get_port_encoding, scm_i_set_port_encoding_x,
  scm_port_encoding, scm_set_port_encoding_x,
  scm_i_get_conversion_strategy, scm_i_set_conversion_strategy_x,
  scm_port_conversion_strategy, scm_set_port_conversion_strategy_x.

* libguile/ports.c: assign the current ports to zero on startup so
  we can see if they've been set.
  (scm_current_input_port, scm_current_output_port,
  scm_current_error_port): return #f if the port is not yet
  initialized
  (scm_new_port_table_entry): set up a new port's encoding and
  illegal sequence handler based on the thread's current defaults
  (scm_i_remove_port): free port encoding name when port is removed
  (scm_i_mode_bits_n): now takes a scheme string instead of a c
  string and length.  All callers changed.
  (SCM_MBCHAR_BUF_SIZE): new const
  (scm_getc): new function, since the scm_getc in inline.h is now
  scm_get_byte_or_eof.  This pulls one codepoint from a port.
  (scm_lfwrite_substr, scm_lfwrite_str): now uses port's encoding
  (scm_unget_byte): new function, incorportaing the low-level functionality
  of scm_ungetc
  (scm_ungetc): uses scm_unget_byte

* libguile/numbers.h (scm_t_wchar): compilation order problem with
  scm_t_wchar being use in functions in multiple headers.  Forward
  declare scm_t_wchar.

* libguile/load.c (scm_primitive_load): scan for file encoding at
  top of file and use it to set the load port's encoding

* libguile/inline.h (scm_get_byte_or_eof): new function
  incorporating most of the functionality of scm_getc.

* libguile/fports.c (fport_fill_input): now returns scm_t_wchar

* libguile/chars.h (scm_t_wchar): avoid compilation order problem
  with declaration of scm_t_wchar
2009-08-25 07:54:37 -07:00
Neil Jerram
53befeb700 Change Guile license to LGPLv3+
(Not quite finished, the following will be done tomorrow.
   module/srfi/*.scm
   module/rnrs/*.scm
   module/scripts/*.scm
   testsuite/*.scm
   guile-readline/*
)
2009-06-17 00:22:09 +01:00
Han-Wen Nienhuys
e9966dbb9f ("port-for-each"): remove unresolved for
port-for-each memory test.
("fdes->port"): test fdes->port
2007-08-26 18:12:53 +00:00
Kevin Ryde
256f34e7a4 (port-for-each): New test for passing freed cell,
marked as unresolved since problem not yet fixed.
2007-08-23 00:03:14 +00:00
Kevin Ryde
004be623c4 merge from 1.8 branch 2007-03-07 23:00:22 +00:00
Kevin Ryde
8ab3d8a068 merge from 1.8 branch 2006-10-09 23:40:48 +00:00
Marius Vollmer
c56c0f7966 Delete test file after all tests have run in order to make "make
distcheck" work.
2006-05-27 22:24:24 +00:00
Kevin Ryde
6e7d5622ee merge from 1.8 branch 2006-04-16 23:37:40 +00:00
Marius Vollmer
92205699d0 The FSF has a new address. 2005-05-23 19:57:22 +00:00
Marius Vollmer
e4cbd1d8aa ("string ports"): Copy string literal so that it can be modified. 2004-09-22 14:25:47 +00:00
Kevin Ryde
7424deab5d (port-column): Further tests, of new \a \b \r. 2004-09-08 01:20:52 +00:00
Kevin Ryde
ee6eedcde8 (call-with-output-string): Test proc closing port. 2003-10-02 00:17:16 +00:00
Dirk Herrmann
8aa28a916c * guile-test: Wrapped in module (test-suite guile-test).
(main data-file-name test-file-name): Exported.

	((guile-user)::main): New function, wrapper for function
	(test-suite guile-test)::main.

	* tests/load.test: Wrapped in module (test-suite test-load).

	* tests/ports.test: Wrapped in module (test-suite test-ports).

	* tests/r4rs.test: Wrapped in module (test-suite test-r4rs).
	Added comments about the required structure of the file itself,
	since it is subject to some tests.  Removed some now unnecessary
	undefine operations.

	* tests/syntax.test: Wrapped in module (test-suite test-syntax)
2003-09-22 19:00:41 +00:00
Stefan Jahn
8f99e3f38b 2001-11-04 Stefan Jahn <stefan@lkcc.org>
* NEWS: Corrected remarks about SCM_API.

        * configure.in: Defining USE_DLL_IMPORT definition to indicate
        usage of DLL import macros in `libguile/__scm.h'.
        (LIBOBJS): Removed `fileblocks.o' from the list of object files.
        Somehow Jim Blandy's patch from 1997 did not survive.

2001-11-04  Stefan Jahn  <stefan@lkcc.org>

        * configure.in (EXTRA_DEFS): Follow-up patch.  Using SCM_IMPORT
        instead of __SCM_IMPORT__.

        * readline.c (scm_readline_init_ports): Disable input/output
        stream redirection for Win32.  The readline package for Win32
        does not support this.  The guile-readline library works fine
        for command line editing.

        * readline.h (SCM_RL_API): Renamed __FOO__ macros into FOO.

2001-11-04  Stefan Jahn  <stefan@lkcc.org>

        * Makefile.am (libguile_la_LIBADD): Added $(THREAD_LIBS_LOCAL)
        here (was at guile_LDADD) which describes the dependency
        correctly and allows a clean build on Win32.

        * __scm.h (SCM_API): Follow-up patch.  Renamed __FOO__ macros
        into FOO.

        * __scm.h: USE_DLL_IMPORT indicates the usage of the DLL
        import macros for external libraries (libcrypt, libqthreads,
        libreadline and libregex).

        * coop-defs.h: Include <winsock2.h> for `struct timeval'.

        * posix.c (flock): Added support for flock() in M$-Windows.

        * guile.c (SCM_IMPORT): Follow-up patch.  Use SCM_IMPORT instead
        of __SCM_IMPORT__.

        * fports.c (getflags): Differentiate reading and writing pipes
        descriptors.

        * filesys.c (S_IS*): Redefine all of the S_IS*() macros for
        M$-Windows.

        * coop.c (coop_condition_variable_timed_wait_mutex): Use
        conditionalized error code if `ETIMEDOUT' is not available.
        (scm_thread_usleep): Remove bogus declaration of `struct timeval
        timeout'.

        * numbers.c (PTRDIFF_MIN): Moved this definition where it actually
        belongs.  That is because NO_PREPRO_MAGIC gets undefined after
        each inclusion of `num2integral.i.c'.
        (SIZE_MAX): Define NO_PREPRO_MAGIC if SIZE_MAX is undefined.

2001-11-04  Stefan Jahn  <stefan@lkcc.org>

        * md/Makefile.am (EXTRA_DIST): Added `i386.asm'.

        * md/i386.asm: New file.  Contains the Intel syntax version for
        nasm/tasm/masm of the file `i386.s'.

        * qt.h.in: Definition of QT_API, QT_IMPORT and QT_EXPORT.
        Prefixed each symbols which is meant to go into a DLL.

        * Makefile.am (libqthreads_la_LDFLAGS):  Put `-no-undefined'
        into LDFLAGS to support linkers which do not allow unresolved
        symbols inside shared libraries.
        (EXTRA_DIST): Add `libqthreads.def', which is an export file
        definition for M$-Windows.  It defines exported symbols.  This is
        necessary because the M$VC linker does not know how to export
        assembler symbols into a DLL.

2001-11-04  Stefan Jahn  <stefan@lkcc.org>

        * srfi-13.h, srfi-14.h, srfi-4.h: Follow-up patch.  Renamed
        __FOO__ macros into FOO.

2001-11-04  Stefan Jahn  <stefan@lkcc.org>

        * tests/ports.test: Run (close-port) before (delete-file) if
        necessary/advisory.
2001-11-04 15:52:30 +00:00
Martin Grabmüller
96e30d2ab2 * tests/alist.test, tests/bit-operations.test,
tests/common-list.test, tests/environments.test, tests/eval.test,
	tests/gc.test, tests/hooks.test, tests/import.test,
	tests/interp.test, tests/list.test, tests/load.test,
	tests/numbers.test, tests/ports.test, tests/r4rs.test,
	tests/version.test, tests/weaks.test, lib.scm, guile-test: Updated
	copyright notice.
2001-07-19 20:30:37 +00:00
Marius Vollmer
9a8be5a707 * tests/ports.test: New test for output port line counts. 2001-06-16 20:13:50 +00:00
Gary Houston
c685b42fa3 * tests/r4rs.test: delete files tmp1, tmp2, tmp3 after the tests
have run.

	* tests/ports.test (test-file), tests/load.test (temp-dir):
	redefined using data-file-name instead of tmpnam.  the test files
	will be created in the build directory instead of /var/tmp or
	whereever tmpnam puts them.
2001-04-25 23:13:52 +00:00
Dirk Herrmann
6b4113afc5 * Provide and use new convenience macros to test for exceptions. 2001-02-28 11:25:40 +00:00
Gary Houston
22d356150d * tests/ports.test: include (ice-9 rdelim) module. 2001-01-24 21:46:04 +00:00
Dirk Herrmann
57e7f27001 Adopted a couple of nice ideas from Greg. 2000-05-08 17:42:03 +00:00
Gary Houston
8cc58ec1cc * tests/ports.test (non-blocking-I/O): a couple more details:
a) combine the O_NONBLOCK flag with the default flags instead
	of replacing them.  b) check EWOULDBLOCK as well as EAGAIN.
2000-03-31 19:23:52 +00:00
Gary Houston
2d9e5bca6c * tests/ports.test ("string ports"): test seeking/unreading from
an input string and seeking an output string.
1999-10-24 15:17:47 +00:00
Gary Houston
22a92623c6 * tests/ports.test: in seek/tell test on input port, also test
that ftell doesn't discard unread chars.
1999-10-20 20:59:07 +00:00
Gary Houston
4fcd6551ff * tests/ports.test: add seek/tell tests for unidirectional ports. 1999-10-18 20:47:37 +00:00
Jim Blandy
fe5b6bebaa * tests/ports.test: Check that our input functions cope when
current-input-port is closed.
1999-09-20 23:57:08 +00:00
Gary Houston
1ba57e8915 3 more bytes. 1999-09-14 20:56:13 +00:00
Gary Houston
6e822cce6a 1999-09-14 Gary Houston <ghouston@freewire.co.uk>
* tests/ports.test: test non-blocking I/O.
1999-09-14 20:48:00 +00:00
Jim Blandy
7ef450bfce Fix copyright info. 1999-09-03 07:36:49 +00:00
Gary Houston
d1b143e9a3 1999-08-29 Gary Houston <ghouston@easynet.co.uk>
* tests/ports.test: test unread-char and unread-string.
1999-08-29 17:48:26 +00:00
Gary Houston
0eb2e8cd94 1999-08-19 Gary Houston <ghouston@easynet.co.uk>
* tests/ports.test: test line-buffering of fports.
1999-08-19 21:29:00 +00:00
Gary Houston
7f214e6066 1999-08-18 Gary Houston <ghouston@easynet.co.uk>
* tests/ports.test: tests for NUL and non-ASCII chars to fports.
1999-08-18 20:33:18 +00:00
Gary Houston
75efe4535b 1999-08-12 Gary Houston <ghouston@easynet.co.uk>
* tests/ports.test: lseek -> seek.
1999-08-12 19:07:19 +00:00
Gary Houston
7c03500990 1999-08-04 Gary Houston <ghouston@easynet.co.uk>
* tests/ports.test: tests for buffered and unbuffered input/output
	fports with seeking.
1999-08-04 19:00:34 +00:00
Jim Blandy
1b0549522b * tests/ports.test: Add some regression tests for char-ready?. 1999-08-01 08:06:01 +00:00
Jim Blandy
6d8500ad76 * tests/ports.test: Fix copyright years. 1999-07-19 18:44:32 +00:00
Jim Blandy
5bc1201f2d * tests/ports.test ("read-delimited!"): New tests. 1999-07-19 08:10:30 +00:00
Jim Blandy
73cb0a9704 * tests/ports.test: Group the string port tests under a new
test name prefix.
* tests/ports.test ("line counter"): Check the final column, too.
1999-06-15 08:39:11 +00:00
Jim Blandy
0b8faa0eb6 * tests/ports.test ("line counter"): Verify that we do eventually
get EOF on the port --- don't just read forever.
1999-06-09 09:42:15 +00:00
Jim Blandy
f5d4dde361 Gary Houston's patches turn popen into a module, which we need to
import.
("pipe: read", "pipe: write"): Use close-pipe, not close-port, so
Guile will wait for the command to terminate.
1999-05-31 21:30:06 +00:00
Jim Blandy
0d572e912b Mark file as Scheme code.
Use catch-test-errors to isolate independent tests, so we can still
get some results even though Gary Houston's patches don't support
pipes yet.
1999-05-30 09:23:37 +00:00
Jim Blandy
000ee07fc6 Initial checkin of the Guile test suite. 1999-05-29 14:22:24 +00:00