Closes #18. Change to char32_t everywhere; builds fine, behaviour as before.
This commit is contained in:
parent
812a1be7d9
commit
c59825d7fe
33 changed files with 116 additions and 76 deletions
|
|
@ -18,6 +18,7 @@
|
|||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <time.h>
|
||||
#include <uchar.h>
|
||||
#include <unistd.h>
|
||||
#include <uuid/uuid.h>
|
||||
/*
|
||||
|
|
@ -149,6 +150,9 @@ int initialise_io( ) {
|
|||
}
|
||||
|
||||
struct pso_pointer initialise_default_streams( struct pso_pointer env ) {
|
||||
// todo: issue #21: should this have stack frame passed in?
|
||||
// It's called in initialisation before everything else is set
|
||||
// up, so **possibly** not?
|
||||
lisp_io_in = c_string_to_lisp_symbol( C_IO_IN );
|
||||
lisp_io_out = c_string_to_lisp_symbol( C_IO_OUT );
|
||||
lisp_io_log = c_string_to_lisp_symbol( C_IO_LOG );
|
||||
|
|
@ -226,7 +230,7 @@ char *lisp_string_to_c_string( struct pso_pointer s ) {
|
|||
len++;
|
||||
}
|
||||
|
||||
wchar_t *buffer = calloc( len + 1, sizeof( wchar_t ) );
|
||||
char32_t *buffer = calloc( len + 1, sizeof( char32_t ) );
|
||||
/* worst case, one wide char = four utf bytes */
|
||||
result = calloc( ( len * 4 ) + 1, sizeof( char ) );
|
||||
|
||||
|
|
@ -268,8 +272,8 @@ wint_t url_fgetwc( URL_FILE *input ) {
|
|||
|
||||
case CFTYPE_CURL:{
|
||||
char *cbuff =
|
||||
calloc( sizeof( wchar_t ) + 2, sizeof( char ) );
|
||||
wchar_t *wbuff = calloc( 2, sizeof( wchar_t ) );
|
||||
calloc( sizeof( char32_t ) + 2, sizeof( char ) );
|
||||
char32_t *wbuff = calloc( 2, sizeof( char32_t ) );
|
||||
|
||||
size_t count = 0;
|
||||
|
||||
|
|
@ -414,18 +418,20 @@ struct pso_pointer lisp_close( struct pso_pointer frame_pointer,
|
|||
return result;
|
||||
}
|
||||
|
||||
struct pso_pointer add_meta_integer( struct pso_pointer meta, wchar_t *key,
|
||||
struct pso_pointer add_meta_integer( struct pso_pointer meta, char32_t *key,
|
||||
long int value ) {
|
||||
// todo: issue #21: must have stack frame passed in.
|
||||
return
|
||||
c_cons( c_cons
|
||||
( c_string_to_lisp_keyword( key ), make_integer( value ) ),
|
||||
meta );
|
||||
}
|
||||
|
||||
struct pso_pointer add_meta_string( struct pso_pointer meta, wchar_t *key,
|
||||
struct pso_pointer add_meta_string( struct pso_pointer meta, char32_t *key,
|
||||
char *value ) {
|
||||
// todo: issue #21: must have stack frame passed in.
|
||||
value = trim( value );
|
||||
wchar_t buffer[strlen( value ) + 1];
|
||||
char32_t buffer[strlen( value ) + 1];
|
||||
mbstowcs( buffer, value, strlen( value ) + 1 );
|
||||
|
||||
return
|
||||
|
|
@ -434,10 +440,9 @@ struct pso_pointer add_meta_string( struct pso_pointer meta, wchar_t *key,
|
|||
c_string_to_lisp_string( buffer ) ), meta );
|
||||
}
|
||||
|
||||
struct pso_pointer add_meta_time( struct pso_pointer meta, wchar_t *key,
|
||||
struct pso_pointer add_meta_time( struct pso_pointer meta, char32_t *key,
|
||||
time_t *value ) {
|
||||
/* I don't yet have a concept of a date-time object, which is a
|
||||
* bit of an oversight! */
|
||||
// todo: issue #21: must have stack frame passed in.
|
||||
char datestring[256];
|
||||
|
||||
strftime( datestring, sizeof( datestring ), nl_langinfo( D_T_FMT ),
|
||||
|
|
@ -469,7 +474,7 @@ static size_t write_meta_callback( char *string, size_t size, size_t nmemb,
|
|||
// s[offset] = ( char ) 0;
|
||||
// char *name = trim( s );
|
||||
// char *value = trim( &s[++offset] );
|
||||
// wchar_t wname[strlen( name )];
|
||||
// char32_t wname[strlen( name )];
|
||||
|
||||
// mbstowcs( wname, name, strlen( name ) + 1 );
|
||||
|
||||
|
|
@ -716,7 +721,7 @@ struct pso_pointer lisp_slurp( struct pso_pointer frame_pointer,
|
|||
debug_println( DEBUG_IO );
|
||||
|
||||
struct pso2 *cell = pointer_to_object( cursor );
|
||||
cursor = make_string( ( wchar_t ) c, nil );
|
||||
cursor = make_string( ( char32_t ) c, nil );
|
||||
cell->payload.string.cdr = cursor;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
/*
|
||||
* wide characters
|
||||
*/
|
||||
#include <uchar.h>
|
||||
#include <wchar.h>
|
||||
#include <wctype.h>
|
||||
/* libcurl, used for io */
|
||||
|
|
@ -54,7 +55,7 @@ struct pso_pointer in_write(struct pso_pointer p, URL_FILE *output,
|
|||
* TODO: this does not yet even nearly cope with all the possible special
|
||||
* cases.
|
||||
*/
|
||||
void write_char( wchar_t wc, URL_FILE * output, bool escape) {
|
||||
void write_char( char32_t wc, URL_FILE * output, bool escape) {
|
||||
if (escape && !iswprint(wc)) {
|
||||
url_fwprintf(output, L"\\%04x", wc);
|
||||
// url_fputwc(L'\\', output);
|
||||
|
|
@ -79,7 +80,7 @@ struct pso_pointer print_string_like_thing(struct pso_pointer p,
|
|||
if (keywordp(p) || stringp(p) || symbolp(p)) {
|
||||
for (struct pso_pointer cursor = p; !nilp(cursor);
|
||||
cursor = pointer_to_object(cursor)->payload.string.cdr) {
|
||||
wchar_t wc = pointer_to_object(cursor)->payload.string.character;
|
||||
char32_t wc = pointer_to_object(cursor)->payload.string.character;
|
||||
|
||||
write_char( wc, output, escape);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ struct pso_pointer read_number(
|
|||
if ( nilp( character ) ) {
|
||||
character = get_character( stream );
|
||||
}
|
||||
wchar_t c = nilp( character )
|
||||
char32_t c = nilp( character )
|
||||
? 0 : pointer_to_object( character )->payload.character.character;
|
||||
|
||||
URL_FILE *input = pointer_to_object( stream )->payload.stream.stream;
|
||||
|
|
@ -150,7 +150,7 @@ struct pso_pointer read_symbol(
|
|||
character = get_character( stream );
|
||||
}
|
||||
|
||||
wchar_t c = nilp( character )
|
||||
char32_t c = nilp( character )
|
||||
? 0 : pointer_to_object( character )->payload.character.character;
|
||||
|
||||
URL_FILE *input = pointer_to_object( stream )->payload.stream.stream;
|
||||
|
|
@ -207,7 +207,7 @@ struct pso_pointer read(
|
|||
if ( !nilp( readmacro ) ) {
|
||||
// invoke the read macro on the stream
|
||||
} else if ( readp( stream ) && characterp( character ) ) {
|
||||
wchar_t c =
|
||||
char32_t c =
|
||||
pointer_to_object( character )->payload.character.character;
|
||||
URL_FILE *input = pointer_to_object( stream )->payload.stream.stream;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue