blob: c40c0eef63a5c5ad66c5433dae2a387e7d0519c5 [file] [log] [blame]
/*
* libucd_int.h
*
* Internal header file for libucd
*/
#ifndef LIBUCD_INT_H
#define LIBUCD_INT_H
#include <stdlib.h>
#include "ucd.h"
#include "int24.h"
#include "compiler.h"
#define UCS_CNT 0x110000
#define UCS_MAX (UCS_CNT-1)
extern const char _libucd_hangul_jamo_l[][4];
extern const char _libucd_hangul_jamo_v[][4];
extern const char _libucd_hangul_jamo_t[][4];
/* This structure is exactly 32 bytes long, nice and alignable. */
struct _libucd_property_array {
int32_t ucs; /* Wasteful but fast (used in search) */
uint8_t general_category;
uint8_t script;
uint8_t numeric_value_num;
uint8_t numeric_value_den_exp; /* bit 7 = 1 if exponent */
uint64_t flags_block; /* Block index is byte 6, byte 7 free */
int24 simple_uppercase;
int24 simple_lowercase;
int24 simple_titlecase;
uint8_t age; /* (major << 3) + minor */
uint8_t canonical_combining_class;
unsigned sentence_break :4;
unsigned grapheme_cluster_break :4;
unsigned word_break :3;
unsigned joining_type :3;
unsigned joining_group :6;
unsigned east_asian_width :3;
unsigned hangul_syllable_type :3;
unsigned line_break :6;
unsigned numeric_type :2;
unsigned bidi_class :5;
unsigned /* unused */ :1;
} ALIGNED(32);
extern const struct _libucd_property_array _libucd_property_array[];
extern const int _libucd_property_array_count;
struct _libucd_ucstoname_tab {
int24 ucs;
uint24 names_offset;
uint16_t proparray_offset;
} ALIGNED(8);
extern const struct _libucd_ucstoname_tab _libucd_ucstoname_tab[];
struct _libucd_nametoucs_tab {
int24 ucs;
};
extern const struct _libucd_nametoucs_tab _libucd_nametoucs_tab[];
extern const unsigned char _libucd_names_list[];
extern const char * const _libucd_nameslist_dict[256];
/* This is a private data structure included in each ucd object */
#if defined(__i386__) || defined(__x86_64__)
# define HAVE_ATOMIC_CTR
#endif
struct libucd_private {
#if defined(HAVE_PTHREAD_H) && !defined(HAVE_ATOMIC_CTR)
pthread_mutex_t mutex;
#endif
volatile unsigned int usage_ctr;
};
const struct unicode_character_data *
_libucd_character_data_raw(int32_t ucs);
struct libucd_enum_names {
const char *long_name;
const char *short_name;
};
#endif