summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/client/rspamdclient.h11
-rw-r--r--src/libcryptobox/base64/base64.h10
-rw-r--r--src/libcryptobox/catena/catena.h24
-rw-r--r--src/libcryptobox/chacha20/chacha.h27
-rw-r--r--src/libcryptobox/cryptobox.h110
-rw-r--r--src/libcryptobox/curve25519/curve25519.h12
-rw-r--r--src/libcryptobox/curve25519/fe.h159
-rw-r--r--src/libcryptobox/ed25519/ed25519.h24
-rw-r--r--src/libcryptobox/keypair.h90
-rw-r--r--src/libcryptobox/keypair_private.h11
-rw-r--r--src/libcryptobox/keypairs_cache.h14
-rw-r--r--src/libmime/archives.h10
-rw-r--r--src/libmime/content_type.h27
-rw-r--r--src/libmime/email_addr.h18
-rw-r--r--src/libmime/filter.h40
-rw-r--r--src/libmime/filter_private.h8
-rw-r--r--src/libmime/images.h14
-rw-r--r--src/libmime/lang_detection.h22
-rw-r--r--src/libmime/message.h29
-rw-r--r--src/libmime/mime_encoding.c1
-rw-r--r--src/libmime/mime_encoding.h23
-rw-r--r--src/libmime/mime_expressions.h16
-rw-r--r--src/libmime/mime_headers.h22
-rw-r--r--src/libmime/mime_parser.h12
-rw-r--r--src/libmime/smtp_parsers.h27
-rw-r--r--src/libserver/async_session.h41
-rw-r--r--src/libserver/cfg_file.h189
-rw-r--r--src/libserver/cfg_file_private.h8
-rw-r--r--src/libserver/cfg_rcl.h9
-rw-r--r--src/libserver/composites.h8
-rw-r--r--src/libserver/dkim.h90
-rw-r--r--src/libserver/dns.h28
-rw-r--r--src/libserver/dynamic_cfg.h29
-rw-r--r--src/libserver/fuzzy_backend.h45
-rw-r--r--src/libserver/fuzzy_backend_redis.h52
-rw-r--r--src/libserver/fuzzy_backend_sqlite.h25
-rw-r--r--src/libserver/fuzzy_wire.h8
-rw-r--r--src/libserver/html.h28
-rw-r--r--src/libserver/html_colors.h1360
-rw-r--r--src/libserver/html_entities.h4258
-rw-r--r--src/libserver/html_tags.h10
-rw-r--r--src/libserver/milter.h43
-rw-r--r--src/libserver/milter_internal.h63
-rw-r--r--src/libserver/monitored.h33
-rw-r--r--src/libserver/protocol.h38
-rw-r--r--src/libserver/protocol_internal.h8
-rw-r--r--src/libserver/re_cache.h50
-rw-r--r--src/libserver/redis_pool.h19
-rw-r--r--src/libserver/roll_history.h18
-rw-r--r--src/libserver/rspamd_control.h47
-rw-r--r--src/libserver/rspamd_symcache.h83
-rw-r--r--src/libserver/spf.h23
-rw-r--r--src/libserver/task.h200
-rw-r--r--src/libserver/url.h26
-rw-r--r--src/libserver/worker_util.h48
-rw-r--r--src/libstat/backends/backends.h136
-rw-r--r--src/libstat/classifiers/classifiers.h75
-rw-r--r--src/libstat/learn_cache/learn_cache.h67
-rw-r--r--src/libstat/stat_api.h26
-rw-r--r--src/libstat/stat_internal.h37
-rw-r--r--src/libstat/tokenizers/tokenizers.h43
-rw-r--r--src/libutil/addr.h70
-rw-r--r--src/libutil/expression.h30
-rw-r--r--src/libutil/fstring.h65
-rw-r--r--src/libutil/hash.h28
-rw-r--r--src/libutil/heap.h20
-rw-r--r--src/libutil/http_connection.h30
-rw-r--r--src/libutil/http_context.h20
-rw-r--r--src/libutil/http_message.h35
-rw-r--r--src/libutil/http_private.h17
-rw-r--r--src/libutil/http_router.h14
-rw-r--r--src/libutil/http_util.h8
-rw-r--r--src/libutil/libev_helper.h13
-rw-r--r--src/libutil/logger.h90
-rw-r--r--src/libutil/map.h36
-rw-r--r--src/libutil/map_helpers.h58
-rw-r--r--src/libutil/map_private.h15
-rw-r--r--src/libutil/mem_pool.h85
-rw-r--r--src/libutil/multipattern.h39
-rw-r--r--src/libutil/printf.h28
-rw-r--r--src/libutil/radix.h29
-rw-r--r--src/libutil/ref.h2
-rw-r--r--src/libutil/regexp.h48
-rw-r--r--src/libutil/rrd.c1
-rw-r--r--src/libutil/rrd.h90
-rw-r--r--src/libutil/shingles.h38
-rw-r--r--src/libutil/sqlite_utils.h23
-rw-r--r--src/libutil/ssl_util.h29
-rw-r--r--src/libutil/str_util.h126
-rw-r--r--src/libutil/upstream.h56
-rw-r--r--src/libutil/util.h98
-rw-r--r--src/lua/lua_common.h164
-rw-r--r--src/lua/lua_map.h8
-rw-r--r--src/lua/lua_thread_pool.h44
-rw-r--r--src/rspamadm/rspamadm.h21
-rw-r--r--src/rspamd.h74
-rw-r--r--src/worker_private.h15
-rw-r--r--test/tests.h10
98 files changed, 5364 insertions, 4245 deletions
diff --git a/src/client/rspamdclient.h b/src/client/rspamdclient.h
index 9fced29af..dc274b7a8 100644
--- a/src/client/rspamdclient.h
+++ b/src/client/rspamdclient.h
@@ -20,6 +20,10 @@
#include "ucl.h"
#include "contrib/libev/ev.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_client_connection;
struct rspamd_http_message;
@@ -48,6 +52,7 @@ typedef void (*rspamd_client_callback) (
GError *err);
struct rspamd_http_context;
+
/**
* Start rspamd worker or controller command
* @param ev_base event base
@@ -56,7 +61,7 @@ struct rspamd_http_context;
* @param timeout timeout in seconds
* @return
*/
-struct rspamd_client_connection * rspamd_client_init (
+struct rspamd_client_connection *rspamd_client_init (
struct rspamd_http_context *http_ctx,
struct ev_loop *ev_base,
const gchar *name,
@@ -92,4 +97,8 @@ gboolean rspamd_client_command (
*/
void rspamd_client_destroy (struct rspamd_client_connection *conn);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* RSPAMDCLIENT_H_ */
diff --git a/src/libcryptobox/base64/base64.h b/src/libcryptobox/base64/base64.h
index e7c639d58..e2be379b5 100644
--- a/src/libcryptobox/base64/base64.h
+++ b/src/libcryptobox/base64/base64.h
@@ -18,6 +18,14 @@
#include "config.h"
-const char* base64_load (void);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+const char *base64_load (void);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* SRC_LIBCRYPTOBOX_BASE64_BASE64_H_ */
diff --git a/src/libcryptobox/catena/catena.h b/src/libcryptobox/catena/catena.h
index 56da560ea..bf81cc0f9 100644
--- a/src/libcryptobox/catena/catena.h
+++ b/src/libcryptobox/catena/catena.h
@@ -24,12 +24,16 @@
#define CATENA_HLEN 64
+#ifdef __cplusplus
+extern "C" {
+#endif
+
int
-catena (const uint8_t *pwd, const uint32_t pwdlen,
- const uint8_t *salt, const uint8_t saltlen,
- const uint8_t *data, const uint32_t datalen,
- const uint8_t lambda, const uint8_t min_garlic,
- const uint8_t garlic, const uint8_t hashlen, uint8_t *hash);
+catena (const uint8_t *pwd, const uint32_t pwdlen,
+ const uint8_t *salt, const uint8_t saltlen,
+ const uint8_t *data, const uint32_t datalen,
+ const uint8_t lambda, const uint8_t min_garlic,
+ const uint8_t garlic, const uint8_t hashlen, uint8_t *hash);
/**
* Simple interface for catena PBKDF
@@ -43,13 +47,17 @@ catena (const uint8_t *pwd, const uint32_t pwdlen,
* @return 0 if hash is generated, -1 in case of error
*/
int simple_catena (const uint8_t *pwd, const uint32_t pwdlen,
- const uint8_t *salt, const uint8_t saltlen,
- const uint8_t *data, const uint32_t datalen,
- uint8_t hash[CATENA_HLEN]);
+ const uint8_t *salt, const uint8_t saltlen,
+ const uint8_t *data, const uint32_t datalen,
+ uint8_t hash[CATENA_HLEN]);
/**
* Run a quick test on catena implementation
*/
int catena_test (void);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* SRC_LIBCRYPTOBOX_CATENA_CATENA_H_ */
diff --git a/src/libcryptobox/chacha20/chacha.h b/src/libcryptobox/chacha20/chacha.h
index 7f93a4517..02d6dba00 100644
--- a/src/libcryptobox/chacha20/chacha.h
+++ b/src/libcryptobox/chacha20/chacha.h
@@ -29,6 +29,10 @@
#define CHACHA_BLOCKBYTES 64
+#ifdef __cplusplus
+extern "C" {
+#endif
+
typedef struct chacha_state_internal_t {
unsigned char s[48];
size_t rounds;
@@ -53,26 +57,31 @@ typedef struct chacha_iv24_t {
} chacha_iv24;
void hchacha (const unsigned char key[32], const unsigned char iv[16],
- unsigned char out[32], size_t rounds);
+ unsigned char out[32], size_t rounds);
void chacha_init (chacha_state *S, const chacha_key *key, const chacha_iv *iv,
- size_t rounds);
+ size_t rounds);
void xchacha_init (chacha_state *S, const chacha_key *key,
- const chacha_iv24 *iv, size_t rounds);
+ const chacha_iv24 *iv, size_t rounds);
size_t chacha_update (chacha_state *S, const unsigned char *in,
- unsigned char *out, size_t inlen);
+ unsigned char *out, size_t inlen);
size_t chacha_final (chacha_state *S, unsigned char *out);
void chacha (const chacha_key *key, const chacha_iv *iv,
- const unsigned char *in, unsigned char *out, size_t inlen,
- size_t rounds);
+ const unsigned char *in, unsigned char *out, size_t inlen,
+ size_t rounds);
+
void xchacha (const chacha_key *key, const chacha_iv24 *iv,
- const unsigned char *in, unsigned char *out, size_t inlen,
- size_t rounds);
+ const unsigned char *in, unsigned char *out, size_t inlen,
+ size_t rounds);
+
+const char *chacha_load (void);
-const char* chacha_load (void);
+#ifdef __cplusplus
+}
+#endif
#endif /* CHACHA_H_ */
diff --git a/src/libcryptobox/cryptobox.h b/src/libcryptobox/cryptobox.h
index df713d79b..d9e4f51cd 100644
--- a/src/libcryptobox/cryptobox.h
+++ b/src/libcryptobox/cryptobox.h
@@ -18,14 +18,18 @@
#include "config.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_cryptobox_segment {
guchar *data;
gsize len;
};
#if defined(__GNUC__) && \
- ((defined(__clang__) && (__clang_major__ >= 4 || (__clang_major__ >= 3 && __clang_minor__ >= 8))) || \
- ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8) || (__GNUC__ > 4)))
+ ((defined(__clang__) && (__clang_major__ >= 4 || (__clang_major__ >= 3 && __clang_minor__ >= 8))) || \
+ ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8) || (__GNUC__ > 4)))
#define RSPAMD_HAS_TARGET_ATTR 1
#endif
@@ -81,7 +85,7 @@ struct rspamd_cryptobox_library_ctx {
/**
* Init cryptobox library
*/
-struct rspamd_cryptobox_library_ctx* rspamd_cryptobox_init (void);
+struct rspamd_cryptobox_library_ctx *rspamd_cryptobox_init (void);
/**
* Generate new keypair
@@ -89,7 +93,7 @@ struct rspamd_cryptobox_library_ctx* rspamd_cryptobox_init (void);
* @param sk secret key buffer
*/
void rspamd_cryptobox_keypair (rspamd_pk_t pk, rspamd_sk_t sk,
- enum rspamd_cryptobox_mode mode);
+ enum rspamd_cryptobox_mode mode);
/**
* Generate new keypair for signing
@@ -97,7 +101,7 @@ void rspamd_cryptobox_keypair (rspamd_pk_t pk, rspamd_sk_t sk,
* @param sk secret key buffer
*/
void rspamd_cryptobox_keypair_sig (rspamd_sig_pk_t pk, rspamd_sig_sk_t sk,
- enum rspamd_cryptobox_mode mode);
+ enum rspamd_cryptobox_mode mode);
/**
* Encrypt data inplace adding signature to sig afterwards
@@ -107,9 +111,9 @@ void rspamd_cryptobox_keypair_sig (rspamd_sig_pk_t pk, rspamd_sig_sk_t sk,
* @param sig output signature
*/
void rspamd_cryptobox_encrypt_inplace (guchar *data, gsize len,
- const rspamd_nonce_t nonce,
- const rspamd_pk_t pk, const rspamd_sk_t sk, rspamd_mac_t sig,
- enum rspamd_cryptobox_mode mode);
+ const rspamd_nonce_t nonce,
+ const rspamd_pk_t pk, const rspamd_sk_t sk, rspamd_mac_t sig,
+ enum rspamd_cryptobox_mode mode);
/**
* Encrypt segments of data inplace adding signature to sig afterwards
@@ -120,10 +124,10 @@ void rspamd_cryptobox_encrypt_inplace (guchar *data, gsize len,
* @param sig output signature
*/
void rspamd_cryptobox_encryptv_inplace (struct rspamd_cryptobox_segment *segments,
- gsize cnt,
- const rspamd_nonce_t nonce,
- const rspamd_pk_t pk, const rspamd_sk_t sk, rspamd_mac_t sig,
- enum rspamd_cryptobox_mode mode);
+ gsize cnt,
+ const rspamd_nonce_t nonce,
+ const rspamd_pk_t pk, const rspamd_sk_t sk, rspamd_mac_t sig,
+ enum rspamd_cryptobox_mode mode);
/**
@@ -136,9 +140,9 @@ void rspamd_cryptobox_encryptv_inplace (struct rspamd_cryptobox_segment *segment
* @return TRUE if input has been verified successfully
*/
gboolean rspamd_cryptobox_decrypt_inplace (guchar *data, gsize len,
- const rspamd_nonce_t nonce,
- const rspamd_pk_t pk, const rspamd_sk_t sk, const rspamd_mac_t sig,
- enum rspamd_cryptobox_mode mode);
+ const rspamd_nonce_t nonce,
+ const rspamd_pk_t pk, const rspamd_sk_t sk, const rspamd_mac_t sig,
+ enum rspamd_cryptobox_mode mode);
/**
* Encrypt segments of data inplace adding signature to sig afterwards
@@ -149,9 +153,9 @@ gboolean rspamd_cryptobox_decrypt_inplace (guchar *data, gsize len,
* @param sig output signature
*/
void rspamd_cryptobox_encrypt_nm_inplace (guchar *data, gsize len,
- const rspamd_nonce_t nonce,
- const rspamd_nm_t nm, rspamd_mac_t sig,
- enum rspamd_cryptobox_mode mode);
+ const rspamd_nonce_t nonce,
+ const rspamd_nm_t nm, rspamd_mac_t sig,
+ enum rspamd_cryptobox_mode mode);
/**
* Encrypt segments of data inplace adding signature to sig afterwards
@@ -162,10 +166,10 @@ void rspamd_cryptobox_encrypt_nm_inplace (guchar *data, gsize len,
* @param sig output signature
*/
void rspamd_cryptobox_encryptv_nm_inplace (struct rspamd_cryptobox_segment *segments,
- gsize cnt,
- const rspamd_nonce_t nonce,
- const rspamd_nm_t nm, rspamd_mac_t sig,
- enum rspamd_cryptobox_mode mode);
+ gsize cnt,
+ const rspamd_nonce_t nonce,
+ const rspamd_nm_t nm, rspamd_mac_t sig,
+ enum rspamd_cryptobox_mode mode);
/**
@@ -178,9 +182,9 @@ void rspamd_cryptobox_encryptv_nm_inplace (struct rspamd_cryptobox_segment *segm
* @return TRUE if input has been verified successfully
*/
gboolean rspamd_cryptobox_decrypt_nm_inplace (guchar *data, gsize len,
- const rspamd_nonce_t nonce,
- const rspamd_nm_t nm, const rspamd_mac_t sig,
- enum rspamd_cryptobox_mode mode);
+ const rspamd_nonce_t nonce,
+ const rspamd_nm_t nm, const rspamd_mac_t sig,
+ enum rspamd_cryptobox_mode mode);
/**
* Generate shared secret from local sk and remote pk
@@ -189,7 +193,7 @@ gboolean rspamd_cryptobox_decrypt_nm_inplace (guchar *data, gsize len,
* @param sk local privkey
*/
void rspamd_cryptobox_nm (rspamd_nm_t nm, const rspamd_pk_t pk,
- const rspamd_sk_t sk, enum rspamd_cryptobox_mode mode);
+ const rspamd_sk_t sk, enum rspamd_cryptobox_mode mode);
/**
* Create digital signature for the specified message and place result in `sig`
@@ -200,9 +204,9 @@ void rspamd_cryptobox_nm (rspamd_nm_t nm, const rspamd_pk_t pk,
* @param sk secret key
*/
void rspamd_cryptobox_sign (guchar *sig, gsize *siglen_p,
- const guchar *m, gsize mlen,
- const rspamd_sk_t sk,
- enum rspamd_cryptobox_mode mode);
+ const guchar *m, gsize mlen,
+ const rspamd_sk_t sk,
+ enum rspamd_cryptobox_mode mode);
/**
* Verifies digital signature for the specified message using the specified
@@ -214,18 +218,18 @@ void rspamd_cryptobox_sign (guchar *sig, gsize *siglen_p,
* @return true if signature is valid, false otherwise
*/
bool rspamd_cryptobox_verify (const guchar *sig,
- gsize siglen,
- const guchar *m,
- gsize mlen,
- const rspamd_pk_t pk,
- enum rspamd_cryptobox_mode mode);
+ gsize siglen,
+ const guchar *m,
+ gsize mlen,
+ const rspamd_pk_t pk,
+ enum rspamd_cryptobox_mode mode);
/**
* Securely clear the buffer specified
* @param buf buffer to zero
* @param buflen length of buffer
*/
-void rspamd_explicit_memzero (void * const buf, gsize buflen);
+void rspamd_explicit_memzero (void *const buf, gsize buflen);
/**
* Constant time memcmp
@@ -245,8 +249,8 @@ rspamd_cryptobox_memcmp (const void *const b1_, const void *const b2_, gsize len
* @param k key (must be 16 bytes)
*/
void rspamd_cryptobox_siphash (unsigned char *out, const unsigned char *in,
- unsigned long long inlen,
- const rspamd_sipkey_t k);
+ unsigned long long inlen,
+ const rspamd_sipkey_t k);
enum rspamd_cryptobox_pbkdf_type {
RSPAMD_CRYPTOBOX_PBKDF2 = 0,
@@ -266,10 +270,10 @@ enum rspamd_cryptobox_pbkdf_type {
* @return TRUE in case of success and FALSE if failed
*/
gboolean rspamd_cryptobox_pbkdf (const char *pass, gsize pass_len,
- const guint8 *salt, gsize salt_len,
- guint8 *key, gsize key_len,
- unsigned int complexity,
- enum rspamd_cryptobox_pbkdf_type type);
+ const guint8 *salt, gsize salt_len,
+ guint8 *key, gsize key_len,
+ unsigned int complexity,
+ enum rspamd_cryptobox_pbkdf_type type);
/**
@@ -313,7 +317,7 @@ guint rspamd_cryptobox_mac_bytes (enum rspamd_cryptobox_mode mode);
guint rspamd_cryptobox_signature_bytes (enum rspamd_cryptobox_mode mode);
/* Hash IUF interface */
-typedef struct rspamd_cryptobox_hash_state_s {
+typedef struct rspamd_cryptobox_hash_state_s {
unsigned char opaque[256];
} rspamd_cryptobox_hash_state_t;
@@ -338,10 +342,10 @@ void rspamd_cryptobox_hash_final (void *st, guchar *out);
* One in all function
*/
void rspamd_cryptobox_hash (guchar *out,
- const guchar *data,
- gsize len,
- const guchar *key,
- gsize keylen);
+ const guchar *data,
+ gsize len,
+ const guchar *key,
+ gsize keylen);
enum rspamd_cryptobox_fast_hash_type {
RSPAMD_CRYPTOBOX_XXHASH64 = 0,
@@ -353,7 +357,7 @@ enum rspamd_cryptobox_fast_hash_type {
};
/* Non crypto hash IUF interface */
-typedef struct rspamd_cryptobox_fast_hash_state_s {
+typedef struct rspamd_cryptobox_fast_hash_state_s {
guint64 opaque[11];
enum rspamd_cryptobox_fast_hash_type type;
} rspamd_cryptobox_fast_hash_state_t;
@@ -364,7 +368,7 @@ typedef struct rspamd_cryptobox_fast_hash_state_s {
* non-keyed hash is generated
*/
void rspamd_cryptobox_fast_hash_init (rspamd_cryptobox_fast_hash_state_t *st,
- guint64 seed);
+ guint64 seed);
/**
* Init cryptobox hash state using key if needed, `st` must point to the buffer
@@ -379,7 +383,7 @@ void rspamd_cryptobox_fast_hash_init_specific (rspamd_cryptobox_fast_hash_state_
* Update hash with data portion
*/
void rspamd_cryptobox_fast_hash_update (rspamd_cryptobox_fast_hash_state_t *st,
- const void *data, gsize len);
+ const void *data, gsize len);
/**
* Output hash to the buffer of rspamd_cryptobox_HASHBYTES length
@@ -390,7 +394,7 @@ guint64 rspamd_cryptobox_fast_hash_final (rspamd_cryptobox_fast_hash_state_t *st
* One in all function
*/
guint64 rspamd_cryptobox_fast_hash (const void *data,
- gsize len, guint64 seed);
+ gsize len, guint64 seed);
/**
* Platform independent version
@@ -409,7 +413,7 @@ guint64 rspamd_cryptobox_fast_hash_specific (
* @return
*/
gboolean rspamd_cryptobox_base64_decode (const gchar *in, gsize inlen,
- guchar *out, gsize *outlen);
+ guchar *out, gsize *outlen);
/**
* Returns TRUE if data looks like a valid base64 string
@@ -419,4 +423,8 @@ gboolean rspamd_cryptobox_base64_decode (const gchar *in, gsize inlen,
*/
gboolean rspamd_cryptobox_base64_is_valid (const gchar *in, gsize inlen);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* CRYPTOBOX_H_ */
diff --git a/src/libcryptobox/curve25519/curve25519.h b/src/libcryptobox/curve25519/curve25519.h
index 8b404f5c6..c75c355f8 100644
--- a/src/libcryptobox/curve25519/curve25519.h
+++ b/src/libcryptobox/curve25519/curve25519.h
@@ -3,11 +3,21 @@
#include "config.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
static const guchar curve25519_basepoint[32] = {9};
int curve25519 (guchar *mypublic, const guchar *secret, const guchar *basepoint);
+
/* Call for optimized implementation of scalarmult if needed */
int curve25519_base (guchar *mypublic, const guchar *secret);
-const char* curve25519_load (void);
+
+const char *curve25519_load (void);
+
+#ifdef __cplusplus
+}
+#endif
#endif
diff --git a/src/libcryptobox/curve25519/fe.h b/src/libcryptobox/curve25519/fe.h
index a64206026..44e8b44a6 100644
--- a/src/libcryptobox/curve25519/fe.h
+++ b/src/libcryptobox/curve25519/fe.h
@@ -18,25 +18,44 @@
#ifndef SRC_LIBCRYPTOBOX_CURVE25519_FE_H_
#define SRC_LIBCRYPTOBOX_CURVE25519_FE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
typedef int32_t fe[10];
-void fe_frombytes(fe,const unsigned char *);
-void fe_tobytes(unsigned char *,const fe);
-
-void fe_copy(fe,const fe);
-int fe_isnonzero(const fe);
-int fe_isnegative(const fe);
-void fe_0(fe);
-void fe_1(fe);
-void fe_cmov(fe,const fe,unsigned int);
-void fe_add(fe,const fe,const fe);
-void fe_sub(fe,const fe,const fe);
-void fe_neg(fe,const fe);
-void fe_mul(fe,const fe,const fe);
-void fe_sq(fe,const fe);
-void fe_sq2(fe,const fe);
-void fe_invert(fe,const fe);
-void fe_pow22523(fe,const fe);
+void fe_frombytes (fe, const unsigned char *);
+
+void fe_tobytes (unsigned char *, const fe);
+
+void fe_copy (fe, const fe);
+
+int fe_isnonzero (const fe);
+
+int fe_isnegative (const fe);
+
+void fe_0 (fe);
+
+void fe_1 (fe);
+
+void fe_cmov (fe, const fe, unsigned int);
+
+void fe_add (fe, const fe, const fe);
+
+void fe_sub (fe, const fe, const fe);
+
+void fe_neg (fe, const fe);
+
+void fe_mul (fe, const fe, const fe);
+
+void fe_sq (fe, const fe);
+
+void fe_sq2 (fe, const fe);
+
+void fe_invert (fe, const fe);
+
+void fe_pow22523 (fe, const fe);
/*
ge means group element.
@@ -51,68 +70,90 @@ Representations:
*/
typedef struct {
- fe X;
- fe Y;
- fe Z;
+ fe X;
+ fe Y;
+ fe Z;
} ge_p2;
typedef struct {
- fe X;
- fe Y;
- fe Z;
- fe T;
+ fe X;
+ fe Y;
+ fe Z;
+ fe T;
} ge_p3;
typedef struct {
- fe X;
- fe Y;
- fe Z;
- fe T;
+ fe X;
+ fe Y;
+ fe Z;
+ fe T;
} ge_p1p1;
typedef struct {
- fe yplusx;
- fe yminusx;
- fe xy2d;
+ fe yplusx;
+ fe yminusx;
+ fe xy2d;
} ge_precomp;
typedef struct {
- fe YplusX;
- fe YminusX;
- fe Z;
- fe T2d;
+ fe YplusX;
+ fe YminusX;
+ fe Z;
+ fe T2d;
} ge_cached;
-void ge_tobytes(unsigned char *,const ge_p2 *);
-void ge_p3_tobytes(unsigned char *,const ge_p3 *);
-int ge_frombytes_negate_vartime(ge_p3 *,const unsigned char *);
-
-void ge_p2_0(ge_p2 *);
-void ge_p3_0(ge_p3 *);
-void ge_precomp_0(ge_precomp *);
-void ge_p3_to_p2(ge_p2 *,const ge_p3 *);
-void ge_p3_to_cached(ge_cached *,const ge_p3 *);
-void ge_p1p1_to_p2(ge_p2 *,const ge_p1p1 *);
-void ge_p1p1_to_p3(ge_p3 *,const ge_p1p1 *);
-void ge_p2_dbl(ge_p1p1 *,const ge_p2 *);
-void ge_p3_dbl(ge_p1p1 *,const ge_p3 *);
-
-void ge_madd(ge_p1p1 *,const ge_p3 *,const ge_precomp *);
-void ge_msub(ge_p1p1 *,const ge_p3 *,const ge_precomp *);
-void ge_add(ge_p1p1 *,const ge_p3 *,const ge_cached *);
-void ge_sub(ge_p1p1 *,const ge_p3 *,const ge_cached *);
-void ge_scalarmult_base(ge_p3 *,const unsigned char *);
-void ge_double_scalarmult_vartime(ge_p2 *,const unsigned char *,const ge_p3 *,const unsigned char *);
-void ge_scalarmult_vartime(ge_p3 *,const unsigned char *,const ge_p3 *);
-int verify_32(const unsigned char *x, const unsigned char *y);
+void ge_tobytes (unsigned char *, const ge_p2 *);
+
+void ge_p3_tobytes (unsigned char *, const ge_p3 *);
+
+int ge_frombytes_negate_vartime (ge_p3 *, const unsigned char *);
+
+void ge_p2_0 (ge_p2 *);
+
+void ge_p3_0 (ge_p3 *);
+
+void ge_precomp_0 (ge_precomp *);
+
+void ge_p3_to_p2 (ge_p2 *, const ge_p3 *);
+
+void ge_p3_to_cached (ge_cached *, const ge_p3 *);
+
+void ge_p1p1_to_p2 (ge_p2 *, const ge_p1p1 *);
+
+void ge_p1p1_to_p3 (ge_p3 *, const ge_p1p1 *);
+
+void ge_p2_dbl (ge_p1p1 *, const ge_p2 *);
+
+void ge_p3_dbl (ge_p1p1 *, const ge_p3 *);
+
+void ge_madd (ge_p1p1 *, const ge_p3 *, const ge_precomp *);
+
+void ge_msub (ge_p1p1 *, const ge_p3 *, const ge_precomp *);
+
+void ge_add (ge_p1p1 *, const ge_p3 *, const ge_cached *);
+
+void ge_sub (ge_p1p1 *, const ge_p3 *, const ge_cached *);
+
+void ge_scalarmult_base (ge_p3 *, const unsigned char *);
+
+void ge_double_scalarmult_vartime (ge_p2 *, const unsigned char *, const ge_p3 *, const unsigned char *);
+
+void ge_scalarmult_vartime (ge_p3 *, const unsigned char *, const ge_p3 *);
+
+int verify_32 (const unsigned char *x, const unsigned char *y);
/*
The set of scalars is \Z/l
where l = 2^252 + 27742317777372353535851937790883648493.
*/
-void sc_reduce(unsigned char *);
-void sc_muladd(unsigned char *,const unsigned char *,const unsigned char *,const unsigned char *);
+void sc_reduce (unsigned char *);
+
+void sc_muladd (unsigned char *, const unsigned char *, const unsigned char *, const unsigned char *);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* SRC_LIBCRYPTOBOX_CURVE25519_FE_H_ */
diff --git a/src/libcryptobox/ed25519/ed25519.h b/src/libcryptobox/ed25519/ed25519.h
index 0fbf7d6fe..a1f702c4a 100644
--- a/src/libcryptobox/ed25519/ed25519.h
+++ b/src/libcryptobox/ed25519/ed25519.h
@@ -20,15 +20,27 @@
#include <stdbool.h>
#include <stddef.h>
-const char* ed25519_load (void);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+const char *ed25519_load (void);
+
void ed25519_keypair (unsigned char *pk, unsigned char *sk);
+
void ed25519_seed_keypair (unsigned char *pk, unsigned char *sk, unsigned char *seed);
+
void ed25519_sign (unsigned char *sig, size_t *siglen_p,
- const unsigned char *m, size_t mlen,
- const unsigned char *sk);
+ const unsigned char *m, size_t mlen,
+ const unsigned char *sk);
+
bool ed25519_verify (const unsigned char *sig,
- const unsigned char *m,
- size_t mlen,
- const unsigned char *pk);
+ const unsigned char *m,
+ size_t mlen,
+ const unsigned char *pk);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* SRC_LIBCRYPTOBOX_ED25519_ED25519_H_ */
diff --git a/src/libcryptobox/keypair.h b/src/libcryptobox/keypair.h
index 92af13b68..e2b20dc55 100644
--- a/src/libcryptobox/keypair.h
+++ b/src/libcryptobox/keypair.h
@@ -20,6 +20,10 @@
#include "cryptobox.h"
#include "ucl.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* Keypair type
*/
@@ -45,7 +49,7 @@ struct rspamd_cryptobox_pubkey;
* @param alg algorithm for the keypair
* @return fresh keypair generated
*/
-struct rspamd_cryptobox_keypair* rspamd_keypair_new (
+struct rspamd_cryptobox_keypair *rspamd_keypair_new (
enum rspamd_cryptobox_keypair_type type,
enum rspamd_cryptobox_mode alg);
@@ -54,7 +58,7 @@ struct rspamd_cryptobox_keypair* rspamd_keypair_new (
* @param kp
* @return
*/
-struct rspamd_cryptobox_keypair* rspamd_keypair_ref (
+struct rspamd_cryptobox_keypair *rspamd_keypair_ref (
struct rspamd_cryptobox_keypair *kp);
/**
@@ -68,7 +72,7 @@ void rspamd_keypair_unref (struct rspamd_cryptobox_keypair *kp);
* @param kp
* @return
*/
-struct rspamd_cryptobox_pubkey* rspamd_pubkey_ref (
+struct rspamd_cryptobox_pubkey *rspamd_pubkey_ref (
struct rspamd_cryptobox_pubkey *kp);
/**
@@ -78,10 +82,10 @@ struct rspamd_cryptobox_pubkey* rspamd_pubkey_ref (
* @param alg algorithm of the key (nist or curve25519)
* @return new pubkey or NULL in case of error
*/
-struct rspamd_cryptobox_pubkey* rspamd_pubkey_from_base32 (const gchar *b32,
- gsize len,
- enum rspamd_cryptobox_keypair_type type,
- enum rspamd_cryptobox_mode alg);
+struct rspamd_cryptobox_pubkey *rspamd_pubkey_from_base32 (const gchar *b32,
+ gsize len,
+ enum rspamd_cryptobox_keypair_type type,
+ enum rspamd_cryptobox_mode alg);
/**
* Load pubkey from hex string
@@ -90,10 +94,10 @@ struct rspamd_cryptobox_pubkey* rspamd_pubkey_from_base32 (const gchar *b32,
* @param alg algorithm of the key (nist or curve25519)
* @return new pubkey or NULL in case of error
*/
-struct rspamd_cryptobox_pubkey* rspamd_pubkey_from_hex (const gchar *hex,
- gsize len,
- enum rspamd_cryptobox_keypair_type type,
- enum rspamd_cryptobox_mode alg);
+struct rspamd_cryptobox_pubkey *rspamd_pubkey_from_hex (const gchar *hex,
+ gsize len,
+ enum rspamd_cryptobox_keypair_type type,
+ enum rspamd_cryptobox_mode alg);
/**
* Load pubkey from raw chunk string
@@ -102,10 +106,10 @@ struct rspamd_cryptobox_pubkey* rspamd_pubkey_from_hex (const gchar *hex,
* @param alg algorithm of the key (nist or curve25519)
* @return new pubkey or NULL in case of error
*/
-struct rspamd_cryptobox_pubkey* rspamd_pubkey_from_bin (const guchar *raw,
- gsize len,
- enum rspamd_cryptobox_keypair_type type,
- enum rspamd_cryptobox_mode alg);
+struct rspamd_cryptobox_pubkey *rspamd_pubkey_from_bin (const guchar *raw,
+ gsize len,
+ enum rspamd_cryptobox_keypair_type type,
+ enum rspamd_cryptobox_mode alg);
/**
@@ -119,6 +123,7 @@ void rspamd_pubkey_unref (struct rspamd_cryptobox_pubkey *kp);
*/
enum rspamd_cryptobox_keypair_type rspamd_keypair_type (
struct rspamd_cryptobox_keypair *kp);
+
/**
* Get type of pubkey
*/
@@ -129,6 +134,7 @@ enum rspamd_cryptobox_keypair_type rspamd_pubkey_type (
* Get algorithm of keypair
*/
enum rspamd_cryptobox_mode rspamd_keypair_alg (struct rspamd_cryptobox_keypair *kp);
+
/**
* Get algorithm of pubkey
*/
@@ -139,29 +145,30 @@ enum rspamd_cryptobox_mode rspamd_pubkey_alg (struct rspamd_cryptobox_pubkey *p)
* @param p
* @return
*/
-const guchar * rspamd_pubkey_get_nm (struct rspamd_cryptobox_pubkey *p,
- struct rspamd_cryptobox_keypair *kp);
+const guchar *rspamd_pubkey_get_nm (struct rspamd_cryptobox_pubkey *p,
+ struct rspamd_cryptobox_keypair *kp);
/**
* Calculate and store nm value for the specified local key (performs ECDH)
* @param p
* @return
*/
-const guchar * rspamd_pubkey_calculate_nm (struct rspamd_cryptobox_pubkey *p,
- struct rspamd_cryptobox_keypair *kp);
+const guchar *rspamd_pubkey_calculate_nm (struct rspamd_cryptobox_pubkey *p,
+ struct rspamd_cryptobox_keypair *kp);
/**
* Get raw public key id for a specified keypair (rspamd_cryptobox_HASHBYTES)
* @param kp
* @return
*/
-const guchar * rspamd_keypair_get_id (struct rspamd_cryptobox_keypair *kp);
+const guchar *rspamd_keypair_get_id (struct rspamd_cryptobox_keypair *kp);
+
/**
* Get raw public key id for a specified key (rspamd_cryptobox_HASHBYTES)
* @param kp
* @return
*/
-const guchar * rspamd_pubkey_get_id (struct rspamd_cryptobox_pubkey *pk);
+const guchar *rspamd_pubkey_get_id (struct rspamd_cryptobox_pubkey *pk);
/**
* Get raw public key from pubkey opaque structure
@@ -169,8 +176,8 @@ const guchar * rspamd_pubkey_get_id (struct rspamd_cryptobox_pubkey *pk);
* @param len
* @return
*/
-const guchar * rspamd_pubkey_get_pk (struct rspamd_cryptobox_pubkey *pk,
- guint *len);
+const guchar *rspamd_pubkey_get_pk (struct rspamd_cryptobox_pubkey *pk,
+ guint *len);
/** Short ID characters count */
#define RSPAMD_KEYPAIR_SHORT_ID_LEN 5
@@ -187,6 +194,7 @@ const guchar * rspamd_pubkey_get_pk (struct rspamd_cryptobox_pubkey *pk,
/** Human readable output */
#define RSPAMD_KEYPAIR_HUMAN 0x20
#define RSPAMD_KEYPAIR_HEX 0x40
+
/**
* Print keypair encoding it if needed
* @param key key to print
@@ -194,7 +202,7 @@ const guchar * rspamd_pubkey_get_pk (struct rspamd_cryptobox_pubkey *pk,
* @return newly allocated string with keypair
*/
GString *rspamd_keypair_print (struct rspamd_cryptobox_keypair *kp,
- guint how);
+ guint how);
/**
* Print pubkey encoding it if needed
@@ -203,7 +211,7 @@ GString *rspamd_keypair_print (struct rspamd_cryptobox_keypair *kp,
* @return newly allocated string with keypair
*/
GString *rspamd_pubkey_print (struct rspamd_cryptobox_pubkey *pk,
- guint how);
+ guint how);
/** Get keypair pubkey ID */
#define RSPAMD_KEYPAIR_COMPONENT_ID 0
@@ -211,6 +219,7 @@ GString *rspamd_pubkey_print (struct rspamd_cryptobox_pubkey *pk,
#define RSPAMD_KEYPAIR_COMPONENT_PK 1
/** Get keypair private key */
#define RSPAMD_KEYPAIR_COMPONENT_SK 2
+
/**
* Get specific component of a keypair
* @param kp keypair
@@ -218,23 +227,23 @@ GString *rspamd_pubkey_print (struct rspamd_cryptobox_pubkey *pk,
* @param len length of input
* @return raw content of the component
*/
-const guchar * rspamd_keypair_component (struct rspamd_cryptobox_keypair *kp,
- guint ncomp, guint *len);
+const guchar *rspamd_keypair_component (struct rspamd_cryptobox_keypair *kp,
+ guint ncomp, guint *len);
/**
* Create a new keypair from ucl object
* @param obj object to load
* @return new structure or NULL if an object is invalid
*/
-struct rspamd_cryptobox_keypair * rspamd_keypair_from_ucl (const ucl_object_t *obj);
+struct rspamd_cryptobox_keypair *rspamd_keypair_from_ucl (const ucl_object_t *obj);
/**
* Converts keypair to ucl object
* @param kp
* @return
*/
-ucl_object_t * rspamd_keypair_to_ucl (struct rspamd_cryptobox_keypair *kp,
- gboolean is_hex);
+ucl_object_t *rspamd_keypair_to_ucl (struct rspamd_cryptobox_keypair *kp,
+ gboolean is_hex);
/**
* Signs memory using the specified keypair
@@ -247,8 +256,8 @@ ucl_object_t * rspamd_keypair_to_ucl (struct rspamd_cryptobox_keypair *kp,
* @return TRUE if signature operation succeeded
*/
gboolean rspamd_keypair_sign (struct rspamd_cryptobox_keypair *kp,
- const void *data, gsize len, guchar **sig, gsize *outlen,
- GError **err);
+ const void *data, gsize len, guchar **sig, gsize *outlen,
+ GError **err);
/***
* Verifies data using public key
@@ -261,8 +270,8 @@ gboolean rspamd_keypair_sign (struct rspamd_cryptobox_keypair *kp,
* @return TRUE if signature is valid
*/
gboolean rspamd_keypair_verify (struct rspamd_cryptobox_pubkey *pk,
- const void *data, gsize len, const guchar *sig, gsize siglen,
- GError **err);
+ const void *data, gsize len, const guchar *sig, gsize siglen,
+ GError **err);
/**
* Compares two public keys
@@ -271,7 +280,7 @@ gboolean rspamd_keypair_verify (struct rspamd_cryptobox_pubkey *pk,
* @return TRUE if two keys are equal
*/
gboolean rspamd_pubkey_equal (const struct rspamd_cryptobox_pubkey *k1,
- const struct rspamd_cryptobox_pubkey *k2);
+ const struct rspamd_cryptobox_pubkey *k2);
/**
* Decrypts data using keypair and a pubkey stored in in, in must start from
@@ -304,6 +313,7 @@ gboolean rspamd_keypair_encrypt (struct rspamd_cryptobox_keypair *kp,
const guchar *in, gsize inlen,
guchar **out, gsize *outlen,
GError **err);
+
/**
* Encrypts data usign specific pubkey (must have KEX type).
* This method actually generates ephemeral local keypair, use public key from
@@ -317,8 +327,12 @@ gboolean rspamd_keypair_encrypt (struct rspamd_cryptobox_keypair *kp,
* @return TRUE if encryption has been completed, out must be freed in this case
*/
gboolean rspamd_pubkey_encrypt (struct rspamd_cryptobox_pubkey *pk,
- const guchar *in, gsize inlen,
- guchar **out, gsize *outlen,
- GError **err);
+ const guchar *in, gsize inlen,
+ guchar **out, gsize *outlen,
+ GError **err);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* SRC_LIBCRYPTOBOX_KEYPAIR_H_ */
diff --git a/src/libcryptobox/keypair_private.h b/src/libcryptobox/keypair_private.h
index 98af52b4c..8d259faaa 100644
--- a/src/libcryptobox/keypair_private.h
+++ b/src/libcryptobox/keypair_private.h
@@ -20,6 +20,9 @@
#include "ref.h"
#include "cryptobox.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
/*
* KEX cached data
*/
@@ -32,7 +35,7 @@ struct rspamd_cryptobox_nm {
/*
* Generic keypair
*/
-struct rspamd_cryptobox_keypair {
+struct rspamd_cryptobox_keypair {
guchar id[rspamd_cryptobox_HASHBYTES];
enum rspamd_cryptobox_keypair_type type;
enum rspamd_cryptobox_mode alg;
@@ -127,7 +130,13 @@ struct rspamd_cryptobox_pubkey_sig_25519 {
};
void rspamd_cryptobox_nm_dtor (struct rspamd_cryptobox_nm *nm);
+
void rspamd_cryptobox_keypair_dtor (struct rspamd_cryptobox_keypair *kp);
+
void rspamd_cryptobox_pubkey_dtor (struct rspamd_cryptobox_pubkey *p);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* KEYPAIR_PRIVATE_H_ */
diff --git a/src/libcryptobox/keypairs_cache.h b/src/libcryptobox/keypairs_cache.h
index 3ee7c0d51..4f54b6c9d 100644
--- a/src/libcryptobox/keypairs_cache.h
+++ b/src/libcryptobox/keypairs_cache.h
@@ -19,6 +19,11 @@
#include "config.h"
#include "keypair.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_keypair_cache;
/**
@@ -26,7 +31,7 @@ struct rspamd_keypair_cache;
* @param max_items defines maximum count of elements in the cache
* @return new cache
*/
-struct rspamd_keypair_cache * rspamd_keypair_cache_new (guint max_items);
+struct rspamd_keypair_cache *rspamd_keypair_cache_new (guint max_items);
/**
@@ -36,8 +41,8 @@ struct rspamd_keypair_cache * rspamd_keypair_cache_new (guint max_items);
* @param rk remote key
*/
void rspamd_keypair_cache_process (struct rspamd_keypair_cache *c,
- struct rspamd_cryptobox_keypair *lk,
- struct rspamd_cryptobox_pubkey *rk);
+ struct rspamd_cryptobox_keypair *lk,
+ struct rspamd_cryptobox_pubkey *rk);
/**
* Destroy old keypair cache
@@ -45,5 +50,8 @@ void rspamd_keypair_cache_process (struct rspamd_keypair_cache *c,
*/
void rspamd_keypair_cache_destroy (struct rspamd_keypair_cache *c);
+#ifdef __cplusplus
+}
+#endif
#endif /* KEYPAIRS_CACHE_H_ */
diff --git a/src/libmime/archives.h b/src/libmime/archives.h
index 6abfb857a..bb84d4298 100644
--- a/src/libmime/archives.h
+++ b/src/libmime/archives.h
@@ -18,6 +18,10 @@
#include "config.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
enum rspamd_archive_type {
RSPAMD_ARCHIVE_ZIP,
RSPAMD_ARCHIVE_RAR,
@@ -57,6 +61,10 @@ void rspamd_archives_process (struct rspamd_task *task);
/**
* Get textual representation of an archive's type
*/
-const gchar * rspamd_archive_type_str (enum rspamd_archive_type type);
+const gchar *rspamd_archive_type_str (enum rspamd_archive_type type);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* SRC_LIBMIME_ARCHIVES_H_ */
diff --git a/src/libmime/content_type.h b/src/libmime/content_type.h
index 68b1b8107..2e3bf5e40 100644
--- a/src/libmime/content_type.h
+++ b/src/libmime/content_type.h
@@ -20,6 +20,10 @@
#include "libutil/fstring.h"
#include "libutil/mem_pool.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
enum rspamd_content_type_flags {
RSPAMD_CONTENT_TYPE_VALID = 0,
RSPAMD_CONTENT_TYPE_BROKEN = 1 << 0,
@@ -84,8 +88,8 @@ struct rspamd_content_disposition {
void
rspamd_content_type_add_param (rspamd_mempool_t *pool,
struct rspamd_content_type *ct,
- gchar *name_start, gchar *name_end,
- gchar *value_start, gchar *value_end);
+ gchar *name_start, gchar *name_end,
+ gchar *value_start, gchar *value_end);
/**
* Parse content type from the header (performs copy + lowercase)
@@ -94,8 +98,8 @@ rspamd_content_type_add_param (rspamd_mempool_t *pool,
* @param pool
* @return
*/
-struct rspamd_content_type * rspamd_content_type_parse (const gchar *in,
- gsize len, rspamd_mempool_t *pool);
+struct rspamd_content_type *rspamd_content_type_parse (const gchar *in,
+ gsize len, rspamd_mempool_t *pool);
/**
* Adds new param for content disposition header
@@ -108,9 +112,9 @@ struct rspamd_content_type * rspamd_content_type_parse (const gchar *in,
*/
void
rspamd_content_disposition_add_param (rspamd_mempool_t *pool,
- struct rspamd_content_disposition *cd,
- const gchar *name_start, const gchar *name_end,
- const gchar *value_start, const gchar *value_end);
+ struct rspamd_content_disposition *cd,
+ const gchar *name_start, const gchar *name_end,
+ const gchar *value_start, const gchar *value_end);
/**
* Parse content-disposition header
@@ -119,7 +123,12 @@ rspamd_content_disposition_add_param (rspamd_mempool_t *pool,
* @param pool
* @return
*/
-struct rspamd_content_disposition * rspamd_content_disposition_parse (const gchar *in,
- gsize len, rspamd_mempool_t *pool);
+struct rspamd_content_disposition *rspamd_content_disposition_parse (const gchar *in,
+ gsize len,
+ rspamd_mempool_t *pool);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* SRC_LIBMIME_CONTENT_TYPE_H_ */
diff --git a/src/libmime/email_addr.h b/src/libmime/email_addr.h
index 666ded0e9..69aa2aa00 100644
--- a/src/libmime/email_addr.h
+++ b/src/libmime/email_addr.h
@@ -20,6 +20,11 @@
#include "libutil/mem_pool.h"
#include "libutil/ref.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_mime_header;
enum rspamd_email_address_flags {
@@ -62,7 +67,7 @@ struct rspamd_task;
* @param len length of string
* @return
*/
-struct rspamd_email_address * rspamd_email_address_from_smtp (
+struct rspamd_email_address *rspamd_email_address_from_smtp (
const gchar *str, guint len);
/**
@@ -75,9 +80,9 @@ struct rspamd_email_address * rspamd_email_address_from_smtp (
* @return
*/
GPtrArray *rspamd_email_address_from_mime (rspamd_mempool_t *pool,
- const gchar *hdr,
- guint len,
- GPtrArray *src);
+ const gchar *hdr,
+ guint len,
+ GPtrArray *src);
/**
* Destroys list of email addresses
@@ -87,4 +92,9 @@ void rspamd_email_address_list_destroy (gpointer ptr);
void rspamd_email_address_free (struct rspamd_email_address *addr);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif /* SRC_LIBMIME_EMAIL_ADDR_H_ */
diff --git a/src/libmime/filter.h b/src/libmime/filter.h
index f9218194a..8245f8c53 100644
--- a/src/libmime/filter.h
+++ b/src/libmime/filter.h
@@ -10,6 +10,10 @@
#include "rspamd_symcache.h"
#include "task.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_task;
struct rspamd_settings;
struct rspamd_classifier_config;
@@ -67,14 +71,14 @@ struct kh_rspamd_symbols_group_hash_s;
struct rspamd_metric_result {
- double score; /**< total score */
- double grow_factor; /**< current grow factor */
+ double score; /**< total score */
+ double grow_factor; /**< current grow factor */
struct rspamd_passthrough_result *passthrough_result;
guint npositive;
guint nnegative;
double positive_score;
double negative_score;
- struct kh_rspamd_symbols_hash_s *symbols; /**< symbols of metric */
+ struct kh_rspamd_symbols_hash_s *symbols; /**< symbols of metric */
struct kh_rspamd_symbols_group_hash_s *sym_groups; /**< groups of symbols */
struct rspamd_action_result *actions_limits;
guint nactions;
@@ -85,7 +89,7 @@ struct rspamd_metric_result {
* @param task task object
* @return metric result or NULL if metric `name` has not been found
*/
-struct rspamd_metric_result * rspamd_create_metric_result (struct rspamd_task *task);
+struct rspamd_metric_result *rspamd_create_metric_result (struct rspamd_task *task);
/**
* Adds a new passthrough result to a task
@@ -118,16 +122,16 @@ enum rspamd_symbol_insert_flags {
* @param weight numeric weight for symbol
* @param opts list of symbol's options
*/
-struct rspamd_symbol_result* rspamd_task_insert_result_full (struct rspamd_task *task,
- const gchar *symbol,
- double weight,
- const gchar *opts,
- enum rspamd_symbol_insert_flags flags);
+struct rspamd_symbol_result *rspamd_task_insert_result_full (struct rspamd_task *task,
+ const gchar *symbol,
+ double weight,
+ const gchar *opts,
+ enum rspamd_symbol_insert_flags flags);
#define rspamd_task_insert_result_single(task, symbol, flag, opts) \
- rspamd_task_insert_result_full (task, symbol, flag, opts, RSPAMD_SYMBOL_INSERT_SINGLE)
+ rspamd_task_insert_result_full (task, symbol, flag, opts, RSPAMD_SYMBOL_INSERT_SINGLE)
#define rspamd_task_insert_result(task, symbol, flag, opts) \
- rspamd_task_insert_result_full (task, symbol, flag, opts, RSPAMD_SYMBOL_INSERT_DEFAULT)
+ rspamd_task_insert_result_full (task, symbol, flag, opts, RSPAMD_SYMBOL_INSERT_DEFAULT)
/**
@@ -137,7 +141,7 @@ struct rspamd_symbol_result* rspamd_task_insert_result_full (struct rspamd_task
* @param opt
*/
gboolean rspamd_task_add_result_option (struct rspamd_task *task,
- struct rspamd_symbol_result *s, const gchar *opt);
+ struct rspamd_symbol_result *s, const gchar *opt);
/**
* Finds symbol result
@@ -145,7 +149,7 @@ gboolean rspamd_task_add_result_option (struct rspamd_task *task,
* @param sym
* @return
*/
-struct rspamd_symbol_result* rspamd_task_find_symbol_result (
+struct rspamd_symbol_result *rspamd_task_find_symbol_result (
struct rspamd_task *task, const char *sym);
/**
@@ -166,8 +170,8 @@ void rspamd_task_symbol_result_foreach (struct rspamd_task *task,
* @return result metric weight
*/
double rspamd_factor_consolidation_func (struct rspamd_task *task,
- const gchar *metric_name,
- const gchar *unused);
+ const gchar *metric_name,
+ const gchar *unused);
/**
@@ -175,6 +179,10 @@ double rspamd_factor_consolidation_func (struct rspamd_task *task,
* @param task
* @return
*/
-struct rspamd_action* rspamd_check_action_metric (struct rspamd_task *task);
+struct rspamd_action *rspamd_check_action_metric (struct rspamd_task *task);
+
+#ifdef __cplusplus
+}
+#endif
#endif
diff --git a/src/libmime/filter_private.h b/src/libmime/filter_private.h
index 82322a6bb..31def75e2 100644
--- a/src/libmime/filter_private.h
+++ b/src/libmime/filter_private.h
@@ -8,6 +8,10 @@
#include "filter.h"
#include "contrib/libucl/khash.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
KHASH_MAP_INIT_STR (rspamd_options_hash, struct rspamd_symbol_option *);
/**
* Result of metric processing
@@ -28,4 +32,8 @@ KHASH_INIT (rspamd_symbols_group_hash,
rspamd_ptr_hash_func,
rspamd_ptr_equal_func);
+#ifdef __cplusplus
+}
+#endif
+
#endif //RSPAMD_FILTER_PRIVATE_H
diff --git a/src/libmime/images.h b/src/libmime/images.h
index 39a7dc8c5..bf1175b2a 100644
--- a/src/libmime/images.h
+++ b/src/libmime/images.h
@@ -4,6 +4,10 @@
#include "config.h"
#include "fstring.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct html_image;
struct rspamd_task;
struct rspamd_mime_part;
@@ -41,14 +45,18 @@ void rspamd_images_process (struct rspamd_task *task);
* @param data
* @return
*/
-struct rspamd_image* rspamd_maybe_process_image (rspamd_mempool_t *pool,
- rspamd_ftok_t *data);
+struct rspamd_image *rspamd_maybe_process_image (rspamd_mempool_t *pool,
+ rspamd_ftok_t *data);
/*
* Get textual representation of an image's type
*/
-const gchar * rspamd_image_type_str (enum rspamd_image_type type);
+const gchar *rspamd_image_type_str (enum rspamd_image_type type);
void rspamd_image_normalize (struct rspamd_task *task, struct rspamd_image *img);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* IMAGES_H_ */
diff --git a/src/libmime/lang_detection.h b/src/libmime/lang_detection.h
index 517ab037e..3eaa4e286 100644
--- a/src/libmime/lang_detection.h
+++ b/src/libmime/lang_detection.h
@@ -22,6 +22,10 @@
#include "libstat/stat_api.h"
#include "libmime/message.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_lang_detector;
struct rspamd_language_elt;
struct rspamd_task;
@@ -57,10 +61,11 @@ struct rspamd_lang_detector_res {
* @param cfg
* @return
*/
-struct rspamd_lang_detector* rspamd_language_detector_init (struct rspamd_config *cfg);
+struct rspamd_lang_detector *rspamd_language_detector_init (struct rspamd_config *cfg);
+
+struct rspamd_lang_detector *rspamd_language_detector_ref (struct rspamd_lang_detector *d);
-struct rspamd_lang_detector* rspamd_language_detector_ref (struct rspamd_lang_detector* d);
-void rspamd_language_detector_unref (struct rspamd_lang_detector* d);
+void rspamd_language_detector_unref (struct rspamd_lang_detector *d);
/**
* Try to detect language of words
@@ -70,8 +75,8 @@ void rspamd_language_detector_unref (struct rspamd_lang_detector* d);
* @return array of struct rspamd_lang_detector_res sorted by freq descending
*/
gboolean rspamd_language_detector_detect (struct rspamd_task *task,
- struct rspamd_lang_detector *d,
- struct rspamd_mime_text_part *part);
+ struct rspamd_lang_detector *d,
+ struct rspamd_mime_text_part *part);
/**
* Returns TRUE if the specified word is known to be a stop word
@@ -81,6 +86,11 @@ gboolean rspamd_language_detector_detect (struct rspamd_task *task,
* @return
*/
gboolean rspamd_language_detector_is_stop_word (struct rspamd_lang_detector *d,
- const gchar *word, gsize wlen);
+ const gchar *word, gsize wlen);
+
+
+#ifdef __cplusplus
+}
+#endif
#endif
diff --git a/src/libmime/message.h b/src/libmime/message.h
index eb260cd77..17c4ec5b9 100644
--- a/src/libmime/message.h
+++ b/src/libmime/message.h
@@ -16,6 +16,10 @@
#include <unicode/uchar.h>
#include <unicode/utext.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_task;
struct controller_session;
struct html_content;
@@ -106,9 +110,9 @@ struct rspamd_mime_text_part {
GArray *utf_words;
UText utf_stripped_text; /* Used by libicu to represent the utf8 content */
- GPtrArray *newlines; /**< positions of newlines in text, relative to content*/
+ GPtrArray *newlines; /**< positions of newlines in text, relative to content*/
struct html_content *html;
- GList *exceptions; /**< list of offsets of urls */
+ GList *exceptions; /**< list of offsets of urls */
struct rspamd_mime_part *mime_part;
guint flags;
@@ -146,8 +150,9 @@ void rspamd_message_process (struct rspamd_task *task);
* @return An array of header's values or NULL. It is NOT permitted to free array or values.
*/
GPtrArray *rspamd_message_get_header_array (struct rspamd_task *task,
- const gchar *field,
- gboolean strong);
+ const gchar *field,
+ gboolean strong);
+
/**
* Get an array of mime parts header's values with specified header's name using raw headers
* @param task worker task structure
@@ -156,8 +161,8 @@ GPtrArray *rspamd_message_get_header_array (struct rspamd_task *task,
* @return An array of header's values or NULL. It is NOT permitted to free array or values.
*/
GPtrArray *rspamd_message_get_mime_header_array (struct rspamd_task *task,
- const gchar *field,
- gboolean strong);
+ const gchar *field,
+ gboolean strong);
/**
* Get an array of header's values with specified header's name using raw headers
@@ -167,9 +172,9 @@ GPtrArray *rspamd_message_get_mime_header_array (struct rspamd_task *task,
* @return An array of header's values or NULL. It is NOT permitted to free array or values.
*/
GPtrArray *rspamd_message_get_header_from_hash (GHashTable *htb,
- rspamd_mempool_t *pool,
- const gchar *field,
- gboolean strong);
+ rspamd_mempool_t *pool,
+ const gchar *field,
+ gboolean strong);
/**
@@ -184,6 +189,10 @@ enum rspamd_cte rspamd_cte_from_string (const gchar *str);
* @param ct
* @return
*/
-const gchar* rspamd_cte_to_string (enum rspamd_cte ct);
+const gchar *rspamd_cte_to_string (enum rspamd_cte ct);
+
+#ifdef __cplusplus
+}
+#endif
#endif
diff --git a/src/libmime/mime_encoding.c b/src/libmime/mime_encoding.c
index 7b897929e..8dc7da12e 100644
--- a/src/libmime/mime_encoding.c
+++ b/src/libmime/mime_encoding.c
@@ -18,6 +18,7 @@
#include "libutil/mem_pool.h"
#include "libutil/regexp.h"
#include "libutil/hash.h"
+#include "libserver/cfg_file.h"
#include "libserver/task.h"
#include "mime_encoding.h"
#include "message.h"
diff --git a/src/libmime/mime_encoding.h b/src/libmime/mime_encoding.h
index 1a61339ca..5224d33fb 100644
--- a/src/libmime/mime_encoding.h
+++ b/src/libmime/mime_encoding.h
@@ -21,6 +21,10 @@
#include "fstring.h"
#include <unicode/uchar.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_task;
struct rspamd_mime_part;
struct rspamd_mime_text_part;
@@ -32,8 +36,8 @@ struct rspamd_charset_converter;
* @param in
* @return
*/
-const gchar * rspamd_mime_detect_charset (const rspamd_ftok_t *in,
- rspamd_mempool_t *pool);
+const gchar *rspamd_mime_detect_charset (const rspamd_ftok_t *in,
+ rspamd_mempool_t *pool);
/**
* Convert text chunk to utf-8. Input encoding is substituted using
@@ -48,9 +52,9 @@ const gchar * rspamd_mime_detect_charset (const rspamd_ftok_t *in,
* @param err
* @return
*/
-gchar * rspamd_mime_text_to_utf8 (rspamd_mempool_t *pool,
- gchar *input, gsize len, const gchar *in_enc,
- gsize *olen, GError **err);
+gchar *rspamd_mime_text_to_utf8 (rspamd_mempool_t *pool,
+ gchar *input, gsize len, const gchar *in_enc,
+ gsize *olen, GError **err);
/**
* Converts data from `in` to `out`, returns `FALSE` if `enc` is not a valid iconv charset
@@ -60,7 +64,7 @@ gchar * rspamd_mime_text_to_utf8 (rspamd_mempool_t *pool,
* @return
*/
gboolean rspamd_mime_to_utf8_byte_array (GByteArray *in,
- GByteArray *out, const gchar *enc);
+ GByteArray *out, const gchar *enc);
/**
* Maybe convert part to utf-8
@@ -69,7 +73,7 @@ gboolean rspamd_mime_to_utf8_byte_array (GByteArray *in,
* @return
*/
void rspamd_mime_text_part_maybe_convert (struct rspamd_task *task,
- struct rspamd_mime_text_part *text_part);
+ struct rspamd_mime_text_part *text_part);
/**
* Checks utf8 charset and normalize/validate utf8 string
@@ -79,7 +83,7 @@ void rspamd_mime_text_part_maybe_convert (struct rspamd_task *task,
* @return
*/
gboolean rspamd_mime_charset_utf_check (rspamd_ftok_t *charset,
- gchar *in, gsize len, gboolean content_check);
+ gchar *in, gsize len, gboolean content_check);
/**
* Ensure that all characters in string are valid utf8 chars or replace them
@@ -125,5 +129,8 @@ rspamd_converter_to_uchars (struct rspamd_charset_converter *cnv,
*/
const char *rspamd_mime_charset_find_by_content (const gchar *in, gsize inlen);
+#ifdef __cplusplus
+}
+#endif
#endif /* SRC_LIBMIME_MIME_ENCODING_H_ */
diff --git a/src/libmime/mime_expressions.h b/src/libmime/mime_expressions.h
index 2677b9968..935027482 100644
--- a/src/libmime/mime_expressions.h
+++ b/src/libmime/mime_expressions.h
@@ -10,6 +10,10 @@
#include "expression.h"
#include "contrib/libucl/ucl.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_task;
struct rspamd_config;
@@ -34,8 +38,8 @@ struct expression_argument {
};
-typedef gboolean (*rspamd_internal_func_t)(struct rspamd_task *,
- GArray *args, void *user_data);
+typedef gboolean (*rspamd_internal_func_t) (struct rspamd_task *,
+ GArray *args, void *user_data);
/**
@@ -44,8 +48,8 @@ typedef gboolean (*rspamd_internal_func_t)(struct rspamd_task *,
* @param func pointer to function
*/
void register_expression_function (const gchar *name,
- rspamd_internal_func_t func,
- void *user_data);
+ rspamd_internal_func_t func,
+ void *user_data);
/**
* Set global limit of regexp data size to be processed
@@ -54,4 +58,8 @@ void register_expression_function (const gchar *name,
*/
guint rspamd_mime_expression_set_re_limit (guint limit);
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libmime/mime_headers.h b/src/libmime/mime_headers.h
index 81fff96a2..5cb300978 100644
--- a/src/libmime/mime_headers.h
+++ b/src/libmime/mime_headers.h
@@ -20,6 +20,10 @@
#include "libutil/mem_pool.h"
#include "libutil/addr.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_task;
enum rspamd_rfc2047_encoding {
@@ -97,9 +101,9 @@ struct received_header {
* @param check_newlines
*/
void rspamd_mime_headers_process (struct rspamd_task *task, GHashTable *target,
- GQueue *order,
- const gchar *in, gsize len,
- gboolean check_newlines);
+ GQueue *order,
+ const gchar *in, gsize len,
+ gboolean check_newlines);
/**
* Perform rfc2047 decoding of a header
@@ -108,8 +112,8 @@ void rspamd_mime_headers_process (struct rspamd_task *task, GHashTable *target,
* @param inlen
* @return
*/
-gchar * rspamd_mime_header_decode (rspamd_mempool_t *pool, const gchar *in,
- gsize inlen, gboolean *invalid_utf);
+gchar *rspamd_mime_header_decode (rspamd_mempool_t *pool, const gchar *in,
+ gsize inlen, gboolean *invalid_utf);
/**
* Encode mime header if needed
@@ -117,13 +121,17 @@ gchar * rspamd_mime_header_decode (rspamd_mempool_t *pool, const gchar *in,
* @param len
* @return newly allocated encoded header
*/
-gchar * rspamd_mime_header_encode (const gchar *in, gsize len);
+gchar *rspamd_mime_header_encode (const gchar *in, gsize len);
/**
* Generate new unique message id
* @param fqdn
* @return
*/
-gchar * rspamd_mime_message_id_generate (const gchar *fqdn);
+gchar *rspamd_mime_message_id_generate (const gchar *fqdn);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* SRC_LIBMIME_MIME_HEADERS_H_ */
diff --git a/src/libmime/mime_parser.h b/src/libmime/mime_parser.h
index 987ec1395..ed3fe5f87 100644
--- a/src/libmime/mime_parser.h
+++ b/src/libmime/mime_parser.h
@@ -18,6 +18,11 @@
#include "config.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_task;
struct rspamd_mime_part;
@@ -29,8 +34,13 @@ enum rspamd_mime_parse_error {
};
enum rspamd_mime_parse_error rspamd_mime_parse_task (struct rspamd_task *task,
- GError **err);
+ GError **err);
void rspamd_mime_parser_calc_digest (struct rspamd_mime_part *part);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif /* SRC_LIBMIME_MIME_PARSER_H_ */
diff --git a/src/libmime/smtp_parsers.h b/src/libmime/smtp_parsers.h
index 6904bece0..b4fb825b4 100644
--- a/src/libmime/smtp_parsers.h
+++ b/src/libmime/smtp_parsers.h
@@ -22,21 +22,34 @@
#include "task.h"
#include "message.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
int rspamd_smtp_received_parse (struct rspamd_task *task,
- const char *data, size_t len, struct received_header *rh);
+ const char *data, size_t len,
+ struct received_header *rh);
+
int rspamd_smtp_addr_parse (const char *data, size_t len,
- struct rspamd_email_address *addr);
+ struct rspamd_email_address *addr);
+
gboolean rspamd_content_disposition_parser (const char *data, size_t len,
- struct rspamd_content_disposition *cd, rspamd_mempool_t *pool);
+ struct rspamd_content_disposition *cd,
+ rspamd_mempool_t *pool);
gboolean
rspamd_rfc2047_parser (const gchar *in, gsize len, gint *pencoding,
- const gchar **charset, gsize *charset_len,
- const gchar **encoded, gsize *encoded_len);
+ const gchar **charset, gsize *charset_len,
+ const gchar **encoded, gsize *encoded_len);
-rspamd_inet_addr_t* rspamd_parse_smtp_ip (const char *data, size_t len,
- rspamd_mempool_t *pool);
+rspamd_inet_addr_t *rspamd_parse_smtp_ip (const char *data, size_t len,
+ rspamd_mempool_t *pool);
guint64 rspamd_parse_smtp_date (const char *data, size_t len);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* SRC_LIBMIME_SMTP_PARSERS_H_ */
diff --git a/src/libserver/async_session.h b/src/libserver/async_session.h
index 92454158a..ad79769e9 100644
--- a/src/libserver/async_session.h
+++ b/src/libserver/async_session.h
@@ -19,11 +19,16 @@
#include "config.h"
#include "mem_pool.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_async_event;
struct rspamd_async_session;
-typedef void (*event_finalizer_t)(gpointer ud);
-typedef gboolean (*session_finalizer_t)(gpointer user_data);
+typedef void (*event_finalizer_t) (gpointer ud);
+
+typedef gboolean (*session_finalizer_t) (gpointer user_data);
/**
* Make new async session
@@ -34,9 +39,9 @@ typedef gboolean (*session_finalizer_t)(gpointer user_data);
* @param user_data abstract user data
* @return
*/
-struct rspamd_async_session * rspamd_session_create (rspamd_mempool_t *pool,
- session_finalizer_t fin, event_finalizer_t restore,
- event_finalizer_t cleanup, gpointer user_data);
+struct rspamd_async_session *rspamd_session_create (rspamd_mempool_t *pool,
+ session_finalizer_t fin, event_finalizer_t restore,
+ event_finalizer_t cleanup, gpointer user_data);
/**
* Insert new event to the session
@@ -47,12 +52,13 @@ struct rspamd_async_session * rspamd_session_create (rspamd_mempool_t *pool,
*/
struct rspamd_async_event *
rspamd_session_add_event_full (struct rspamd_async_session *session,
- event_finalizer_t fin,
- gpointer user_data,
- const gchar *subsystem,
- const gchar *loc);
+ event_finalizer_t fin,
+ gpointer user_data,
+ const gchar *subsystem,
+ const gchar *loc);
+
#define rspamd_session_add_event(session, fin, user_data, subsystem) \
- rspamd_session_add_event_full(session, fin, user_data, subsystem, G_STRLOC)
+ rspamd_session_add_event_full(session, fin, user_data, subsystem, G_STRLOC)
/**
* Remove normal event
@@ -61,11 +67,12 @@ rspamd_session_add_event_full (struct rspamd_async_session *session,
* @param ud user data object
*/
void rspamd_session_remove_event_full (struct rspamd_async_session *session,
- event_finalizer_t fin,
- gpointer ud,
- const gchar *loc);
+ event_finalizer_t fin,
+ gpointer ud,
+ const gchar *loc);
+
#define rspamd_session_remove_event(session, fin, user_data) \
- rspamd_session_remove_event_full(session, fin, user_data, G_STRLOC)
+ rspamd_session_remove_event_full(session, fin, user_data, G_STRLOC)
/**
* Must be called at the end of session, it calls fin functions for all non-forced callbacks
@@ -83,7 +90,7 @@ void rspamd_session_cleanup (struct rspamd_async_session *session);
* @param session
* @return
*/
-rspamd_mempool_t * rspamd_session_mempool (struct rspamd_async_session *session);
+rspamd_mempool_t *rspamd_session_mempool (struct rspamd_async_session *session);
/**
* Check session for events pending and call fin callback if no events are pending
@@ -107,4 +114,8 @@ guint rspamd_session_events_pending (struct rspamd_async_session *session);
*/
gboolean rspamd_session_blocked (struct rspamd_async_session *s);
+#ifdef __cplusplus
+}
+#endif
+
#endif /*RSPAMD_ASYNC_SESSION_H*/
diff --git a/src/libserver/cfg_file.h b/src/libserver/cfg_file.h
index 5f70ccda8..de00ab128 100644
--- a/src/libserver/cfg_file.h
+++ b/src/libserver/cfg_file.h
@@ -25,7 +25,7 @@
#include "ucl.h"
#include "regexp.h"
#include "libserver/re_cache.h"
-#include "ref.h"
+#include "libutil/ref.h"
#include "libutil/radix.h"
#include "monitored.h"
#include "redis_pool.h"
@@ -36,6 +36,10 @@
/* Default metric name */
#define DEFAULT_METRIC "default"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct expression;
struct tokenizer;
struct rspamd_stat_classifier;
@@ -149,13 +153,13 @@ struct rspamd_statfile_config {
gchar *label; /**< label of this statfile */
ucl_object_t *opts; /**< other options */
gboolean is_spam; /**< spam flag */
- struct rspamd_classifier_config *clcf; /**< parent pointer of classifier configuration */
- gpointer data; /**< opaque data */
+ struct rspamd_classifier_config *clcf; /**< parent pointer of classifier configuration */
+ gpointer data; /**< opaque data */
};
struct rspamd_tokenizer_config {
const ucl_object_t *opts; /**< other options */
- const gchar *name; /**< name of tokenizer */
+ const gchar *name; /**< name of tokenizer */
};
@@ -344,7 +348,7 @@ struct rspamd_config {
gdouble grow_factor; /**< grow factor for metric */
GHashTable *symbols; /**< weights of symbols in metric */
const gchar *subject; /**< subject rewrite string */
- GHashTable * groups; /**< groups of symbols */
+ GHashTable *groups; /**< groups of symbols */
struct rspamd_action *actions; /**< all actions of the metric */
gboolean raw_mode; /**< work in raw mode instead of utf one */
@@ -399,17 +403,17 @@ struct rspamd_config {
ucl_object_t *config_comments; /**< comments saved from the config */
ucl_object_t *doc_strings; /**< documentation strings for config options */
GPtrArray *c_modules; /**< list of C modules */
- GHashTable * composite_symbols; /**< hash of composite symbols indexed by its name */
+ GHashTable *composite_symbols; /**< hash of composite symbols indexed by its name */
GList *classifiers; /**< list of all classifiers defined */
GList *statfiles; /**< list of all statfiles in config file order */
GHashTable *classifiers_symbols; /**< hashtable indexed by symbol name of classifiers */
- GHashTable * cfg_params; /**< all cfg params indexed by its name in this structure */
+ GHashTable *cfg_params; /**< all cfg params indexed by its name in this structure */
gchar *dynamic_conf; /**< path to dynamic configuration */
ucl_object_t *current_dynamic_conf; /**< currently loaded dynamic configuration */
- GHashTable * domain_settings; /**< settings per-domains */
- GHashTable * user_settings; /**< settings per-user */
- gchar * domain_settings_str; /**< string representation of settings */
- gchar * user_settings_str;
+ GHashTable *domain_settings; /**< settings per-domains */
+ GHashTable *user_settings; /**< settings per-user */
+ gchar *domain_settings_str; /**< string representation of settings */
+ gchar *user_settings_str;
gint clock_res; /**< resolution of clock used */
GList *maps; /**< maps active */
@@ -423,16 +427,16 @@ struct rspamd_config {
struct rspamd_symcache *cache; /**< symbols cache object */
gchar *cache_filename; /**< filename of cache file */
gdouble cache_reload_time; /**< how often cache reload should be performed */
- gchar * checksum; /**< real checksum of config file */
- gchar * dump_checksum; /**< dump checksum of config file */
+ gchar *checksum; /**< real checksum of config file */
+ gchar *dump_checksum; /**< dump checksum of config file */
gpointer lua_state; /**< pointer to lua state */
gpointer lua_thread_pool; /**< pointer to lua thread (coroutine) pool */
- gchar * rrd_file; /**< rrd file to store statistics */
- gchar * history_file; /**< file to save rolling history */
- gchar * tld_file; /**< file to load effective tld list from */
- gchar * hs_cache_dir; /**< directory to save hyperscan databases */
- gchar * magic_file; /**< file to initialize libmagic */
+ gchar *rrd_file; /**< rrd file to store statistics */
+ gchar *history_file; /**< file to save rolling history */
+ gchar *tld_file; /**< file to load effective tld list from */
+ gchar *hs_cache_dir; /**< directory to save hyperscan databases */
+ gchar *magic_file; /**< file to initialize libmagic */
gdouble dns_timeout; /**< timeout in milliseconds for waiting for dns reply */
guint32 dns_retransmits; /**< maximum retransmits count */
@@ -443,49 +447,49 @@ struct rspamd_config {
guint32 dns_max_requests; /**< limit of DNS requests per task */
gboolean enable_dnssec; /**< enable dnssec stub resolver */
- guint upstream_max_errors; /**< upstream max errors before shutting off */
- gdouble upstream_error_time; /**< rate of upstream errors */
- gdouble upstream_revive_time; /**< revive timeout for upstreams */
- struct upstream_ctx *ups_ctx; /**< upstream context */
- struct rspamd_dns_resolver *dns_resolver; /**< dns resolver if loaded */
+ guint upstream_max_errors; /**< upstream max errors before shutting off */
+ gdouble upstream_error_time; /**< rate of upstream errors */
+ gdouble upstream_revive_time; /**< revive timeout for upstreams */
+ struct upstream_ctx *ups_ctx; /**< upstream context */
+ struct rspamd_dns_resolver *dns_resolver; /**< dns resolver if loaded */
- guint min_word_len; /**< minimum length of the word to be considered */
- guint max_word_len; /**< maximum length of the word to be considered */
- guint words_decay; /**< limit for words for starting adaptive ignoring */
- guint history_rows; /**< number of history rows stored */
+ guint min_word_len; /**< minimum length of the word to be considered */
+ guint max_word_len; /**< maximum length of the word to be considered */
+ guint words_decay; /**< limit for words for starting adaptive ignoring */
+ guint history_rows; /**< number of history rows stored */
guint max_sessions_cache; /**< maximum number of sessions cache elts */
- guint lua_gc_step; /**< lua gc step */
- guint lua_gc_pause; /**< lua gc pause */
- guint full_gc_iters; /**< iterations between full gc cycle */
+ guint lua_gc_step; /**< lua gc step */
+ guint lua_gc_pause; /**< lua gc pause */
+ guint full_gc_iters; /**< iterations between full gc cycle */
- GList *classify_headers; /**< list of headers using for statistics */
- struct module_s **compiled_modules; /**< list of compiled C modules */
- struct worker_s **compiled_workers; /**< list of compiled C modules */struct rspamd_log_format *log_format; /**< parsed log format */
- gchar *log_format_str; /**< raw log format string */
+ GList *classify_headers; /**< list of headers using for statistics */
+ struct module_s **compiled_modules; /**< list of compiled C modules */
+ struct worker_s **compiled_workers; /**< list of compiled C modules */struct rspamd_log_format *log_format; /**< parsed log format */
+ gchar *log_format_str; /**< raw log format string */
- struct rspamd_external_libs_ctx *libs_ctx; /**< context for external libraries */
- struct rspamd_monitored_ctx *monitored_ctx; /**< context for monitored resources */
- struct rspamd_redis_pool *redis_pool; /**< redis connectiosn pool */
+ struct rspamd_external_libs_ctx *libs_ctx; /**< context for external libraries */
+ struct rspamd_monitored_ctx *monitored_ctx; /**< context for monitored resources */
+ struct rspamd_redis_pool *redis_pool; /**< redis connectiosn pool */
- struct rspamd_re_cache *re_cache; /**< static regexp cache */
+ struct rspamd_re_cache *re_cache; /**< static regexp cache */
- GHashTable *trusted_keys; /**< list of trusted public keys */
+ GHashTable *trusted_keys; /**< list of trusted public keys */
- struct rspamd_config_cfg_lua_script *on_load_scripts; /**< list of scripts executed on workers load */
- struct rspamd_config_cfg_lua_script *post_init_scripts; /**< list of scripts executed on config being fully loaded */
+ struct rspamd_config_cfg_lua_script *on_load_scripts; /**< list of scripts executed on workers load */
+ struct rspamd_config_cfg_lua_script *post_init_scripts; /**< list of scripts executed on config being fully loaded */
struct rspamd_config_cfg_lua_script *on_term_scripts; /**< list of callbacks called on worker's termination */
- struct rspamd_config_cfg_lua_script *config_unload_scripts; /**< list of scripts executed on config unload */
+ struct rspamd_config_cfg_lua_script *config_unload_scripts; /**< list of scripts executed on config unload */
- gchar *ssl_ca_path; /**< path to CA certs */
- gchar *ssl_ciphers; /**< set of preferred ciphers */
- gchar *zstd_input_dictionary; /**< path to zstd input dictionary */
- gchar *zstd_output_dictionary; /**< path to zstd output dictionary */
- ucl_object_t *neighbours; /**< other servers in the cluster */
+ gchar *ssl_ca_path; /**< path to CA certs */
+ gchar *ssl_ciphers; /**< set of preferred ciphers */
+ gchar *zstd_input_dictionary; /**< path to zstd input dictionary */
+ gchar *zstd_output_dictionary; /**< path to zstd output dictionary */
+ ucl_object_t *neighbours; /**< other servers in the cluster */
- struct rspamd_config_settings_elt *setting_ids; /**< preprocessed settings ids */
- struct rspamd_lang_detector *lang_det; /**< language detector */
+ struct rspamd_config_settings_elt *setting_ids; /**< preprocessed settings ids */
+ struct rspamd_lang_detector *lang_det; /**< language detector */
- ref_entry_t ref; /**< reference counter */
+ ref_entry_t ref; /**< reference counter */
};
@@ -497,7 +501,7 @@ struct rspamd_config {
* @return 1 if line was successfully parsed and 0 in case of error
*/
gboolean rspamd_parse_bind_line (struct rspamd_config *cfg,
- struct rspamd_worker_conf *cf, const gchar *str);
+ struct rspamd_worker_conf *cf, const gchar *str);
enum rspamd_config_init_flags {
@@ -505,6 +509,7 @@ enum rspamd_config_init_flags {
RSPAMD_CONFIG_INIT_SKIP_LUA = (1u << 0u),
RSPAMD_CONFIG_INIT_WIPE_LUA_MEM = (1u << 1u),
};
+
/**
* Init default values
* @param cfg config file
@@ -524,9 +529,9 @@ void rspamd_config_free (struct rspamd_config *cfg);
* @param opt_name name of option to get
* @return module value or NULL if option does not defined
*/
-const ucl_object_t * rspamd_config_get_module_opt (struct rspamd_config *cfg,
- const gchar *module_name,
- const gchar *opt_name);
+const ucl_object_t *rspamd_config_get_module_opt (struct rspamd_config *cfg,
+ const gchar *module_name,
+ const gchar *opt_name);
/**
@@ -547,18 +552,18 @@ enum rspamd_post_load_options {
};
#define RSPAMD_CONFIG_LOAD_ALL (RSPAMD_CONFIG_INIT_URL| \
- RSPAMD_CONFIG_INIT_LIBS| \
- RSPAMD_CONFIG_INIT_SYMCACHE| \
- RSPAMD_CONFIG_INIT_VALIDATE| \
- RSPAMD_CONFIG_INIT_PRELOAD_MAPS| \
- RSPAMD_CONFIG_INIT_POST_LOAD_LUA)
+ RSPAMD_CONFIG_INIT_LIBS| \
+ RSPAMD_CONFIG_INIT_SYMCACHE| \
+ RSPAMD_CONFIG_INIT_VALIDATE| \
+ RSPAMD_CONFIG_INIT_PRELOAD_MAPS| \
+ RSPAMD_CONFIG_INIT_POST_LOAD_LUA)
/**
* Do post load actions for config
* @param cfg config file
*/
gboolean rspamd_config_post_load (struct rspamd_config *cfg,
- enum rspamd_post_load_options opts);
+ enum rspamd_post_load_options opts);
/**
* Calculate checksum for config file
@@ -576,20 +581,22 @@ void rspamd_config_unescape_quotes (gchar *line);
/*
* Convert comma separated string to a list of strings
*/
-GList * rspamd_config_parse_comma_list (rspamd_mempool_t *pool,
- const gchar *line);
+GList *rspamd_config_parse_comma_list (rspamd_mempool_t *pool,
+ const gchar *line);
/*
* Return a new classifier_config structure, setting default and non-conflicting attributes
*/
-struct rspamd_classifier_config * rspamd_config_new_classifier (
- struct rspamd_config *cfg,
- struct rspamd_classifier_config *c);
+struct rspamd_classifier_config *rspamd_config_new_classifier (
+ struct rspamd_config *cfg,
+ struct rspamd_classifier_config *c);
+
/*
* Return a new worker_conf structure, setting default and non-conflicting attributes
*/
-struct rspamd_worker_conf * rspamd_config_new_worker (struct rspamd_config *cfg,
- struct rspamd_worker_conf *c);
+struct rspamd_worker_conf *rspamd_config_new_worker (struct rspamd_config *cfg,
+ struct rspamd_worker_conf *c);
+
/*
* Return a new metric structure, setting default and non-conflicting attributes
*/
@@ -598,15 +605,16 @@ void rspamd_config_init_metric (struct rspamd_config *cfg);
/*
* Return new symbols group definition
*/
-struct rspamd_symbols_group * rspamd_config_new_group (
+struct rspamd_symbols_group *rspamd_config_new_group (
struct rspamd_config *cfg,
const gchar *name);
+
/*
* Return a new statfile structure, setting default and non-conflicting attributes
*/
-struct rspamd_statfile_config * rspamd_config_new_statfile (
- struct rspamd_config *cfg,
- struct rspamd_statfile_config *c);
+struct rspamd_statfile_config *rspamd_config_new_statfile (
+ struct rspamd_config *cfg,
+ struct rspamd_statfile_config *c);
/*
* Register symbols of classifiers inside metrics
@@ -621,12 +629,12 @@ gboolean rspamd_config_check_statfiles (struct rspamd_classifier_config *cf);
/*
* Find classifier config by name
*/
-struct rspamd_classifier_config * rspamd_config_find_classifier (
- struct rspamd_config *cfg,
- const gchar *name);
+struct rspamd_classifier_config *rspamd_config_find_classifier (
+ struct rspamd_config *cfg,
+ const gchar *name);
void rspamd_ucl_add_conf_macros (struct ucl_parser *parser,
- struct rspamd_config *cfg);
+ struct rspamd_config *cfg);
void rspamd_ucl_add_conf_variables (struct ucl_parser *parser, GHashTable *vars);
@@ -681,8 +689,8 @@ gboolean rspamd_config_add_symbol_group (struct rspamd_config *cfg,
* @return TRUE if symbol has been inserted or FALSE if action already exists with higher priority
*/
gboolean rspamd_config_set_action_score (struct rspamd_config *cfg,
- const gchar *action_name,
- const ucl_object_t *obj);
+ const gchar *action_name,
+ const ucl_object_t *obj);
/**
* Check priority and maybe disable action completely
@@ -709,7 +717,7 @@ gboolean rspamd_config_maybe_disable_action (struct rspamd_config *cfg,
* @return TRUE if a module is enabled
*/
gboolean rspamd_config_is_module_enabled (struct rspamd_config *cfg,
- const gchar *module_name);
+ const gchar *module_name);
/*
* Get action from a string
@@ -719,8 +727,9 @@ gboolean rspamd_action_from_str (const gchar *data, gint *result);
/*
* Return textual representation of action enumeration
*/
-const gchar * rspamd_action_to_str (enum rspamd_action_type action);
-const gchar * rspamd_action_to_str_alt (enum rspamd_action_type action);
+const gchar *rspamd_action_to_str (enum rspamd_action_type action);
+
+const gchar *rspamd_action_to_str_alt (enum rspamd_action_type action);
/*
* Resort all actions (needed to operate with thresholds)
@@ -736,11 +745,12 @@ void rspamd_actions_sort (struct rspamd_config *cfg);
* @return
*/
struct rspamd_radix_map_helper;
+
gboolean rspamd_config_radix_from_ucl (struct rspamd_config *cfg,
- const ucl_object_t *obj,
- const gchar *description,
- struct rspamd_radix_map_helper **target,
- GError **err);
+ const ucl_object_t *obj,
+ const gchar *description,
+ struct rspamd_radix_map_helper **target,
+ GError **err);
/**
* Adds new settings id to be preprocessed
@@ -789,11 +799,11 @@ struct rspamd_config_settings_elt *rspamd_config_find_settings_name_ref (
* @param name
* @return
*/
-struct rspamd_action * rspamd_config_get_action (struct rspamd_config *cfg,
- const gchar *name);
+struct rspamd_action *rspamd_config_get_action (struct rspamd_config *cfg,
+ const gchar *name);
-struct rspamd_action * rspamd_config_get_action_by_type (struct rspamd_config *cfg,
- enum rspamd_action_type type);
+struct rspamd_action *rspamd_config_get_action_by_type (struct rspamd_config *cfg,
+ enum rspamd_action_type type);
#define msg_err_config(...) rspamd_default_log_function (G_LOG_LEVEL_CRITICAL, \
cfg->cfg_pool->tag.tagname, cfg->checksum, \
@@ -817,5 +827,8 @@ extern guint rspamd_config_log_id;
G_STRFUNC, \
__VA_ARGS__)
+#ifdef __cplusplus
+}
+#endif
#endif /* ifdef CFG_FILE_H */
diff --git a/src/libserver/cfg_file_private.h b/src/libserver/cfg_file_private.h
index 94cb9aa08..8a88f6e3e 100644
--- a/src/libserver/cfg_file_private.h
+++ b/src/libserver/cfg_file_private.h
@@ -22,6 +22,10 @@
#define HASH_CASELESS
#include "uthash_strcase.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* Action config definition
*/
@@ -35,4 +39,8 @@ struct rspamd_action {
struct UT_hash_handle hh; /* Index by name */
};
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libserver/cfg_rcl.h b/src/libserver/cfg_rcl.h
index 8d957a402..7f97b100d 100644
--- a/src/libserver/cfg_rcl.h
+++ b/src/libserver/cfg_rcl.h
@@ -28,6 +28,10 @@ cfg_rcl_error_quark (void)
return g_quark_from_static_string ("cfg-rcl-error-quark");
}
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_rcl_section;
struct rspamd_config;
struct rspamd_rcl_default_handler_data;
@@ -491,4 +495,9 @@ gboolean rspamd_config_read (struct rspamd_config *cfg,
GHashTable *vars,
gboolean skip_jinja,
gchar **lua_env);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif /* CFG_RCL_H_ */
diff --git a/src/libserver/composites.h b/src/libserver/composites.h
index a72effdf2..d9947a7dd 100644
--- a/src/libserver/composites.h
+++ b/src/libserver/composites.h
@@ -18,6 +18,10 @@
#include "config.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_task;
/**
@@ -52,4 +56,8 @@ void rspamd_make_composites (struct rspamd_task *task);
enum rspamd_composite_policy rspamd_composite_policy_from_str (const gchar *string);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* SRC_LIBSERVER_COMPOSITES_H_ */
diff --git a/src/libserver/dkim.h b/src/libserver/dkim.h
index 57f761895..adc68403a 100644
--- a/src/libserver/dkim.h
+++ b/src/libserver/dkim.h
@@ -21,6 +21,7 @@
#include "dns.h"
#include "ref.h"
+
/* Main types and definitions */
#define RSPAMD_DKIM_SIGNHEADER "DKIM-Signature"
@@ -80,6 +81,10 @@
#define DKIM_SIGERROR_MISSING_V 44 /* v= tag missing */
#define DKIM_SIGERROR_EMPTY_V 45 /* v= tag empty */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/* Check results */
enum rspamd_dkim_check_rcode {
DKIM_CONTINUE = 0,
@@ -148,8 +153,8 @@ struct rspamd_dkim_check_result {
/* Err MUST be freed if it is not NULL, key is allocated by slice allocator */
-typedef void (*dkim_key_handler_f)(rspamd_dkim_key_t *key, gsize keylen,
- rspamd_dkim_context_t *ctx, gpointer ud, GError *err);
+typedef void (*dkim_key_handler_f) (rspamd_dkim_key_t *key, gsize keylen,
+ rspamd_dkim_context_t *ctx, gpointer ud, GError *err);
/**
* Create new dkim context from signature
@@ -159,11 +164,11 @@ typedef void (*dkim_key_handler_f)(rspamd_dkim_key_t *key, gsize keylen,
* @param err pointer to error object
* @return new context or NULL
*/
-rspamd_dkim_context_t * rspamd_create_dkim_context (const gchar *sig,
- rspamd_mempool_t *pool,
- guint time_jitter,
- enum rspamd_dkim_type type,
- GError **err);
+rspamd_dkim_context_t *rspamd_create_dkim_context (const gchar *sig,
+ rspamd_mempool_t *pool,
+ guint time_jitter,
+ enum rspamd_dkim_type type,
+ GError **err);
/**
* Create new dkim context for making a signature
@@ -172,13 +177,13 @@ rspamd_dkim_context_t * rspamd_create_dkim_context (const gchar *sig,
* @param err
* @return
*/
-rspamd_dkim_sign_context_t * rspamd_create_dkim_sign_context (struct rspamd_task *task,
- rspamd_dkim_sign_key_t *priv_key,
- gint headers_canon,
- gint body_canon,
- const gchar *dkim_headers,
- enum rspamd_dkim_type type,
- GError **err);
+rspamd_dkim_sign_context_t *rspamd_create_dkim_sign_context (struct rspamd_task *task,
+ rspamd_dkim_sign_key_t *priv_key,
+ gint headers_canon,
+ gint body_canon,
+ const gchar *dkim_headers,
+ enum rspamd_dkim_type type,
+ GError **err);
/**
* Load dkim key
@@ -186,9 +191,9 @@ rspamd_dkim_sign_context_t * rspamd_create_dkim_sign_context (struct rspamd_task
* @param err
* @return
*/
-rspamd_dkim_sign_key_t* rspamd_dkim_sign_key_load (const gchar *what, gsize len,
- enum rspamd_dkim_key_format type,
- GError **err);
+rspamd_dkim_sign_key_t *rspamd_dkim_sign_key_load (const gchar *what, gsize len,
+ enum rspamd_dkim_key_format type,
+ GError **err);
/**
* Invalidate modified sign key
@@ -196,7 +201,7 @@ rspamd_dkim_sign_key_t* rspamd_dkim_sign_key_load (const gchar *what, gsize len,
* @return
*/
gboolean rspamd_dkim_sign_key_maybe_invalidate (rspamd_dkim_sign_key_t *key,
- time_t mtime);
+ time_t mtime);
/**
* Make DNS request for specified context and obtain and parse key
@@ -206,9 +211,9 @@ gboolean rspamd_dkim_sign_key_maybe_invalidate (rspamd_dkim_sign_key_t *key,
* @return
*/
gboolean rspamd_get_dkim_key (rspamd_dkim_context_t *ctx,
- struct rspamd_task *task,
- dkim_key_handler_f handler,
- gpointer ud);
+ struct rspamd_task *task,
+ dkim_key_handler_f handler,
+ gpointer ud);
/**
* Check task for dkim context using dkim key
@@ -217,9 +222,9 @@ gboolean rspamd_get_dkim_key (rspamd_dkim_context_t *ctx,
* @param task task to check
* @return
*/
-struct rspamd_dkim_check_result * rspamd_dkim_check (rspamd_dkim_context_t *ctx,
- rspamd_dkim_key_t *key,
- struct rspamd_task *task);
+struct rspamd_dkim_check_result *rspamd_dkim_check (rspamd_dkim_context_t *ctx,
+ rspamd_dkim_key_t *key,
+ struct rspamd_task *task);
struct rspamd_dkim_check_result *
rspamd_dkim_create_result (rspamd_dkim_context_t *ctx,
@@ -235,13 +240,20 @@ GString *rspamd_dkim_sign (struct rspamd_task *task,
const gchar *arc_cv,
rspamd_dkim_sign_context_t *ctx);
-rspamd_dkim_key_t * rspamd_dkim_key_ref (rspamd_dkim_key_t *k);
+rspamd_dkim_key_t *rspamd_dkim_key_ref (rspamd_dkim_key_t *k);
+
void rspamd_dkim_key_unref (rspamd_dkim_key_t *k);
-rspamd_dkim_sign_key_t * rspamd_dkim_sign_key_ref (rspamd_dkim_sign_key_t *k);
+
+rspamd_dkim_sign_key_t *rspamd_dkim_sign_key_ref (rspamd_dkim_sign_key_t *k);
+
void rspamd_dkim_sign_key_unref (rspamd_dkim_sign_key_t *k);
-const gchar* rspamd_dkim_get_domain (rspamd_dkim_context_t *ctx);
-const gchar* rspamd_dkim_get_selector (rspamd_dkim_context_t *ctx);
-const gchar* rspamd_dkim_get_dns_key (rspamd_dkim_context_t *ctx);
+
+const gchar *rspamd_dkim_get_domain (rspamd_dkim_context_t *ctx);
+
+const gchar *rspamd_dkim_get_selector (rspamd_dkim_context_t *ctx);
+
+const gchar *rspamd_dkim_get_dns_key (rspamd_dkim_context_t *ctx);
+
guint rspamd_dkim_key_get_ttl (rspamd_dkim_key_t *k);
/**
@@ -252,9 +264,9 @@ guint rspamd_dkim_key_get_ttl (rspamd_dkim_key_t *k);
* @param err
* @return
*/
-rspamd_dkim_key_t * rspamd_dkim_make_key (const gchar *keydata, guint keylen,
- enum rspamd_dkim_key_type type,
- GError **err);
+rspamd_dkim_key_t *rspamd_dkim_make_key (const gchar *keydata, guint keylen,
+ enum rspamd_dkim_key_type type,
+ GError **err);
/**
* Parse DKIM public key from a TXT record
@@ -263,8 +275,8 @@ rspamd_dkim_key_t * rspamd_dkim_make_key (const gchar *keydata, guint keylen,
* @param err
* @return
*/
-rspamd_dkim_key_t * rspamd_dkim_parse_key (const gchar *txt, gsize *keylen,
- GError **err);
+rspamd_dkim_key_t *rspamd_dkim_parse_key (const gchar *txt, gsize *keylen,
+ GError **err);
/**
* Canonocalise header using relaxed algorithm
@@ -275,9 +287,9 @@ rspamd_dkim_key_t * rspamd_dkim_parse_key (const gchar *txt, gsize *keylen,
* @return
*/
goffset rspamd_dkim_canonize_header_relaxed_str (const gchar *hname,
- const gchar *hvalue,
- gchar *out,
- gsize outlen);
+ const gchar *hvalue,
+ gchar *out,
+ gsize outlen);
/**
* Checks public and private keys for match
@@ -296,4 +308,8 @@ gboolean rspamd_dkim_match_keys (rspamd_dkim_key_t *pk,
*/
void rspamd_dkim_key_free (rspamd_dkim_key_t *key);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* DKIM_H_ */
diff --git a/src/libserver/dns.h b/src/libserver/dns.h
index c744ac42e..a9d822703 100644
--- a/src/libserver/dns.h
+++ b/src/libserver/dns.h
@@ -24,7 +24,12 @@
#include "rdns.h"
#include "upstream.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_config;
+struct rspamd_task;
struct rspamd_dns_resolver {
struct rdns_resolver *r;
@@ -40,10 +45,11 @@ struct rspamd_dns_resolver {
/**
* Init DNS resolver, params are obtained from a config file or system file /etc/resolv.conf
*/
-struct rspamd_dns_resolver * rspamd_dns_resolver_init (rspamd_logger_t *logger,
- struct ev_loop *ev_base, struct rspamd_config *cfg);
+struct rspamd_dns_resolver *rspamd_dns_resolver_init (rspamd_logger_t *logger,
+ struct ev_loop *ev_base, struct rspamd_config *cfg);
struct rspamd_dns_request_ud;
+
/**
* Make a DNS request
* @param resolver resolver object
@@ -55,13 +61,13 @@ struct rspamd_dns_request_ud;
* @param ... string or ip address based on a request type
* @return TRUE if request was sent.
*/
-struct rspamd_dns_request_ud * rspamd_dns_resolver_request (struct rspamd_dns_resolver *resolver,
- struct rspamd_async_session *session,
- rspamd_mempool_t *pool,
- dns_callback_type cb,
- gpointer ud,
- enum rdns_request_type type,
- const char *name);
+struct rspamd_dns_request_ud *rspamd_dns_resolver_request (struct rspamd_dns_resolver *resolver,
+ struct rspamd_async_session *session,
+ rspamd_mempool_t *pool,
+ dns_callback_type cb,
+ gpointer ud,
+ enum rdns_request_type type,
+ const char *name);
gboolean rspamd_dns_resolver_request_task (struct rspamd_task *task,
dns_callback_type cb,
@@ -75,4 +81,8 @@ gboolean rspamd_dns_resolver_request_task_forced (struct rspamd_task *task,
enum rdns_request_type type,
const char *name);
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libserver/dynamic_cfg.h b/src/libserver/dynamic_cfg.h
index ebbc8b650..938fbb074 100644
--- a/src/libserver/dynamic_cfg.h
+++ b/src/libserver/dynamic_cfg.h
@@ -19,6 +19,11 @@
#include "config.h"
#include "cfg_file.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* Init dynamic configuration using map logic and specific configuration
* @param cfg config file
@@ -41,13 +46,13 @@ gboolean dump_dynamic_config (struct rspamd_config *cfg);
* @return
*/
gboolean add_dynamic_symbol (struct rspamd_config *cfg,
- const gchar *metric,
- const gchar *symbol,
- gdouble value);
+ const gchar *metric,
+ const gchar *symbol,
+ gdouble value);
gboolean remove_dynamic_symbol (struct rspamd_config *cfg,
- const gchar *metric,
- const gchar *symbol);
+ const gchar *metric,
+ const gchar *symbol);
/**
* Add action for specified metric
@@ -58,15 +63,19 @@ gboolean remove_dynamic_symbol (struct rspamd_config *cfg,
* @return
*/
gboolean add_dynamic_action (struct rspamd_config *cfg,
- const gchar *metric,
- guint action,
- gdouble value);
+ const gchar *metric,
+ guint action,
+ gdouble value);
/**
* Removes dynamic action
*/
gboolean remove_dynamic_action (struct rspamd_config *cfg,
- const gchar *metric,
- guint action);
+ const gchar *metric,
+ guint action);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* DYNAMIC_CFG_H_ */
diff --git a/src/libserver/fuzzy_backend.h b/src/libserver/fuzzy_backend.h
index 1519761e0..23b9b68ef 100644
--- a/src/libserver/fuzzy_backend.h
+++ b/src/libserver/fuzzy_backend.h
@@ -20,6 +20,10 @@
#include "contrib/libev/ev.h"
#include "fuzzy_wire.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_fuzzy_backend;
struct rspamd_config;
@@ -27,14 +31,18 @@ struct rspamd_config;
* Callbacks for fuzzy methods
*/
typedef void (*rspamd_fuzzy_check_cb) (struct rspamd_fuzzy_reply *rep, void *ud);
+
typedef void (*rspamd_fuzzy_update_cb) (gboolean success,
guint nadded,
guint ndeleted,
guint nextended,
guint nignored,
void *ud);
+
typedef void (*rspamd_fuzzy_version_cb) (guint64 rev, void *ud);
+
typedef void (*rspamd_fuzzy_count_cb) (guint64 count, void *ud);
+
typedef gboolean (*rspamd_fuzzy_periodic_cb) (void *ud);
/**
@@ -44,10 +52,10 @@ typedef gboolean (*rspamd_fuzzy_periodic_cb) (void *ud);
* @param err
* @return
*/
-struct rspamd_fuzzy_backend * rspamd_fuzzy_backend_create (struct ev_loop *ev_base,
- const ucl_object_t *config,
- struct rspamd_config *cfg,
- GError **err);
+struct rspamd_fuzzy_backend *rspamd_fuzzy_backend_create (struct ev_loop *ev_base,
+ const ucl_object_t *config,
+ struct rspamd_config *cfg,
+ GError **err);
/**
@@ -57,8 +65,8 @@ struct rspamd_fuzzy_backend * rspamd_fuzzy_backend_create (struct ev_loop *ev_ba
* @param ud
*/
void rspamd_fuzzy_backend_check (struct rspamd_fuzzy_backend *bk,
- const struct rspamd_fuzzy_cmd *cmd,
- rspamd_fuzzy_check_cb cb, void *ud);
+ const struct rspamd_fuzzy_cmd *cmd,
+ rspamd_fuzzy_check_cb cb, void *ud);
/**
* Process updates for a specific queue
@@ -67,8 +75,8 @@ void rspamd_fuzzy_backend_check (struct rspamd_fuzzy_backend *bk,
* @param src
*/
void rspamd_fuzzy_backend_process_updates (struct rspamd_fuzzy_backend *bk,
- GArray *updates, const gchar *src, rspamd_fuzzy_update_cb cb,
- void *ud);
+ GArray *updates, const gchar *src, rspamd_fuzzy_update_cb cb,
+ void *ud);
/**
* Gets number of hashes from the backend
@@ -77,7 +85,7 @@ void rspamd_fuzzy_backend_process_updates (struct rspamd_fuzzy_backend *bk,
* @param ud
*/
void rspamd_fuzzy_backend_count (struct rspamd_fuzzy_backend *bk,
- rspamd_fuzzy_count_cb cb, void *ud);
+ rspamd_fuzzy_count_cb cb, void *ud);
/**
* Returns number of revision for a specific source
@@ -87,26 +95,27 @@ void rspamd_fuzzy_backend_count (struct rspamd_fuzzy_backend *bk,
* @param ud
*/
void rspamd_fuzzy_backend_version (struct rspamd_fuzzy_backend *bk,
- const gchar *src,
- rspamd_fuzzy_version_cb cb, void *ud);
+ const gchar *src,
+ rspamd_fuzzy_version_cb cb, void *ud);
/**
* Returns unique id for backend
* @param backend
* @return
*/
-const gchar * rspamd_fuzzy_backend_id (struct rspamd_fuzzy_backend *backend);
+const gchar *rspamd_fuzzy_backend_id (struct rspamd_fuzzy_backend *backend);
/**
* Starts expire process for the backend
* @param backend
*/
void rspamd_fuzzy_backend_start_update (struct rspamd_fuzzy_backend *backend,
- gdouble timeout,
- rspamd_fuzzy_periodic_cb cb,
- void *ud);
+ gdouble timeout,
+ rspamd_fuzzy_periodic_cb cb,
+ void *ud);
+
+struct ev_loop *rspamd_fuzzy_backend_event_base (struct rspamd_fuzzy_backend *backend);
-struct ev_loop* rspamd_fuzzy_backend_event_base (struct rspamd_fuzzy_backend *backend);
gdouble rspamd_fuzzy_backend_get_expire (struct rspamd_fuzzy_backend *backend);
/**
@@ -115,4 +124,8 @@ gdouble rspamd_fuzzy_backend_get_expire (struct rspamd_fuzzy_backend *backend);
*/
void rspamd_fuzzy_backend_close (struct rspamd_fuzzy_backend *backend);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* SRC_LIBSERVER_FUZZY_BACKEND_H_ */
diff --git a/src/libserver/fuzzy_backend_redis.h b/src/libserver/fuzzy_backend_redis.h
index b10ac332d..544b20f60 100644
--- a/src/libserver/fuzzy_backend_redis.h
+++ b/src/libserver/fuzzy_backend_redis.h
@@ -19,31 +19,49 @@
#include "config.h"
#include "fuzzy_backend.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/*
* Subroutines for fuzzy_backend
*/
-void* rspamd_fuzzy_backend_init_redis (struct rspamd_fuzzy_backend *bk,
- const ucl_object_t *obj, struct rspamd_config *cfg, GError **err);
+void *rspamd_fuzzy_backend_init_redis (struct rspamd_fuzzy_backend *bk,
+ const ucl_object_t *obj,
+ struct rspamd_config *cfg,
+ GError **err);
+
void rspamd_fuzzy_backend_check_redis (struct rspamd_fuzzy_backend *bk,
- const struct rspamd_fuzzy_cmd *cmd,
- rspamd_fuzzy_check_cb cb, void *ud,
- void *subr_ud);
+ const struct rspamd_fuzzy_cmd *cmd,
+ rspamd_fuzzy_check_cb cb, void *ud,
+ void *subr_ud);
+
void rspamd_fuzzy_backend_update_redis (struct rspamd_fuzzy_backend *bk,
- GArray *updates, const gchar *src,
- rspamd_fuzzy_update_cb cb, void *ud,
- void *subr_ud);
+ GArray *updates, const gchar *src,
+ rspamd_fuzzy_update_cb cb, void *ud,
+ void *subr_ud);
+
void rspamd_fuzzy_backend_count_redis (struct rspamd_fuzzy_backend *bk,
- rspamd_fuzzy_count_cb cb, void *ud,
- void *subr_ud);
+ rspamd_fuzzy_count_cb cb, void *ud,
+ void *subr_ud);
+
void rspamd_fuzzy_backend_version_redis (struct rspamd_fuzzy_backend *bk,
- const gchar *src,
- rspamd_fuzzy_version_cb cb, void *ud,
- void *subr_ud);
-const gchar* rspamd_fuzzy_backend_id_redis (struct rspamd_fuzzy_backend *bk,
- void *subr_ud);
+ const gchar *src,
+ rspamd_fuzzy_version_cb cb, void *ud,
+ void *subr_ud);
+
+const gchar *rspamd_fuzzy_backend_id_redis (struct rspamd_fuzzy_backend *bk,
+ void *subr_ud);
+
void rspamd_fuzzy_backend_expire_redis (struct rspamd_fuzzy_backend *bk,
- void *subr_ud);
+ void *subr_ud);
+
void rspamd_fuzzy_backend_close_redis (struct rspamd_fuzzy_backend *bk,
- void *subr_ud);
+ void *subr_ud);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* SRC_LIBSERVER_FUZZY_BACKEND_REDIS_H_ */
diff --git a/src/libserver/fuzzy_backend_sqlite.h b/src/libserver/fuzzy_backend_sqlite.h
index 032d1e3cd..33dc94f30 100644
--- a/src/libserver/fuzzy_backend_sqlite.h
+++ b/src/libserver/fuzzy_backend_sqlite.h
@@ -19,6 +19,9 @@
#include "config.h"
#include "fuzzy_wire.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
struct rspamd_fuzzy_backend_sqlite;
@@ -29,8 +32,8 @@ struct rspamd_fuzzy_backend_sqlite;
* @return backend structure or NULL
*/
struct rspamd_fuzzy_backend_sqlite *rspamd_fuzzy_backend_sqlite_open (const gchar *path,
- gboolean vacuum,
- GError **err);
+ gboolean vacuum,
+ GError **err);
/**
* Check specified fuzzy in the backend
@@ -47,7 +50,7 @@ struct rspamd_fuzzy_reply rspamd_fuzzy_backend_sqlite_check (
* Prepare storage for updates (by starting transaction)
*/
gboolean rspamd_fuzzy_backend_sqlite_prepare_update (struct rspamd_fuzzy_backend_sqlite *backend,
- const gchar *source);
+ const gchar *source);
/**
* Add digest to the database
@@ -56,7 +59,7 @@ gboolean rspamd_fuzzy_backend_sqlite_prepare_update (struct rspamd_fuzzy_backend
* @return
*/
gboolean rspamd_fuzzy_backend_sqlite_add (struct rspamd_fuzzy_backend_sqlite *backend,
- const struct rspamd_fuzzy_cmd *cmd);
+ const struct rspamd_fuzzy_cmd *cmd);
/**
* Delete digest from the database
@@ -72,7 +75,7 @@ gboolean rspamd_fuzzy_backend_sqlite_del (
* Commit updates to storage
*/
gboolean rspamd_fuzzy_backend_sqlite_finish_update (struct rspamd_fuzzy_backend_sqlite *backend,
- const gchar *source, gboolean version_bump);
+ const gchar *source, gboolean version_bump);
/**
* Sync storage
@@ -80,8 +83,8 @@ gboolean rspamd_fuzzy_backend_sqlite_finish_update (struct rspamd_fuzzy_backend_
* @return
*/
gboolean rspamd_fuzzy_backend_sqlite_sync (struct rspamd_fuzzy_backend_sqlite *backend,
- gint64 expire,
- gboolean clean_orphaned);
+ gint64 expire,
+ gboolean clean_orphaned);
/**
* Close storage
@@ -90,9 +93,15 @@ gboolean rspamd_fuzzy_backend_sqlite_sync (struct rspamd_fuzzy_backend_sqlite *b
void rspamd_fuzzy_backend_sqlite_close (struct rspamd_fuzzy_backend_sqlite *backend);
gsize rspamd_fuzzy_backend_sqlite_count (struct rspamd_fuzzy_backend_sqlite *backend);
+
gint rspamd_fuzzy_backend_sqlite_version (struct rspamd_fuzzy_backend_sqlite *backend, const gchar *source);
+
gsize rspamd_fuzzy_backend_sqlite_expired (struct rspamd_fuzzy_backend_sqlite *backend);
-const gchar * rspamd_fuzzy_sqlite_backend_id (struct rspamd_fuzzy_backend_sqlite *backend);
+const gchar *rspamd_fuzzy_sqlite_backend_id (struct rspamd_fuzzy_backend_sqlite *backend);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* FUZZY_BACKEND_H_ */
diff --git a/src/libserver/fuzzy_wire.h b/src/libserver/fuzzy_wire.h
index 4a1dc3ed4..1723370e9 100644
--- a/src/libserver/fuzzy_wire.h
+++ b/src/libserver/fuzzy_wire.h
@@ -6,6 +6,10 @@
#include "shingles.h"
#include "cryptobox.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#define RSPAMD_FUZZY_VERSION 4
#define RSPAMD_FUZZY_KEYLEN 8
@@ -103,4 +107,8 @@ RSPAMD_PACKED(fuzzy_peer_cmd) {
} cmd;
};
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libserver/html.h b/src/libserver/html.h
index ada6dca68..86a266a62 100644
--- a/src/libserver/html.h
+++ b/src/libserver/html.h
@@ -8,6 +8,10 @@
#include "config.h"
#include "mem_pool.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/*
* HTML content flags
*/
@@ -130,13 +134,13 @@ struct html_content {
*/
guint rspamd_html_decode_entitles_inplace (gchar *s, gsize len);
-GByteArray* rspamd_html_process_part (rspamd_mempool_t *pool,
- struct html_content *hc,
- GByteArray *in);
+GByteArray *rspamd_html_process_part (rspamd_mempool_t *pool,
+ struct html_content *hc,
+ GByteArray *in);
-GByteArray* rspamd_html_process_part_full (rspamd_mempool_t *pool,
- struct html_content *hc,
- GByteArray *in, GList **exceptions, GHashTable *urls, GHashTable *emails);
+GByteArray *rspamd_html_process_part_full (rspamd_mempool_t *pool,
+ struct html_content *hc,
+ GByteArray *in, GList **exceptions, GHashTable *urls, GHashTable *emails);
/*
* Returns true if a specified tag has been seen in a part
@@ -148,7 +152,7 @@ gboolean rspamd_html_tag_seen (struct html_content *hc, const gchar *tagname);
* @param id
* @return
*/
-const gchar* rspamd_html_tag_by_id (gint id);
+const gchar *rspamd_html_tag_by_id (gint id);
/**
* Returns HTML tag id by name
@@ -165,8 +169,12 @@ gint rspamd_html_tag_by_name (const gchar *name);
* @param comp
* @return
*/
-struct rspamd_url * rspamd_html_process_url (rspamd_mempool_t *pool,
- const gchar *start, guint len,
- struct html_tag_component *comp);
+struct rspamd_url *rspamd_html_process_url (rspamd_mempool_t *pool,
+ const gchar *start, guint len,
+ struct html_tag_component *comp);
+
+#ifdef __cplusplus
+}
+#endif
#endif
diff --git a/src/libserver/html_colors.h b/src/libserver/html_colors.h
index 00fa6fed5..a22c5dc16 100644
--- a/src/libserver/html_colors.h
+++ b/src/libserver/html_colors.h
@@ -16,6 +16,10 @@
#ifndef SRC_LIBSERVER_HTML_COLORS_H_
#define SRC_LIBSERVER_HTML_COLORS_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_html_colorname {
struct {
guint8 r;
@@ -26,682 +30,686 @@ struct rspamd_html_colorname {
};
static const struct rspamd_html_colorname html_colornames[] = {
- { {240, 248, 255}, "aliceblue"},
- { {250, 235, 215}, "antiquewhite"},
- { {255, 239, 219}, "antiquewhite1"},
- { {238, 223, 204}, "antiquewhite2"},
- { {205, 192, 176}, "antiquewhite3"},
- { {139, 131, 120}, "antiquewhite4"},
- { {0, 255, 255}, "aqua"},
- { {127, 255, 212}, "aquamarine"},
- { {127, 255, 212}, "aquamarine1"},
- { {118, 238, 198}, "aquamarine2"},
- { {102, 205, 170}, "aquamarine3"},
- { {69, 139, 116}, "aquamarine4"},
- { {240, 255, 255}, "azure"},
- { {240, 255, 255}, "azure1"},
- { {224, 238, 238}, "azure2"},
- { {193, 205, 205}, "azure3"},
- { {131, 139, 139}, "azure4"},
- { {245, 245, 220}, "beige"},
- { {255, 228, 196}, "bisque"},
- { {255, 228, 196}, "bisque1"},
- { {238, 213, 183}, "bisque2"},
- { {205, 183, 158}, "bisque3"},
- { {139, 125, 107}, "bisque4"},
- { {0, 0, 0}, "black"},
- { {255, 235, 205}, "blanchedalmond"},
- { {0, 0, 255}, "blue"},
- { {0, 0, 255}, "blue1"},
- { {0, 0, 238}, "blue2"},
- { {0, 0, 205}, "blue3"},
- { {0, 0, 139}, "blue4"},
- { {138, 43, 226}, "blueviolet"},
- { {165, 42, 42}, "brown"},
- { {255, 64, 64}, "brown1"},
- { {238, 59, 59}, "brown2"},
- { {205, 51, 51}, "brown3"},
- { {139, 35, 35}, "brown4"},
- { {222, 184, 135}, "burlywood"},
- { {255, 211, 155}, "burlywood1"},
- { {238, 197, 145}, "burlywood2"},
- { {205, 170, 125}, "burlywood3"},
- { {139, 115, 85}, "burlywood4"},
- { {95, 158, 160}, "cadetblue"},
- { {152, 245, 255}, "cadetblue1"},
- { {142, 229, 238}, "cadetblue2"},
- { {122, 197, 205}, "cadetblue3"},
- { {83, 134, 139}, "cadetblue4"},
- { {127, 255, 0}, "chartreuse"},
- { {127, 255, 0}, "chartreuse1"},
- { {118, 238, 0}, "chartreuse2"},
- { {102, 205, 0}, "chartreuse3"},
- { {69, 139, 0}, "chartreuse4"},
- { {210, 105, 30}, "chocolate"},
- { {255, 127, 36}, "chocolate1"},
- { {238, 118, 33}, "chocolate2"},
- { {205, 102, 29}, "chocolate3"},
- { {139, 69, 19}, "chocolate4"},
- { {255, 127, 80}, "coral"},
- { {255, 114, 86}, "coral1"},
- { {238, 106, 80}, "coral2"},
- { {205, 91, 69}, "coral3"},
- { {139, 62, 47}, "coral4"},
- { {100, 149, 237}, "cornflowerblue"},
- { {255, 248, 220}, "cornsilk"},
- { {255, 248, 220}, "cornsilk1"},
- { {238, 232, 205}, "cornsilk2"},
- { {205, 200, 177}, "cornsilk3"},
- { {139, 136, 120}, "cornsilk4"},
- { {220, 20, 60}, "crimson"},
- { {0, 255, 255}, "cyan"},
- { {0, 255, 255}, "cyan1"},
- { {0, 238, 238}, "cyan2"},
- { {0, 205, 205}, "cyan3"},
- { {0, 139, 139}, "cyan4"},
- { {0, 0, 139}, "darkblue"},
- { {0, 139, 139}, "darkcyan"},
- { {184, 134, 11}, "darkgoldenrod"},
- { {255, 185, 15}, "darkgoldenrod1"},
- { {238, 173, 14}, "darkgoldenrod2"},
- { {205, 149, 12}, "darkgoldenrod3"},
- { {139, 101, 8}, "darkgoldenrod4"},
- { {169, 169, 169}, "darkgray"},
- { {0, 100, 0}, "darkgreen"},
- { {169, 169, 169}, "darkgrey"},
- { {189, 183, 107}, "darkkhaki"},
- { {139, 0, 139}, "darkmagenta"},
- { {85, 107, 47}, "darkolivegreen"},
- { {202, 255, 112}, "darkolivegreen1"},
- { {188, 238, 104}, "darkolivegreen2"},
- { {162, 205, 90}, "darkolivegreen3"},
- { {110, 139, 61}, "darkolivegreen4"},
- { {255, 140, 0}, "darkorange"},
- { {255, 127, 0}, "darkorange1"},
- { {238, 118, 0}, "darkorange2"},
- { {205, 102, 0}, "darkorange3"},
- { {139, 69, 0}, "darkorange4"},
- { {153, 50, 204}, "darkorchid"},
- { {191, 62, 255}, "darkorchid1"},
- { {178, 58, 238}, "darkorchid2"},
- { {154, 50, 205}, "darkorchid3"},
- { {104, 34, 139}, "darkorchid4"},
- { {139, 0, 0}, "darkred"},
- { {233, 150, 122}, "darksalmon"},
- { {143, 188, 143}, "darkseagreen"},
- { {193, 255, 193}, "darkseagreen1"},
- { {180, 238, 180}, "darkseagreen2"},
- { {155, 205, 155}, "darkseagreen3"},
- { {105, 139, 105}, "darkseagreen4"},
- { {72, 61, 139}, "darkslateblue"},
- { {47, 79, 79}, "darkslategray"},
- { {151, 255, 255}, "darkslategray1"},
- { {141, 238, 238}, "darkslategray2"},
- { {121, 205, 205}, "darkslategray3"},
- { {82, 139, 139}, "darkslategray4"},
- { {47, 79, 79}, "darkslategrey"},
- { {0, 206, 209}, "darkturquoise"},
- { {148, 0, 211}, "darkviolet"},
- { {255, 20, 147}, "deeppink"},
- { {255, 20, 147}, "deeppink1"},
- { {238, 18, 137}, "deeppink2"},
- { {205, 16, 118}, "deeppink3"},
- { {139, 10, 80}, "deeppink4"},
- { {0, 191, 255}, "deepskyblue"},
- { {0, 191, 255}, "deepskyblue1"},
- { {0, 178, 238}, "deepskyblue2"},
- { {0, 154, 205}, "deepskyblue3"},
- { {0, 104, 139}, "deepskyblue4"},
- { {105, 105, 105}, "dimgray"},
- { {105, 105, 105}, "dimgrey"},
- { {30, 144, 255}, "dodgerblue"},
- { {30, 144, 255}, "dodgerblue1"},
- { {28, 134, 238}, "dodgerblue2"},
- { {24, 116, 205}, "dodgerblue3"},
- { {16, 78, 139}, "dodgerblue4"},
- { {178, 34, 34}, "firebrick"},
- { {255, 48, 48}, "firebrick1"},
- { {238, 44, 44}, "firebrick2"},
- { {205, 38, 38}, "firebrick3"},
- { {139, 26, 26}, "firebrick4"},
- { {255, 250, 240}, "floralwhite"},
- { {34, 139, 34}, "forestgreen"},
- { {255, 0, 255}, "fuchsia"},
- { {220, 220, 220}, "gainsboro"},
- { {248, 248, 255}, "ghostwhite"},
- { {255, 215, 0}, "gold"},
- { {255, 215, 0}, "gold1"},
- { {238, 201, 0}, "gold2"},
- { {205, 173, 0}, "gold3"},
- { {139, 117, 0}, "gold4"},
- { {218, 165, 32}, "goldenrod"},
- { {255, 193, 37}, "goldenrod1"},
- { {238, 180, 34}, "goldenrod2"},
- { {205, 155, 29}, "goldenrod3"},
- { {139, 105, 20}, "goldenrod4"},
- { {190, 190, 190}, "gray"},
- { {0, 0, 0}, "gray0"},
- { {3, 3, 3}, "gray1"},
- { {26, 26, 26}, "gray10"},
- { {255, 255, 255}, "gray100"},
- { {28, 28, 28}, "gray11"},
- { {31, 31, 31}, "gray12"},
- { {33, 33, 33}, "gray13"},
- { {36, 36, 36}, "gray14"},
- { {38, 38, 38}, "gray15"},
- { {41, 41, 41}, "gray16"},
- { {43, 43, 43}, "gray17"},
- { {46, 46, 46}, "gray18"},
- { {48, 48, 48}, "gray19"},
- { {5, 5, 5}, "gray2"},
- { {51, 51, 51}, "gray20"},
- { {54, 54, 54}, "gray21"},
- { {56, 56, 56}, "gray22"},
- { {59, 59, 59}, "gray23"},
- { {61, 61, 61}, "gray24"},
- { {64, 64, 64}, "gray25"},
- { {66, 66, 66}, "gray26"},
- { {69, 69, 69}, "gray27"},
- { {71, 71, 71}, "gray28"},
- { {74, 74, 74}, "gray29"},
- { {8, 8, 8}, "gray3"},
- { {77, 77, 77}, "gray30"},
- { {79, 79, 79}, "gray31"},
- { {82, 82, 82}, "gray32"},
- { {84, 84, 84}, "gray33"},
- { {87, 87, 87}, "gray34"},
- { {89, 89, 89}, "gray35"},
- { {92, 92, 92}, "gray36"},
- { {94, 94, 94}, "gray37"},
- { {97, 97, 97}, "gray38"},
- { {99, 99, 99}, "gray39"},
- { {10, 10, 10}, "gray4"},
- { {102, 102, 102}, "gray40"},
- { {105, 105, 105}, "gray41"},
- { {107, 107, 107}, "gray42"},
- { {110, 110, 110}, "gray43"},
- { {112, 112, 112}, "gray44"},
- { {115, 115, 115}, "gray45"},
- { {117, 117, 117}, "gray46"},
- { {120, 120, 120}, "gray47"},
- { {122, 122, 122}, "gray48"},
- { {125, 125, 125}, "gray49"},
- { {13, 13, 13}, "gray5"},
- { {127, 127, 127}, "gray50"},
- { {130, 130, 130}, "gray51"},
- { {133, 133, 133}, "gray52"},
- { {135, 135, 135}, "gray53"},
- { {138, 138, 138}, "gray54"},
- { {140, 140, 140}, "gray55"},
- { {143, 143, 143}, "gray56"},
- { {145, 145, 145}, "gray57"},
- { {148, 148, 148}, "gray58"},
- { {150, 150, 150}, "gray59"},
- { {15, 15, 15}, "gray6"},
- { {153, 153, 153}, "gray60"},
- { {156, 156, 156}, "gray61"},
- { {158, 158, 158}, "gray62"},
- { {161, 161, 161}, "gray63"},
- { {163, 163, 163}, "gray64"},
- { {166, 166, 166}, "gray65"},
- { {168, 168, 168}, "gray66"},
- { {171, 171, 171}, "gray67"},
- { {173, 173, 173}, "gray68"},
- { {176, 176, 176}, "gray69"},
- { {18, 18, 18}, "gray7"},
- { {179, 179, 179}, "gray70"},
- { {181, 181, 181}, "gray71"},
- { {184, 184, 184}, "gray72"},
- { {186, 186, 186}, "gray73"},
- { {189, 189, 189}, "gray74"},
- { {191, 191, 191}, "gray75"},
- { {194, 194, 194}, "gray76"},
- { {196, 196, 196}, "gray77"},
- { {199, 199, 199}, "gray78"},
- { {201, 201, 201}, "gray79"},
- { {20, 20, 20}, "gray8"},
- { {204, 204, 204}, "gray80"},
- { {207, 207, 207}, "gray81"},
- { {209, 209, 209}, "gray82"},
- { {212, 212, 212}, "gray83"},
- { {214, 214, 214}, "gray84"},
- { {217, 217, 217}, "gray85"},
- { {219, 219, 219}, "gray86"},
- { {222, 222, 222}, "gray87"},
- { {224, 224, 224}, "gray88"},
- { {227, 227, 227}, "gray89"},
- { {23, 23, 23}, "gray9"},
- { {229, 229, 229}, "gray90"},
- { {232, 232, 232}, "gray91"},
- { {235, 235, 235}, "gray92"},
- { {237, 237, 237}, "gray93"},
- { {240, 240, 240}, "gray94"},
- { {242, 242, 242}, "gray95"},
- { {245, 245, 245}, "gray96"},
- { {247, 247, 247}, "gray97"},
- { {250, 250, 250}, "gray98"},
- { {252, 252, 252}, "gray99"},
- { {0, 255, 0}, "green"},
- { {0, 255, 0}, "green1"},
- { {0, 238, 0}, "green2"},
- { {0, 205, 0}, "green3"},
- { {0, 139, 0}, "green4"},
- { {173, 255, 47}, "greenyellow"},
- { {190, 190, 190}, "grey"},
- { {0, 0, 0}, "grey0"},
- { {3, 3, 3}, "grey1"},
- { {26, 26, 26}, "grey10"},
- { {255, 255, 255}, "grey100"},
- { {28, 28, 28}, "grey11"},
- { {31, 31, 31}, "grey12"},
- { {33, 33, 33}, "grey13"},
- { {36, 36, 36}, "grey14"},
- { {38, 38, 38}, "grey15"},
- { {41, 41, 41}, "grey16"},
- { {43, 43, 43}, "grey17"},
- { {46, 46, 46}, "grey18"},
- { {48, 48, 48}, "grey19"},
- { {5, 5, 5}, "grey2"},
- { {51, 51, 51}, "grey20"},
- { {54, 54, 54}, "grey21"},
- { {56, 56, 56}, "grey22"},
- { {59, 59, 59}, "grey23"},
- { {61, 61, 61}, "grey24"},
- { {64, 64, 64}, "grey25"},
- { {66, 66, 66}, "grey26"},
- { {69, 69, 69}, "grey27"},
- { {71, 71, 71}, "grey28"},
- { {74, 74, 74}, "grey29"},
- { {8, 8, 8}, "grey3"},
- { {77, 77, 77}, "grey30"},
- { {79, 79, 79}, "grey31"},
- { {82, 82, 82}, "grey32"},
- { {84, 84, 84}, "grey33"},
- { {87, 87, 87}, "grey34"},
- { {89, 89, 89}, "grey35"},
- { {92, 92, 92}, "grey36"},
- { {94, 94, 94}, "grey37"},
- { {97, 97, 97}, "grey38"},
- { {99, 99, 99}, "grey39"},
- { {10, 10, 10}, "grey4"},
- { {102, 102, 102}, "grey40"},
- { {105, 105, 105}, "grey41"},
- { {107, 107, 107}, "grey42"},
- { {110, 110, 110}, "grey43"},
- { {112, 112, 112}, "grey44"},
- { {115, 115, 115}, "grey45"},
- { {117, 117, 117}, "grey46"},
- { {120, 120, 120}, "grey47"},
- { {122, 122, 122}, "grey48"},
- { {125, 125, 125}, "grey49"},
- { {13, 13, 13}, "grey5"},
- { {127, 127, 127}, "grey50"},
- { {130, 130, 130}, "grey51"},
- { {133, 133, 133}, "grey52"},
- { {135, 135, 135}, "grey53"},
- { {138, 138, 138}, "grey54"},
- { {140, 140, 140}, "grey55"},
- { {143, 143, 143}, "grey56"},
- { {145, 145, 145}, "grey57"},
- { {148, 148, 148}, "grey58"},
- { {150, 150, 150}, "grey59"},
- { {15, 15, 15}, "grey6"},
- { {153, 153, 153}, "grey60"},
- { {156, 156, 156}, "grey61"},
- { {158, 158, 158}, "grey62"},
- { {161, 161, 161}, "grey63"},
- { {163, 163, 163}, "grey64"},
- { {166, 166, 166}, "grey65"},
- { {168, 168, 168}, "grey66"},
- { {171, 171, 171}, "grey67"},
- { {173, 173, 173}, "grey68"},
- { {176, 176, 176}, "grey69"},
- { {18, 18, 18}, "grey7"},
- { {179, 179, 179}, "grey70"},
- { {181, 181, 181}, "grey71"},
- { {184, 184, 184}, "grey72"},
- { {186, 186, 186}, "grey73"},
- { {189, 189, 189}, "grey74"},
- { {191, 191, 191}, "grey75"},
- { {194, 194, 194}, "grey76"},
- { {196, 196, 196}, "grey77"},
- { {199, 199, 199}, "grey78"},
- { {201, 201, 201}, "grey79"},
- { {20, 20, 20}, "grey8"},
- { {204, 204, 204}, "grey80"},
- { {207, 207, 207}, "grey81"},
- { {209, 209, 209}, "grey82"},
- { {212, 212, 212}, "grey83"},
- { {214, 214, 214}, "grey84"},
- { {217, 217, 217}, "grey85"},
- { {219, 219, 219}, "grey86"},
- { {222, 222, 222}, "grey87"},
- { {224, 224, 224}, "grey88"},
- { {227, 227, 227}, "grey89"},
- { {23, 23, 23}, "grey9"},
- { {229, 229, 229}, "grey90"},
- { {232, 232, 232}, "grey91"},
- { {235, 235, 235}, "grey92"},
- { {237, 237, 237}, "grey93"},
- { {240, 240, 240}, "grey94"},
- { {242, 242, 242}, "grey95"},
- { {245, 245, 245}, "grey96"},
- { {247, 247, 247}, "grey97"},
- { {250, 250, 250}, "grey98"},
- { {252, 252, 252}, "grey99"},
- { {240, 255, 240}, "honeydew"},
- { {240, 255, 240}, "honeydew1"},
- { {224, 238, 224}, "honeydew2"},
- { {193, 205, 193}, "honeydew3"},
- { {131, 139, 131}, "honeydew4"},
- { {255, 105, 180}, "hotpink"},
- { {255, 110, 180}, "hotpink1"},
- { {238, 106, 167}, "hotpink2"},
- { {205, 96, 144}, "hotpink3"},
- { {139, 58, 98}, "hotpink4"},
- { {205, 92, 92}, "indianred"},
- { {255, 106, 106}, "indianred1"},
- { {238, 99, 99}, "indianred2"},
- { {205, 85, 85}, "indianred3"},
- { {139, 58, 58}, "indianred4"},
- { {75, 0, 130}, "indigo"},
- { {255, 255, 240}, "ivory"},
- { {255, 255, 240}, "ivory1"},
- { {238, 238, 224}, "ivory2"},
- { {205, 205, 193}, "ivory3"},
- { {139, 139, 131}, "ivory4"},
- { {240, 230, 140}, "khaki"},
- { {255, 246, 143}, "khaki1"},
- { {238, 230, 133}, "khaki2"},
- { {205, 198, 115}, "khaki3"},
- { {139, 134, 78}, "khaki4"},
- { {230, 230, 250}, "lavender"},
- { {255, 240, 245}, "lavenderblush"},
- { {255, 240, 245}, "lavenderblush1"},
- { {238, 224, 229}, "lavenderblush2"},
- { {205, 193, 197}, "lavenderblush3"},
- { {139, 131, 134}, "lavenderblush4"},
- { {124, 252, 0}, "lawngreen"},
- { {255, 250, 205}, "lemonchiffon"},
- { {255, 250, 205}, "lemonchiffon1"},
- { {238, 233, 191}, "lemonchiffon2"},
- { {205, 201, 165}, "lemonchiffon3"},
- { {139, 137, 112}, "lemonchiffon4"},
- { {173, 216, 230}, "lightblue"},
- { {191, 239, 255}, "lightblue1"},
- { {178, 223, 238}, "lightblue2"},
- { {154, 192, 205}, "lightblue3"},
- { {104, 131, 139}, "lightblue4"},
- { {240, 128, 128}, "lightcoral"},
- { {224, 255, 255}, "lightcyan"},
- { {224, 255, 255}, "lightcyan1"},
- { {209, 238, 238}, "lightcyan2"},
- { {180, 205, 205}, "lightcyan3"},
- { {122, 139, 139}, "lightcyan4"},
- { {238, 221, 130}, "lightgoldenrod"},
- { {255, 236, 139}, "lightgoldenrod1"},
- { {238, 220, 130}, "lightgoldenrod2"},
- { {205, 190, 112}, "lightgoldenrod3"},
- { {139, 129, 76}, "lightgoldenrod4"},
- { {250, 250, 210}, "lightgoldenrodyellow"},
- { {211, 211, 211}, "lightgray"},
- { {144, 238, 144}, "lightgreen"},
- { {211, 211, 211}, "lightgrey"},
- { {255, 182, 193}, "lightpink"},
- { {255, 174, 185}, "lightpink1"},
- { {238, 162, 173}, "lightpink2"},
- { {205, 140, 149}, "lightpink3"},
- { {139, 95, 101}, "lightpink4"},
- { {255, 160, 122}, "lightsalmon"},
- { {255, 160, 122}, "lightsalmon1"},
- { {238, 149, 114}, "lightsalmon2"},
- { {205, 129, 98}, "lightsalmon3"},
- { {139, 87, 66}, "lightsalmon4"},
- { {32, 178, 170}, "lightseagreen"},
- { {135, 206, 250}, "lightskyblue"},
- { {176, 226, 255}, "lightskyblue1"},
- { {164, 211, 238}, "lightskyblue2"},
- { {141, 182, 205}, "lightskyblue3"},
- { {96, 123, 139}, "lightskyblue4"},
- { {132, 112, 255}, "lightslateblue"},
- { {119, 136, 153}, "lightslategray"},
- { {119, 136, 153}, "lightslategrey"},
- { {176, 196, 222}, "lightsteelblue"},
- { {202, 225, 255}, "lightsteelblue1"},
- { {188, 210, 238}, "lightsteelblue2"},
- { {162, 181, 205}, "lightsteelblue3"},
- { {110, 123, 139}, "lightsteelblue4"},
- { {255, 255, 224}, "lightyellow"},
- { {255, 255, 224}, "lightyellow1"},
- { {238, 238, 209}, "lightyellow2"},
- { {205, 205, 180}, "lightyellow3"},
- { {139, 139, 122}, "lightyellow4"},
- { {0, 255, 0}, "lime"},
- { {50, 205, 50}, "limegreen"},
- { {250, 240, 230}, "linen"},
- { {255, 0, 255}, "magenta"},
- { {255, 0, 255}, "magenta1"},
- { {238, 0, 238}, "magenta2"},
- { {205, 0, 205}, "magenta3"},
- { {139, 0, 139}, "magenta4"},
- { {176, 48, 96}, "maroon"},
- { {255, 52, 179}, "maroon1"},
- { {238, 48, 167}, "maroon2"},
- { {205, 41, 144}, "maroon3"},
- { {139, 28, 98}, "maroon4"},
- { {102, 205, 170}, "mediumaquamarine"},
- { {0, 0, 205}, "mediumblue"},
- { {186, 85, 211}, "mediumorchid"},
- { {224, 102, 255}, "mediumorchid1"},
- { {209, 95, 238}, "mediumorchid2"},
- { {180, 82, 205}, "mediumorchid3"},
- { {122, 55, 139}, "mediumorchid4"},
- { {147, 112, 219}, "mediumpurple"},
- { {171, 130, 255}, "mediumpurple1"},
- { {159, 121, 238}, "mediumpurple2"},
- { {137, 104, 205}, "mediumpurple3"},
- { {93, 71, 139}, "mediumpurple4"},
- { {60, 179, 113}, "mediumseagreen"},
- { {123, 104, 238}, "mediumslateblue"},
- { {0, 250, 154}, "mediumspringgreen"},
- { {72, 209, 204}, "mediumturquoise"},
- { {199, 21, 133}, "mediumvioletred"},
- { {25, 25, 112}, "midnightblue"},
- { {245, 255, 250}, "mintcream"},
- { {255, 228, 225}, "mistyrose"},
- { {255, 228, 225}, "mistyrose1"},
- { {238, 213, 210}, "mistyrose2"},
- { {205, 183, 181}, "mistyrose3"},
- { {139, 125, 123}, "mistyrose4"},
- { {255, 228, 181}, "moccasin"},
- { {255, 222, 173}, "navajowhite"},
- { {255, 222, 173}, "navajowhite1"},
- { {238, 207, 161}, "navajowhite2"},
- { {205, 179, 139}, "navajowhite3"},
- { {139, 121, 94}, "navajowhite4"},
- { {0, 0, 128}, "navy"},
- { {0, 0, 128}, "navyblue"},
- { {253, 245, 230}, "oldlace"},
- { {128, 128, 0}, "olive"},
- { {107, 142, 35}, "olivedrab"},
- { {192, 255, 62}, "olivedrab1"},
- { {179, 238, 58}, "olivedrab2"},
- { {154, 205, 50}, "olivedrab3"},
- { {105, 139, 34}, "olivedrab4"},
- { {255, 165, 0}, "orange"},
- { {255, 165, 0}, "orange1"},
- { {238, 154, 0}, "orange2"},
- { {205, 133, 0}, "orange3"},
- { {139, 90, 0}, "orange4"},
- { {255, 69, 0}, "orangered"},
- { {255, 69, 0}, "orangered1"},
- { {238, 64, 0}, "orangered2"},
- { {205, 55, 0}, "orangered3"},
- { {139, 37, 0}, "orangered4"},
- { {218, 112, 214}, "orchid"},
- { {255, 131, 250}, "orchid1"},
- { {238, 122, 233}, "orchid2"},
- { {205, 105, 201}, "orchid3"},
- { {139, 71, 137}, "orchid4"},
- { {238, 232, 170}, "palegoldenrod"},
- { {152, 251, 152}, "palegreen"},
- { {154, 255, 154}, "palegreen1"},
- { {144, 238, 144}, "palegreen2"},
- { {124, 205, 124}, "palegreen3"},
- { {84, 139, 84}, "palegreen4"},
- { {175, 238, 238}, "paleturquoise"},
- { {187, 255, 255}, "paleturquoise1"},
- { {174, 238, 238}, "paleturquoise2"},
- { {150, 205, 205}, "paleturquoise3"},
- { {102, 139, 139}, "paleturquoise4"},
- { {219, 112, 147}, "palevioletred"},
- { {255, 130, 171}, "palevioletred1"},
- { {238, 121, 159}, "palevioletred2"},
- { {205, 104, 137}, "palevioletred3"},
- { {139, 71, 93}, "palevioletred4"},
- { {255, 239, 213}, "papayawhip"},
- { {255, 218, 185}, "peachpuff"},
- { {255, 218, 185}, "peachpuff1"},
- { {238, 203, 173}, "peachpuff2"},
- { {205, 175, 149}, "peachpuff3"},
- { {139, 119, 101}, "peachpuff4"},
- { {205, 133, 63}, "peru"},
- { {255, 192, 203}, "pink"},
- { {255, 181, 197}, "pink1"},
- { {238, 169, 184}, "pink2"},
- { {205, 145, 158}, "pink3"},
- { {139, 99, 108}, "pink4"},
- { {221, 160, 221}, "plum"},
- { {255, 187, 255}, "plum1"},
- { {238, 174, 238}, "plum2"},
- { {205, 150, 205}, "plum3"},
- { {139, 102, 139}, "plum4"},
- { {176, 224, 230}, "powderblue"},
- { {160, 32, 240}, "purple"},
- { {155, 48, 255}, "purple1"},
- { {145, 44, 238}, "purple2"},
- { {125, 38, 205}, "purple3"},
- { {85, 26, 139}, "purple4"},
- { {102, 51, 153}, "rebeccapurple"},
- { {255, 0, 0}, "red"},
- { {255, 0, 0}, "red1"},
- { {238, 0, 0}, "red2"},
- { {205, 0, 0}, "red3"},
- { {139, 0, 0}, "red4"},
- { {188, 143, 143}, "rosybrown"},
- { {255, 193, 193}, "rosybrown1"},
- { {238, 180, 180}, "rosybrown2"},
- { {205, 155, 155}, "rosybrown3"},
- { {139, 105, 105}, "rosybrown4"},
- { {65, 105, 225}, "royalblue"},
- { {72, 118, 255}, "royalblue1"},
- { {67, 110, 238}, "royalblue2"},
- { {58, 95, 205}, "royalblue3"},
- { {39, 64, 139}, "royalblue4"},
- { {139, 69, 19}, "saddlebrown"},
- { {250, 128, 114}, "salmon"},
- { {255, 140, 105}, "salmon1"},
- { {238, 130, 98}, "salmon2"},
- { {205, 112, 84}, "salmon3"},
- { {139, 76, 57}, "salmon4"},
- { {244, 164, 96}, "sandybrown"},
- { {46, 139, 87}, "seagreen"},
- { {84, 255, 159}, "seagreen1"},
- { {78, 238, 148}, "seagreen2"},
- { {67, 205, 128}, "seagreen3"},
- { {46, 139, 87}, "seagreen4"},
- { {255, 245, 238}, "seashell"},
- { {255, 245, 238}, "seashell1"},
- { {238, 229, 222}, "seashell2"},
- { {205, 197, 191}, "seashell3"},
- { {139, 134, 130}, "seashell4"},
- { {160, 82, 45}, "sienna"},
- { {255, 130, 71}, "sienna1"},
- { {238, 121, 66}, "sienna2"},
- { {205, 104, 57}, "sienna3"},
- { {139, 71, 38}, "sienna4"},
- { {192, 192, 192}, "silver"},
- { {135, 206, 235}, "skyblue"},
- { {135, 206, 255}, "skyblue1"},
- { {126, 192, 238}, "skyblue2"},
- { {108, 166, 205}, "skyblue3"},
- { {74, 112, 139}, "skyblue4"},
- { {106, 90, 205}, "slateblue"},
- { {131, 111, 255}, "slateblue1"},
- { {122, 103, 238}, "slateblue2"},
- { {105, 89, 205}, "slateblue3"},
- { {71, 60, 139}, "slateblue4"},
- { {112, 128, 144}, "slategray"},
- { {198, 226, 255}, "slategray1"},
- { {185, 211, 238}, "slategray2"},
- { {159, 182, 205}, "slategray3"},
- { {108, 123, 139}, "slategray4"},
- { {112, 128, 144}, "slategrey"},
- { {255, 250, 250}, "snow"},
- { {255, 250, 250}, "snow1"},
- { {238, 233, 233}, "snow2"},
- { {205, 201, 201}, "snow3"},
- { {139, 137, 137}, "snow4"},
- { {0, 255, 127}, "springgreen"},
- { {0, 255, 127}, "springgreen1"},
- { {0, 238, 118}, "springgreen2"},
- { {0, 205, 102}, "springgreen3"},
- { {0, 139, 69}, "springgreen4"},
- { {70, 130, 180}, "steelblue"},
- { {99, 184, 255}, "steelblue1"},
- { {92, 172, 238}, "steelblue2"},
- { {79, 148, 205}, "steelblue3"},
- { {54, 100, 139}, "steelblue4"},
- { {210, 180, 140}, "tan"},
- { {255, 165, 79}, "tan1"},
- { {238, 154, 73}, "tan2"},
- { {205, 133, 63}, "tan3"},
- { {139, 90, 43}, "tan4"},
- { {0, 128, 128}, "teal"},
- { {216, 191, 216}, "thistle"},
- { {255, 225, 255}, "thistle1"},
- { {238, 210, 238}, "thistle2"},
- { {205, 181, 205}, "thistle3"},
- { {139, 123, 139}, "thistle4"},
- { {255, 99, 71}, "tomato"},
- { {255, 99, 71}, "tomato1"},
- { {238, 92, 66}, "tomato2"},
- { {205, 79, 57}, "tomato3"},
- { {139, 54, 38}, "tomato4"},
- { {64, 224, 208}, "turquoise"},
- { {0, 245, 255}, "turquoise1"},
- { {0, 229, 238}, "turquoise2"},
- { {0, 197, 205}, "turquoise3"},
- { {0, 134, 139}, "turquoise4"},
- { {238, 130, 238}, "violet"},
- { {208, 32, 144}, "violetred"},
- { {255, 62, 150}, "violetred1"},
- { {238, 58, 140}, "violetred2"},
- { {205, 50, 120}, "violetred3"},
- { {139, 34, 82}, "violetred4"},
- { {128, 128, 128}, "webgray"},
- { {0, 128, 0}, "webgreen"},
- { {128, 128, 128}, "webgrey"},
- { {128, 0, 0}, "webmaroon"},
- { {128, 0, 128}, "webpurple"},
- { {245, 222, 179}, "wheat"},
- { {255, 231, 186}, "wheat1"},
- { {238, 216, 174}, "wheat2"},
- { {205, 186, 150}, "wheat3"},
- { {139, 126, 102}, "wheat4"},
- { {255, 255, 255}, "white"},
- { {245, 245, 245}, "whitesmoke"},
- { {190, 190, 190}, "x11gray"},
- { {0, 255, 0}, "x11green"},
- { {190, 190, 190}, "x11grey"},
- { {176, 48, 96}, "x11maroon"},
- { {160, 32, 240}, "x11purple"},
- { {255, 255, 0}, "yellow"},
- { {255, 255, 0}, "yellow1"},
- { {238, 238, 0}, "yellow2"},
- { {205, 205, 0}, "yellow3"},
- { {139, 139, 0}, "yellow4"},
- { {154, 205, 50}, "yellowgreen"},
+ {{240, 248, 255}, "aliceblue"},
+ {{250, 235, 215}, "antiquewhite"},
+ {{255, 239, 219}, "antiquewhite1"},
+ {{238, 223, 204}, "antiquewhite2"},
+ {{205, 192, 176}, "antiquewhite3"},
+ {{139, 131, 120}, "antiquewhite4"},
+ {{0, 255, 255}, "aqua"},
+ {{127, 255, 212}, "aquamarine"},
+ {{127, 255, 212}, "aquamarine1"},
+ {{118, 238, 198}, "aquamarine2"},
+ {{102, 205, 170}, "aquamarine3"},
+ {{69, 139, 116}, "aquamarine4"},
+ {{240, 255, 255}, "azure"},
+ {{240, 255, 255}, "azure1"},
+ {{224, 238, 238}, "azure2"},
+ {{193, 205, 205}, "azure3"},
+ {{131, 139, 139}, "azure4"},
+ {{245, 245, 220}, "beige"},
+ {{255, 228, 196}, "bisque"},
+ {{255, 228, 196}, "bisque1"},
+ {{238, 213, 183}, "bisque2"},
+ {{205, 183, 158}, "bisque3"},
+ {{139, 125, 107}, "bisque4"},
+ {{0, 0, 0}, "black"},
+ {{255, 235, 205}, "blanchedalmond"},
+ {{0, 0, 255}, "blue"},
+ {{0, 0, 255}, "blue1"},
+ {{0, 0, 238}, "blue2"},
+ {{0, 0, 205}, "blue3"},
+ {{0, 0, 139}, "blue4"},
+ {{138, 43, 226}, "blueviolet"},
+ {{165, 42, 42}, "brown"},
+ {{255, 64, 64}, "brown1"},
+ {{238, 59, 59}, "brown2"},
+ {{205, 51, 51}, "brown3"},
+ {{139, 35, 35}, "brown4"},
+ {{222, 184, 135}, "burlywood"},
+ {{255, 211, 155}, "burlywood1"},
+ {{238, 197, 145}, "burlywood2"},
+ {{205, 170, 125}, "burlywood3"},
+ {{139, 115, 85}, "burlywood4"},
+ {{95, 158, 160}, "cadetblue"},
+ {{152, 245, 255}, "cadetblue1"},
+ {{142, 229, 238}, "cadetblue2"},
+ {{122, 197, 205}, "cadetblue3"},
+ {{83, 134, 139}, "cadetblue4"},
+ {{127, 255, 0}, "chartreuse"},
+ {{127, 255, 0}, "chartreuse1"},
+ {{118, 238, 0}, "chartreuse2"},
+ {{102, 205, 0}, "chartreuse3"},
+ {{69, 139, 0}, "chartreuse4"},
+ {{210, 105, 30}, "chocolate"},
+ {{255, 127, 36}, "chocolate1"},
+ {{238, 118, 33}, "chocolate2"},
+ {{205, 102, 29}, "chocolate3"},
+ {{139, 69, 19}, "chocolate4"},
+ {{255, 127, 80}, "coral"},
+ {{255, 114, 86}, "coral1"},
+ {{238, 106, 80}, "coral2"},
+ {{205, 91, 69}, "coral3"},
+ {{139, 62, 47}, "coral4"},
+ {{100, 149, 237}, "cornflowerblue"},
+ {{255, 248, 220}, "cornsilk"},
+ {{255, 248, 220}, "cornsilk1"},
+ {{238, 232, 205}, "cornsilk2"},
+ {{205, 200, 177}, "cornsilk3"},
+ {{139, 136, 120}, "cornsilk4"},
+ {{220, 20, 60}, "crimson"},
+ {{0, 255, 255}, "cyan"},
+ {{0, 255, 255}, "cyan1"},
+ {{0, 238, 238}, "cyan2"},
+ {{0, 205, 205}, "cyan3"},
+ {{0, 139, 139}, "cyan4"},
+ {{0, 0, 139}, "darkblue"},
+ {{0, 139, 139}, "darkcyan"},
+ {{184, 134, 11}, "darkgoldenrod"},
+ {{255, 185, 15}, "darkgoldenrod1"},
+ {{238, 173, 14}, "darkgoldenrod2"},
+ {{205, 149, 12}, "darkgoldenrod3"},
+ {{139, 101, 8}, "darkgoldenrod4"},
+ {{169, 169, 169}, "darkgray"},
+ {{0, 100, 0}, "darkgreen"},
+ {{169, 169, 169}, "darkgrey"},
+ {{189, 183, 107}, "darkkhaki"},
+ {{139, 0, 139}, "darkmagenta"},
+ {{85, 107, 47}, "darkolivegreen"},
+ {{202, 255, 112}, "darkolivegreen1"},
+ {{188, 238, 104}, "darkolivegreen2"},
+ {{162, 205, 90}, "darkolivegreen3"},
+ {{110, 139, 61}, "darkolivegreen4"},
+ {{255, 140, 0}, "darkorange"},
+ {{255, 127, 0}, "darkorange1"},
+ {{238, 118, 0}, "darkorange2"},
+ {{205, 102, 0}, "darkorange3"},
+ {{139, 69, 0}, "darkorange4"},
+ {{153, 50, 204}, "darkorchid"},
+ {{191, 62, 255}, "darkorchid1"},
+ {{178, 58, 238}, "darkorchid2"},
+ {{154, 50, 205}, "darkorchid3"},
+ {{104, 34, 139}, "darkorchid4"},
+ {{139, 0, 0}, "darkred"},
+ {{233, 150, 122}, "darksalmon"},
+ {{143, 188, 143}, "darkseagreen"},
+ {{193, 255, 193}, "darkseagreen1"},
+ {{180, 238, 180}, "darkseagreen2"},
+ {{155, 205, 155}, "darkseagreen3"},
+ {{105, 139, 105}, "darkseagreen4"},
+ {{72, 61, 139}, "darkslateblue"},
+ {{47, 79, 79}, "darkslategray"},
+ {{151, 255, 255}, "darkslategray1"},
+ {{141, 238, 238}, "darkslategray2"},
+ {{121, 205, 205}, "darkslategray3"},
+ {{82, 139, 139}, "darkslategray4"},
+ {{47, 79, 79}, "darkslategrey"},
+ {{0, 206, 209}, "darkturquoise"},
+ {{148, 0, 211}, "darkviolet"},
+ {{255, 20, 147}, "deeppink"},
+ {{255, 20, 147}, "deeppink1"},
+ {{238, 18, 137}, "deeppink2"},
+ {{205, 16, 118}, "deeppink3"},
+ {{139, 10, 80}, "deeppink4"},
+ {{0, 191, 255}, "deepskyblue"},
+ {{0, 191, 255}, "deepskyblue1"},
+ {{0, 178, 238}, "deepskyblue2"},
+ {{0, 154, 205}, "deepskyblue3"},
+ {{0, 104, 139}, "deepskyblue4"},
+ {{105, 105, 105}, "dimgray"},
+ {{105, 105, 105}, "dimgrey"},
+ {{30, 144, 255}, "dodgerblue"},
+ {{30, 144, 255}, "dodgerblue1"},
+ {{28, 134, 238}, "dodgerblue2"},
+ {{24, 116, 205}, "dodgerblue3"},
+ {{16, 78, 139}, "dodgerblue4"},
+ {{178, 34, 34}, "firebrick"},
+ {{255, 48, 48}, "firebrick1"},
+ {{238, 44, 44}, "firebrick2"},
+ {{205, 38, 38}, "firebrick3"},
+ {{139, 26, 26}, "firebrick4"},
+ {{255, 250, 240}, "floralwhite"},
+ {{34, 139, 34}, "forestgreen"},
+ {{255, 0, 255}, "fuchsia"},
+ {{220, 220, 220}, "gainsboro"},
+ {{248, 248, 255}, "ghostwhite"},
+ {{255, 215, 0}, "gold"},
+ {{255, 215, 0}, "gold1"},
+ {{238, 201, 0}, "gold2"},
+ {{205, 173, 0}, "gold3"},
+ {{139, 117, 0}, "gold4"},
+ {{218, 165, 32}, "goldenrod"},
+ {{255, 193, 37}, "goldenrod1"},
+ {{238, 180, 34}, "goldenrod2"},
+ {{205, 155, 29}, "goldenrod3"},
+ {{139, 105, 20}, "goldenrod4"},
+ {{190, 190, 190}, "gray"},
+ {{0, 0, 0}, "gray0"},
+ {{3, 3, 3}, "gray1"},
+ {{26, 26, 26}, "gray10"},
+ {{255, 255, 255}, "gray100"},
+ {{28, 28, 28}, "gray11"},
+ {{31, 31, 31}, "gray12"},
+ {{33, 33, 33}, "gray13"},
+ {{36, 36, 36}, "gray14"},
+ {{38, 38, 38}, "gray15"},
+ {{41, 41, 41}, "gray16"},
+ {{43, 43, 43}, "gray17"},
+ {{46, 46, 46}, "gray18"},
+ {{48, 48, 48}, "gray19"},
+ {{5, 5, 5}, "gray2"},
+ {{51, 51, 51}, "gray20"},
+ {{54, 54, 54}, "gray21"},
+ {{56, 56, 56}, "gray22"},
+ {{59, 59, 59}, "gray23"},
+ {{61, 61, 61}, "gray24"},
+ {{64, 64, 64}, "gray25"},
+ {{66, 66, 66}, "gray26"},
+ {{69, 69, 69}, "gray27"},
+ {{71, 71, 71}, "gray28"},
+ {{74, 74, 74}, "gray29"},
+ {{8, 8, 8}, "gray3"},
+ {{77, 77, 77}, "gray30"},
+ {{79, 79, 79}, "gray31"},
+ {{82, 82, 82}, "gray32"},
+ {{84, 84, 84}, "gray33"},
+ {{87, 87, 87}, "gray34"},
+ {{89, 89, 89}, "gray35"},
+ {{92, 92, 92}, "gray36"},
+ {{94, 94, 94}, "gray37"},
+ {{97, 97, 97}, "gray38"},
+ {{99, 99, 99}, "gray39"},
+ {{10, 10, 10}, "gray4"},
+ {{102, 102, 102}, "gray40"},
+ {{105, 105, 105}, "gray41"},
+ {{107, 107, 107}, "gray42"},
+ {{110, 110, 110}, "gray43"},
+ {{112, 112, 112}, "gray44"},
+ {{115, 115, 115}, "gray45"},
+ {{117, 117, 117}, "gray46"},
+ {{120, 120, 120}, "gray47"},
+ {{122, 122, 122}, "gray48"},
+ {{125, 125, 125}, "gray49"},
+ {{13, 13, 13}, "gray5"},
+ {{127, 127, 127}, "gray50"},
+ {{130, 130, 130}, "gray51"},
+ {{133, 133, 133}, "gray52"},
+ {{135, 135, 135}, "gray53"},
+ {{138, 138, 138}, "gray54"},
+ {{140, 140, 140}, "gray55"},
+ {{143, 143, 143}, "gray56"},
+ {{145, 145, 145}, "gray57"},
+ {{148, 148, 148}, "gray58"},
+ {{150, 150, 150}, "gray59"},
+ {{15, 15, 15}, "gray6"},
+ {{153, 153, 153}, "gray60"},
+ {{156, 156, 156}, "gray61"},
+ {{158, 158, 158}, "gray62"},
+ {{161, 161, 161}, "gray63"},
+ {{163, 163, 163}, "gray64"},
+ {{166, 166, 166}, "gray65"},
+ {{168, 168, 168}, "gray66"},
+ {{171, 171, 171}, "gray67"},
+ {{173, 173, 173}, "gray68"},
+ {{176, 176, 176}, "gray69"},
+ {{18, 18, 18}, "gray7"},
+ {{179, 179, 179}, "gray70"},
+ {{181, 181, 181}, "gray71"},
+ {{184, 184, 184}, "gray72"},
+ {{186, 186, 186}, "gray73"},
+ {{189, 189, 189}, "gray74"},
+ {{191, 191, 191}, "gray75"},
+ {{194, 194, 194}, "gray76"},
+ {{196, 196, 196}, "gray77"},
+ {{199, 199, 199}, "gray78"},
+ {{201, 201, 201}, "gray79"},
+ {{20, 20, 20}, "gray8"},
+ {{204, 204, 204}, "gray80"},
+ {{207, 207, 207}, "gray81"},
+ {{209, 209, 209}, "gray82"},
+ {{212, 212, 212}, "gray83"},
+ {{214, 214, 214}, "gray84"},
+ {{217, 217, 217}, "gray85"},
+ {{219, 219, 219}, "gray86"},
+ {{222, 222, 222}, "gray87"},
+ {{224, 224, 224}, "gray88"},
+ {{227, 227, 227}, "gray89"},
+ {{23, 23, 23}, "gray9"},
+ {{229, 229, 229}, "gray90"},
+ {{232, 232, 232}, "gray91"},
+ {{235, 235, 235}, "gray92"},
+ {{237, 237, 237}, "gray93"},
+ {{240, 240, 240}, "gray94"},
+ {{242, 242, 242}, "gray95"},
+ {{245, 245, 245}, "gray96"},
+ {{247, 247, 247}, "gray97"},
+ {{250, 250, 250}, "gray98"},
+ {{252, 252, 252}, "gray99"},
+ {{0, 255, 0}, "green"},
+ {{0, 255, 0}, "green1"},
+ {{0, 238, 0}, "green2"},
+ {{0, 205, 0}, "green3"},
+ {{0, 139, 0}, "green4"},
+ {{173, 255, 47}, "greenyellow"},
+ {{190, 190, 190}, "grey"},
+ {{0, 0, 0}, "grey0"},
+ {{3, 3, 3}, "grey1"},
+ {{26, 26, 26}, "grey10"},
+ {{255, 255, 255}, "grey100"},
+ {{28, 28, 28}, "grey11"},
+ {{31, 31, 31}, "grey12"},
+ {{33, 33, 33}, "grey13"},
+ {{36, 36, 36}, "grey14"},
+ {{38, 38, 38}, "grey15"},
+ {{41, 41, 41}, "grey16"},
+ {{43, 43, 43}, "grey17"},
+ {{46, 46, 46}, "grey18"},
+ {{48, 48, 48}, "grey19"},
+ {{5, 5, 5}, "grey2"},
+ {{51, 51, 51}, "grey20"},
+ {{54, 54, 54}, "grey21"},
+ {{56, 56, 56}, "grey22"},
+ {{59, 59, 59}, "grey23"},
+ {{61, 61, 61}, "grey24"},
+ {{64, 64, 64}, "grey25"},
+ {{66, 66, 66}, "grey26"},
+ {{69, 69, 69}, "grey27"},
+ {{71, 71, 71}, "grey28"},
+ {{74, 74, 74}, "grey29"},
+ {{8, 8, 8}, "grey3"},
+ {{77, 77, 77}, "grey30"},
+ {{79, 79, 79}, "grey31"},
+ {{82, 82, 82}, "grey32"},
+ {{84, 84, 84}, "grey33"},
+ {{87, 87, 87}, "grey34"},
+ {{89, 89, 89}, "grey35"},
+ {{92, 92, 92}, "grey36"},
+ {{94, 94, 94}, "grey37"},
+ {{97, 97, 97}, "grey38"},
+ {{99, 99, 99}, "grey39"},
+ {{10, 10, 10}, "grey4"},
+ {{102, 102, 102}, "grey40"},
+ {{105, 105, 105}, "grey41"},
+ {{107, 107, 107}, "grey42"},
+ {{110, 110, 110}, "grey43"},
+ {{112, 112, 112}, "grey44"},
+ {{115, 115, 115}, "grey45"},
+ {{117, 117, 117}, "grey46"},
+ {{120, 120, 120}, "grey47"},
+ {{122, 122, 122}, "grey48"},
+ {{125, 125, 125}, "grey49"},
+ {{13, 13, 13}, "grey5"},
+ {{127, 127, 127}, "grey50"},
+ {{130, 130, 130}, "grey51"},
+ {{133, 133, 133}, "grey52"},
+ {{135, 135, 135}, "grey53"},
+ {{138, 138, 138}, "grey54"},
+ {{140, 140, 140}, "grey55"},
+ {{143, 143, 143}, "grey56"},
+ {{145, 145, 145}, "grey57"},
+ {{148, 148, 148}, "grey58"},
+ {{150, 150, 150}, "grey59"},
+ {{15, 15, 15}, "grey6"},
+ {{153, 153, 153}, "grey60"},
+ {{156, 156, 156}, "grey61"},
+ {{158, 158, 158}, "grey62"},
+ {{161, 161, 161}, "grey63"},
+ {{163, 163, 163}, "grey64"},
+ {{166, 166, 166}, "grey65"},
+ {{168, 168, 168}, "grey66"},
+ {{171, 171, 171}, "grey67"},
+ {{173, 173, 173}, "grey68"},
+ {{176, 176, 176}, "grey69"},
+ {{18, 18, 18}, "grey7"},
+ {{179, 179, 179}, "grey70"},
+ {{181, 181, 181}, "grey71"},
+ {{184, 184, 184}, "grey72"},
+ {{186, 186, 186}, "grey73"},
+ {{189, 189, 189}, "grey74"},
+ {{191, 191, 191}, "grey75"},
+ {{194, 194, 194}, "grey76"},
+ {{196, 196, 196}, "grey77"},
+ {{199, 199, 199}, "grey78"},
+ {{201, 201, 201}, "grey79"},
+ {{20, 20, 20}, "grey8"},
+ {{204, 204, 204}, "grey80"},
+ {{207, 207, 207}, "grey81"},
+ {{209, 209, 209}, "grey82"},
+ {{212, 212, 212}, "grey83"},
+ {{214, 214, 214}, "grey84"},
+ {{217, 217, 217}, "grey85"},
+ {{219, 219, 219}, "grey86"},
+ {{222, 222, 222}, "grey87"},
+ {{224, 224, 224}, "grey88"},
+ {{227, 227, 227}, "grey89"},
+ {{23, 23, 23}, "grey9"},
+ {{229, 229, 229}, "grey90"},
+ {{232, 232, 232}, "grey91"},
+ {{235, 235, 235}, "grey92"},
+ {{237, 237, 237}, "grey93"},
+ {{240, 240, 240}, "grey94"},
+ {{242, 242, 242}, "grey95"},
+ {{245, 245, 245}, "grey96"},
+ {{247, 247, 247}, "grey97"},
+ {{250, 250, 250}, "grey98"},
+ {{252, 252, 252}, "grey99"},
+ {{240, 255, 240}, "honeydew"},
+ {{240, 255, 240}, "honeydew1"},
+ {{224, 238, 224}, "honeydew2"},
+ {{193, 205, 193}, "honeydew3"},
+ {{131, 139, 131}, "honeydew4"},
+ {{255, 105, 180}, "hotpink"},
+ {{255, 110, 180}, "hotpink1"},
+ {{238, 106, 167}, "hotpink2"},
+ {{205, 96, 144}, "hotpink3"},
+ {{139, 58, 98}, "hotpink4"},
+ {{205, 92, 92}, "indianred"},
+ {{255, 106, 106}, "indianred1"},
+ {{238, 99, 99}, "indianred2"},
+ {{205, 85, 85}, "indianred3"},
+ {{139, 58, 58}, "indianred4"},
+ {{75, 0, 130}, "indigo"},
+ {{255, 255, 240}, "ivory"},
+ {{255, 255, 240}, "ivory1"},
+ {{238, 238, 224}, "ivory2"},
+ {{205, 205, 193}, "ivory3"},
+ {{139, 139, 131}, "ivory4"},
+ {{240, 230, 140}, "khaki"},
+ {{255, 246, 143}, "khaki1"},
+ {{238, 230, 133}, "khaki2"},
+ {{205, 198, 115}, "khaki3"},
+ {{139, 134, 78}, "khaki4"},
+ {{230, 230, 250}, "lavender"},
+ {{255, 240, 245}, "lavenderblush"},
+ {{255, 240, 245}, "lavenderblush1"},
+ {{238, 224, 229}, "lavenderblush2"},
+ {{205, 193, 197}, "lavenderblush3"},
+ {{139, 131, 134}, "lavenderblush4"},
+ {{124, 252, 0}, "lawngreen"},
+ {{255, 250, 205}, "lemonchiffon"},
+ {{255, 250, 205}, "lemonchiffon1"},
+ {{238, 233, 191}, "lemonchiffon2"},
+ {{205, 201, 165}, "lemonchiffon3"},
+ {{139, 137, 112}, "lemonchiffon4"},
+ {{173, 216, 230}, "lightblue"},
+ {{191, 239, 255}, "lightblue1"},
+ {{178, 223, 238}, "lightblue2"},
+ {{154, 192, 205}, "lightblue3"},
+ {{104, 131, 139}, "lightblue4"},
+ {{240, 128, 128}, "lightcoral"},
+ {{224, 255, 255}, "lightcyan"},
+ {{224, 255, 255}, "lightcyan1"},
+ {{209, 238, 238}, "lightcyan2"},
+ {{180, 205, 205}, "lightcyan3"},
+ {{122, 139, 139}, "lightcyan4"},
+ {{238, 221, 130}, "lightgoldenrod"},
+ {{255, 236, 139}, "lightgoldenrod1"},
+ {{238, 220, 130}, "lightgoldenrod2"},
+ {{205, 190, 112}, "lightgoldenrod3"},
+ {{139, 129, 76}, "lightgoldenrod4"},
+ {{250, 250, 210}, "lightgoldenrodyellow"},
+ {{211, 211, 211}, "lightgray"},
+ {{144, 238, 144}, "lightgreen"},
+ {{211, 211, 211}, "lightgrey"},
+ {{255, 182, 193}, "lightpink"},
+ {{255, 174, 185}, "lightpink1"},
+ {{238, 162, 173}, "lightpink2"},
+ {{205, 140, 149}, "lightpink3"},
+ {{139, 95, 101}, "lightpink4"},
+ {{255, 160, 122}, "lightsalmon"},
+ {{255, 160, 122}, "lightsalmon1"},
+ {{238, 149, 114}, "lightsalmon2"},
+ {{205, 129, 98}, "lightsalmon3"},
+ {{139, 87, 66}, "lightsalmon4"},
+ {{32, 178, 170}, "lightseagreen"},
+ {{135, 206, 250}, "lightskyblue"},
+ {{176, 226, 255}, "lightskyblue1"},
+ {{164, 211, 238}, "lightskyblue2"},
+ {{141, 182, 205}, "lightskyblue3"},
+ {{96, 123, 139}, "lightskyblue4"},
+ {{132, 112, 255}, "lightslateblue"},
+ {{119, 136, 153}, "lightslategray"},
+ {{119, 136, 153}, "lightslategrey"},
+ {{176, 196, 222}, "lightsteelblue"},
+ {{202, 225, 255}, "lightsteelblue1"},
+ {{188, 210, 238}, "lightsteelblue2"},
+ {{162, 181, 205}, "lightsteelblue3"},
+ {{110, 123, 139}, "lightsteelblue4"},
+ {{255, 255, 224}, "lightyellow"},
+ {{255, 255, 224}, "lightyellow1"},
+ {{238, 238, 209}, "lightyellow2"},
+ {{205, 205, 180}, "lightyellow3"},
+ {{139, 139, 122}, "lightyellow4"},
+ {{0, 255, 0}, "lime"},
+ {{50, 205, 50}, "limegreen"},
+ {{250, 240, 230}, "linen"},
+ {{255, 0, 255}, "magenta"},
+ {{255, 0, 255}, "magenta1"},
+ {{238, 0, 238}, "magenta2"},
+ {{205, 0, 205}, "magenta3"},
+ {{139, 0, 139}, "magenta4"},
+ {{176, 48, 96}, "maroon"},
+ {{255, 52, 179}, "maroon1"},
+ {{238, 48, 167}, "maroon2"},
+ {{205, 41, 144}, "maroon3"},
+ {{139, 28, 98}, "maroon4"},
+ {{102, 205, 170}, "mediumaquamarine"},
+ {{0, 0, 205}, "mediumblue"},
+ {{186, 85, 211}, "mediumorchid"},
+ {{224, 102, 255}, "mediumorchid1"},
+ {{209, 95, 238}, "mediumorchid2"},
+ {{180, 82, 205}, "mediumorchid3"},
+ {{122, 55, 139}, "mediumorchid4"},
+ {{147, 112, 219}, "mediumpurple"},
+ {{171, 130, 255}, "mediumpurple1"},
+ {{159, 121, 238}, "mediumpurple2"},
+ {{137, 104, 205}, "mediumpurple3"},
+ {{93, 71, 139}, "mediumpurple4"},
+ {{60, 179, 113}, "mediumseagreen"},
+ {{123, 104, 238}, "mediumslateblue"},
+ {{0, 250, 154}, "mediumspringgreen"},
+ {{72, 209, 204}, "mediumturquoise"},
+ {{199, 21, 133}, "mediumvioletred"},
+ {{25, 25, 112}, "midnightblue"},
+ {{245, 255, 250}, "mintcream"},
+ {{255, 228, 225}, "mistyrose"},
+ {{255, 228, 225}, "mistyrose1"},
+ {{238, 213, 210}, "mistyrose2"},
+ {{205, 183, 181}, "mistyrose3"},
+ {{139, 125, 123}, "mistyrose4"},
+ {{255, 228, 181}, "moccasin"},
+ {{255, 222, 173}, "navajowhite"},
+ {{255, 222, 173}, "navajowhite1"},
+ {{238, 207, 161}, "navajowhite2"},
+ {{205, 179, 139}, "navajowhite3"},
+ {{139, 121, 94}, "navajowhite4"},
+ {{0, 0, 128}, "navy"},
+ {{0, 0, 128}, "navyblue"},
+ {{253, 245, 230}, "oldlace"},
+ {{128, 128, 0}, "olive"},
+ {{107, 142, 35}, "olivedrab"},
+ {{192, 255, 62}, "olivedrab1"},
+ {{179, 238, 58}, "olivedrab2"},
+ {{154, 205, 50}, "olivedrab3"},
+ {{105, 139, 34}, "olivedrab4"},
+ {{255, 165, 0}, "orange"},
+ {{255, 165, 0}, "orange1"},
+ {{238, 154, 0}, "orange2"},
+ {{205, 133, 0}, "orange3"},
+ {{139, 90, 0}, "orange4"},
+ {{255, 69, 0}, "orangered"},
+ {{255, 69, 0}, "orangered1"},
+ {{238, 64, 0}, "orangered2"},
+ {{205, 55, 0}, "orangered3"},
+ {{139, 37, 0}, "orangered4"},
+ {{218, 112, 214}, "orchid"},
+ {{255, 131, 250}, "orchid1"},
+ {{238, 122, 233}, "orchid2"},
+ {{205, 105, 201}, "orchid3"},
+ {{139, 71, 137}, "orchid4"},
+ {{238, 232, 170}, "palegoldenrod"},
+ {{152, 251, 152}, "palegreen"},
+ {{154, 255, 154}, "palegreen1"},
+ {{144, 238, 144}, "palegreen2"},
+ {{124, 205, 124}, "palegreen3"},
+ {{84, 139, 84}, "palegreen4"},
+ {{175, 238, 238}, "paleturquoise"},
+ {{187, 255, 255}, "paleturquoise1"},
+ {{174, 238, 238}, "paleturquoise2"},
+ {{150, 205, 205}, "paleturquoise3"},
+ {{102, 139, 139}, "paleturquoise4"},
+ {{219, 112, 147}, "palevioletred"},
+ {{255, 130, 171}, "palevioletred1"},
+ {{238, 121, 159}, "palevioletred2"},
+ {{205, 104, 137}, "palevioletred3"},
+ {{139, 71, 93}, "palevioletred4"},
+ {{255, 239, 213}, "papayawhip"},
+ {{255, 218, 185}, "peachpuff"},
+ {{255, 218, 185}, "peachpuff1"},
+ {{238, 203, 173}, "peachpuff2"},
+ {{205, 175, 149}, "peachpuff3"},
+ {{139, 119, 101}, "peachpuff4"},
+ {{205, 133, 63}, "peru"},
+ {{255, 192, 203}, "pink"},
+ {{255, 181, 197}, "pink1"},
+ {{238, 169, 184}, "pink2"},
+ {{205, 145, 158}, "pink3"},
+ {{139, 99, 108}, "pink4"},
+ {{221, 160, 221}, "plum"},
+ {{255, 187, 255}, "plum1"},
+ {{238, 174, 238}, "plum2"},
+ {{205, 150, 205}, "plum3"},
+ {{139, 102, 139}, "plum4"},
+ {{176, 224, 230}, "powderblue"},
+ {{160, 32, 240}, "purple"},
+ {{155, 48, 255}, "purple1"},
+ {{145, 44, 238}, "purple2"},
+ {{125, 38, 205}, "purple3"},
+ {{85, 26, 139}, "purple4"},
+ {{102, 51, 153}, "rebeccapurple"},
+ {{255, 0, 0}, "red"},
+ {{255, 0, 0}, "red1"},
+ {{238, 0, 0}, "red2"},
+ {{205, 0, 0}, "red3"},
+ {{139, 0, 0}, "red4"},
+ {{188, 143, 143}, "rosybrown"},
+ {{255, 193, 193}, "rosybrown1"},
+ {{238, 180, 180}, "rosybrown2"},
+ {{205, 155, 155}, "rosybrown3"},
+ {{139, 105, 105}, "rosybrown4"},
+ {{65, 105, 225}, "royalblue"},
+ {{72, 118, 255}, "royalblue1"},
+ {{67, 110, 238}, "royalblue2"},
+ {{58, 95, 205}, "royalblue3"},
+ {{39, 64, 139}, "royalblue4"},
+ {{139, 69, 19}, "saddlebrown"},
+ {{250, 128, 114}, "salmon"},
+ {{255, 140, 105}, "salmon1"},
+ {{238, 130, 98}, "salmon2"},
+ {{205, 112, 84}, "salmon3"},
+ {{139, 76, 57}, "salmon4"},
+ {{244, 164, 96}, "sandybrown"},
+ {{46, 139, 87}, "seagreen"},
+ {{84, 255, 159}, "seagreen1"},
+ {{78, 238, 148}, "seagreen2"},
+ {{67, 205, 128}, "seagreen3"},
+ {{46, 139, 87}, "seagreen4"},
+ {{255, 245, 238}, "seashell"},
+ {{255, 245, 238}, "seashell1"},
+ {{238, 229, 222}, "seashell2"},
+ {{205, 197, 191}, "seashell3"},
+ {{139, 134, 130}, "seashell4"},
+ {{160, 82, 45}, "sienna"},
+ {{255, 130, 71}, "sienna1"},
+ {{238, 121, 66}, "sienna2"},
+ {{205, 104, 57}, "sienna3"},
+ {{139, 71, 38}, "sienna4"},
+ {{192, 192, 192}, "silver"},
+ {{135, 206, 235}, "skyblue"},
+ {{135, 206, 255}, "skyblue1"},
+ {{126, 192, 238}, "skyblue2"},
+ {{108, 166, 205}, "skyblue3"},
+ {{74, 112, 139}, "skyblue4"},
+ {{106, 90, 205}, "slateblue"},
+ {{131, 111, 255}, "slateblue1"},
+ {{122, 103, 238}, "slateblue2"},
+ {{105, 89, 205}, "slateblue3"},
+ {{71, 60, 139}, "slateblue4"},
+ {{112, 128, 144}, "slategray"},
+ {{198, 226, 255}, "slategray1"},
+ {{185, 211, 238}, "slategray2"},
+ {{159, 182, 205}, "slategray3"},
+ {{108, 123, 139}, "slategray4"},
+ {{112, 128, 144}, "slategrey"},
+ {{255, 250, 250}, "snow"},
+ {{255, 250, 250}, "snow1"},
+ {{238, 233, 233}, "snow2"},
+ {{205, 201, 201}, "snow3"},
+ {{139, 137, 137}, "snow4"},
+ {{0, 255, 127}, "springgreen"},
+ {{0, 255, 127}, "springgreen1"},
+ {{0, 238, 118}, "springgreen2"},
+ {{0, 205, 102}, "springgreen3"},
+ {{0, 139, 69}, "springgreen4"},
+ {{70, 130, 180}, "steelblue"},
+ {{99, 184, 255}, "steelblue1"},
+ {{92, 172, 238}, "steelblue2"},
+ {{79, 148, 205}, "steelblue3"},
+ {{54, 100, 139}, "steelblue4"},
+ {{210, 180, 140}, "tan"},
+ {{255, 165, 79}, "tan1"},
+ {{238, 154, 73}, "tan2"},
+ {{205, 133, 63}, "tan3"},
+ {{139, 90, 43}, "tan4"},
+ {{0, 128, 128}, "teal"},
+ {{216, 191, 216}, "thistle"},
+ {{255, 225, 255}, "thistle1"},
+ {{238, 210, 238}, "thistle2"},
+ {{205, 181, 205}, "thistle3"},
+ {{139, 123, 139}, "thistle4"},
+ {{255, 99, 71}, "tomato"},
+ {{255, 99, 71}, "tomato1"},
+ {{238, 92, 66}, "tomato2"},
+ {{205, 79, 57}, "tomato3"},
+ {{139, 54, 38}, "tomato4"},
+ {{64, 224, 208}, "turquoise"},
+ {{0, 245, 255}, "turquoise1"},
+ {{0, 229, 238}, "turquoise2"},
+ {{0, 197, 205}, "turquoise3"},
+ {{0, 134, 139}, "turquoise4"},
+ {{238, 130, 238}, "violet"},
+ {{208, 32, 144}, "violetred"},
+ {{255, 62, 150}, "violetred1"},
+ {{238, 58, 140}, "violetred2"},
+ {{205, 50, 120}, "violetred3"},
+ {{139, 34, 82}, "violetred4"},
+ {{128, 128, 128}, "webgray"},
+ {{0, 128, 0}, "webgreen"},
+ {{128, 128, 128}, "webgrey"},
+ {{128, 0, 0}, "webmaroon"},
+ {{128, 0, 128}, "webpurple"},
+ {{245, 222, 179}, "wheat"},
+ {{255, 231, 186}, "wheat1"},
+ {{238, 216, 174}, "wheat2"},
+ {{205, 186, 150}, "wheat3"},
+ {{139, 126, 102}, "wheat4"},
+ {{255, 255, 255}, "white"},
+ {{245, 245, 245}, "whitesmoke"},
+ {{190, 190, 190}, "x11gray"},
+ {{0, 255, 0}, "x11green"},
+ {{190, 190, 190}, "x11grey"},
+ {{176, 48, 96}, "x11maroon"},
+ {{160, 32, 240}, "x11purple"},
+ {{255, 255, 0}, "yellow"},
+ {{255, 255, 0}, "yellow1"},
+ {{238, 238, 0}, "yellow2"},
+ {{205, 205, 0}, "yellow3"},
+ {{139, 139, 0}, "yellow4"},
+ {{154, 205, 50}, "yellowgreen"},
};
+#ifdef __cplusplus
+}
+#endif
+
#endif /* SRC_LIBSERVER_HTML_COLORS_H_ */
diff --git a/src/libserver/html_entities.h b/src/libserver/html_entities.h
index 1079f2b0e..d659fc4aa 100644
--- a/src/libserver/html_entities.h
+++ b/src/libserver/html_entities.h
@@ -17,6 +17,10 @@
#ifndef RSPAMD_HTML_ENTITIES_H
#define RSPAMD_HTML_ENTITIES_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct _entity;
typedef struct _entity entity;
@@ -27,2131 +31,2135 @@ struct _entity {
};
static entity entities_defs[] = {
- {"szlig", 223, "\xc3\x9f"},
- {"prime", 8242, "\xe2\x80\xb2"},
- {"lnsim", 8934, "\xe2\x8b\xa6"},
- {"nvDash", 8877, "\xe2\x8a\xad"},
- {"isinsv", 8947, "\xe2\x8b\xb3"},
- {"notin", 8713, "\xe2\x88\x89"},
- {"becaus", 8757, "\xe2\x88\xb5"},
- {"Leftrightarrow", 8660, "\xe2\x87\x94"},
- {"EmptySmallSquare", 9723, "\xe2\x97\xbb"},
- {"SquareUnion", 8852, "\xe2\x8a\x94"},
- {"subdot", 10941, "\xe2\xaa\xbd"},
- {"Dstrok", 272, "\xc4\x90"},
- {"rrarr", 8649, "\xe2\x87\x89"},
- {"rArr", 8658, "\xe2\x87\x92"},
- {"Aacute", 193, "\xc3\x81"},
- {"kappa", 954, "\xce\xba"},
- {"Iopf", 120128, "\xf0\x9d\x95\x80"},
- {"hyphen", 8208, "\xe2\x80\x90"},
- {"rarrbfs", 10528, "\xe2\xa4\xa0"},
- {"supsetneqq", 10956, "\xe2\xab\x8c"},
- {"gacute", 501, "\xc7\xb5"},
- {"VeryThinSpace", 8202, "\xe2\x80\x8a"},
- {"tint", 8749, "\xe2\x88\xad"},
- {"ffr", 120099, "\xf0\x9d\x94\xa3"},
- {"kgreen", 312, "\xc4\xb8"},
- {"nis", 8956, "\xe2\x8b\xbc"},
- {"NotRightTriangleBar", 10704, "\xe2\xa7\x90\xcc\xb8"},
- {"Eogon", 280, "\xc4\x98"},
- {"lbrke", 10635, "\xe2\xa6\x8b"},
- {"phi", 966, "\xcf\x86"},
- {"notnivc", 8957, "\xe2\x8b\xbd"},
- {"utilde", 361, "\xc5\xa9"},
- {"Fopf", 120125, "\xf0\x9d\x94\xbd"},
- {"Vcy", 1042, "\xd0\x92"},
- {"erDot", 8787, "\xe2\x89\x93"},
- {"nsubE", 10949, "\xe2\xab\x85\xcc\xb8"},
- {"egrave", 232, "\xc3\xa8"},
- {"Lcedil", 315, "\xc4\xbb"},
- {"lharul", 10602, "\xe2\xa5\xaa"},
- {"middot", 183, "\xc2\xb7"},
- {"ggg", 8921, "\xe2\x8b\x99"},
- {"NestedLessLess", 8810, "\xe2\x89\xaa"},
- {"tau", 964, "\xcf\x84"},
- {"setmn", 8726, "\xe2\x88\x96"},
- {"frac78", 8542, "\xe2\x85\x9e"},
- {"para", 182, "\xc2\xb6"},
- {"Rcedil", 342, "\xc5\x96"},
- {"propto", 8733, "\xe2\x88\x9d"},
- {"sqsubset", 8847, "\xe2\x8a\x8f"},
- {"ensp", 8194, "\xe2\x80\x82"},
- {"boxvH", 9578, "\xe2\x95\xaa"},
- {"NotGreaterTilde", 8821, "\xe2\x89\xb5"},
- {"ffllig", 64260, "\xef\xac\x84"},
- {"kcedil", 311, "\xc4\xb7"},
- {"omega", 969, "\xcf\x89"},
- {"sime", 8771, "\xe2\x89\x83"},
- {"LeftTriangleEqual", 8884, "\xe2\x8a\xb4"},
- {"bsemi", 8271, "\xe2\x81\x8f"},
- {"rdquor", 8221, "\xe2\x80\x9d"},
- {"Utilde", 360, "\xc5\xa8"},
- {"bsol", 92, "\x5c"},
- {"risingdotseq", 8787, "\xe2\x89\x93"},
- {"ultri", 9720, "\xe2\x97\xb8"},
- {"rhov", 1009, "\xcf\xb1"},
- {"TildeEqual", 8771, "\xe2\x89\x83"},
- {"jukcy", 1108, "\xd1\x94"},
- {"perp", 8869, "\xe2\x8a\xa5"},
- {"capbrcup", 10825, "\xe2\xa9\x89"},
- {"ltrie", 8884, "\xe2\x8a\xb4"},
- {"LessTilde", 8818, "\xe2\x89\xb2"},
- {"popf", 120161, "\xf0\x9d\x95\xa1"},
- {"dbkarow", 10511, "\xe2\xa4\x8f"},
- {"roang", 10221, "\xe2\x9f\xad"},
- {"brvbar", 166, "\xc2\xa6"},
- {"CenterDot", 183, "\xc2\xb7"},
- {"notindot", 8949, "\xe2\x8b\xb5\xcc\xb8"},
- {"supmult", 10946, "\xe2\xab\x82"},
- {"multimap", 8888, "\xe2\x8a\xb8"},
- {"frac34", 190, "\xc2\xbe"},
- {"mapsto", 8614, "\xe2\x86\xa6"},
- {"flat", 9837, "\xe2\x99\xad"},
- {"updownarrow", 8597, "\xe2\x86\x95"},
- {"gne", 10888, "\xe2\xaa\x88"},
- {"nrarrc", 10547, "\xe2\xa4\xb3\xcc\xb8"},
- {"suphsol", 10185, "\xe2\x9f\x89"},
- {"nGtv", 8811, "\xe2\x89\xab\xcc\xb8"},
- {"hopf", 120153, "\xf0\x9d\x95\x99"},
- {"pointint", 10773, "\xe2\xa8\x95"},
- {"glj", 10916, "\xe2\xaa\xa4"},
- {"LeftDoubleBracket", 10214, "\xe2\x9f\xa6"},
- {"NotSupersetEqual", 8841, "\xe2\x8a\x89"},
- {"dot", 729, "\xcb\x99"},
- {"tbrk", 9140, "\xe2\x8e\xb4"},
- {"LeftUpDownVector", 10577, "\xe2\xa5\x91"},
- {"uml", 168, "\xc2\xa8"},
- {"bbrk", 9141, "\xe2\x8e\xb5"},
- {"nearrow", 8599, "\xe2\x86\x97"},
- {"backsimeq", 8909, "\xe2\x8b\x8d"},
- {"dblac", 733, "\xcb\x9d"},
- {"circleddash", 8861, "\xe2\x8a\x9d"},
- {"ldsh", 8626, "\xe2\x86\xb2"},
- {"sce", 10928, "\xe2\xaa\xb0"},
- {"angst", 197, "\xc3\x85"},
- {"yen", 165, "\xc2\xa5"},
- {"nsupE", 10950, "\xe2\xab\x86\xcc\xb8"},
- {"Uscr", 119984, "\xf0\x9d\x92\xb0"},
- {"subplus", 10943, "\xe2\xaa\xbf"},
- {"nleqq", 8806, "\xe2\x89\xa6\xcc\xb8"},
- {"nprcue", 8928, "\xe2\x8b\xa0"},
- {"Ocirc", 212, "\xc3\x94"},
- {"disin", 8946, "\xe2\x8b\xb2"},
- {"EqualTilde", 8770, "\xe2\x89\x82"},
- {"YUcy", 1070, "\xd0\xae"},
- {"Kscr", 119974, "\xf0\x9d\x92\xa6"},
- {"lg", 8822, "\xe2\x89\xb6"},
- {"nLeftrightarrow", 8654, "\xe2\x87\x8e"},
- {"eplus", 10865, "\xe2\xa9\xb1"},
- {"les", 10877, "\xe2\xa9\xbd"},
- {"sfr", 120112, "\xf0\x9d\x94\xb0"},
- {"HumpDownHump", 8782, "\xe2\x89\x8e"},
- {"Fouriertrf", 8497, "\xe2\x84\xb1"},
- {"Updownarrow", 8661, "\xe2\x87\x95"},
- {"nrarr", 8603, "\xe2\x86\x9b"},
- {"radic", 8730, "\xe2\x88\x9a"},
- {"gnap", 10890, "\xe2\xaa\x8a"},
- {"zeta", 950, "\xce\xb6"},
- {"Qscr", 119980, "\xf0\x9d\x92\xac"},
- {"NotRightTriangleEqual", 8941, "\xe2\x8b\xad"},
- {"nshortmid", 8740, "\xe2\x88\xa4"},
- {"SHCHcy", 1065, "\xd0\xa9"},
- {"piv", 982, "\xcf\x96"},
- {"angmsdaa", 10664, "\xe2\xa6\xa8"},
- {"curlywedge", 8911, "\xe2\x8b\x8f"},
- {"sqcaps", 8851, "\xe2\x8a\x93\xef\xb8\x80"},
- {"sum", 8721, "\xe2\x88\x91"},
- {"rarrtl", 8611, "\xe2\x86\xa3"},
- {"gescc", 10921, "\xe2\xaa\xa9"},
- {"sup", 8835, "\xe2\x8a\x83"},
- {"smid", 8739, "\xe2\x88\xa3"},
- {"cularr", 8630, "\xe2\x86\xb6"},
- {"olcross", 10683, "\xe2\xa6\xbb"},
- {"GT", 62, "\x3e"},
- {"scap", 10936, "\xe2\xaa\xb8"},
- {"capcup", 10823, "\xe2\xa9\x87"},
- {"NotSquareSubsetEqual", 8930, "\xe2\x8b\xa2"},
- {"uhblk", 9600, "\xe2\x96\x80"},
- {"latail", 10521, "\xe2\xa4\x99"},
- {"smtes", 10924, "\xe2\xaa\xac\xef\xb8\x80"},
- {"RoundImplies", 10608, "\xe2\xa5\xb0"},
- {"wreath", 8768, "\xe2\x89\x80"},
- {"curlyvee", 8910, "\xe2\x8b\x8e"},
- {"uscr", 120010, "\xf0\x9d\x93\x8a"},
- {"nleftrightarrow", 8622, "\xe2\x86\xae"},
- {"ucy", 1091, "\xd1\x83"},
- {"nvge", 8805, "\xe2\x89\xa5\xe2\x83\x92"},
- {"bnot", 8976, "\xe2\x8c\x90"},
- {"alefsym", 8501, "\xe2\x84\xb5"},
- {"star", 9734, "\xe2\x98\x86"},
- {"boxHd", 9572, "\xe2\x95\xa4"},
- {"vsubnE", 10955, "\xe2\xab\x8b\xef\xb8\x80"},
- {"Popf", 8473, "\xe2\x84\x99"},
- {"simgE", 10912, "\xe2\xaa\xa0"},
- {"upsilon", 965, "\xcf\x85"},
- {"NoBreak", 8288, "\xe2\x81\xa0"},
- {"realine", 8475, "\xe2\x84\x9b"},
- {"frac38", 8540, "\xe2\x85\x9c"},
- {"YAcy", 1071, "\xd0\xaf"},
- {"bnequiv", 8801, "\xe2\x89\xa1\xe2\x83\xa5"},
- {"cudarrr", 10549, "\xe2\xa4\xb5"},
- {"lsime", 10893, "\xe2\xaa\x8d"},
- {"lowbar", 95, "\x5f"},
- {"utdot", 8944, "\xe2\x8b\xb0"},
- {"ReverseElement", 8715, "\xe2\x88\x8b"},
- {"nshortparallel", 8742, "\xe2\x88\xa6"},
- {"DJcy", 1026, "\xd0\x82"},
- {"nsube", 8840, "\xe2\x8a\x88"},
- {"VDash", 8875, "\xe2\x8a\xab"},
- {"Ncaron", 327, "\xc5\x87"},
- {"LeftUpVector", 8639, "\xe2\x86\xbf"},
- {"Kcy", 1050, "\xd0\x9a"},
- {"NotLeftTriangleEqual", 8940, "\xe2\x8b\xac"},
- {"nvHarr", 10500, "\xe2\xa4\x84"},
- {"lotimes", 10804, "\xe2\xa8\xb4"},
- {"RightFloor", 8971, "\xe2\x8c\x8b"},
- {"succ", 8827, "\xe2\x89\xbb"},
- {"Ucy", 1059, "\xd0\xa3"},
- {"darr", 8595, "\xe2\x86\x93"},
- {"lbarr", 10508, "\xe2\xa4\x8c"},
- {"xfr", 120117, "\xf0\x9d\x94\xb5"},
- {"zopf", 120171, "\xf0\x9d\x95\xab"},
- {"Phi", 934, "\xce\xa6"},
- {"ord", 10845, "\xe2\xa9\x9d"},
- {"iinfin", 10716, "\xe2\xa7\x9c"},
- {"Xfr", 120091, "\xf0\x9d\x94\x9b"},
- {"qint", 10764, "\xe2\xa8\x8c"},
- {"Upsilon", 933, "\xce\xa5"},
- {"NotSubset", 8834, "\xe2\x8a\x82\xe2\x83\x92"},
- {"gfr", 120100, "\xf0\x9d\x94\xa4"},
- {"notnivb", 8958, "\xe2\x8b\xbe"},
- {"Afr", 120068, "\xf0\x9d\x94\x84"},
- {"ge", 8805, "\xe2\x89\xa5"},
- {"iexcl", 161, "\xc2\xa1"},
- {"dfr", 120097, "\xf0\x9d\x94\xa1"},
- {"rsaquo", 8250, "\xe2\x80\xba"},
- {"xcap", 8898, "\xe2\x8b\x82"},
- {"Jopf", 120129, "\xf0\x9d\x95\x81"},
- {"Hstrok", 294, "\xc4\xa6"},
- {"ldca", 10550, "\xe2\xa4\xb6"},
- {"lmoust", 9136, "\xe2\x8e\xb0"},
- {"wcirc", 373, "\xc5\xb5"},
- {"DownRightVector", 8641, "\xe2\x87\x81"},
- {"LessFullEqual", 8806, "\xe2\x89\xa6"},
- {"dotsquare", 8865, "\xe2\x8a\xa1"},
- {"zhcy", 1078, "\xd0\xb6"},
- {"mDDot", 8762, "\xe2\x88\xba"},
- {"Prime", 8243, "\xe2\x80\xb3"},
- {"prec", 8826, "\xe2\x89\xba"},
- {"swnwar", 10538, "\xe2\xa4\xaa"},
- {"COPY", 169, "\xc2\xa9"},
- {"cong", 8773, "\xe2\x89\x85"},
- {"sacute", 347, "\xc5\x9b"},
- {"Nopf", 8469, "\xe2\x84\x95"},
- {"it", 8290, "\xe2\x81\xa2"},
- {"SOFTcy", 1068, "\xd0\xac"},
- {"uuarr", 8648, "\xe2\x87\x88"},
- {"iota", 953, "\xce\xb9"},
- {"notinE", 8953, "\xe2\x8b\xb9\xcc\xb8"},
- {"jfr", 120103, "\xf0\x9d\x94\xa7"},
- {"QUOT", 34, "\x22"},
- {"vsupnE", 10956, "\xe2\xab\x8c\xef\xb8\x80"},
- {"igrave", 236, "\xc3\xac"},
- {"bsim", 8765, "\xe2\x88\xbd"},
- {"npreceq", 10927, "\xe2\xaa\xaf\xcc\xb8"},
- {"zcaron", 382, "\xc5\xbe"},
- {"DD", 8517, "\xe2\x85\x85"},
- {"gamma", 947, "\xce\xb3"},
- {"homtht", 8763, "\xe2\x88\xbb"},
- {"NonBreakingSpace", 160, "\xc2\xa0"},
- {"Proportion", 8759, "\xe2\x88\xb7"},
- {"nedot", 8784, "\xe2\x89\x90\xcc\xb8"},
- {"nabla", 8711, "\xe2\x88\x87"},
- {"ac", 8766, "\xe2\x88\xbe"},
- {"nsupe", 8841, "\xe2\x8a\x89"},
- {"ell", 8467, "\xe2\x84\x93"},
- {"boxvR", 9566, "\xe2\x95\x9e"},
- {"LowerRightArrow", 8600, "\xe2\x86\x98"},
- {"boxHu", 9575, "\xe2\x95\xa7"},
- {"lE", 8806, "\xe2\x89\xa6"},
- {"dzigrarr", 10239, "\xe2\x9f\xbf"},
- {"rfloor", 8971, "\xe2\x8c\x8b"},
- {"gneq", 10888, "\xe2\xaa\x88"},
- {"rightleftharpoons", 8652, "\xe2\x87\x8c"},
- {"gtquest", 10876, "\xe2\xa9\xbc"},
- {"searhk", 10533, "\xe2\xa4\xa5"},
- {"gesdoto", 10882, "\xe2\xaa\x82"},
- {"cross", 10007, "\xe2\x9c\x97"},
- {"rdquo", 8221, "\xe2\x80\x9d"},
- {"sqsupset", 8848, "\xe2\x8a\x90"},
- {"divonx", 8903, "\xe2\x8b\x87"},
- {"lat", 10923, "\xe2\xaa\xab"},
- {"rmoustache", 9137, "\xe2\x8e\xb1"},
- {"succapprox", 10936, "\xe2\xaa\xb8"},
- {"nhpar", 10994, "\xe2\xab\xb2"},
- {"sharp", 9839, "\xe2\x99\xaf"},
- {"lrcorner", 8991, "\xe2\x8c\x9f"},
- {"Vscr", 119985, "\xf0\x9d\x92\xb1"},
- {"varsigma", 962, "\xcf\x82"},
- {"bsolb", 10693, "\xe2\xa7\x85"},
- {"cupcap", 10822, "\xe2\xa9\x86"},
- {"leftrightarrow", 8596, "\xe2\x86\x94"},
- {"LeftTee", 8867, "\xe2\x8a\xa3"},
- {"Sqrt", 8730, "\xe2\x88\x9a"},
- {"Odblac", 336, "\xc5\x90"},
- {"ocir", 8858, "\xe2\x8a\x9a"},
- {"eqslantless", 10901, "\xe2\xaa\x95"},
- {"supedot", 10948, "\xe2\xab\x84"},
- {"intercal", 8890, "\xe2\x8a\xba"},
- {"Gbreve", 286, "\xc4\x9e"},
- {"xrArr", 10233, "\xe2\x9f\xb9"},
- {"NotTildeEqual", 8772, "\xe2\x89\x84"},
- {"Bfr", 120069, "\xf0\x9d\x94\x85"},
- {"Iuml", 207, "\xc3\x8f"},
- {"leg", 8922, "\xe2\x8b\x9a"},
- {"boxhU", 9576, "\xe2\x95\xa8"},
- {"Gopf", 120126, "\xf0\x9d\x94\xbe"},
- {"af", 8289, "\xe2\x81\xa1"},
- {"xwedge", 8896, "\xe2\x8b\x80"},
- {"precapprox", 10935, "\xe2\xaa\xb7"},
- {"lcedil", 316, "\xc4\xbc"},
- {"between", 8812, "\xe2\x89\xac"},
- {"Oslash", 216, "\xc3\x98"},
- {"breve", 728, "\xcb\x98"},
- {"caps", 8745, "\xe2\x88\xa9\xef\xb8\x80"},
- {"vangrt", 10652, "\xe2\xa6\x9c"},
- {"lagran", 8466, "\xe2\x84\x92"},
- {"kopf", 120156, "\xf0\x9d\x95\x9c"},
- {"ReverseUpEquilibrium", 10607, "\xe2\xa5\xaf"},
- {"nlsim", 8820, "\xe2\x89\xb4"},
- {"Cap", 8914, "\xe2\x8b\x92"},
- {"angmsdac", 10666, "\xe2\xa6\xaa"},
- {"iocy", 1105, "\xd1\x91"},
- {"seswar", 10537, "\xe2\xa4\xa9"},
- {"dzcy", 1119, "\xd1\x9f"},
- {"nsubset", 8834, "\xe2\x8a\x82\xe2\x83\x92"},
- {"cup", 8746, "\xe2\x88\xaa"},
- {"npar", 8742, "\xe2\x88\xa6"},
- {"late", 10925, "\xe2\xaa\xad"},
- {"plussim", 10790, "\xe2\xa8\xa6"},
- {"Darr", 8609, "\xe2\x86\xa1"},
- {"nexist", 8708, "\xe2\x88\x84"},
- {"cent", 162, "\xc2\xa2"},
- {"khcy", 1093, "\xd1\x85"},
- {"smallsetminus", 8726, "\xe2\x88\x96"},
- {"ycirc", 375, "\xc5\xb7"},
- {"lharu", 8636, "\xe2\x86\xbc"},
- {"upuparrows", 8648, "\xe2\x87\x88"},
- {"sigmaf", 962, "\xcf\x82"},
- {"nltri", 8938, "\xe2\x8b\xaa"},
- {"mstpos", 8766, "\xe2\x88\xbe"},
- {"Zopf", 8484, "\xe2\x84\xa4"},
- {"dwangle", 10662, "\xe2\xa6\xa6"},
- {"bowtie", 8904, "\xe2\x8b\x88"},
- {"Dfr", 120071, "\xf0\x9d\x94\x87"},
- {"iacute", 237, "\xc3\xad"},
- {"njcy", 1114, "\xd1\x9a"},
- {"cfr", 120096, "\xf0\x9d\x94\xa0"},
- {"TripleDot", 8411, "\xe2\x83\x9b"},
- {"Or", 10836, "\xe2\xa9\x94"},
- {"blk34", 9619, "\xe2\x96\x93"},
- {"equiv", 8801, "\xe2\x89\xa1"},
- {"fflig", 64256, "\xef\xac\x80"},
- {"Rang", 10219, "\xe2\x9f\xab"},
- {"Wopf", 120142, "\xf0\x9d\x95\x8e"},
- {"boxUl", 9564, "\xe2\x95\x9c"},
- {"frac12", 189, "\xc2\xbd"},
- {"clubs", 9827, "\xe2\x99\xa3"},
- {"amalg", 10815, "\xe2\xa8\xbf"},
- {"Lang", 10218, "\xe2\x9f\xaa"},
- {"asymp", 8776, "\xe2\x89\x88"},
- {"models", 8871, "\xe2\x8a\xa7"},
- {"emptyset", 8709, "\xe2\x88\x85"},
- {"Tscr", 119983, "\xf0\x9d\x92\xaf"},
- {"nleftarrow", 8602, "\xe2\x86\x9a"},
- {"Omacr", 332, "\xc5\x8c"},
- {"gtrarr", 10616, "\xe2\xa5\xb8"},
- {"excl", 33, "\x21"},
- {"rarrw", 8605, "\xe2\x86\x9d"},
- {"abreve", 259, "\xc4\x83"},
- {"CircleTimes", 8855, "\xe2\x8a\x97"},
- {"aopf", 120146, "\xf0\x9d\x95\x92"},
- {"eqvparsl", 10725, "\xe2\xa7\xa5"},
- {"boxv", 9474, "\xe2\x94\x82"},
- {"SuchThat", 8715, "\xe2\x88\x8b"},
- {"varphi", 981, "\xcf\x95"},
- {"Ropf", 8477, "\xe2\x84\x9d"},
- {"rscr", 120007, "\xf0\x9d\x93\x87"},
- {"Rrightarrow", 8667, "\xe2\x87\x9b"},
- {"equest", 8799, "\xe2\x89\x9f"},
- {"ntilde", 241, "\xc3\xb1"},
- {"Escr", 8496, "\xe2\x84\xb0"},
- {"Lopf", 120131, "\xf0\x9d\x95\x83"},
- {"GreaterGreater", 10914, "\xe2\xaa\xa2"},
- {"pluscir", 10786, "\xe2\xa8\xa2"},
- {"nsupset", 8835, "\xe2\x8a\x83\xe2\x83\x92"},
- {"uArr", 8657, "\xe2\x87\x91"},
- {"nwarhk", 10531, "\xe2\xa4\xa3"},
- {"Ycirc", 374, "\xc5\xb6"},
- {"tdot", 8411, "\xe2\x83\x9b"},
- {"circledS", 9416, "\xe2\x93\x88"},
- {"lhard", 8637, "\xe2\x86\xbd"},
- {"iukcy", 1110, "\xd1\x96"},
- {"PrecedesSlantEqual", 8828, "\xe2\x89\xbc"},
- {"Sfr", 120086, "\xf0\x9d\x94\x96"},
- {"egs", 10902, "\xe2\xaa\x96"},
- {"oelig", 339, "\xc5\x93"},
- {"bigtriangledown", 9661, "\xe2\x96\xbd"},
- {"EmptyVerySmallSquare", 9643, "\xe2\x96\xab"},
- {"Backslash", 8726, "\xe2\x88\x96"},
- {"nscr", 120003, "\xf0\x9d\x93\x83"},
- {"uogon", 371, "\xc5\xb3"},
- {"circeq", 8791, "\xe2\x89\x97"},
- {"check", 10003, "\xe2\x9c\x93"},
- {"Sup", 8913, "\xe2\x8b\x91"},
- {"Rcaron", 344, "\xc5\x98"},
- {"lneqq", 8808, "\xe2\x89\xa8"},
- {"lrhar", 8651, "\xe2\x87\x8b"},
- {"ulcorn", 8988, "\xe2\x8c\x9c"},
- {"timesd", 10800, "\xe2\xa8\xb0"},
- {"Sum", 8721, "\xe2\x88\x91"},
- {"varpropto", 8733, "\xe2\x88\x9d"},
- {"Lcaron", 317, "\xc4\xbd"},
- {"lbrkslu", 10637, "\xe2\xa6\x8d"},
- {"AElig", 198, "\xc3\x86"},
- {"varr", 8597, "\xe2\x86\x95"},
- {"nvinfin", 10718, "\xe2\xa7\x9e"},
- {"leq", 8804, "\xe2\x89\xa4"},
- {"biguplus", 10756, "\xe2\xa8\x84"},
- {"rpar", 41, "\x29"},
- {"eng", 331, "\xc5\x8b"},
- {"NegativeThinSpace", 8203, "\xe2\x80\x8b"},
- {"lesssim", 8818, "\xe2\x89\xb2"},
- {"lBarr", 10510, "\xe2\xa4\x8e"},
- {"LeftUpTeeVector", 10592, "\xe2\xa5\xa0"},
- {"gnE", 8809, "\xe2\x89\xa9"},
- {"efr", 120098, "\xf0\x9d\x94\xa2"},
- {"barvee", 8893, "\xe2\x8a\xbd"},
- {"ee", 8519, "\xe2\x85\x87"},
- {"Uogon", 370, "\xc5\xb2"},
- {"gnapprox", 10890, "\xe2\xaa\x8a"},
- {"olcir", 10686, "\xe2\xa6\xbe"},
- {"boxUL", 9565, "\xe2\x95\x9d"},
- {"Gg", 8921, "\xe2\x8b\x99"},
- {"CloseCurlyQuote", 8217, "\xe2\x80\x99"},
- {"leftharpoondown", 8637, "\xe2\x86\xbd"},
- {"vfr", 120115, "\xf0\x9d\x94\xb3"},
- {"gvertneqq", 8809, "\xe2\x89\xa9\xef\xb8\x80"},
- {"ouml", 246, "\xc3\xb6"},
- {"raemptyv", 10675, "\xe2\xa6\xb3"},
- {"Zcaron", 381, "\xc5\xbd"},
- {"scE", 10932, "\xe2\xaa\xb4"},
- {"boxvh", 9532, "\xe2\x94\xbc"},
- {"ominus", 8854, "\xe2\x8a\x96"},
- {"oopf", 120160, "\xf0\x9d\x95\xa0"},
- {"nsucceq", 10928, "\xe2\xaa\xb0\xcc\xb8"},
- {"RBarr", 10512, "\xe2\xa4\x90"},
- {"iprod", 10812, "\xe2\xa8\xbc"},
- {"lvnE", 8808, "\xe2\x89\xa8\xef\xb8\x80"},
- {"andand", 10837, "\xe2\xa9\x95"},
- {"upharpoonright", 8638, "\xe2\x86\xbe"},
- {"ncongdot", 10861, "\xe2\xa9\xad\xcc\xb8"},
- {"drcrop", 8972, "\xe2\x8c\x8c"},
- {"nsimeq", 8772, "\xe2\x89\x84"},
- {"subsub", 10965, "\xe2\xab\x95"},
- {"hardcy", 1098, "\xd1\x8a"},
- {"leqslant", 10877, "\xe2\xa9\xbd"},
- {"uharl", 8639, "\xe2\x86\xbf"},
- {"expectation", 8496, "\xe2\x84\xb0"},
- {"mdash", 8212, "\xe2\x80\x94"},
- {"VerticalTilde", 8768, "\xe2\x89\x80"},
- {"rdldhar", 10601, "\xe2\xa5\xa9"},
- {"leftharpoonup", 8636, "\xe2\x86\xbc"},
- {"mu", 956, "\xce\xbc"},
- {"curarrm", 10556, "\xe2\xa4\xbc"},
- {"Cdot", 266, "\xc4\x8a"},
- {"NotTildeTilde", 8777, "\xe2\x89\x89"},
- {"boxul", 9496, "\xe2\x94\x98"},
- {"planckh", 8462, "\xe2\x84\x8e"},
- {"CapitalDifferentialD", 8517, "\xe2\x85\x85"},
- {"boxDL", 9559, "\xe2\x95\x97"},
- {"cupbrcap", 10824, "\xe2\xa9\x88"},
- {"boxdL", 9557, "\xe2\x95\x95"},
- {"supe", 8839, "\xe2\x8a\x87"},
- {"nvlt", 60, "\x3c\xe2\x83\x92"},
- {"par", 8741, "\xe2\x88\xa5"},
- {"InvisibleComma", 8291, "\xe2\x81\xa3"},
- {"ring", 730, "\xcb\x9a"},
- {"nvap", 8781, "\xe2\x89\x8d\xe2\x83\x92"},
- {"veeeq", 8794, "\xe2\x89\x9a"},
- {"Hfr", 8460, "\xe2\x84\x8c"},
- {"dstrok", 273, "\xc4\x91"},
- {"gesles", 10900, "\xe2\xaa\x94"},
- {"dash", 8208, "\xe2\x80\x90"},
- {"SHcy", 1064, "\xd0\xa8"},
- {"congdot", 10861, "\xe2\xa9\xad"},
- {"imagline", 8464, "\xe2\x84\x90"},
- {"ncy", 1085, "\xd0\xbd"},
- {"bigstar", 9733, "\xe2\x98\x85"},
- {"REG", 174, "\xc2\xae"},
- {"triangleq", 8796, "\xe2\x89\x9c"},
- {"rsqb", 93, "\x5d"},
- {"ddarr", 8650, "\xe2\x87\x8a"},
- {"csub", 10959, "\xe2\xab\x8f"},
- {"quest", 63, "\x3f"},
- {"Star", 8902, "\xe2\x8b\x86"},
- {"LT", 60, "\x3c"},
- {"ncong", 8775, "\xe2\x89\x87"},
- {"prnE", 10933, "\xe2\xaa\xb5"},
- {"bigtriangleup", 9651, "\xe2\x96\xb3"},
- {"Tilde", 8764, "\xe2\x88\xbc"},
- {"ltrif", 9666, "\xe2\x97\x82"},
- {"ldrdhar", 10599, "\xe2\xa5\xa7"},
- {"lcaron", 318, "\xc4\xbe"},
- {"equivDD", 10872, "\xe2\xa9\xb8"},
- {"lHar", 10594, "\xe2\xa5\xa2"},
- {"vBar", 10984, "\xe2\xab\xa8"},
- {"Mopf", 120132, "\xf0\x9d\x95\x84"},
- {"LeftArrow", 8592, "\xe2\x86\x90"},
- {"Rho", 929, "\xce\xa1"},
- {"Ccirc", 264, "\xc4\x88"},
- {"ifr", 120102, "\xf0\x9d\x94\xa6"},
- {"cacute", 263, "\xc4\x87"},
- {"centerdot", 183, "\xc2\xb7"},
- {"dollar", 36, "\x24"},
- {"lang", 10216, "\xe2\x9f\xa8"},
- {"curvearrowright", 8631, "\xe2\x86\xb7"},
- {"half", 189, "\xc2\xbd"},
- {"Ecy", 1069, "\xd0\xad"},
- {"rcub", 125, "\x7d"},
- {"rcy", 1088, "\xd1\x80"},
- {"isins", 8948, "\xe2\x8b\xb4"},
- {"bsolhsub", 10184, "\xe2\x9f\x88"},
- {"boxuL", 9563, "\xe2\x95\x9b"},
- {"shchcy", 1097, "\xd1\x89"},
- {"cwconint", 8754, "\xe2\x88\xb2"},
- {"euro", 8364, "\xe2\x82\xac"},
- {"lesseqqgtr", 10891, "\xe2\xaa\x8b"},
- {"sim", 8764, "\xe2\x88\xbc"},
- {"rarrc", 10547, "\xe2\xa4\xb3"},
- {"boxdl", 9488, "\xe2\x94\x90"},
- {"Epsilon", 917, "\xce\x95"},
- {"iiiint", 10764, "\xe2\xa8\x8c"},
- {"Rightarrow", 8658, "\xe2\x87\x92"},
- {"conint", 8750, "\xe2\x88\xae"},
- {"boxDl", 9558, "\xe2\x95\x96"},
- {"kappav", 1008, "\xcf\xb0"},
- {"profsurf", 8979, "\xe2\x8c\x93"},
- {"auml", 228, "\xc3\xa4"},
- {"heartsuit", 9829, "\xe2\x99\xa5"},
- {"eacute", 233, "\xc3\xa9"},
- {"gt", 62, "\x3e"},
- {"Gcedil", 290, "\xc4\xa2"},
- {"easter", 10862, "\xe2\xa9\xae"},
- {"Tcy", 1058, "\xd0\xa2"},
- {"swarrow", 8601, "\xe2\x86\x99"},
- {"lopf", 120157, "\xf0\x9d\x95\x9d"},
- {"Agrave", 192, "\xc3\x80"},
- {"Aring", 197, "\xc3\x85"},
- {"fpartint", 10765, "\xe2\xa8\x8d"},
- {"xoplus", 10753, "\xe2\xa8\x81"},
- {"LeftDownTeeVector", 10593, "\xe2\xa5\xa1"},
- {"int", 8747, "\xe2\x88\xab"},
- {"Zeta", 918, "\xce\x96"},
- {"loz", 9674, "\xe2\x97\x8a"},
- {"ncup", 10818, "\xe2\xa9\x82"},
- {"napE", 10864, "\xe2\xa9\xb0\xcc\xb8"},
- {"csup", 10960, "\xe2\xab\x90"},
- {"Ncedil", 325, "\xc5\x85"},
- {"cuwed", 8911, "\xe2\x8b\x8f"},
- {"Dot", 168, "\xc2\xa8"},
- {"SquareIntersection", 8851, "\xe2\x8a\x93"},
- {"map", 8614, "\xe2\x86\xa6"},
- {"aelig", 230, "\xc3\xa6"},
- {"RightArrow", 8594, "\xe2\x86\x92"},
- {"rightharpoondown", 8641, "\xe2\x87\x81"},
- {"bNot", 10989, "\xe2\xab\xad"},
- {"nsccue", 8929, "\xe2\x8b\xa1"},
- {"zigrarr", 8669, "\xe2\x87\x9d"},
- {"Sacute", 346, "\xc5\x9a"},
- {"orv", 10843, "\xe2\xa9\x9b"},
- {"RightVectorBar", 10579, "\xe2\xa5\x93"},
- {"nrarrw", 8605, "\xe2\x86\x9d\xcc\xb8"},
- {"nbump", 8782, "\xe2\x89\x8e\xcc\xb8"},
- {"iquest", 191, "\xc2\xbf"},
- {"wr", 8768, "\xe2\x89\x80"},
- {"UpArrow", 8593, "\xe2\x86\x91"},
- {"notinva", 8713, "\xe2\x88\x89"},
- {"ddagger", 8225, "\xe2\x80\xa1"},
- {"nLeftarrow", 8653, "\xe2\x87\x8d"},
- {"rbbrk", 10099, "\xe2\x9d\xb3"},
- {"RightTriangle", 8883, "\xe2\x8a\xb3"},
- {"leqq", 8806, "\xe2\x89\xa6"},
- {"Vert", 8214, "\xe2\x80\x96"},
- {"gesl", 8923, "\xe2\x8b\x9b\xef\xb8\x80"},
- {"LeftTeeVector", 10586, "\xe2\xa5\x9a"},
- {"Union", 8899, "\xe2\x8b\x83"},
- {"sc", 8827, "\xe2\x89\xbb"},
- {"ofr", 120108, "\xf0\x9d\x94\xac"},
- {"quatint", 10774, "\xe2\xa8\x96"},
- {"apacir", 10863, "\xe2\xa9\xaf"},
- {"profalar", 9006, "\xe2\x8c\xae"},
- {"subsetneq", 8842, "\xe2\x8a\x8a"},
- {"Vvdash", 8874, "\xe2\x8a\xaa"},
- {"ohbar", 10677, "\xe2\xa6\xb5"},
- {"Gt", 8811, "\xe2\x89\xab"},
- {"exist", 8707, "\xe2\x88\x83"},
- {"gtrapprox", 10886, "\xe2\xaa\x86"},
- {"euml", 235, "\xc3\xab"},
- {"Equilibrium", 8652, "\xe2\x87\x8c"},
- {"aacute", 225, "\xc3\xa1"},
- {"omid", 10678, "\xe2\xa6\xb6"},
- {"loarr", 8701, "\xe2\x87\xbd"},
- {"SucceedsSlantEqual", 8829, "\xe2\x89\xbd"},
- {"angsph", 8738, "\xe2\x88\xa2"},
- {"nsmid", 8740, "\xe2\x88\xa4"},
- {"lsquor", 8218, "\xe2\x80\x9a"},
- {"cemptyv", 10674, "\xe2\xa6\xb2"},
- {"rAarr", 8667, "\xe2\x87\x9b"},
- {"searr", 8600, "\xe2\x86\x98"},
- {"complexes", 8450, "\xe2\x84\x82"},
- {"UnderParenthesis", 9181, "\xe2\x8f\x9d"},
- {"nparsl", 11005, "\xe2\xab\xbd\xe2\x83\xa5"},
- {"Lacute", 313, "\xc4\xb9"},
- {"deg", 176, "\xc2\xb0"},
- {"Racute", 340, "\xc5\x94"},
- {"Verbar", 8214, "\xe2\x80\x96"},
- {"sqcups", 8852, "\xe2\x8a\x94\xef\xb8\x80"},
- {"Hopf", 8461, "\xe2\x84\x8d"},
- {"naturals", 8469, "\xe2\x84\x95"},
- {"Cedilla", 184, "\xc2\xb8"},
- {"exponentiale", 8519, "\xe2\x85\x87"},
- {"vnsup", 8835, "\xe2\x8a\x83\xe2\x83\x92"},
- {"leftrightarrows", 8646, "\xe2\x87\x86"},
- {"Laplacetrf", 8466, "\xe2\x84\x92"},
- {"vartriangleright", 8883, "\xe2\x8a\xb3"},
- {"rtri", 9657, "\xe2\x96\xb9"},
- {"gE", 8807, "\xe2\x89\xa7"},
- {"SmallCircle", 8728, "\xe2\x88\x98"},
- {"diamondsuit", 9830, "\xe2\x99\xa6"},
- {"Otilde", 213, "\xc3\x95"},
- {"lneq", 10887, "\xe2\xaa\x87"},
- {"lesdoto", 10881, "\xe2\xaa\x81"},
- {"ltquest", 10875, "\xe2\xa9\xbb"},
- {"thinsp", 8201, "\xe2\x80\x89"},
- {"barwed", 8965, "\xe2\x8c\x85"},
- {"elsdot", 10903, "\xe2\xaa\x97"},
- {"circ", 710, "\xcb\x86"},
- {"ni", 8715, "\xe2\x88\x8b"},
- {"mlcp", 10971, "\xe2\xab\x9b"},
- {"Vdash", 8873, "\xe2\x8a\xa9"},
- {"ShortRightArrow", 8594, "\xe2\x86\x92"},
- {"upharpoonleft", 8639, "\xe2\x86\xbf"},
- {"UnderBracket", 9141, "\xe2\x8e\xb5"},
- {"rAtail", 10524, "\xe2\xa4\x9c"},
- {"iopf", 120154, "\xf0\x9d\x95\x9a"},
- {"longleftarrow", 10229, "\xe2\x9f\xb5"},
- {"Zacute", 377, "\xc5\xb9"},
- {"duhar", 10607, "\xe2\xa5\xaf"},
- {"Mfr", 120080, "\xf0\x9d\x94\x90"},
- {"prnap", 10937, "\xe2\xaa\xb9"},
- {"eqcirc", 8790, "\xe2\x89\x96"},
- {"rarrlp", 8620, "\xe2\x86\xac"},
- {"le", 8804, "\xe2\x89\xa4"},
- {"Oscr", 119978, "\xf0\x9d\x92\xaa"},
- {"langd", 10641, "\xe2\xa6\x91"},
- {"Ucirc", 219, "\xc3\x9b"},
- {"precnapprox", 10937, "\xe2\xaa\xb9"},
- {"succcurlyeq", 8829, "\xe2\x89\xbd"},
- {"Tau", 932, "\xce\xa4"},
- {"larr", 8592, "\xe2\x86\x90"},
- {"neArr", 8663, "\xe2\x87\x97"},
- {"subsim", 10951, "\xe2\xab\x87"},
- {"DScy", 1029, "\xd0\x85"},
- {"preccurlyeq", 8828, "\xe2\x89\xbc"},
- {"NotLessLess", 8810, "\xe2\x89\xaa\xcc\xb8"},
- {"succnapprox", 10938, "\xe2\xaa\xba"},
- {"prcue", 8828, "\xe2\x89\xbc"},
- {"Downarrow", 8659, "\xe2\x87\x93"},
- {"angmsdah", 10671, "\xe2\xa6\xaf"},
- {"Emacr", 274, "\xc4\x92"},
- {"lsh", 8624, "\xe2\x86\xb0"},
- {"simne", 8774, "\xe2\x89\x86"},
- {"Bumpeq", 8782, "\xe2\x89\x8e"},
- {"RightUpTeeVector", 10588, "\xe2\xa5\x9c"},
- {"Sigma", 931, "\xce\xa3"},
- {"nvltrie", 8884, "\xe2\x8a\xb4\xe2\x83\x92"},
- {"lfr", 120105, "\xf0\x9d\x94\xa9"},
- {"emsp13", 8196, "\xe2\x80\x84"},
- {"parsl", 11005, "\xe2\xab\xbd"},
- {"ucirc", 251, "\xc3\xbb"},
- {"gsiml", 10896, "\xe2\xaa\x90"},
- {"xsqcup", 10758, "\xe2\xa8\x86"},
- {"Omicron", 927, "\xce\x9f"},
- {"gsime", 10894, "\xe2\xaa\x8e"},
- {"circlearrowleft", 8634, "\xe2\x86\xba"},
- {"sqsupe", 8850, "\xe2\x8a\x92"},
- {"supE", 10950, "\xe2\xab\x86"},
- {"dlcrop", 8973, "\xe2\x8c\x8d"},
- {"RightDownTeeVector", 10589, "\xe2\xa5\x9d"},
- {"Colone", 10868, "\xe2\xa9\xb4"},
- {"awconint", 8755, "\xe2\x88\xb3"},
- {"smte", 10924, "\xe2\xaa\xac"},
- {"lEg", 10891, "\xe2\xaa\x8b"},
- {"circledast", 8859, "\xe2\x8a\x9b"},
- {"ecolon", 8789, "\xe2\x89\x95"},
- {"rect", 9645, "\xe2\x96\xad"},
- {"Equal", 10869, "\xe2\xa9\xb5"},
- {"nwnear", 10535, "\xe2\xa4\xa7"},
- {"capdot", 10816, "\xe2\xa9\x80"},
- {"straightphi", 981, "\xcf\x95"},
- {"forkv", 10969, "\xe2\xab\x99"},
- {"ZHcy", 1046, "\xd0\x96"},
- {"Element", 8712, "\xe2\x88\x88"},
- {"rthree", 8908, "\xe2\x8b\x8c"},
- {"vzigzag", 10650, "\xe2\xa6\x9a"},
- {"hybull", 8259, "\xe2\x81\x83"},
- {"intprod", 10812, "\xe2\xa8\xbc"},
- {"HumpEqual", 8783, "\xe2\x89\x8f"},
- {"bigsqcup", 10758, "\xe2\xa8\x86"},
- {"mp", 8723, "\xe2\x88\x93"},
- {"lescc", 10920, "\xe2\xaa\xa8"},
- {"NotPrecedes", 8832, "\xe2\x8a\x80"},
- {"wedge", 8743, "\xe2\x88\xa7"},
- {"Supset", 8913, "\xe2\x8b\x91"},
- {"pm", 177, "\xc2\xb1"},
- {"kfr", 120104, "\xf0\x9d\x94\xa8"},
- {"ufisht", 10622, "\xe2\xa5\xbe"},
- {"ecaron", 283, "\xc4\x9b"},
- {"chcy", 1095, "\xd1\x87"},
- {"Esim", 10867, "\xe2\xa9\xb3"},
- {"fltns", 9649, "\xe2\x96\xb1"},
- {"nsce", 10928, "\xe2\xaa\xb0\xcc\xb8"},
- {"hookrightarrow", 8618, "\xe2\x86\xaa"},
- {"semi", 59, "\x3b"},
- {"ges", 10878, "\xe2\xa9\xbe"},
- {"approxeq", 8778, "\xe2\x89\x8a"},
- {"rarrsim", 10612, "\xe2\xa5\xb4"},
- {"boxhD", 9573, "\xe2\x95\xa5"},
- {"varpi", 982, "\xcf\x96"},
- {"larrb", 8676, "\xe2\x87\xa4"},
- {"copf", 120148, "\xf0\x9d\x95\x94"},
- {"Dopf", 120123, "\xf0\x9d\x94\xbb"},
- {"LeftVector", 8636, "\xe2\x86\xbc"},
- {"iff", 8660, "\xe2\x87\x94"},
- {"lnap", 10889, "\xe2\xaa\x89"},
- {"NotGreaterFullEqual", 8807, "\xe2\x89\xa7\xcc\xb8"},
- {"varrho", 1009, "\xcf\xb1"},
- {"NotSucceeds", 8833, "\xe2\x8a\x81"},
- {"ltrPar", 10646, "\xe2\xa6\x96"},
- {"nlE", 8806, "\xe2\x89\xa6\xcc\xb8"},
- {"Zfr", 8488, "\xe2\x84\xa8"},
- {"LeftArrowBar", 8676, "\xe2\x87\xa4"},
- {"boxplus", 8862, "\xe2\x8a\x9e"},
- {"sqsube", 8849, "\xe2\x8a\x91"},
- {"Re", 8476, "\xe2\x84\x9c"},
- {"Wfr", 120090, "\xf0\x9d\x94\x9a"},
- {"epsi", 949, "\xce\xb5"},
- {"oacute", 243, "\xc3\xb3"},
- {"bdquo", 8222, "\xe2\x80\x9e"},
- {"wscr", 120012, "\xf0\x9d\x93\x8c"},
- {"bullet", 8226, "\xe2\x80\xa2"},
- {"frown", 8994, "\xe2\x8c\xa2"},
- {"siml", 10909, "\xe2\xaa\x9d"},
- {"Rarr", 8608, "\xe2\x86\xa0"},
- {"Scaron", 352, "\xc5\xa0"},
- {"gtreqqless", 10892, "\xe2\xaa\x8c"},
- {"Larr", 8606, "\xe2\x86\x9e"},
- {"notniva", 8716, "\xe2\x88\x8c"},
- {"gg", 8811, "\xe2\x89\xab"},
- {"phmmat", 8499, "\xe2\x84\xb3"},
- {"boxVL", 9571, "\xe2\x95\xa3"},
- {"sigmav", 962, "\xcf\x82"},
- {"order", 8500, "\xe2\x84\xb4"},
- {"subsup", 10963, "\xe2\xab\x93"},
- {"afr", 120094, "\xf0\x9d\x94\x9e"},
- {"lbrace", 123, "\x7b"},
- {"urcorn", 8989, "\xe2\x8c\x9d"},
- {"Im", 8465, "\xe2\x84\x91"},
- {"CounterClockwiseContourIntegral", 8755, "\xe2\x88\xb3"},
- {"lne", 10887, "\xe2\xaa\x87"},
- {"chi", 967, "\xcf\x87"},
- {"cudarrl", 10552, "\xe2\xa4\xb8"},
- {"ang", 8736, "\xe2\x88\xa0"},
- {"isindot", 8949, "\xe2\x8b\xb5"},
- {"Lfr", 120079, "\xf0\x9d\x94\x8f"},
- {"Rsh", 8625, "\xe2\x86\xb1"},
- {"Ocy", 1054, "\xd0\x9e"},
- {"nvrArr", 10499, "\xe2\xa4\x83"},
- {"otimes", 8855, "\xe2\x8a\x97"},
- {"eqslantgtr", 10902, "\xe2\xaa\x96"},
- {"Rfr", 8476, "\xe2\x84\x9c"},
- {"blacktriangleleft", 9666, "\xe2\x97\x82"},
- {"Lsh", 8624, "\xe2\x86\xb0"},
- {"boxvr", 9500, "\xe2\x94\x9c"},
- {"scedil", 351, "\xc5\x9f"},
- {"iuml", 239, "\xc3\xaf"},
- {"NJcy", 1034, "\xd0\x8a"},
- {"Dagger", 8225, "\xe2\x80\xa1"},
- {"rarrap", 10613, "\xe2\xa5\xb5"},
- {"udblac", 369, "\xc5\xb1"},
- {"Sopf", 120138, "\xf0\x9d\x95\x8a"},
- {"scnsim", 8937, "\xe2\x8b\xa9"},
- {"hbar", 8463, "\xe2\x84\x8f"},
- {"frac15", 8533, "\xe2\x85\x95"},
- {"sup3", 179, "\xc2\xb3"},
- {"NegativeThickSpace", 8203, "\xe2\x80\x8b"},
- {"npr", 8832, "\xe2\x8a\x80"},
- {"doteq", 8784, "\xe2\x89\x90"},
- {"subrarr", 10617, "\xe2\xa5\xb9"},
- {"SquareSubset", 8847, "\xe2\x8a\x8f"},
- {"vprop", 8733, "\xe2\x88\x9d"},
- {"OpenCurlyQuote", 8216, "\xe2\x80\x98"},
- {"supseteq", 8839, "\xe2\x8a\x87"},
- {"nRightarrow", 8655, "\xe2\x87\x8f"},
- {"Longleftarrow", 10232, "\xe2\x9f\xb8"},
- {"lsquo", 8216, "\xe2\x80\x98"},
- {"hstrok", 295, "\xc4\xa7"},
- {"NotTilde", 8769, "\xe2\x89\x81"},
- {"ogt", 10689, "\xe2\xa7\x81"},
- {"block", 9608, "\xe2\x96\x88"},
- {"minusd", 8760, "\xe2\x88\xb8"},
- {"esdot", 8784, "\xe2\x89\x90"},
- {"nsim", 8769, "\xe2\x89\x81"},
- {"scsim", 8831, "\xe2\x89\xbf"},
- {"boxVl", 9570, "\xe2\x95\xa2"},
- {"ltimes", 8905, "\xe2\x8b\x89"},
- {"thkap", 8776, "\xe2\x89\x88"},
- {"vnsub", 8834, "\xe2\x8a\x82\xe2\x83\x92"},
- {"thetasym", 977, "\xcf\x91"},
- {"eopf", 120150, "\xf0\x9d\x95\x96"},
- {"image", 8465, "\xe2\x84\x91"},
- {"doteqdot", 8785, "\xe2\x89\x91"},
- {"Udblac", 368, "\xc5\xb0"},
- {"gnsim", 8935, "\xe2\x8b\xa7"},
- {"yicy", 1111, "\xd1\x97"},
- {"vopf", 120167, "\xf0\x9d\x95\xa7"},
- {"DDotrahd", 10513, "\xe2\xa4\x91"},
- {"Iota", 921, "\xce\x99"},
- {"GJcy", 1027, "\xd0\x83"},
- {"rightthreetimes", 8908, "\xe2\x8b\x8c"},
- {"nrtri", 8939, "\xe2\x8b\xab"},
- {"TildeFullEqual", 8773, "\xe2\x89\x85"},
- {"Dcaron", 270, "\xc4\x8e"},
- {"ccaron", 269, "\xc4\x8d"},
- {"lacute", 314, "\xc4\xba"},
- {"VerticalBar", 8739, "\xe2\x88\xa3"},
- {"Igrave", 204, "\xc3\x8c"},
- {"boxH", 9552, "\xe2\x95\x90"},
- {"Pfr", 120083, "\xf0\x9d\x94\x93"},
- {"equals", 61, "\x3d"},
- {"rbrack", 93, "\x5d"},
- {"OverParenthesis", 9180, "\xe2\x8f\x9c"},
- {"in", 8712, "\xe2\x88\x88"},
- {"llcorner", 8990, "\xe2\x8c\x9e"},
- {"mcomma", 10793, "\xe2\xa8\xa9"},
- {"NotGreater", 8815, "\xe2\x89\xaf"},
- {"midcir", 10992, "\xe2\xab\xb0"},
- {"Edot", 278, "\xc4\x96"},
- {"oplus", 8853, "\xe2\x8a\x95"},
- {"geqq", 8807, "\xe2\x89\xa7"},
- {"curvearrowleft", 8630, "\xe2\x86\xb6"},
- {"Poincareplane", 8460, "\xe2\x84\x8c"},
- {"yscr", 120014, "\xf0\x9d\x93\x8e"},
- {"ccaps", 10829, "\xe2\xa9\x8d"},
- {"rpargt", 10644, "\xe2\xa6\x94"},
- {"topfork", 10970, "\xe2\xab\x9a"},
- {"Gamma", 915, "\xce\x93"},
- {"umacr", 363, "\xc5\xab"},
- {"frac13", 8531, "\xe2\x85\x93"},
- {"cirfnint", 10768, "\xe2\xa8\x90"},
- {"xlArr", 10232, "\xe2\x9f\xb8"},
- {"digamma", 989, "\xcf\x9d"},
- {"Hat", 94, "\x5e"},
- {"lates", 10925, "\xe2\xaa\xad\xef\xb8\x80"},
- {"lgE", 10897, "\xe2\xaa\x91"},
- {"commat", 64, "\x40"},
- {"NotPrecedesSlantEqual", 8928, "\xe2\x8b\xa0"},
- {"phone", 9742, "\xe2\x98\x8e"},
- {"Ecirc", 202, "\xc3\x8a"},
- {"lt", 60, "\x3c"},
- {"intcal", 8890, "\xe2\x8a\xba"},
- {"xdtri", 9661, "\xe2\x96\xbd"},
- {"Abreve", 258, "\xc4\x82"},
- {"gopf", 120152, "\xf0\x9d\x95\x98"},
- {"Xopf", 120143, "\xf0\x9d\x95\x8f"},
- {"Iacute", 205, "\xc3\x8d"},
- {"Aopf", 120120, "\xf0\x9d\x94\xb8"},
- {"gbreve", 287, "\xc4\x9f"},
- {"nleq", 8816, "\xe2\x89\xb0"},
- {"xopf", 120169, "\xf0\x9d\x95\xa9"},
- {"SquareSupersetEqual", 8850, "\xe2\x8a\x92"},
- {"NotLessTilde", 8820, "\xe2\x89\xb4"},
- {"SubsetEqual", 8838, "\xe2\x8a\x86"},
- {"Sc", 10940, "\xe2\xaa\xbc"},
- {"sdote", 10854, "\xe2\xa9\xa6"},
- {"loplus", 10797, "\xe2\xa8\xad"},
- {"zfr", 120119, "\xf0\x9d\x94\xb7"},
- {"subseteqq", 10949, "\xe2\xab\x85"},
- {"Vdashl", 10982, "\xe2\xab\xa6"},
- {"integers", 8484, "\xe2\x84\xa4"},
- {"Umacr", 362, "\xc5\xaa"},
- {"dopf", 120149, "\xf0\x9d\x95\x95"},
- {"RightDownVectorBar", 10581, "\xe2\xa5\x95"},
- {"angmsdaf", 10669, "\xe2\xa6\xad"},
- {"Jfr", 120077, "\xf0\x9d\x94\x8d"},
- {"bernou", 8492, "\xe2\x84\xac"},
- {"lceil", 8968, "\xe2\x8c\x88"},
- {"nvsim", 8764, "\xe2\x88\xbc\xe2\x83\x92"},
- {"NotSucceedsSlantEqual", 8929, "\xe2\x8b\xa1"},
- {"hearts", 9829, "\xe2\x99\xa5"},
- {"vee", 8744, "\xe2\x88\xa8"},
- {"LJcy", 1033, "\xd0\x89"},
- {"nlt", 8814, "\xe2\x89\xae"},
- {"because", 8757, "\xe2\x88\xb5"},
- {"hairsp", 8202, "\xe2\x80\x8a"},
- {"comma", 44, "\x2c"},
- {"iecy", 1077, "\xd0\xb5"},
- {"npre", 10927, "\xe2\xaa\xaf\xcc\xb8"},
- {"NotSquareSubset", 8847, "\xe2\x8a\x8f\xcc\xb8"},
- {"mscr", 120002, "\xf0\x9d\x93\x82"},
- {"jopf", 120155, "\xf0\x9d\x95\x9b"},
- {"bumpE", 10926, "\xe2\xaa\xae"},
- {"thicksim", 8764, "\xe2\x88\xbc"},
- {"Nfr", 120081, "\xf0\x9d\x94\x91"},
- {"yucy", 1102, "\xd1\x8e"},
- {"notinvc", 8950, "\xe2\x8b\xb6"},
- {"lstrok", 322, "\xc5\x82"},
- {"robrk", 10215, "\xe2\x9f\xa7"},
- {"LeftTriangleBar", 10703, "\xe2\xa7\x8f"},
- {"hksearow", 10533, "\xe2\xa4\xa5"},
- {"bigcap", 8898, "\xe2\x8b\x82"},
- {"udhar", 10606, "\xe2\xa5\xae"},
- {"Yscr", 119988, "\xf0\x9d\x92\xb4"},
- {"smeparsl", 10724, "\xe2\xa7\xa4"},
- {"NotLess", 8814, "\xe2\x89\xae"},
- {"dcaron", 271, "\xc4\x8f"},
- {"ange", 10660, "\xe2\xa6\xa4"},
- {"dHar", 10597, "\xe2\xa5\xa5"},
- {"UpperRightArrow", 8599, "\xe2\x86\x97"},
- {"trpezium", 9186, "\xe2\x8f\xa2"},
- {"boxminus", 8863, "\xe2\x8a\x9f"},
- {"notni", 8716, "\xe2\x88\x8c"},
- {"dtrif", 9662, "\xe2\x96\xbe"},
- {"nhArr", 8654, "\xe2\x87\x8e"},
- {"larrpl", 10553, "\xe2\xa4\xb9"},
- {"simeq", 8771, "\xe2\x89\x83"},
- {"geqslant", 10878, "\xe2\xa9\xbe"},
- {"RightUpVectorBar", 10580, "\xe2\xa5\x94"},
- {"nsc", 8833, "\xe2\x8a\x81"},
- {"div", 247, "\xc3\xb7"},
- {"orslope", 10839, "\xe2\xa9\x97"},
- {"lparlt", 10643, "\xe2\xa6\x93"},
- {"trie", 8796, "\xe2\x89\x9c"},
- {"cirmid", 10991, "\xe2\xab\xaf"},
- {"wp", 8472, "\xe2\x84\x98"},
- {"dagger", 8224, "\xe2\x80\xa0"},
- {"utri", 9653, "\xe2\x96\xb5"},
- {"supnE", 10956, "\xe2\xab\x8c"},
- {"eg", 10906, "\xe2\xaa\x9a"},
- {"LeftDownVector", 8643, "\xe2\x87\x83"},
- {"NotLessEqual", 8816, "\xe2\x89\xb0"},
- {"Bopf", 120121, "\xf0\x9d\x94\xb9"},
- {"LongLeftRightArrow", 10231, "\xe2\x9f\xb7"},
- {"Gfr", 120074, "\xf0\x9d\x94\x8a"},
- {"sqsubseteq", 8849, "\xe2\x8a\x91"},
- {"ograve", 242, "\xc3\xb2"},
- {"larrhk", 8617, "\xe2\x86\xa9"},
- {"sigma", 963, "\xcf\x83"},
- {"NotSquareSupersetEqual", 8931, "\xe2\x8b\xa3"},
- {"gvnE", 8809, "\xe2\x89\xa9\xef\xb8\x80"},
- {"timesbar", 10801, "\xe2\xa8\xb1"},
- {"Iukcy", 1030, "\xd0\x86"},
- {"bscr", 119991, "\xf0\x9d\x92\xb7"},
- {"Exists", 8707, "\xe2\x88\x83"},
- {"tscr", 120009, "\xf0\x9d\x93\x89"},
- {"tcy", 1090, "\xd1\x82"},
- {"nwarr", 8598, "\xe2\x86\x96"},
- {"hoarr", 8703, "\xe2\x87\xbf"},
- {"lnapprox", 10889, "\xe2\xaa\x89"},
- {"nu", 957, "\xce\xbd"},
- {"bcy", 1073, "\xd0\xb1"},
- {"ndash", 8211, "\xe2\x80\x93"},
- {"smt", 10922, "\xe2\xaa\xaa"},
- {"scaron", 353, "\xc5\xa1"},
- {"IOcy", 1025, "\xd0\x81"},
- {"Ifr", 8465, "\xe2\x84\x91"},
- {"cularrp", 10557, "\xe2\xa4\xbd"},
- {"lvertneqq", 8808, "\xe2\x89\xa8\xef\xb8\x80"},
- {"nlarr", 8602, "\xe2\x86\x9a"},
- {"colon", 58, "\x3a"},
- {"ddotseq", 10871, "\xe2\xa9\xb7"},
- {"zacute", 378, "\xc5\xba"},
- {"DoubleVerticalBar", 8741, "\xe2\x88\xa5"},
- {"larrfs", 10525, "\xe2\xa4\x9d"},
- {"NotExists", 8708, "\xe2\x88\x84"},
- {"geq", 8805, "\xe2\x89\xa5"},
- {"Ffr", 120073, "\xf0\x9d\x94\x89"},
- {"divide", 247, "\xc3\xb7"},
- {"blank", 9251, "\xe2\x90\xa3"},
- {"IEcy", 1045, "\xd0\x95"},
- {"ordm", 186, "\xc2\xba"},
- {"fopf", 120151, "\xf0\x9d\x95\x97"},
- {"ecir", 8790, "\xe2\x89\x96"},
- {"complement", 8705, "\xe2\x88\x81"},
- {"top", 8868, "\xe2\x8a\xa4"},
- {"DoubleContourIntegral", 8751, "\xe2\x88\xaf"},
- {"nisd", 8954, "\xe2\x8b\xba"},
- {"bcong", 8780, "\xe2\x89\x8c"},
- {"plusdu", 10789, "\xe2\xa8\xa5"},
- {"TildeTilde", 8776, "\xe2\x89\x88"},
- {"lnE", 8808, "\xe2\x89\xa8"},
- {"DoubleLongRightArrow", 10233, "\xe2\x9f\xb9"},
- {"nsubseteqq", 10949, "\xe2\xab\x85\xcc\xb8"},
- {"DownTeeArrow", 8615, "\xe2\x86\xa7"},
- {"Cscr", 119966, "\xf0\x9d\x92\x9e"},
- {"NegativeVeryThinSpace", 8203, "\xe2\x80\x8b"},
- {"emsp", 8195, "\xe2\x80\x83"},
- {"vartriangleleft", 8882, "\xe2\x8a\xb2"},
- {"ropar", 10630, "\xe2\xa6\x86"},
- {"checkmark", 10003, "\xe2\x9c\x93"},
- {"Ycy", 1067, "\xd0\xab"},
- {"supset", 8835, "\xe2\x8a\x83"},
- {"gneqq", 8809, "\xe2\x89\xa9"},
- {"Lstrok", 321, "\xc5\x81"},
- {"AMP", 38, "\x26"},
- {"acE", 8766, "\xe2\x88\xbe\xcc\xb3"},
- {"sqsupseteq", 8850, "\xe2\x8a\x92"},
- {"nle", 8816, "\xe2\x89\xb0"},
- {"nesear", 10536, "\xe2\xa4\xa8"},
- {"LeftDownVectorBar", 10585, "\xe2\xa5\x99"},
- {"Integral", 8747, "\xe2\x88\xab"},
- {"Beta", 914, "\xce\x92"},
- {"nvdash", 8876, "\xe2\x8a\xac"},
- {"nges", 10878, "\xe2\xa9\xbe\xcc\xb8"},
- {"demptyv", 10673, "\xe2\xa6\xb1"},
- {"eta", 951, "\xce\xb7"},
- {"GreaterSlantEqual", 10878, "\xe2\xa9\xbe"},
- {"ccedil", 231, "\xc3\xa7"},
- {"pfr", 120109, "\xf0\x9d\x94\xad"},
- {"bbrktbrk", 9142, "\xe2\x8e\xb6"},
- {"mcy", 1084, "\xd0\xbc"},
- {"Not", 10988, "\xe2\xab\xac"},
- {"qscr", 120006, "\xf0\x9d\x93\x86"},
- {"zwj", 8205, "\xe2\x80\x8d"},
- {"ntrianglerighteq", 8941, "\xe2\x8b\xad"},
- {"permil", 8240, "\xe2\x80\xb0"},
- {"squarf", 9642, "\xe2\x96\xaa"},
- {"apos", 39, "\x27"},
- {"lrm", 8206, "\xe2\x80\x8e"},
- {"male", 9794, "\xe2\x99\x82"},
- {"agrave", 224, "\xc3\xa0"},
- {"Lt", 8810, "\xe2\x89\xaa"},
- {"capand", 10820, "\xe2\xa9\x84"},
- {"aring", 229, "\xc3\xa5"},
- {"Jukcy", 1028, "\xd0\x84"},
- {"bumpe", 8783, "\xe2\x89\x8f"},
- {"dd", 8518, "\xe2\x85\x86"},
- {"tscy", 1094, "\xd1\x86"},
- {"oS", 9416, "\xe2\x93\x88"},
- {"succeq", 10928, "\xe2\xaa\xb0"},
- {"xharr", 10231, "\xe2\x9f\xb7"},
- {"pluse", 10866, "\xe2\xa9\xb2"},
- {"rfisht", 10621, "\xe2\xa5\xbd"},
- {"HorizontalLine", 9472, "\xe2\x94\x80"},
- {"DiacriticalAcute", 180, "\xc2\xb4"},
- {"hfr", 120101, "\xf0\x9d\x94\xa5"},
- {"preceq", 10927, "\xe2\xaa\xaf"},
- {"rationals", 8474, "\xe2\x84\x9a"},
- {"Auml", 196, "\xc3\x84"},
- {"LeftRightArrow", 8596, "\xe2\x86\x94"},
- {"blacktriangleright", 9656, "\xe2\x96\xb8"},
- {"dharr", 8642, "\xe2\x87\x82"},
- {"isin", 8712, "\xe2\x88\x88"},
- {"ldrushar", 10571, "\xe2\xa5\x8b"},
- {"squ", 9633, "\xe2\x96\xa1"},
- {"rbrksld", 10638, "\xe2\xa6\x8e"},
- {"bigwedge", 8896, "\xe2\x8b\x80"},
- {"swArr", 8665, "\xe2\x87\x99"},
- {"IJlig", 306, "\xc4\xb2"},
- {"harr", 8596, "\xe2\x86\x94"},
- {"range", 10661, "\xe2\xa6\xa5"},
- {"urtri", 9721, "\xe2\x97\xb9"},
- {"NotVerticalBar", 8740, "\xe2\x88\xa4"},
- {"ic", 8291, "\xe2\x81\xa3"},
- {"solbar", 9023, "\xe2\x8c\xbf"},
- {"approx", 8776, "\xe2\x89\x88"},
- {"SquareSuperset", 8848, "\xe2\x8a\x90"},
- {"numsp", 8199, "\xe2\x80\x87"},
- {"nLt", 8810, "\xe2\x89\xaa\xe2\x83\x92"},
- {"tilde", 732, "\xcb\x9c"},
- {"rlarr", 8644, "\xe2\x87\x84"},
- {"langle", 10216, "\xe2\x9f\xa8"},
- {"nleqslant", 10877, "\xe2\xa9\xbd\xcc\xb8"},
- {"Nacute", 323, "\xc5\x83"},
- {"NotLeftTriangle", 8938, "\xe2\x8b\xaa"},
- {"sopf", 120164, "\xf0\x9d\x95\xa4"},
- {"xmap", 10236, "\xe2\x9f\xbc"},
- {"supne", 8843, "\xe2\x8a\x8b"},
- {"Int", 8748, "\xe2\x88\xac"},
- {"nsupseteqq", 10950, "\xe2\xab\x86\xcc\xb8"},
- {"circlearrowright", 8635, "\xe2\x86\xbb"},
- {"NotCongruent", 8802, "\xe2\x89\xa2"},
- {"Scedil", 350, "\xc5\x9e"},
- {"raquo", 187, "\xc2\xbb"},
- {"ycy", 1099, "\xd1\x8b"},
- {"notinvb", 8951, "\xe2\x8b\xb7"},
- {"andv", 10842, "\xe2\xa9\x9a"},
- {"nap", 8777, "\xe2\x89\x89"},
- {"shcy", 1096, "\xd1\x88"},
- {"ssetmn", 8726, "\xe2\x88\x96"},
- {"downarrow", 8595, "\xe2\x86\x93"},
- {"gesdotol", 10884, "\xe2\xaa\x84"},
- {"Congruent", 8801, "\xe2\x89\xa1"},
- {"pound", 163, "\xc2\xa3"},
- {"ZeroWidthSpace", 8203, "\xe2\x80\x8b"},
- {"rdca", 10551, "\xe2\xa4\xb7"},
- {"rmoust", 9137, "\xe2\x8e\xb1"},
- {"zcy", 1079, "\xd0\xb7"},
- {"Square", 9633, "\xe2\x96\xa1"},
- {"subE", 10949, "\xe2\xab\x85"},
- {"infintie", 10717, "\xe2\xa7\x9d"},
- {"Cayleys", 8493, "\xe2\x84\xad"},
- {"lsaquo", 8249, "\xe2\x80\xb9"},
- {"realpart", 8476, "\xe2\x84\x9c"},
- {"nprec", 8832, "\xe2\x8a\x80"},
- {"RightTriangleBar", 10704, "\xe2\xa7\x90"},
- {"Kopf", 120130, "\xf0\x9d\x95\x82"},
- {"Ubreve", 364, "\xc5\xac"},
- {"Uopf", 120140, "\xf0\x9d\x95\x8c"},
- {"trianglelefteq", 8884, "\xe2\x8a\xb4"},
- {"rotimes", 10805, "\xe2\xa8\xb5"},
- {"qfr", 120110, "\xf0\x9d\x94\xae"},
- {"gtcc", 10919, "\xe2\xaa\xa7"},
- {"fnof", 402, "\xc6\x92"},
- {"tritime", 10811, "\xe2\xa8\xbb"},
- {"andslope", 10840, "\xe2\xa9\x98"},
- {"harrw", 8621, "\xe2\x86\xad"},
- {"NotSquareSuperset", 8848, "\xe2\x8a\x90\xcc\xb8"},
- {"Amacr", 256, "\xc4\x80"},
- {"OpenCurlyDoubleQuote", 8220, "\xe2\x80\x9c"},
- {"thorn", 254, "\xc3\xbe"},
- {"ordf", 170, "\xc2\xaa"},
- {"natur", 9838, "\xe2\x99\xae"},
- {"xi", 958, "\xce\xbe"},
- {"infin", 8734, "\xe2\x88\x9e"},
- {"nspar", 8742, "\xe2\x88\xa6"},
- {"Jcy", 1049, "\xd0\x99"},
- {"DownLeftTeeVector", 10590, "\xe2\xa5\x9e"},
- {"rbarr", 10509, "\xe2\xa4\x8d"},
- {"Xi", 926, "\xce\x9e"},
- {"bull", 8226, "\xe2\x80\xa2"},
- {"cuesc", 8927, "\xe2\x8b\x9f"},
- {"backcong", 8780, "\xe2\x89\x8c"},
- {"frac35", 8535, "\xe2\x85\x97"},
- {"hscr", 119997, "\xf0\x9d\x92\xbd"},
- {"LessEqualGreater", 8922, "\xe2\x8b\x9a"},
- {"Implies", 8658, "\xe2\x87\x92"},
- {"ETH", 208, "\xc3\x90"},
- {"Yacute", 221, "\xc3\x9d"},
- {"shy", 173, "\xc2\xad"},
- {"Rarrtl", 10518, "\xe2\xa4\x96"},
- {"sup1", 185, "\xc2\xb9"},
- {"reals", 8477, "\xe2\x84\x9d"},
- {"blacklozenge", 10731, "\xe2\xa7\xab"},
- {"ncedil", 326, "\xc5\x86"},
- {"Lambda", 923, "\xce\x9b"},
- {"uopf", 120166, "\xf0\x9d\x95\xa6"},
- {"bigodot", 10752, "\xe2\xa8\x80"},
- {"ubreve", 365, "\xc5\xad"},
- {"drbkarow", 10512, "\xe2\xa4\x90"},
- {"els", 10901, "\xe2\xaa\x95"},
- {"shortparallel", 8741, "\xe2\x88\xa5"},
- {"Pcy", 1055, "\xd0\x9f"},
- {"dsol", 10742, "\xe2\xa7\xb6"},
- {"supsim", 10952, "\xe2\xab\x88"},
- {"Longrightarrow", 10233, "\xe2\x9f\xb9"},
- {"ThickSpace", 8287, "\xe2\x81\x9f\xe2\x80\x8a"},
- {"Itilde", 296, "\xc4\xa8"},
- {"nparallel", 8742, "\xe2\x88\xa6"},
- {"And", 10835, "\xe2\xa9\x93"},
- {"boxhd", 9516, "\xe2\x94\xac"},
- {"Dashv", 10980, "\xe2\xab\xa4"},
- {"NotSuperset", 8835, "\xe2\x8a\x83\xe2\x83\x92"},
- {"Eta", 919, "\xce\x97"},
- {"Qopf", 8474, "\xe2\x84\x9a"},
- {"period", 46, "\x2e"},
- {"angmsd", 8737, "\xe2\x88\xa1"},
- {"fllig", 64258, "\xef\xac\x82"},
- {"cuvee", 8910, "\xe2\x8b\x8e"},
- {"wedbar", 10847, "\xe2\xa9\x9f"},
- {"Fscr", 8497, "\xe2\x84\xb1"},
- {"veebar", 8891, "\xe2\x8a\xbb"},
- {"Longleftrightarrow", 10234, "\xe2\x9f\xba"},
- {"reg", 174, "\xc2\xae"},
- {"NegativeMediumSpace", 8203, "\xe2\x80\x8b"},
- {"Upsi", 978, "\xcf\x92"},
- {"Mellintrf", 8499, "\xe2\x84\xb3"},
- {"boxHU", 9577, "\xe2\x95\xa9"},
- {"bne", 61, "\x3d\xe2\x83\xa5"},
- {"frac56", 8538, "\xe2\x85\x9a"},
- {"utrif", 9652, "\xe2\x96\xb4"},
- {"LeftTriangle", 8882, "\xe2\x8a\xb2"},
- {"nsime", 8772, "\xe2\x89\x84"},
- {"rcedil", 343, "\xc5\x97"},
- {"aogon", 261, "\xc4\x85"},
- {"uHar", 10595, "\xe2\xa5\xa3"},
- {"ForAll", 8704, "\xe2\x88\x80"},
- {"prE", 10931, "\xe2\xaa\xb3"},
- {"boxV", 9553, "\xe2\x95\x91"},
- {"softcy", 1100, "\xd1\x8c"},
- {"hercon", 8889, "\xe2\x8a\xb9"},
- {"lmoustache", 9136, "\xe2\x8e\xb0"},
- {"Product", 8719, "\xe2\x88\x8f"},
- {"lsimg", 10895, "\xe2\xaa\x8f"},
- {"verbar", 124, "\x7c"},
- {"ofcir", 10687, "\xe2\xa6\xbf"},
- {"curlyeqprec", 8926, "\xe2\x8b\x9e"},
- {"ldquo", 8220, "\xe2\x80\x9c"},
- {"bot", 8869, "\xe2\x8a\xa5"},
- {"Psi", 936, "\xce\xa8"},
- {"OElig", 338, "\xc5\x92"},
- {"DownRightVectorBar", 10583, "\xe2\xa5\x97"},
- {"minusb", 8863, "\xe2\x8a\x9f"},
- {"Iscr", 8464, "\xe2\x84\x90"},
- {"Tcedil", 354, "\xc5\xa2"},
- {"ffilig", 64259, "\xef\xac\x83"},
- {"Gcy", 1043, "\xd0\x93"},
- {"oline", 8254, "\xe2\x80\xbe"},
- {"bottom", 8869, "\xe2\x8a\xa5"},
- {"nVDash", 8879, "\xe2\x8a\xaf"},
- {"lessdot", 8918, "\xe2\x8b\x96"},
- {"cups", 8746, "\xe2\x88\xaa\xef\xb8\x80"},
- {"gla", 10917, "\xe2\xaa\xa5"},
- {"hellip", 8230, "\xe2\x80\xa6"},
- {"hookleftarrow", 8617, "\xe2\x86\xa9"},
- {"Cup", 8915, "\xe2\x8b\x93"},
- {"upsi", 965, "\xcf\x85"},
- {"DownArrowBar", 10515, "\xe2\xa4\x93"},
- {"lowast", 8727, "\xe2\x88\x97"},
- {"profline", 8978, "\xe2\x8c\x92"},
- {"ngsim", 8821, "\xe2\x89\xb5"},
- {"boxhu", 9524, "\xe2\x94\xb4"},
- {"operp", 10681, "\xe2\xa6\xb9"},
- {"cap", 8745, "\xe2\x88\xa9"},
- {"Hcirc", 292, "\xc4\xa4"},
- {"Ncy", 1053, "\xd0\x9d"},
- {"zeetrf", 8488, "\xe2\x84\xa8"},
- {"cuepr", 8926, "\xe2\x8b\x9e"},
- {"supsetneq", 8843, "\xe2\x8a\x8b"},
- {"lfloor", 8970, "\xe2\x8c\x8a"},
- {"ngtr", 8815, "\xe2\x89\xaf"},
- {"ccups", 10828, "\xe2\xa9\x8c"},
- {"pscr", 120005, "\xf0\x9d\x93\x85"},
- {"Cfr", 8493, "\xe2\x84\xad"},
- {"dtri", 9663, "\xe2\x96\xbf"},
- {"icirc", 238, "\xc3\xae"},
- {"leftarrow", 8592, "\xe2\x86\x90"},
- {"vdash", 8866, "\xe2\x8a\xa2"},
- {"leftrightharpoons", 8651, "\xe2\x87\x8b"},
- {"rightrightarrows", 8649, "\xe2\x87\x89"},
- {"strns", 175, "\xc2\xaf"},
- {"intlarhk", 10775, "\xe2\xa8\x97"},
- {"downharpoonright", 8642, "\xe2\x87\x82"},
- {"yacute", 253, "\xc3\xbd"},
- {"boxUr", 9561, "\xe2\x95\x99"},
- {"triangleleft", 9667, "\xe2\x97\x83"},
- {"DiacriticalDot", 729, "\xcb\x99"},
- {"thetav", 977, "\xcf\x91"},
- {"OverBracket", 9140, "\xe2\x8e\xb4"},
- {"PrecedesTilde", 8830, "\xe2\x89\xbe"},
- {"rtrie", 8885, "\xe2\x8a\xb5"},
- {"Scirc", 348, "\xc5\x9c"},
- {"vsupne", 8843, "\xe2\x8a\x8b\xef\xb8\x80"},
- {"OverBrace", 9182, "\xe2\x8f\x9e"},
- {"Yfr", 120092, "\xf0\x9d\x94\x9c"},
- {"scnE", 10934, "\xe2\xaa\xb6"},
- {"simlE", 10911, "\xe2\xaa\x9f"},
- {"Proportional", 8733, "\xe2\x88\x9d"},
- {"edot", 279, "\xc4\x97"},
- {"loang", 10220, "\xe2\x9f\xac"},
- {"gesdot", 10880, "\xe2\xaa\x80"},
- {"DownBreve", 785, "\xcc\x91"},
- {"pcy", 1087, "\xd0\xbf"},
- {"Succeeds", 8827, "\xe2\x89\xbb"},
- {"mfr", 120106, "\xf0\x9d\x94\xaa"},
- {"Leftarrow", 8656, "\xe2\x87\x90"},
- {"boxDr", 9555, "\xe2\x95\x93"},
- {"Nscr", 119977, "\xf0\x9d\x92\xa9"},
- {"diam", 8900, "\xe2\x8b\x84"},
- {"CHcy", 1063, "\xd0\xa7"},
- {"boxdr", 9484, "\xe2\x94\x8c"},
- {"rlm", 8207, "\xe2\x80\x8f"},
- {"Coproduct", 8720, "\xe2\x88\x90"},
- {"RightTeeArrow", 8614, "\xe2\x86\xa6"},
- {"tridot", 9708, "\xe2\x97\xac"},
- {"ldquor", 8222, "\xe2\x80\x9e"},
- {"sol", 47, "\x2f"},
- {"ecirc", 234, "\xc3\xaa"},
- {"DoubleLeftArrow", 8656, "\xe2\x87\x90"},
- {"Gscr", 119970, "\xf0\x9d\x92\xa2"},
- {"ap", 8776, "\xe2\x89\x88"},
- {"rbrke", 10636, "\xe2\xa6\x8c"},
- {"LeftFloor", 8970, "\xe2\x8c\x8a"},
- {"blk12", 9618, "\xe2\x96\x92"},
- {"Conint", 8751, "\xe2\x88\xaf"},
- {"triangledown", 9663, "\xe2\x96\xbf"},
- {"Icy", 1048, "\xd0\x98"},
- {"backprime", 8245, "\xe2\x80\xb5"},
- {"longleftrightarrow", 10231, "\xe2\x9f\xb7"},
- {"ntriangleleft", 8938, "\xe2\x8b\xaa"},
- {"copy", 169, "\xc2\xa9"},
- {"mapstodown", 8615, "\xe2\x86\xa7"},
- {"seArr", 8664, "\xe2\x87\x98"},
- {"ENG", 330, "\xc5\x8a"},
- {"DoubleRightArrow", 8658, "\xe2\x87\x92"},
- {"tfr", 120113, "\xf0\x9d\x94\xb1"},
- {"rharul", 10604, "\xe2\xa5\xac"},
- {"bfr", 120095, "\xf0\x9d\x94\x9f"},
- {"origof", 8886, "\xe2\x8a\xb6"},
- {"Therefore", 8756, "\xe2\x88\xb4"},
- {"glE", 10898, "\xe2\xaa\x92"},
- {"leftarrowtail", 8610, "\xe2\x86\xa2"},
- {"NotEqual", 8800, "\xe2\x89\xa0"},
- {"LeftCeiling", 8968, "\xe2\x8c\x88"},
- {"lArr", 8656, "\xe2\x87\x90"},
- {"subseteq", 8838, "\xe2\x8a\x86"},
- {"larrbfs", 10527, "\xe2\xa4\x9f"},
- {"Gammad", 988, "\xcf\x9c"},
- {"rtriltri", 10702, "\xe2\xa7\x8e"},
- {"Fcy", 1060, "\xd0\xa4"},
- {"Vopf", 120141, "\xf0\x9d\x95\x8d"},
- {"lrarr", 8646, "\xe2\x87\x86"},
- {"delta", 948, "\xce\xb4"},
- {"xodot", 10752, "\xe2\xa8\x80"},
- {"larrtl", 8610, "\xe2\x86\xa2"},
- {"gsim", 8819, "\xe2\x89\xb3"},
- {"ratail", 10522, "\xe2\xa4\x9a"},
- {"vsubne", 8842, "\xe2\x8a\x8a\xef\xb8\x80"},
- {"boxur", 9492, "\xe2\x94\x94"},
- {"succsim", 8831, "\xe2\x89\xbf"},
- {"triplus", 10809, "\xe2\xa8\xb9"},
- {"nless", 8814, "\xe2\x89\xae"},
- {"uharr", 8638, "\xe2\x86\xbe"},
- {"lambda", 955, "\xce\xbb"},
- {"uuml", 252, "\xc3\xbc"},
- {"horbar", 8213, "\xe2\x80\x95"},
- {"ccirc", 265, "\xc4\x89"},
- {"sqcup", 8852, "\xe2\x8a\x94"},
- {"Pscr", 119979, "\xf0\x9d\x92\xab"},
- {"supsup", 10966, "\xe2\xab\x96"},
- {"Cacute", 262, "\xc4\x86"},
- {"upsih", 978, "\xcf\x92"},
- {"precsim", 8830, "\xe2\x89\xbe"},
- {"longrightarrow", 10230, "\xe2\x9f\xb6"},
- {"circledR", 174, "\xc2\xae"},
- {"UpTeeArrow", 8613, "\xe2\x86\xa5"},
- {"bepsi", 1014, "\xcf\xb6"},
- {"oast", 8859, "\xe2\x8a\x9b"},
- {"yfr", 120118, "\xf0\x9d\x94\xb6"},
- {"rdsh", 8627, "\xe2\x86\xb3"},
- {"Ograve", 210, "\xc3\x92"},
- {"LeftVectorBar", 10578, "\xe2\xa5\x92"},
- {"NotNestedLessLess", 10913, "\xe2\xaa\xa1\xcc\xb8"},
- {"Jscr", 119973, "\xf0\x9d\x92\xa5"},
- {"psi", 968, "\xcf\x88"},
- {"orarr", 8635, "\xe2\x86\xbb"},
- {"Subset", 8912, "\xe2\x8b\x90"},
- {"curarr", 8631, "\xe2\x86\xb7"},
- {"CirclePlus", 8853, "\xe2\x8a\x95"},
- {"gtrless", 8823, "\xe2\x89\xb7"},
- {"nvle", 8804, "\xe2\x89\xa4\xe2\x83\x92"},
- {"prop", 8733, "\xe2\x88\x9d"},
- {"gEl", 10892, "\xe2\xaa\x8c"},
- {"gtlPar", 10645, "\xe2\xa6\x95"},
- {"frasl", 8260, "\xe2\x81\x84"},
- {"nearr", 8599, "\xe2\x86\x97"},
- {"NotSubsetEqual", 8840, "\xe2\x8a\x88"},
- {"planck", 8463, "\xe2\x84\x8f"},
- {"Uuml", 220, "\xc3\x9c"},
- {"spadesuit", 9824, "\xe2\x99\xa0"},
- {"sect", 167, "\xc2\xa7"},
- {"cdot", 267, "\xc4\x8b"},
- {"boxVh", 9579, "\xe2\x95\xab"},
- {"zscr", 120015, "\xf0\x9d\x93\x8f"},
- {"nsqsube", 8930, "\xe2\x8b\xa2"},
- {"grave", 96, "\x60"},
- {"angrtvb", 8894, "\xe2\x8a\xbe"},
- {"MediumSpace", 8287, "\xe2\x81\x9f"},
- {"Ntilde", 209, "\xc3\x91"},
- {"solb", 10692, "\xe2\xa7\x84"},
- {"angzarr", 9084, "\xe2\x8d\xbc"},
- {"nopf", 120159, "\xf0\x9d\x95\x9f"},
- {"rtrif", 9656, "\xe2\x96\xb8"},
- {"nrightarrow", 8603, "\xe2\x86\x9b"},
- {"Kappa", 922, "\xce\x9a"},
- {"simrarr", 10610, "\xe2\xa5\xb2"},
- {"imacr", 299, "\xc4\xab"},
- {"vrtri", 8883, "\xe2\x8a\xb3"},
- {"part", 8706, "\xe2\x88\x82"},
- {"esim", 8770, "\xe2\x89\x82"},
- {"atilde", 227, "\xc3\xa3"},
- {"DownRightTeeVector", 10591, "\xe2\xa5\x9f"},
- {"jcirc", 309, "\xc4\xb5"},
- {"Ecaron", 282, "\xc4\x9a"},
- {"VerticalSeparator", 10072, "\xe2\x9d\x98"},
- {"rHar", 10596, "\xe2\xa5\xa4"},
- {"rcaron", 345, "\xc5\x99"},
- {"subnE", 10955, "\xe2\xab\x8b"},
- {"ii", 8520, "\xe2\x85\x88"},
- {"Cconint", 8752, "\xe2\x88\xb0"},
- {"Mcy", 1052, "\xd0\x9c"},
- {"eqcolon", 8789, "\xe2\x89\x95"},
- {"cupor", 10821, "\xe2\xa9\x85"},
- {"DoubleUpArrow", 8657, "\xe2\x87\x91"},
- {"boxbox", 10697, "\xe2\xa7\x89"},
- {"setminus", 8726, "\xe2\x88\x96"},
- {"Lleftarrow", 8666, "\xe2\x87\x9a"},
- {"nang", 8736, "\xe2\x88\xa0\xe2\x83\x92"},
- {"TRADE", 8482, "\xe2\x84\xa2"},
- {"urcorner", 8989, "\xe2\x8c\x9d"},
- {"lsqb", 91, "\x5b"},
- {"cupcup", 10826, "\xe2\xa9\x8a"},
- {"kjcy", 1116, "\xd1\x9c"},
- {"llhard", 10603, "\xe2\xa5\xab"},
- {"mumap", 8888, "\xe2\x8a\xb8"},
- {"iiint", 8749, "\xe2\x88\xad"},
- {"RightTee", 8866, "\xe2\x8a\xa2"},
- {"Tcaron", 356, "\xc5\xa4"},
- {"bigcirc", 9711, "\xe2\x97\xaf"},
- {"trianglerighteq", 8885, "\xe2\x8a\xb5"},
- {"NotLessGreater", 8824, "\xe2\x89\xb8"},
- {"hArr", 8660, "\xe2\x87\x94"},
- {"ocy", 1086, "\xd0\xbe"},
- {"tosa", 10537, "\xe2\xa4\xa9"},
- {"twixt", 8812, "\xe2\x89\xac"},
- {"square", 9633, "\xe2\x96\xa1"},
- {"Otimes", 10807, "\xe2\xa8\xb7"},
- {"Kcedil", 310, "\xc4\xb6"},
- {"beth", 8502, "\xe2\x84\xb6"},
- {"triminus", 10810, "\xe2\xa8\xba"},
- {"nlArr", 8653, "\xe2\x87\x8d"},
- {"Oacute", 211, "\xc3\x93"},
- {"zwnj", 8204, "\xe2\x80\x8c"},
- {"ll", 8810, "\xe2\x89\xaa"},
- {"smashp", 10803, "\xe2\xa8\xb3"},
- {"ngeqq", 8807, "\xe2\x89\xa7\xcc\xb8"},
- {"rnmid", 10990, "\xe2\xab\xae"},
- {"nwArr", 8662, "\xe2\x87\x96"},
- {"RightUpDownVector", 10575, "\xe2\xa5\x8f"},
- {"lbbrk", 10098, "\xe2\x9d\xb2"},
- {"compfn", 8728, "\xe2\x88\x98"},
- {"eDDot", 10871, "\xe2\xa9\xb7"},
- {"Jsercy", 1032, "\xd0\x88"},
- {"HARDcy", 1066, "\xd0\xaa"},
- {"nexists", 8708, "\xe2\x88\x84"},
- {"theta", 952, "\xce\xb8"},
- {"plankv", 8463, "\xe2\x84\x8f"},
- {"sup2", 178, "\xc2\xb2"},
- {"lessapprox", 10885, "\xe2\xaa\x85"},
- {"gdot", 289, "\xc4\xa1"},
- {"angmsdae", 10668, "\xe2\xa6\xac"},
- {"Superset", 8835, "\xe2\x8a\x83"},
- {"prap", 10935, "\xe2\xaa\xb7"},
- {"Zscr", 119989, "\xf0\x9d\x92\xb5"},
- {"nsucc", 8833, "\xe2\x8a\x81"},
- {"supseteqq", 10950, "\xe2\xab\x86"},
- {"UpTee", 8869, "\xe2\x8a\xa5"},
- {"LowerLeftArrow", 8601, "\xe2\x86\x99"},
- {"ssmile", 8995, "\xe2\x8c\xa3"},
- {"niv", 8715, "\xe2\x88\x8b"},
- {"bigvee", 8897, "\xe2\x8b\x81"},
- {"kscr", 120000, "\xf0\x9d\x93\x80"},
- {"xutri", 9651, "\xe2\x96\xb3"},
- {"caret", 8257, "\xe2\x81\x81"},
- {"caron", 711, "\xcb\x87"},
- {"Wedge", 8896, "\xe2\x8b\x80"},
- {"sdotb", 8865, "\xe2\x8a\xa1"},
- {"bigoplus", 10753, "\xe2\xa8\x81"},
- {"Breve", 728, "\xcb\x98"},
- {"ImaginaryI", 8520, "\xe2\x85\x88"},
- {"longmapsto", 10236, "\xe2\x9f\xbc"},
- {"boxVH", 9580, "\xe2\x95\xac"},
- {"lozenge", 9674, "\xe2\x97\x8a"},
- {"toea", 10536, "\xe2\xa4\xa8"},
- {"nbumpe", 8783, "\xe2\x89\x8f\xcc\xb8"},
- {"gcirc", 285, "\xc4\x9d"},
- {"NotHumpEqual", 8783, "\xe2\x89\x8f\xcc\xb8"},
- {"pre", 10927, "\xe2\xaa\xaf"},
- {"ascr", 119990, "\xf0\x9d\x92\xb6"},
- {"Acirc", 194, "\xc3\x82"},
- {"questeq", 8799, "\xe2\x89\x9f"},
- {"ncaron", 328, "\xc5\x88"},
- {"LeftTeeArrow", 8612, "\xe2\x86\xa4"},
- {"xcirc", 9711, "\xe2\x97\xaf"},
- {"swarr", 8601, "\xe2\x86\x99"},
- {"MinusPlus", 8723, "\xe2\x88\x93"},
- {"plus", 43, "\x2b"},
- {"NotDoubleVerticalBar", 8742, "\xe2\x88\xa6"},
- {"rppolint", 10770, "\xe2\xa8\x92"},
- {"NotTildeFullEqual", 8775, "\xe2\x89\x87"},
- {"ltdot", 8918, "\xe2\x8b\x96"},
- {"NotNestedGreaterGreater", 10914, "\xe2\xaa\xa2\xcc\xb8"},
- {"Lscr", 8466, "\xe2\x84\x92"},
- {"pitchfork", 8916, "\xe2\x8b\x94"},
- {"Eopf", 120124, "\xf0\x9d\x94\xbc"},
- {"ropf", 120163, "\xf0\x9d\x95\xa3"},
- {"Delta", 916, "\xce\x94"},
- {"lozf", 10731, "\xe2\xa7\xab"},
- {"RightTeeVector", 10587, "\xe2\xa5\x9b"},
- {"UpDownArrow", 8597, "\xe2\x86\x95"},
- {"bump", 8782, "\xe2\x89\x8e"},
- {"Rscr", 8475, "\xe2\x84\x9b"},
- {"slarr", 8592, "\xe2\x86\x90"},
- {"lcy", 1083, "\xd0\xbb"},
- {"Vee", 8897, "\xe2\x8b\x81"},
- {"Iogon", 302, "\xc4\xae"},
- {"minus", 8722, "\xe2\x88\x92"},
- {"GreaterFullEqual", 8807, "\xe2\x89\xa7"},
- {"xhArr", 10234, "\xe2\x9f\xba"},
- {"shortmid", 8739, "\xe2\x88\xa3"},
- {"DoubleDownArrow", 8659, "\xe2\x87\x93"},
- {"Wscr", 119986, "\xf0\x9d\x92\xb2"},
- {"rang", 10217, "\xe2\x9f\xa9"},
- {"lcub", 123, "\x7b"},
- {"mnplus", 8723, "\xe2\x88\x93"},
- {"ulcrop", 8975, "\xe2\x8c\x8f"},
- {"wfr", 120116, "\xf0\x9d\x94\xb4"},
- {"DifferentialD", 8518, "\xe2\x85\x86"},
- {"ThinSpace", 8201, "\xe2\x80\x89"},
- {"NotGreaterGreater", 8811, "\xe2\x89\xab\xcc\xb8"},
- {"Topf", 120139, "\xf0\x9d\x95\x8b"},
- {"sbquo", 8218, "\xe2\x80\x9a"},
- {"sdot", 8901, "\xe2\x8b\x85"},
- {"DoubleLeftTee", 10980, "\xe2\xab\xa4"},
- {"vBarv", 10985, "\xe2\xab\xa9"},
- {"subne", 8842, "\xe2\x8a\x8a"},
- {"gtrdot", 8919, "\xe2\x8b\x97"},
- {"opar", 10679, "\xe2\xa6\xb7"},
- {"apid", 8779, "\xe2\x89\x8b"},
- {"Cross", 10799, "\xe2\xa8\xaf"},
- {"lhblk", 9604, "\xe2\x96\x84"},
- {"capcap", 10827, "\xe2\xa9\x8b"},
- {"midast", 42, "\x2a"},
- {"lscr", 120001, "\xf0\x9d\x93\x81"},
- {"nGt", 8811, "\xe2\x89\xab\xe2\x83\x92"},
- {"Euml", 203, "\xc3\x8b"},
- {"blacktriangledown", 9662, "\xe2\x96\xbe"},
- {"Rcy", 1056, "\xd0\xa0"},
- {"dfisht", 10623, "\xe2\xa5\xbf"},
- {"dashv", 8867, "\xe2\x8a\xa3"},
- {"ast", 42, "\x2a"},
- {"ContourIntegral", 8750, "\xe2\x88\xae"},
- {"Ofr", 120082, "\xf0\x9d\x94\x92"},
- {"Lcy", 1051, "\xd0\x9b"},
- {"nltrie", 8940, "\xe2\x8b\xac"},
- {"ShortUpArrow", 8593, "\xe2\x86\x91"},
- {"acy", 1072, "\xd0\xb0"},
- {"rightarrow", 8594, "\xe2\x86\x92"},
- {"UnderBar", 95, "\x5f"},
- {"LongLeftArrow", 10229, "\xe2\x9f\xb5"},
- {"andd", 10844, "\xe2\xa9\x9c"},
- {"xlarr", 10229, "\xe2\x9f\xb5"},
- {"percnt", 37, "\x25"},
- {"rharu", 8640, "\xe2\x87\x80"},
- {"plusdo", 8724, "\xe2\x88\x94"},
- {"TScy", 1062, "\xd0\xa6"},
- {"kcy", 1082, "\xd0\xba"},
- {"boxVR", 9568, "\xe2\x95\xa0"},
- {"looparrowleft", 8619, "\xe2\x86\xab"},
- {"scirc", 349, "\xc5\x9d"},
- {"drcorn", 8991, "\xe2\x8c\x9f"},
- {"iiota", 8489, "\xe2\x84\xa9"},
- {"Zcy", 1047, "\xd0\x97"},
- {"frac58", 8541, "\xe2\x85\x9d"},
- {"alpha", 945, "\xce\xb1"},
- {"daleth", 8504, "\xe2\x84\xb8"},
- {"gtreqless", 8923, "\xe2\x8b\x9b"},
- {"tstrok", 359, "\xc5\xa7"},
- {"plusb", 8862, "\xe2\x8a\x9e"},
- {"odsold", 10684, "\xe2\xa6\xbc"},
- {"varsupsetneqq", 10956, "\xe2\xab\x8c\xef\xb8\x80"},
- {"otilde", 245, "\xc3\xb5"},
- {"gtcir", 10874, "\xe2\xa9\xba"},
- {"lltri", 9722, "\xe2\x97\xba"},
- {"rx", 8478, "\xe2\x84\x9e"},
- {"ljcy", 1113, "\xd1\x99"},
- {"parsim", 10995, "\xe2\xab\xb3"},
- {"NotElement", 8713, "\xe2\x88\x89"},
- {"plusmn", 177, "\xc2\xb1"},
- {"varsubsetneq", 8842, "\xe2\x8a\x8a\xef\xb8\x80"},
- {"subset", 8834, "\xe2\x8a\x82"},
- {"awint", 10769, "\xe2\xa8\x91"},
- {"laemptyv", 10676, "\xe2\xa6\xb4"},
- {"phiv", 981, "\xcf\x95"},
- {"sfrown", 8994, "\xe2\x8c\xa2"},
- {"DoubleUpDownArrow", 8661, "\xe2\x87\x95"},
- {"lpar", 40, "\x28"},
- {"frac45", 8536, "\xe2\x85\x98"},
- {"rBarr", 10511, "\xe2\xa4\x8f"},
- {"npolint", 10772, "\xe2\xa8\x94"},
- {"emacr", 275, "\xc4\x93"},
- {"maltese", 10016, "\xe2\x9c\xa0"},
- {"PlusMinus", 177, "\xc2\xb1"},
- {"ReverseEquilibrium", 8651, "\xe2\x87\x8b"},
- {"oscr", 8500, "\xe2\x84\xb4"},
- {"blacksquare", 9642, "\xe2\x96\xaa"},
- {"TSHcy", 1035, "\xd0\x8b"},
- {"gap", 10886, "\xe2\xaa\x86"},
- {"xnis", 8955, "\xe2\x8b\xbb"},
- {"Ll", 8920, "\xe2\x8b\x98"},
- {"PrecedesEqual", 10927, "\xe2\xaa\xaf"},
- {"incare", 8453, "\xe2\x84\x85"},
- {"nharr", 8622, "\xe2\x86\xae"},
- {"varnothing", 8709, "\xe2\x88\x85"},
- {"ShortDownArrow", 8595, "\xe2\x86\x93"},
- {"nbsp", 160, " "},
- {"asympeq", 8781, "\xe2\x89\x8d"},
- {"rbrkslu", 10640, "\xe2\xa6\x90"},
- {"rho", 961, "\xcf\x81"},
- {"Mscr", 8499, "\xe2\x84\xb3"},
- {"eth", 240, "\xc3\xb0"},
- {"suplarr", 10619, "\xe2\xa5\xbb"},
- {"Tab", 9, "\x09"},
- {"omicron", 959, "\xce\xbf"},
- {"blacktriangle", 9652, "\xe2\x96\xb4"},
- {"nldr", 8229, "\xe2\x80\xa5"},
- {"downharpoonleft", 8643, "\xe2\x87\x83"},
- {"circledcirc", 8858, "\xe2\x8a\x9a"},
- {"leftleftarrows", 8647, "\xe2\x87\x87"},
- {"NotHumpDownHump", 8782, "\xe2\x89\x8e\xcc\xb8"},
- {"nvgt", 62, "\x3e\xe2\x83\x92"},
- {"rhard", 8641, "\xe2\x87\x81"},
- {"nGg", 8921, "\xe2\x8b\x99\xcc\xb8"},
- {"lurdshar", 10570, "\xe2\xa5\x8a"},
- {"cirE", 10691, "\xe2\xa7\x83"},
- {"isinE", 8953, "\xe2\x8b\xb9"},
- {"eparsl", 10723, "\xe2\xa7\xa3"},
- {"RightAngleBracket", 10217, "\xe2\x9f\xa9"},
- {"hcirc", 293, "\xc4\xa5"},
- {"bumpeq", 8783, "\xe2\x89\x8f"},
- {"cire", 8791, "\xe2\x89\x97"},
- {"dotplus", 8724, "\xe2\x88\x94"},
- {"itilde", 297, "\xc4\xa9"},
- {"uwangle", 10663, "\xe2\xa6\xa7"},
- {"rlhar", 8652, "\xe2\x87\x8c"},
- {"rbrace", 125, "\x7d"},
- {"mid", 8739, "\xe2\x88\xa3"},
- {"el", 10905, "\xe2\xaa\x99"},
- {"KJcy", 1036, "\xd0\x8c"},
- {"odiv", 10808, "\xe2\xa8\xb8"},
- {"amacr", 257, "\xc4\x81"},
- {"qprime", 8279, "\xe2\x81\x97"},
- {"tcedil", 355, "\xc5\xa3"},
- {"UpArrowDownArrow", 8645, "\xe2\x87\x85"},
- {"spades", 9824, "\xe2\x99\xa0"},
- {"napos", 329, "\xc5\x89"},
- {"straightepsilon", 1013, "\xcf\xb5"},
- {"CupCap", 8781, "\xe2\x89\x8d"},
- {"Oopf", 120134, "\xf0\x9d\x95\x86"},
- {"sub", 8834, "\xe2\x8a\x82"},
- {"ohm", 937, "\xce\xa9"},
- {"UnderBrace", 9183, "\xe2\x8f\x9f"},
- {"looparrowright", 8620, "\xe2\x86\xac"},
- {"xotime", 10754, "\xe2\xa8\x82"},
- {"ntgl", 8825, "\xe2\x89\xb9"},
- {"minusdu", 10794, "\xe2\xa8\xaa"},
- {"rarrb", 8677, "\xe2\x87\xa5"},
- {"nvlArr", 10498, "\xe2\xa4\x82"},
- {"triangle", 9653, "\xe2\x96\xb5"},
- {"nacute", 324, "\xc5\x84"},
- {"boxHD", 9574, "\xe2\x95\xa6"},
- {"ratio", 8758, "\xe2\x88\xb6"},
- {"larrsim", 10611, "\xe2\xa5\xb3"},
- {"LessLess", 10913, "\xe2\xaa\xa1"},
- {"yacy", 1103, "\xd1\x8f"},
- {"ctdot", 8943, "\xe2\x8b\xaf"},
- {"and", 8743, "\xe2\x88\xa7"},
- {"lrtri", 8895, "\xe2\x8a\xbf"},
- {"eDot", 8785, "\xe2\x89\x91"},
- {"sqsub", 8847, "\xe2\x8a\x8f"},
- {"real", 8476, "\xe2\x84\x9c"},
- {"Dcy", 1044, "\xd0\x94"},
- {"vartheta", 977, "\xcf\x91"},
- {"nsub", 8836, "\xe2\x8a\x84"},
- {"DownTee", 8868, "\xe2\x8a\xa4"},
- {"acute", 180, "\xc2\xb4"},
- {"GreaterLess", 8823, "\xe2\x89\xb7"},
- {"supplus", 10944, "\xe2\xab\x80"},
- {"Vbar", 10987, "\xe2\xab\xab"},
- {"divideontimes", 8903, "\xe2\x8b\x87"},
- {"lsim", 8818, "\xe2\x89\xb2"},
- {"nearhk", 10532, "\xe2\xa4\xa4"},
- {"nLtv", 8810, "\xe2\x89\xaa\xcc\xb8"},
- {"RuleDelayed", 10740, "\xe2\xa7\xb4"},
- {"smile", 8995, "\xe2\x8c\xa3"},
- {"coprod", 8720, "\xe2\x88\x90"},
- {"imof", 8887, "\xe2\x8a\xb7"},
- {"ecy", 1101, "\xd1\x8d"},
- {"RightCeiling", 8969, "\xe2\x8c\x89"},
- {"dlcorn", 8990, "\xe2\x8c\x9e"},
- {"Nu", 925, "\xce\x9d"},
- {"frac18", 8539, "\xe2\x85\x9b"},
- {"diamond", 8900, "\xe2\x8b\x84"},
- {"Icirc", 206, "\xc3\x8e"},
- {"ngeq", 8817, "\xe2\x89\xb1"},
- {"epsilon", 949, "\xce\xb5"},
- {"fork", 8916, "\xe2\x8b\x94"},
- {"xrarr", 10230, "\xe2\x9f\xb6"},
- {"racute", 341, "\xc5\x95"},
- {"ntlg", 8824, "\xe2\x89\xb8"},
- {"xvee", 8897, "\xe2\x8b\x81"},
- {"LeftArrowRightArrow", 8646, "\xe2\x87\x86"},
- {"DownLeftRightVector", 10576, "\xe2\xa5\x90"},
- {"Eacute", 201, "\xc3\x89"},
- {"gimel", 8503, "\xe2\x84\xb7"},
- {"rtimes", 8906, "\xe2\x8b\x8a"},
- {"forall", 8704, "\xe2\x88\x80"},
- {"DiacriticalDoubleAcute", 733, "\xcb\x9d"},
- {"dArr", 8659, "\xe2\x87\x93"},
- {"fallingdotseq", 8786, "\xe2\x89\x92"},
- {"Aogon", 260, "\xc4\x84"},
- {"PartialD", 8706, "\xe2\x88\x82"},
- {"mapstoup", 8613, "\xe2\x86\xa5"},
- {"die", 168, "\xc2\xa8"},
- {"ngt", 8815, "\xe2\x89\xaf"},
- {"vcy", 1074, "\xd0\xb2"},
- {"fjlig", 0, "\x66\x6a"},
- {"submult", 10945, "\xe2\xab\x81"},
- {"ubrcy", 1118, "\xd1\x9e"},
- {"ovbar", 9021, "\xe2\x8c\xbd"},
- {"bsime", 8909, "\xe2\x8b\x8d"},
- {"precnsim", 8936, "\xe2\x8b\xa8"},
- {"DiacriticalTilde", 732, "\xcb\x9c"},
- {"cwint", 8753, "\xe2\x88\xb1"},
- {"Scy", 1057, "\xd0\xa1"},
- {"NotGreaterEqual", 8817, "\xe2\x89\xb1"},
- {"boxUR", 9562, "\xe2\x95\x9a"},
- {"LessSlantEqual", 10877, "\xe2\xa9\xbd"},
- {"Barwed", 8966, "\xe2\x8c\x86"},
- {"supdot", 10942, "\xe2\xaa\xbe"},
- {"gel", 8923, "\xe2\x8b\x9b"},
- {"iscr", 119998, "\xf0\x9d\x92\xbe"},
- {"doublebarwedge", 8966, "\xe2\x8c\x86"},
- {"Idot", 304, "\xc4\xb0"},
- {"DoubleDot", 168, "\xc2\xa8"},
- {"rsquo", 8217, "\xe2\x80\x99"},
- {"subsetneqq", 10955, "\xe2\xab\x8b"},
- {"UpEquilibrium", 10606, "\xe2\xa5\xae"},
- {"copysr", 8471, "\xe2\x84\x97"},
- {"RightDoubleBracket", 10215, "\xe2\x9f\xa7"},
- {"LeftRightVector", 10574, "\xe2\xa5\x8e"},
- {"DownLeftVectorBar", 10582, "\xe2\xa5\x96"},
- {"suphsub", 10967, "\xe2\xab\x97"},
- {"cedil", 184, "\xc2\xb8"},
- {"prurel", 8880, "\xe2\x8a\xb0"},
- {"imagpart", 8465, "\xe2\x84\x91"},
- {"Hscr", 8459, "\xe2\x84\x8b"},
- {"jmath", 567, "\xc8\xb7"},
- {"nrtrie", 8941, "\xe2\x8b\xad"},
- {"nsup", 8837, "\xe2\x8a\x85"},
- {"Ubrcy", 1038, "\xd0\x8e"},
- {"succnsim", 8937, "\xe2\x8b\xa9"},
- {"nesim", 8770, "\xe2\x89\x82\xcc\xb8"},
- {"varepsilon", 1013, "\xcf\xb5"},
- {"DoubleRightTee", 8872, "\xe2\x8a\xa8"},
- {"not", 172, "\xc2\xac"},
- {"lesdot", 10879, "\xe2\xa9\xbf"},
- {"backepsilon", 1014, "\xcf\xb6"},
- {"srarr", 8594, "\xe2\x86\x92"},
- {"varsubsetneqq", 10955, "\xe2\xab\x8b\xef\xb8\x80"},
- {"sqcap", 8851, "\xe2\x8a\x93"},
- {"rightleftarrows", 8644, "\xe2\x87\x84"},
- {"diams", 9830, "\xe2\x99\xa6"},
- {"boxdR", 9554, "\xe2\x95\x92"},
- {"ngeqslant", 10878, "\xe2\xa9\xbe\xcc\xb8"},
- {"boxDR", 9556, "\xe2\x95\x94"},
- {"sext", 10038, "\xe2\x9c\xb6"},
- {"backsim", 8765, "\xe2\x88\xbd"},
- {"nfr", 120107, "\xf0\x9d\x94\xab"},
- {"CloseCurlyDoubleQuote", 8221, "\xe2\x80\x9d"},
- {"npart", 8706, "\xe2\x88\x82\xcc\xb8"},
- {"dharl", 8643, "\xe2\x87\x83"},
- {"NewLine", 10, "\x0a"},
- {"bigotimes", 10754, "\xe2\xa8\x82"},
- {"lAtail", 10523, "\xe2\xa4\x9b"},
- {"frac14", 188, "\xc2\xbc"},
- {"or", 8744, "\xe2\x88\xa8"},
- {"subedot", 10947, "\xe2\xab\x83"},
- {"nmid", 8740, "\xe2\x88\xa4"},
- {"DownArrowUpArrow", 8693, "\xe2\x87\xb5"},
- {"icy", 1080, "\xd0\xb8"},
- {"num", 35, "\x23"},
- {"Gdot", 288, "\xc4\xa0"},
- {"urcrop", 8974, "\xe2\x8c\x8e"},
- {"epsiv", 1013, "\xcf\xb5"},
- {"topcir", 10993, "\xe2\xab\xb1"},
- {"ne", 8800, "\xe2\x89\xa0"},
- {"osol", 8856, "\xe2\x8a\x98"},
- {"amp", 38, "\x26"},
- {"ncap", 10819, "\xe2\xa9\x83"},
- {"Sscr", 119982, "\xf0\x9d\x92\xae"},
- {"sung", 9834, "\xe2\x99\xaa"},
- {"ltri", 9667, "\xe2\x97\x83"},
- {"frac25", 8534, "\xe2\x85\x96"},
- {"DZcy", 1039, "\xd0\x8f"},
- {"RightUpVector", 8638, "\xe2\x86\xbe"},
- {"rsquor", 8217, "\xe2\x80\x99"},
- {"uplus", 8846, "\xe2\x8a\x8e"},
- {"triangleright", 9657, "\xe2\x96\xb9"},
- {"lAarr", 8666, "\xe2\x87\x9a"},
- {"HilbertSpace", 8459, "\xe2\x84\x8b"},
- {"there4", 8756, "\xe2\x88\xb4"},
- {"vscr", 120011, "\xf0\x9d\x93\x8b"},
- {"cirscir", 10690, "\xe2\xa7\x82"},
- {"roarr", 8702, "\xe2\x87\xbe"},
- {"hslash", 8463, "\xe2\x84\x8f"},
- {"supdsub", 10968, "\xe2\xab\x98"},
- {"simg", 10910, "\xe2\xaa\x9e"},
- {"trade", 8482, "\xe2\x84\xa2"},
- {"searrow", 8600, "\xe2\x86\x98"},
- {"DownLeftVector", 8637, "\xe2\x86\xbd"},
- {"FilledSmallSquare", 9724, "\xe2\x97\xbc"},
- {"prod", 8719, "\xe2\x88\x8f"},
- {"oror", 10838, "\xe2\xa9\x96"},
- {"udarr", 8645, "\xe2\x87\x85"},
- {"jsercy", 1112, "\xd1\x98"},
- {"tprime", 8244, "\xe2\x80\xb4"},
- {"bprime", 8245, "\xe2\x80\xb5"},
- {"malt", 10016, "\xe2\x9c\xa0"},
- {"bigcup", 8899, "\xe2\x8b\x83"},
- {"oint", 8750, "\xe2\x88\xae"},
- {"female", 9792, "\xe2\x99\x80"},
- {"omacr", 333, "\xc5\x8d"},
- {"SquareSubsetEqual", 8849, "\xe2\x8a\x91"},
- {"SucceedsEqual", 10928, "\xe2\xaa\xb0"},
- {"plusacir", 10787, "\xe2\xa8\xa3"},
- {"Gcirc", 284, "\xc4\x9c"},
- {"lesdotor", 10883, "\xe2\xaa\x83"},
- {"escr", 8495, "\xe2\x84\xaf"},
- {"THORN", 222, "\xc3\x9e"},
- {"UpArrowBar", 10514, "\xe2\xa4\x92"},
- {"nvrtrie", 8885, "\xe2\x8a\xb5\xe2\x83\x92"},
- {"varkappa", 1008, "\xcf\xb0"},
- {"NotReverseElement", 8716, "\xe2\x88\x8c"},
- {"zdot", 380, "\xc5\xbc"},
- {"ExponentialE", 8519, "\xe2\x85\x87"},
- {"lesseqgtr", 8922, "\xe2\x8b\x9a"},
- {"cscr", 119992, "\xf0\x9d\x92\xb8"},
- {"Dscr", 119967, "\xf0\x9d\x92\x9f"},
- {"lthree", 8907, "\xe2\x8b\x8b"},
- {"Ccedil", 199, "\xc3\x87"},
- {"nge", 8817, "\xe2\x89\xb1"},
- {"UpperLeftArrow", 8598, "\xe2\x86\x96"},
- {"vDash", 8872, "\xe2\x8a\xa8"},
- {"efDot", 8786, "\xe2\x89\x92"},
- {"telrec", 8981, "\xe2\x8c\x95"},
- {"vellip", 8942, "\xe2\x8b\xae"},
- {"nrArr", 8655, "\xe2\x87\x8f"},
- {"ugrave", 249, "\xc3\xb9"},
- {"uring", 367, "\xc5\xaf"},
- {"Bernoullis", 8492, "\xe2\x84\xac"},
- {"nles", 10877, "\xe2\xa9\xbd\xcc\xb8"},
- {"macr", 175, "\xc2\xaf"},
- {"boxuR", 9560, "\xe2\x95\x98"},
- {"clubsuit", 9827, "\xe2\x99\xa3"},
- {"rightarrowtail", 8611, "\xe2\x86\xa3"},
- {"epar", 8917, "\xe2\x8b\x95"},
- {"ltcc", 10918, "\xe2\xaa\xa6"},
- {"twoheadleftarrow", 8606, "\xe2\x86\x9e"},
- {"aleph", 8501, "\xe2\x84\xb5"},
- {"Colon", 8759, "\xe2\x88\xb7"},
- {"vltri", 8882, "\xe2\x8a\xb2"},
- {"quaternions", 8461, "\xe2\x84\x8d"},
- {"rfr", 120111, "\xf0\x9d\x94\xaf"},
- {"Ouml", 214, "\xc3\x96"},
- {"rsh", 8625, "\xe2\x86\xb1"},
- {"emptyv", 8709, "\xe2\x88\x85"},
- {"sqsup", 8848, "\xe2\x8a\x90"},
- {"marker", 9646, "\xe2\x96\xae"},
- {"Efr", 120072, "\xf0\x9d\x94\x88"},
- {"DotEqual", 8784, "\xe2\x89\x90"},
- {"eqsim", 8770, "\xe2\x89\x82"},
- {"NotSucceedsEqual", 10928, "\xe2\xaa\xb0\xcc\xb8"},
- {"primes", 8473, "\xe2\x84\x99"},
- {"times", 215, "\xc3\x97"},
- {"rangd", 10642, "\xe2\xa6\x92"},
- {"rightharpoonup", 8640, "\xe2\x87\x80"},
- {"lrhard", 10605, "\xe2\xa5\xad"},
- {"ape", 8778, "\xe2\x89\x8a"},
- {"varsupsetneq", 8843, "\xe2\x8a\x8b\xef\xb8\x80"},
- {"larrlp", 8619, "\xe2\x86\xab"},
- {"NotPrecedesEqual", 10927, "\xe2\xaa\xaf\xcc\xb8"},
- {"ulcorner", 8988, "\xe2\x8c\x9c"},
- {"acd", 8767, "\xe2\x88\xbf"},
- {"Hacek", 711, "\xcb\x87"},
- {"xuplus", 10756, "\xe2\xa8\x84"},
- {"therefore", 8756, "\xe2\x88\xb4"},
- {"YIcy", 1031, "\xd0\x87"},
- {"Tfr", 120087, "\xf0\x9d\x94\x97"},
- {"Jcirc", 308, "\xc4\xb4"},
- {"LessGreater", 8822, "\xe2\x89\xb6"},
- {"Uring", 366, "\xc5\xae"},
- {"Ugrave", 217, "\xc3\x99"},
- {"rarr", 8594, "\xe2\x86\x92"},
- {"wopf", 120168, "\xf0\x9d\x95\xa8"},
- {"imath", 305, "\xc4\xb1"},
- {"Yopf", 120144, "\xf0\x9d\x95\x90"},
- {"colone", 8788, "\xe2\x89\x94"},
- {"csube", 10961, "\xe2\xab\x91"},
- {"odash", 8861, "\xe2\x8a\x9d"},
- {"olarr", 8634, "\xe2\x86\xba"},
- {"angrt", 8735, "\xe2\x88\x9f"},
- {"NotLeftTriangleBar", 10703, "\xe2\xa7\x8f\xcc\xb8"},
- {"GreaterEqual", 8805, "\xe2\x89\xa5"},
- {"scnap", 10938, "\xe2\xaa\xba"},
- {"pi", 960, "\xcf\x80"},
- {"lesg", 8922, "\xe2\x8b\x9a\xef\xb8\x80"},
- {"orderof", 8500, "\xe2\x84\xb4"},
- {"uacute", 250, "\xc3\xba"},
- {"Barv", 10983, "\xe2\xab\xa7"},
- {"Theta", 920, "\xce\x98"},
- {"leftrightsquigarrow", 8621, "\xe2\x86\xad"},
- {"Atilde", 195, "\xc3\x83"},
- {"cupdot", 8845, "\xe2\x8a\x8d"},
- {"ntriangleright", 8939, "\xe2\x8b\xab"},
- {"measuredangle", 8737, "\xe2\x88\xa1"},
- {"jscr", 119999, "\xf0\x9d\x92\xbf"},
- {"inodot", 305, "\xc4\xb1"},
- {"mopf", 120158, "\xf0\x9d\x95\x9e"},
- {"hkswarow", 10534, "\xe2\xa4\xa6"},
- {"lopar", 10629, "\xe2\xa6\x85"},
- {"thksim", 8764, "\xe2\x88\xbc"},
- {"bkarow", 10509, "\xe2\xa4\x8d"},
- {"rarrfs", 10526, "\xe2\xa4\x9e"},
- {"ntrianglelefteq", 8940, "\xe2\x8b\xac"},
- {"Bscr", 8492, "\xe2\x84\xac"},
- {"topf", 120165, "\xf0\x9d\x95\xa5"},
- {"Uacute", 218, "\xc3\x9a"},
- {"lap", 10885, "\xe2\xaa\x85"},
- {"djcy", 1106, "\xd1\x92"},
- {"bopf", 120147, "\xf0\x9d\x95\x93"},
- {"empty", 8709, "\xe2\x88\x85"},
- {"LeftAngleBracket", 10216, "\xe2\x9f\xa8"},
- {"Imacr", 298, "\xc4\xaa"},
- {"ltcir", 10873, "\xe2\xa9\xb9"},
- {"trisb", 10701, "\xe2\xa7\x8d"},
- {"gjcy", 1107, "\xd1\x93"},
- {"pr", 8826, "\xe2\x89\xba"},
- {"Mu", 924, "\xce\x9c"},
- {"ogon", 731, "\xcb\x9b"},
- {"pertenk", 8241, "\xe2\x80\xb1"},
- {"plustwo", 10791, "\xe2\xa8\xa7"},
- {"Vfr", 120089, "\xf0\x9d\x94\x99"},
- {"ApplyFunction", 8289, "\xe2\x81\xa1"},
- {"Sub", 8912, "\xe2\x8b\x90"},
- {"DoubleLeftRightArrow", 8660, "\xe2\x87\x94"},
- {"Lmidot", 319, "\xc4\xbf"},
- {"nwarrow", 8598, "\xe2\x86\x96"},
- {"angrtvbd", 10653, "\xe2\xa6\x9d"},
- {"fcy", 1092, "\xd1\x84"},
- {"ltlarr", 10614, "\xe2\xa5\xb6"},
- {"CircleMinus", 8854, "\xe2\x8a\x96"},
- {"angmsdab", 10665, "\xe2\xa6\xa9"},
- {"wedgeq", 8793, "\xe2\x89\x99"},
- {"iogon", 303, "\xc4\xaf"},
- {"laquo", 171, "\xc2\xab"},
- {"NestedGreaterGreater", 8811, "\xe2\x89\xab"},
- {"UnionPlus", 8846, "\xe2\x8a\x8e"},
- {"CircleDot", 8857, "\xe2\x8a\x99"},
- {"coloneq", 8788, "\xe2\x89\x94"},
- {"csupe", 10962, "\xe2\xab\x92"},
- {"tcaron", 357, "\xc5\xa5"},
- {"GreaterTilde", 8819, "\xe2\x89\xb3"},
- {"Map", 10501, "\xe2\xa4\x85"},
- {"DoubleLongLeftArrow", 10232, "\xe2\x9f\xb8"},
- {"Uparrow", 8657, "\xe2\x87\x91"},
- {"scy", 1089, "\xd1\x81"},
- {"llarr", 8647, "\xe2\x87\x87"},
- {"rangle", 10217, "\xe2\x9f\xa9"},
- {"sstarf", 8902, "\xe2\x8b\x86"},
- {"InvisibleTimes", 8290, "\xe2\x81\xa2"},
- {"egsdot", 10904, "\xe2\xaa\x98"},
- {"target", 8982, "\xe2\x8c\x96"},
- {"lesges", 10899, "\xe2\xaa\x93"},
- {"curren", 164, "\xc2\xa4"},
- {"yopf", 120170, "\xf0\x9d\x95\xaa"},
- {"frac23", 8532, "\xe2\x85\x94"},
- {"NotSucceedsTilde", 8831, "\xe2\x89\xbf\xcc\xb8"},
- {"napprox", 8777, "\xe2\x89\x89"},
- {"odblac", 337, "\xc5\x91"},
- {"gammad", 989, "\xcf\x9d"},
- {"dscr", 119993, "\xf0\x9d\x92\xb9"},
- {"SupersetEqual", 8839, "\xe2\x8a\x87"},
- {"squf", 9642, "\xe2\x96\xaa"},
- {"Because", 8757, "\xe2\x88\xb5"},
- {"sccue", 8829, "\xe2\x89\xbd"},
- {"KHcy", 1061, "\xd0\xa5"},
- {"Wcirc", 372, "\xc5\xb4"},
- {"uparrow", 8593, "\xe2\x86\x91"},
- {"lessgtr", 8822, "\xe2\x89\xb6"},
- {"thickapprox", 8776, "\xe2\x89\x88"},
- {"lbrksld", 10639, "\xe2\xa6\x8f"},
- {"oslash", 248, "\xc3\xb8"},
- {"NotCupCap", 8813, "\xe2\x89\xad"},
- {"elinters", 9191, "\xe2\x8f\xa7"},
- {"Assign", 8788, "\xe2\x89\x94"},
- {"ClockwiseContourIntegral", 8754, "\xe2\x88\xb2"},
- {"lfisht", 10620, "\xe2\xa5\xbc"},
- {"DownArrow", 8595, "\xe2\x86\x93"},
- {"Zdot", 379, "\xc5\xbb"},
- {"xscr", 120013, "\xf0\x9d\x93\x8d"},
- {"DiacriticalGrave", 96, "\x60"},
- {"DoubleLongLeftRightArrow", 10234, "\xe2\x9f\xba"},
- {"angle", 8736, "\xe2\x88\xa0"},
- {"race", 8765, "\xe2\x88\xbd\xcc\xb1"},
- {"Ascr", 119964, "\xf0\x9d\x92\x9c"},
- {"Xscr", 119987, "\xf0\x9d\x92\xb3"},
- {"acirc", 226, "\xc3\xa2"},
- {"otimesas", 10806, "\xe2\xa8\xb6"},
- {"gscr", 8458, "\xe2\x84\x8a"},
- {"gcy", 1075, "\xd0\xb3"},
- {"angmsdag", 10670, "\xe2\xa6\xae"},
- {"tshcy", 1115, "\xd1\x9b"},
- {"Acy", 1040, "\xd0\x90"},
- {"NotGreaterLess", 8825, "\xe2\x89\xb9"},
- {"dtdot", 8945, "\xe2\x8b\xb1"},
- {"quot", 34, "\x22"},
- {"micro", 181, "\xc2\xb5"},
- {"simplus", 10788, "\xe2\xa8\xa4"},
- {"nsupseteq", 8841, "\xe2\x8a\x89"},
- {"Ufr", 120088, "\xf0\x9d\x94\x98"},
- {"Pr", 10939, "\xe2\xaa\xbb"},
- {"napid", 8779, "\xe2\x89\x8b\xcc\xb8"},
- {"rceil", 8969, "\xe2\x8c\x89"},
- {"boxtimes", 8864, "\xe2\x8a\xa0"},
- {"erarr", 10609, "\xe2\xa5\xb1"},
- {"downdownarrows", 8650, "\xe2\x87\x8a"},
- {"Kfr", 120078, "\xf0\x9d\x94\x8e"},
- {"mho", 8487, "\xe2\x84\xa7"},
- {"scpolint", 10771, "\xe2\xa8\x93"},
- {"vArr", 8661, "\xe2\x87\x95"},
- {"Ccaron", 268, "\xc4\x8c"},
- {"NotRightTriangle", 8939, "\xe2\x8b\xab"},
- {"topbot", 9014, "\xe2\x8c\xb6"},
- {"qopf", 120162, "\xf0\x9d\x95\xa2"},
- {"eogon", 281, "\xc4\x99"},
- {"luruhar", 10598, "\xe2\xa5\xa6"},
- {"gtdot", 8919, "\xe2\x8b\x97"},
- {"Egrave", 200, "\xc3\x88"},
- {"roplus", 10798, "\xe2\xa8\xae"},
- {"Intersection", 8898, "\xe2\x8b\x82"},
- {"Uarr", 8607, "\xe2\x86\x9f"},
- {"dcy", 1076, "\xd0\xb4"},
- {"boxvl", 9508, "\xe2\x94\xa4"},
- {"RightArrowBar", 8677, "\xe2\x87\xa5"},
- {"yuml", 255, "\xc3\xbf"},
- {"parallel", 8741, "\xe2\x88\xa5"},
- {"succneqq", 10934, "\xe2\xaa\xb6"},
- {"bemptyv", 10672, "\xe2\xa6\xb0"},
- {"starf", 9733, "\xe2\x98\x85"},
- {"OverBar", 8254, "\xe2\x80\xbe"},
- {"Alpha", 913, "\xce\x91"},
- {"LeftUpVectorBar", 10584, "\xe2\xa5\x98"},
- {"ufr", 120114, "\xf0\x9d\x94\xb2"},
- {"swarhk", 10534, "\xe2\xa4\xa6"},
- {"GreaterEqualLess", 8923, "\xe2\x8b\x9b"},
- {"sscr", 120008, "\xf0\x9d\x93\x88"},
- {"Pi", 928, "\xce\xa0"},
- {"boxh", 9472, "\xe2\x94\x80"},
- {"frac16", 8537, "\xe2\x85\x99"},
- {"lbrack", 91, "\x5b"},
- {"vert", 124, "\x7c"},
- {"precneqq", 10933, "\xe2\xaa\xb5"},
- {"NotGreaterSlantEqual", 10878, "\xe2\xa9\xbe\xcc\xb8"},
- {"Omega", 937, "\xce\xa9"},
- {"uarr", 8593, "\xe2\x86\x91"},
- {"boxVr", 9567, "\xe2\x95\x9f"},
- {"ruluhar", 10600, "\xe2\xa5\xa8"},
- {"ShortLeftArrow", 8592, "\xe2\x86\x90"},
- {"Qfr", 120084, "\xf0\x9d\x94\x94"},
- {"olt", 10688, "\xe2\xa7\x80"},
- {"nequiv", 8802, "\xe2\x89\xa2"},
- {"fscr", 119995, "\xf0\x9d\x92\xbb"},
- {"rarrhk", 8618, "\xe2\x86\xaa"},
- {"nsqsupe", 8931, "\xe2\x8b\xa3"},
- {"nsubseteq", 8840, "\xe2\x8a\x88"},
- {"numero", 8470, "\xe2\x84\x96"},
- {"emsp14", 8197, "\xe2\x80\x85"},
- {"gl", 8823, "\xe2\x89\xb7"},
- {"ocirc", 244, "\xc3\xb4"},
- {"weierp", 8472, "\xe2\x84\x98"},
- {"boxvL", 9569, "\xe2\x95\xa1"},
- {"RightArrowLeftArrow", 8644, "\xe2\x87\x84"},
- {"Precedes", 8826, "\xe2\x89\xba"},
- {"RightVector", 8640, "\xe2\x87\x80"},
- {"xcup", 8899, "\xe2\x8b\x83"},
- {"angmsdad", 10667, "\xe2\xa6\xab"},
- {"gtrsim", 8819, "\xe2\x89\xb3"},
- {"natural", 9838, "\xe2\x99\xae"},
- {"nVdash", 8878, "\xe2\x8a\xae"},
- {"RightTriangleEqual", 8885, "\xe2\x8a\xb5"},
- {"dscy", 1109, "\xd1\x95"},
- {"leftthreetimes", 8907, "\xe2\x8b\x8b"},
- {"prsim", 8830, "\xe2\x89\xbe"},
- {"Bcy", 1041, "\xd0\x91"},
- {"Chi", 935, "\xce\xa7"},
- {"timesb", 8864, "\xe2\x8a\xa0"},
- {"Del", 8711, "\xe2\x88\x87"},
- {"lmidot", 320, "\xc5\x80"},
- {"RightDownVector", 8642, "\xe2\x87\x82"},
- {"simdot", 10858, "\xe2\xa9\xaa"},
- {"FilledVerySmallSquare", 9642, "\xe2\x96\xaa"},
- {"NotLessSlantEqual", 10877, "\xe2\xa9\xbd\xcc\xb8"},
- {"SucceedsTilde", 8831, "\xe2\x89\xbf"},
- {"duarr", 8693, "\xe2\x87\xb5"},
- {"apE", 10864, "\xe2\xa9\xb0"},
- {"odot", 8857, "\xe2\x8a\x99"},
- {"mldr", 8230, "\xe2\x80\xa6"},
- {"Uarrocir", 10569, "\xe2\xa5\x89"},
- {"nLl", 8920, "\xe2\x8b\x98\xcc\xb8"},
- {"rarrpl", 10565, "\xe2\xa5\x85"},
- {"cir", 9675, "\xe2\x97\x8b"},
- {"blk14", 9617, "\xe2\x96\x91"},
- {"VerticalLine", 124, "\x7c"},
- {"jcy", 1081, "\xd0\xb9"},
- {"filig", 64257, "\xef\xac\x81"},
- {"LongRightArrow", 10230, "\xe2\x9f\xb6"},
- {"beta", 946, "\xce\xb2"},
- {"ccupssm", 10832, "\xe2\xa9\x90"},
- {"supsub", 10964, "\xe2\xab\x94"},
- {"spar", 8741, "\xe2\x88\xa5"},
- {"Tstrok", 358, "\xc5\xa6"},
- {"isinv", 8712, "\xe2\x88\x88"},
- {"rightsquigarrow", 8605, "\xe2\x86\x9d"},
- {"Diamond", 8900, "\xe2\x8b\x84"},
- {"curlyeqsucc", 8927, "\xe2\x8b\x9f"},
- {"ijlig", 307, "\xc4\xb3"},
- {"puncsp", 8200, "\xe2\x80\x88"},
- {"hamilt", 8459, "\xe2\x84\x8b"},
- {"mapstoleft", 8612, "\xe2\x86\xa4"},
- {"Copf", 8450, "\xe2\x84\x82"},
- {"prnsim", 8936, "\xe2\x8b\xa8"},
- {"DotDot", 8412, "\xe2\x83\x9c"},
- {"lobrk", 10214, "\xe2\x9f\xa6"},
- {"twoheadrightarrow", 8608, "\xe2\x86\xa0"},
- {"ngE", 8807, "\xe2\x89\xa7\xcc\xb8"},
- {"cylcty", 9005, "\xe2\x8c\xad"},
- {"sube", 8838, "\xe2\x8a\x86"},
- {"NotEqualTilde", 8770, "\xe2\x89\x82\xcc\xb8"},
- {"Yuml", 376, "\xc5\xb8"},
- {"comp", 8705, "\xe2\x88\x81"},
- {"dotminus", 8760, "\xe2\x88\xb8"},
- {"crarr", 8629, "\xe2\x86\xb5"},
- {"imped", 437, "\xc6\xb5"},
- {"barwedge", 8965, "\xe2\x8c\x85"},
- {"harrcir", 10568, "\xe2\xa5\x88"},
+ {"szlig", 223, "\xc3\x9f"},
+ {"prime", 8242, "\xe2\x80\xb2"},
+ {"lnsim", 8934, "\xe2\x8b\xa6"},
+ {"nvDash", 8877, "\xe2\x8a\xad"},
+ {"isinsv", 8947, "\xe2\x8b\xb3"},
+ {"notin", 8713, "\xe2\x88\x89"},
+ {"becaus", 8757, "\xe2\x88\xb5"},
+ {"Leftrightarrow", 8660, "\xe2\x87\x94"},
+ {"EmptySmallSquare", 9723, "\xe2\x97\xbb"},
+ {"SquareUnion", 8852, "\xe2\x8a\x94"},
+ {"subdot", 10941, "\xe2\xaa\xbd"},
+ {"Dstrok", 272, "\xc4\x90"},
+ {"rrarr", 8649, "\xe2\x87\x89"},
+ {"rArr", 8658, "\xe2\x87\x92"},
+ {"Aacute", 193, "\xc3\x81"},
+ {"kappa", 954, "\xce\xba"},
+ {"Iopf", 120128, "\xf0\x9d\x95\x80"},
+ {"hyphen", 8208, "\xe2\x80\x90"},
+ {"rarrbfs", 10528, "\xe2\xa4\xa0"},
+ {"supsetneqq", 10956, "\xe2\xab\x8c"},
+ {"gacute", 501, "\xc7\xb5"},
+ {"VeryThinSpace", 8202, "\xe2\x80\x8a"},
+ {"tint", 8749, "\xe2\x88\xad"},
+ {"ffr", 120099, "\xf0\x9d\x94\xa3"},
+ {"kgreen", 312, "\xc4\xb8"},
+ {"nis", 8956, "\xe2\x8b\xbc"},
+ {"NotRightTriangleBar", 10704, "\xe2\xa7\x90\xcc\xb8"},
+ {"Eogon", 280, "\xc4\x98"},
+ {"lbrke", 10635, "\xe2\xa6\x8b"},
+ {"phi", 966, "\xcf\x86"},
+ {"notnivc", 8957, "\xe2\x8b\xbd"},
+ {"utilde", 361, "\xc5\xa9"},
+ {"Fopf", 120125, "\xf0\x9d\x94\xbd"},
+ {"Vcy", 1042, "\xd0\x92"},
+ {"erDot", 8787, "\xe2\x89\x93"},
+ {"nsubE", 10949, "\xe2\xab\x85\xcc\xb8"},
+ {"egrave", 232, "\xc3\xa8"},
+ {"Lcedil", 315, "\xc4\xbb"},
+ {"lharul", 10602, "\xe2\xa5\xaa"},
+ {"middot", 183, "\xc2\xb7"},
+ {"ggg", 8921, "\xe2\x8b\x99"},
+ {"NestedLessLess", 8810, "\xe2\x89\xaa"},
+ {"tau", 964, "\xcf\x84"},
+ {"setmn", 8726, "\xe2\x88\x96"},
+ {"frac78", 8542, "\xe2\x85\x9e"},
+ {"para", 182, "\xc2\xb6"},
+ {"Rcedil", 342, "\xc5\x96"},
+ {"propto", 8733, "\xe2\x88\x9d"},
+ {"sqsubset", 8847, "\xe2\x8a\x8f"},
+ {"ensp", 8194, "\xe2\x80\x82"},
+ {"boxvH", 9578, "\xe2\x95\xaa"},
+ {"NotGreaterTilde", 8821, "\xe2\x89\xb5"},
+ {"ffllig", 64260, "\xef\xac\x84"},
+ {"kcedil", 311, "\xc4\xb7"},
+ {"omega", 969, "\xcf\x89"},
+ {"sime", 8771, "\xe2\x89\x83"},
+ {"LeftTriangleEqual", 8884, "\xe2\x8a\xb4"},
+ {"bsemi", 8271, "\xe2\x81\x8f"},
+ {"rdquor", 8221, "\xe2\x80\x9d"},
+ {"Utilde", 360, "\xc5\xa8"},
+ {"bsol", 92, "\x5c"},
+ {"risingdotseq", 8787, "\xe2\x89\x93"},
+ {"ultri", 9720, "\xe2\x97\xb8"},
+ {"rhov", 1009, "\xcf\xb1"},
+ {"TildeEqual", 8771, "\xe2\x89\x83"},
+ {"jukcy", 1108, "\xd1\x94"},
+ {"perp", 8869, "\xe2\x8a\xa5"},
+ {"capbrcup", 10825, "\xe2\xa9\x89"},
+ {"ltrie", 8884, "\xe2\x8a\xb4"},
+ {"LessTilde", 8818, "\xe2\x89\xb2"},
+ {"popf", 120161, "\xf0\x9d\x95\xa1"},
+ {"dbkarow", 10511, "\xe2\xa4\x8f"},
+ {"roang", 10221, "\xe2\x9f\xad"},
+ {"brvbar", 166, "\xc2\xa6"},
+ {"CenterDot", 183, "\xc2\xb7"},
+ {"notindot", 8949, "\xe2\x8b\xb5\xcc\xb8"},
+ {"supmult", 10946, "\xe2\xab\x82"},
+ {"multimap", 8888, "\xe2\x8a\xb8"},
+ {"frac34", 190, "\xc2\xbe"},
+ {"mapsto", 8614, "\xe2\x86\xa6"},
+ {"flat", 9837, "\xe2\x99\xad"},
+ {"updownarrow", 8597, "\xe2\x86\x95"},
+ {"gne", 10888, "\xe2\xaa\x88"},
+ {"nrarrc", 10547, "\xe2\xa4\xb3\xcc\xb8"},
+ {"suphsol", 10185, "\xe2\x9f\x89"},
+ {"nGtv", 8811, "\xe2\x89\xab\xcc\xb8"},
+ {"hopf", 120153, "\xf0\x9d\x95\x99"},
+ {"pointint", 10773, "\xe2\xa8\x95"},
+ {"glj", 10916, "\xe2\xaa\xa4"},
+ {"LeftDoubleBracket", 10214, "\xe2\x9f\xa6"},
+ {"NotSupersetEqual", 8841, "\xe2\x8a\x89"},
+ {"dot", 729, "\xcb\x99"},
+ {"tbrk", 9140, "\xe2\x8e\xb4"},
+ {"LeftUpDownVector", 10577, "\xe2\xa5\x91"},
+ {"uml", 168, "\xc2\xa8"},
+ {"bbrk", 9141, "\xe2\x8e\xb5"},
+ {"nearrow", 8599, "\xe2\x86\x97"},
+ {"backsimeq", 8909, "\xe2\x8b\x8d"},
+ {"dblac", 733, "\xcb\x9d"},
+ {"circleddash", 8861, "\xe2\x8a\x9d"},
+ {"ldsh", 8626, "\xe2\x86\xb2"},
+ {"sce", 10928, "\xe2\xaa\xb0"},
+ {"angst", 197, "\xc3\x85"},
+ {"yen", 165, "\xc2\xa5"},
+ {"nsupE", 10950, "\xe2\xab\x86\xcc\xb8"},
+ {"Uscr", 119984, "\xf0\x9d\x92\xb0"},
+ {"subplus", 10943, "\xe2\xaa\xbf"},
+ {"nleqq", 8806, "\xe2\x89\xa6\xcc\xb8"},
+ {"nprcue", 8928, "\xe2\x8b\xa0"},
+ {"Ocirc", 212, "\xc3\x94"},
+ {"disin", 8946, "\xe2\x8b\xb2"},
+ {"EqualTilde", 8770, "\xe2\x89\x82"},
+ {"YUcy", 1070, "\xd0\xae"},
+ {"Kscr", 119974, "\xf0\x9d\x92\xa6"},
+ {"lg", 8822, "\xe2\x89\xb6"},
+ {"nLeftrightarrow", 8654, "\xe2\x87\x8e"},
+ {"eplus", 10865, "\xe2\xa9\xb1"},
+ {"les", 10877, "\xe2\xa9\xbd"},
+ {"sfr", 120112, "\xf0\x9d\x94\xb0"},
+ {"HumpDownHump", 8782, "\xe2\x89\x8e"},
+ {"Fouriertrf", 8497, "\xe2\x84\xb1"},
+ {"Updownarrow", 8661, "\xe2\x87\x95"},
+ {"nrarr", 8603, "\xe2\x86\x9b"},
+ {"radic", 8730, "\xe2\x88\x9a"},
+ {"gnap", 10890, "\xe2\xaa\x8a"},
+ {"zeta", 950, "\xce\xb6"},
+ {"Qscr", 119980, "\xf0\x9d\x92\xac"},
+ {"NotRightTriangleEqual", 8941, "\xe2\x8b\xad"},
+ {"nshortmid", 8740, "\xe2\x88\xa4"},
+ {"SHCHcy", 1065, "\xd0\xa9"},
+ {"piv", 982, "\xcf\x96"},
+ {"angmsdaa", 10664, "\xe2\xa6\xa8"},
+ {"curlywedge", 8911, "\xe2\x8b\x8f"},
+ {"sqcaps", 8851, "\xe2\x8a\x93\xef\xb8\x80"},
+ {"sum", 8721, "\xe2\x88\x91"},
+ {"rarrtl", 8611, "\xe2\x86\xa3"},
+ {"gescc", 10921, "\xe2\xaa\xa9"},
+ {"sup", 8835, "\xe2\x8a\x83"},
+ {"smid", 8739, "\xe2\x88\xa3"},
+ {"cularr", 8630, "\xe2\x86\xb6"},
+ {"olcross", 10683, "\xe2\xa6\xbb"},
+ {"GT", 62, "\x3e"},
+ {"scap", 10936, "\xe2\xaa\xb8"},
+ {"capcup", 10823, "\xe2\xa9\x87"},
+ {"NotSquareSubsetEqual", 8930, "\xe2\x8b\xa2"},
+ {"uhblk", 9600, "\xe2\x96\x80"},
+ {"latail", 10521, "\xe2\xa4\x99"},
+ {"smtes", 10924, "\xe2\xaa\xac\xef\xb8\x80"},
+ {"RoundImplies", 10608, "\xe2\xa5\xb0"},
+ {"wreath", 8768, "\xe2\x89\x80"},
+ {"curlyvee", 8910, "\xe2\x8b\x8e"},
+ {"uscr", 120010, "\xf0\x9d\x93\x8a"},
+ {"nleftrightarrow", 8622, "\xe2\x86\xae"},
+ {"ucy", 1091, "\xd1\x83"},
+ {"nvge", 8805, "\xe2\x89\xa5\xe2\x83\x92"},
+ {"bnot", 8976, "\xe2\x8c\x90"},
+ {"alefsym", 8501, "\xe2\x84\xb5"},
+ {"star", 9734, "\xe2\x98\x86"},
+ {"boxHd", 9572, "\xe2\x95\xa4"},
+ {"vsubnE", 10955, "\xe2\xab\x8b\xef\xb8\x80"},
+ {"Popf", 8473, "\xe2\x84\x99"},
+ {"simgE", 10912, "\xe2\xaa\xa0"},
+ {"upsilon", 965, "\xcf\x85"},
+ {"NoBreak", 8288, "\xe2\x81\xa0"},
+ {"realine", 8475, "\xe2\x84\x9b"},
+ {"frac38", 8540, "\xe2\x85\x9c"},
+ {"YAcy", 1071, "\xd0\xaf"},
+ {"bnequiv", 8801, "\xe2\x89\xa1\xe2\x83\xa5"},
+ {"cudarrr", 10549, "\xe2\xa4\xb5"},
+ {"lsime", 10893, "\xe2\xaa\x8d"},
+ {"lowbar", 95, "\x5f"},
+ {"utdot", 8944, "\xe2\x8b\xb0"},
+ {"ReverseElement", 8715, "\xe2\x88\x8b"},
+ {"nshortparallel", 8742, "\xe2\x88\xa6"},
+ {"DJcy", 1026, "\xd0\x82"},
+ {"nsube", 8840, "\xe2\x8a\x88"},
+ {"VDash", 8875, "\xe2\x8a\xab"},
+ {"Ncaron", 327, "\xc5\x87"},
+ {"LeftUpVector", 8639, "\xe2\x86\xbf"},
+ {"Kcy", 1050, "\xd0\x9a"},
+ {"NotLeftTriangleEqual", 8940, "\xe2\x8b\xac"},
+ {"nvHarr", 10500, "\xe2\xa4\x84"},
+ {"lotimes", 10804, "\xe2\xa8\xb4"},
+ {"RightFloor", 8971, "\xe2\x8c\x8b"},
+ {"succ", 8827, "\xe2\x89\xbb"},
+ {"Ucy", 1059, "\xd0\xa3"},
+ {"darr", 8595, "\xe2\x86\x93"},
+ {"lbarr", 10508, "\xe2\xa4\x8c"},
+ {"xfr", 120117, "\xf0\x9d\x94\xb5"},
+ {"zopf", 120171, "\xf0\x9d\x95\xab"},
+ {"Phi", 934, "\xce\xa6"},
+ {"ord", 10845, "\xe2\xa9\x9d"},
+ {"iinfin", 10716, "\xe2\xa7\x9c"},
+ {"Xfr", 120091, "\xf0\x9d\x94\x9b"},
+ {"qint", 10764, "\xe2\xa8\x8c"},
+ {"Upsilon", 933, "\xce\xa5"},
+ {"NotSubset", 8834, "\xe2\x8a\x82\xe2\x83\x92"},
+ {"gfr", 120100, "\xf0\x9d\x94\xa4"},
+ {"notnivb", 8958, "\xe2\x8b\xbe"},
+ {"Afr", 120068, "\xf0\x9d\x94\x84"},
+ {"ge", 8805, "\xe2\x89\xa5"},
+ {"iexcl", 161, "\xc2\xa1"},
+ {"dfr", 120097, "\xf0\x9d\x94\xa1"},
+ {"rsaquo", 8250, "\xe2\x80\xba"},
+ {"xcap", 8898, "\xe2\x8b\x82"},
+ {"Jopf", 120129, "\xf0\x9d\x95\x81"},
+ {"Hstrok", 294, "\xc4\xa6"},
+ {"ldca", 10550, "\xe2\xa4\xb6"},
+ {"lmoust", 9136, "\xe2\x8e\xb0"},
+ {"wcirc", 373, "\xc5\xb5"},
+ {"DownRightVector", 8641, "\xe2\x87\x81"},
+ {"LessFullEqual", 8806, "\xe2\x89\xa6"},
+ {"dotsquare", 8865, "\xe2\x8a\xa1"},
+ {"zhcy", 1078, "\xd0\xb6"},
+ {"mDDot", 8762, "\xe2\x88\xba"},
+ {"Prime", 8243, "\xe2\x80\xb3"},
+ {"prec", 8826, "\xe2\x89\xba"},
+ {"swnwar", 10538, "\xe2\xa4\xaa"},
+ {"COPY", 169, "\xc2\xa9"},
+ {"cong", 8773, "\xe2\x89\x85"},
+ {"sacute", 347, "\xc5\x9b"},
+ {"Nopf", 8469, "\xe2\x84\x95"},
+ {"it", 8290, "\xe2\x81\xa2"},
+ {"SOFTcy", 1068, "\xd0\xac"},
+ {"uuarr", 8648, "\xe2\x87\x88"},
+ {"iota", 953, "\xce\xb9"},
+ {"notinE", 8953, "\xe2\x8b\xb9\xcc\xb8"},
+ {"jfr", 120103, "\xf0\x9d\x94\xa7"},
+ {"QUOT", 34, "\x22"},
+ {"vsupnE", 10956, "\xe2\xab\x8c\xef\xb8\x80"},
+ {"igrave", 236, "\xc3\xac"},
+ {"bsim", 8765, "\xe2\x88\xbd"},
+ {"npreceq", 10927, "\xe2\xaa\xaf\xcc\xb8"},
+ {"zcaron", 382, "\xc5\xbe"},
+ {"DD", 8517, "\xe2\x85\x85"},
+ {"gamma", 947, "\xce\xb3"},
+ {"homtht", 8763, "\xe2\x88\xbb"},
+ {"NonBreakingSpace", 160, "\xc2\xa0"},
+ {"Proportion", 8759, "\xe2\x88\xb7"},
+ {"nedot", 8784, "\xe2\x89\x90\xcc\xb8"},
+ {"nabla", 8711, "\xe2\x88\x87"},
+ {"ac", 8766, "\xe2\x88\xbe"},
+ {"nsupe", 8841, "\xe2\x8a\x89"},
+ {"ell", 8467, "\xe2\x84\x93"},
+ {"boxvR", 9566, "\xe2\x95\x9e"},
+ {"LowerRightArrow", 8600, "\xe2\x86\x98"},
+ {"boxHu", 9575, "\xe2\x95\xa7"},
+ {"lE", 8806, "\xe2\x89\xa6"},
+ {"dzigrarr", 10239, "\xe2\x9f\xbf"},
+ {"rfloor", 8971, "\xe2\x8c\x8b"},
+ {"gneq", 10888, "\xe2\xaa\x88"},
+ {"rightleftharpoons", 8652, "\xe2\x87\x8c"},
+ {"gtquest", 10876, "\xe2\xa9\xbc"},
+ {"searhk", 10533, "\xe2\xa4\xa5"},
+ {"gesdoto", 10882, "\xe2\xaa\x82"},
+ {"cross", 10007, "\xe2\x9c\x97"},
+ {"rdquo", 8221, "\xe2\x80\x9d"},
+ {"sqsupset", 8848, "\xe2\x8a\x90"},
+ {"divonx", 8903, "\xe2\x8b\x87"},
+ {"lat", 10923, "\xe2\xaa\xab"},
+ {"rmoustache", 9137, "\xe2\x8e\xb1"},
+ {"succapprox", 10936, "\xe2\xaa\xb8"},
+ {"nhpar", 10994, "\xe2\xab\xb2"},
+ {"sharp", 9839, "\xe2\x99\xaf"},
+ {"lrcorner", 8991, "\xe2\x8c\x9f"},
+ {"Vscr", 119985, "\xf0\x9d\x92\xb1"},
+ {"varsigma", 962, "\xcf\x82"},
+ {"bsolb", 10693, "\xe2\xa7\x85"},
+ {"cupcap", 10822, "\xe2\xa9\x86"},
+ {"leftrightarrow", 8596, "\xe2\x86\x94"},
+ {"LeftTee", 8867, "\xe2\x8a\xa3"},
+ {"Sqrt", 8730, "\xe2\x88\x9a"},
+ {"Odblac", 336, "\xc5\x90"},
+ {"ocir", 8858, "\xe2\x8a\x9a"},
+ {"eqslantless", 10901, "\xe2\xaa\x95"},
+ {"supedot", 10948, "\xe2\xab\x84"},
+ {"intercal", 8890, "\xe2\x8a\xba"},
+ {"Gbreve", 286, "\xc4\x9e"},
+ {"xrArr", 10233, "\xe2\x9f\xb9"},
+ {"NotTildeEqual", 8772, "\xe2\x89\x84"},
+ {"Bfr", 120069, "\xf0\x9d\x94\x85"},
+ {"Iuml", 207, "\xc3\x8f"},
+ {"leg", 8922, "\xe2\x8b\x9a"},
+ {"boxhU", 9576, "\xe2\x95\xa8"},
+ {"Gopf", 120126, "\xf0\x9d\x94\xbe"},
+ {"af", 8289, "\xe2\x81\xa1"},
+ {"xwedge", 8896, "\xe2\x8b\x80"},
+ {"precapprox", 10935, "\xe2\xaa\xb7"},
+ {"lcedil", 316, "\xc4\xbc"},
+ {"between", 8812, "\xe2\x89\xac"},
+ {"Oslash", 216, "\xc3\x98"},
+ {"breve", 728, "\xcb\x98"},
+ {"caps", 8745, "\xe2\x88\xa9\xef\xb8\x80"},
+ {"vangrt", 10652, "\xe2\xa6\x9c"},
+ {"lagran", 8466, "\xe2\x84\x92"},
+ {"kopf", 120156, "\xf0\x9d\x95\x9c"},
+ {"ReverseUpEquilibrium", 10607, "\xe2\xa5\xaf"},
+ {"nlsim", 8820, "\xe2\x89\xb4"},
+ {"Cap", 8914, "\xe2\x8b\x92"},
+ {"angmsdac", 10666, "\xe2\xa6\xaa"},
+ {"iocy", 1105, "\xd1\x91"},
+ {"seswar", 10537, "\xe2\xa4\xa9"},
+ {"dzcy", 1119, "\xd1\x9f"},
+ {"nsubset", 8834, "\xe2\x8a\x82\xe2\x83\x92"},
+ {"cup", 8746, "\xe2\x88\xaa"},
+ {"npar", 8742, "\xe2\x88\xa6"},
+ {"late", 10925, "\xe2\xaa\xad"},
+ {"plussim", 10790, "\xe2\xa8\xa6"},
+ {"Darr", 8609, "\xe2\x86\xa1"},
+ {"nexist", 8708, "\xe2\x88\x84"},
+ {"cent", 162, "\xc2\xa2"},
+ {"khcy", 1093, "\xd1\x85"},
+ {"smallsetminus", 8726, "\xe2\x88\x96"},
+ {"ycirc", 375, "\xc5\xb7"},
+ {"lharu", 8636, "\xe2\x86\xbc"},
+ {"upuparrows", 8648, "\xe2\x87\x88"},
+ {"sigmaf", 962, "\xcf\x82"},
+ {"nltri", 8938, "\xe2\x8b\xaa"},
+ {"mstpos", 8766, "\xe2\x88\xbe"},
+ {"Zopf", 8484, "\xe2\x84\xa4"},
+ {"dwangle", 10662, "\xe2\xa6\xa6"},
+ {"bowtie", 8904, "\xe2\x8b\x88"},
+ {"Dfr", 120071, "\xf0\x9d\x94\x87"},
+ {"iacute", 237, "\xc3\xad"},
+ {"njcy", 1114, "\xd1\x9a"},
+ {"cfr", 120096, "\xf0\x9d\x94\xa0"},
+ {"TripleDot", 8411, "\xe2\x83\x9b"},
+ {"Or", 10836, "\xe2\xa9\x94"},
+ {"blk34", 9619, "\xe2\x96\x93"},
+ {"equiv", 8801, "\xe2\x89\xa1"},
+ {"fflig", 64256, "\xef\xac\x80"},
+ {"Rang", 10219, "\xe2\x9f\xab"},
+ {"Wopf", 120142, "\xf0\x9d\x95\x8e"},
+ {"boxUl", 9564, "\xe2\x95\x9c"},
+ {"frac12", 189, "\xc2\xbd"},
+ {"clubs", 9827, "\xe2\x99\xa3"},
+ {"amalg", 10815, "\xe2\xa8\xbf"},
+ {"Lang", 10218, "\xe2\x9f\xaa"},
+ {"asymp", 8776, "\xe2\x89\x88"},
+ {"models", 8871, "\xe2\x8a\xa7"},
+ {"emptyset", 8709, "\xe2\x88\x85"},
+ {"Tscr", 119983, "\xf0\x9d\x92\xaf"},
+ {"nleftarrow", 8602, "\xe2\x86\x9a"},
+ {"Omacr", 332, "\xc5\x8c"},
+ {"gtrarr", 10616, "\xe2\xa5\xb8"},
+ {"excl", 33, "\x21"},
+ {"rarrw", 8605, "\xe2\x86\x9d"},
+ {"abreve", 259, "\xc4\x83"},
+ {"CircleTimes", 8855, "\xe2\x8a\x97"},
+ {"aopf", 120146, "\xf0\x9d\x95\x92"},
+ {"eqvparsl", 10725, "\xe2\xa7\xa5"},
+ {"boxv", 9474, "\xe2\x94\x82"},
+ {"SuchThat", 8715, "\xe2\x88\x8b"},
+ {"varphi", 981, "\xcf\x95"},
+ {"Ropf", 8477, "\xe2\x84\x9d"},
+ {"rscr", 120007, "\xf0\x9d\x93\x87"},
+ {"Rrightarrow", 8667, "\xe2\x87\x9b"},
+ {"equest", 8799, "\xe2\x89\x9f"},
+ {"ntilde", 241, "\xc3\xb1"},
+ {"Escr", 8496, "\xe2\x84\xb0"},
+ {"Lopf", 120131, "\xf0\x9d\x95\x83"},
+ {"GreaterGreater", 10914, "\xe2\xaa\xa2"},
+ {"pluscir", 10786, "\xe2\xa8\xa2"},
+ {"nsupset", 8835, "\xe2\x8a\x83\xe2\x83\x92"},
+ {"uArr", 8657, "\xe2\x87\x91"},
+ {"nwarhk", 10531, "\xe2\xa4\xa3"},
+ {"Ycirc", 374, "\xc5\xb6"},
+ {"tdot", 8411, "\xe2\x83\x9b"},
+ {"circledS", 9416, "\xe2\x93\x88"},
+ {"lhard", 8637, "\xe2\x86\xbd"},
+ {"iukcy", 1110, "\xd1\x96"},
+ {"PrecedesSlantEqual", 8828, "\xe2\x89\xbc"},
+ {"Sfr", 120086, "\xf0\x9d\x94\x96"},
+ {"egs", 10902, "\xe2\xaa\x96"},
+ {"oelig", 339, "\xc5\x93"},
+ {"bigtriangledown", 9661, "\xe2\x96\xbd"},
+ {"EmptyVerySmallSquare", 9643, "\xe2\x96\xab"},
+ {"Backslash", 8726, "\xe2\x88\x96"},
+ {"nscr", 120003, "\xf0\x9d\x93\x83"},
+ {"uogon", 371, "\xc5\xb3"},
+ {"circeq", 8791, "\xe2\x89\x97"},
+ {"check", 10003, "\xe2\x9c\x93"},
+ {"Sup", 8913, "\xe2\x8b\x91"},
+ {"Rcaron", 344, "\xc5\x98"},
+ {"lneqq", 8808, "\xe2\x89\xa8"},
+ {"lrhar", 8651, "\xe2\x87\x8b"},
+ {"ulcorn", 8988, "\xe2\x8c\x9c"},
+ {"timesd", 10800, "\xe2\xa8\xb0"},
+ {"Sum", 8721, "\xe2\x88\x91"},
+ {"varpropto", 8733, "\xe2\x88\x9d"},
+ {"Lcaron", 317, "\xc4\xbd"},
+ {"lbrkslu", 10637, "\xe2\xa6\x8d"},
+ {"AElig", 198, "\xc3\x86"},
+ {"varr", 8597, "\xe2\x86\x95"},
+ {"nvinfin", 10718, "\xe2\xa7\x9e"},
+ {"leq", 8804, "\xe2\x89\xa4"},
+ {"biguplus", 10756, "\xe2\xa8\x84"},
+ {"rpar", 41, "\x29"},
+ {"eng", 331, "\xc5\x8b"},
+ {"NegativeThinSpace", 8203, "\xe2\x80\x8b"},
+ {"lesssim", 8818, "\xe2\x89\xb2"},
+ {"lBarr", 10510, "\xe2\xa4\x8e"},
+ {"LeftUpTeeVector", 10592, "\xe2\xa5\xa0"},
+ {"gnE", 8809, "\xe2\x89\xa9"},
+ {"efr", 120098, "\xf0\x9d\x94\xa2"},
+ {"barvee", 8893, "\xe2\x8a\xbd"},
+ {"ee", 8519, "\xe2\x85\x87"},
+ {"Uogon", 370, "\xc5\xb2"},
+ {"gnapprox", 10890, "\xe2\xaa\x8a"},
+ {"olcir", 10686, "\xe2\xa6\xbe"},
+ {"boxUL", 9565, "\xe2\x95\x9d"},
+ {"Gg", 8921, "\xe2\x8b\x99"},
+ {"CloseCurlyQuote", 8217, "\xe2\x80\x99"},
+ {"leftharpoondown", 8637, "\xe2\x86\xbd"},
+ {"vfr", 120115, "\xf0\x9d\x94\xb3"},
+ {"gvertneqq", 8809, "\xe2\x89\xa9\xef\xb8\x80"},
+ {"ouml", 246, "\xc3\xb6"},
+ {"raemptyv", 10675, "\xe2\xa6\xb3"},
+ {"Zcaron", 381, "\xc5\xbd"},
+ {"scE", 10932, "\xe2\xaa\xb4"},
+ {"boxvh", 9532, "\xe2\x94\xbc"},
+ {"ominus", 8854, "\xe2\x8a\x96"},
+ {"oopf", 120160, "\xf0\x9d\x95\xa0"},
+ {"nsucceq", 10928, "\xe2\xaa\xb0\xcc\xb8"},
+ {"RBarr", 10512, "\xe2\xa4\x90"},
+ {"iprod", 10812, "\xe2\xa8\xbc"},
+ {"lvnE", 8808, "\xe2\x89\xa8\xef\xb8\x80"},
+ {"andand", 10837, "\xe2\xa9\x95"},
+ {"upharpoonright", 8638, "\xe2\x86\xbe"},
+ {"ncongdot", 10861, "\xe2\xa9\xad\xcc\xb8"},
+ {"drcrop", 8972, "\xe2\x8c\x8c"},
+ {"nsimeq", 8772, "\xe2\x89\x84"},
+ {"subsub", 10965, "\xe2\xab\x95"},
+ {"hardcy", 1098, "\xd1\x8a"},
+ {"leqslant", 10877, "\xe2\xa9\xbd"},
+ {"uharl", 8639, "\xe2\x86\xbf"},
+ {"expectation", 8496, "\xe2\x84\xb0"},
+ {"mdash", 8212, "\xe2\x80\x94"},
+ {"VerticalTilde", 8768, "\xe2\x89\x80"},
+ {"rdldhar", 10601, "\xe2\xa5\xa9"},
+ {"leftharpoonup", 8636, "\xe2\x86\xbc"},
+ {"mu", 956, "\xce\xbc"},
+ {"curarrm", 10556, "\xe2\xa4\xbc"},
+ {"Cdot", 266, "\xc4\x8a"},
+ {"NotTildeTilde", 8777, "\xe2\x89\x89"},
+ {"boxul", 9496, "\xe2\x94\x98"},
+ {"planckh", 8462, "\xe2\x84\x8e"},
+ {"CapitalDifferentialD", 8517, "\xe2\x85\x85"},
+ {"boxDL", 9559, "\xe2\x95\x97"},
+ {"cupbrcap", 10824, "\xe2\xa9\x88"},
+ {"boxdL", 9557, "\xe2\x95\x95"},
+ {"supe", 8839, "\xe2\x8a\x87"},
+ {"nvlt", 60, "\x3c\xe2\x83\x92"},
+ {"par", 8741, "\xe2\x88\xa5"},
+ {"InvisibleComma", 8291, "\xe2\x81\xa3"},
+ {"ring", 730, "\xcb\x9a"},
+ {"nvap", 8781, "\xe2\x89\x8d\xe2\x83\x92"},
+ {"veeeq", 8794, "\xe2\x89\x9a"},
+ {"Hfr", 8460, "\xe2\x84\x8c"},
+ {"dstrok", 273, "\xc4\x91"},
+ {"gesles", 10900, "\xe2\xaa\x94"},
+ {"dash", 8208, "\xe2\x80\x90"},
+ {"SHcy", 1064, "\xd0\xa8"},
+ {"congdot", 10861, "\xe2\xa9\xad"},
+ {"imagline", 8464, "\xe2\x84\x90"},
+ {"ncy", 1085, "\xd0\xbd"},
+ {"bigstar", 9733, "\xe2\x98\x85"},
+ {"REG", 174, "\xc2\xae"},
+ {"triangleq", 8796, "\xe2\x89\x9c"},
+ {"rsqb", 93, "\x5d"},
+ {"ddarr", 8650, "\xe2\x87\x8a"},
+ {"csub", 10959, "\xe2\xab\x8f"},
+ {"quest", 63, "\x3f"},
+ {"Star", 8902, "\xe2\x8b\x86"},
+ {"LT", 60, "\x3c"},
+ {"ncong", 8775, "\xe2\x89\x87"},
+ {"prnE", 10933, "\xe2\xaa\xb5"},
+ {"bigtriangleup", 9651, "\xe2\x96\xb3"},
+ {"Tilde", 8764, "\xe2\x88\xbc"},
+ {"ltrif", 9666, "\xe2\x97\x82"},
+ {"ldrdhar", 10599, "\xe2\xa5\xa7"},
+ {"lcaron", 318, "\xc4\xbe"},
+ {"equivDD", 10872, "\xe2\xa9\xb8"},
+ {"lHar", 10594, "\xe2\xa5\xa2"},
+ {"vBar", 10984, "\xe2\xab\xa8"},
+ {"Mopf", 120132, "\xf0\x9d\x95\x84"},
+ {"LeftArrow", 8592, "\xe2\x86\x90"},
+ {"Rho", 929, "\xce\xa1"},
+ {"Ccirc", 264, "\xc4\x88"},
+ {"ifr", 120102, "\xf0\x9d\x94\xa6"},
+ {"cacute", 263, "\xc4\x87"},
+ {"centerdot", 183, "\xc2\xb7"},
+ {"dollar", 36, "\x24"},
+ {"lang", 10216, "\xe2\x9f\xa8"},
+ {"curvearrowright", 8631, "\xe2\x86\xb7"},
+ {"half", 189, "\xc2\xbd"},
+ {"Ecy", 1069, "\xd0\xad"},
+ {"rcub", 125, "\x7d"},
+ {"rcy", 1088, "\xd1\x80"},
+ {"isins", 8948, "\xe2\x8b\xb4"},
+ {"bsolhsub", 10184, "\xe2\x9f\x88"},
+ {"boxuL", 9563, "\xe2\x95\x9b"},
+ {"shchcy", 1097, "\xd1\x89"},
+ {"cwconint", 8754, "\xe2\x88\xb2"},
+ {"euro", 8364, "\xe2\x82\xac"},
+ {"lesseqqgtr", 10891, "\xe2\xaa\x8b"},
+ {"sim", 8764, "\xe2\x88\xbc"},
+ {"rarrc", 10547, "\xe2\xa4\xb3"},
+ {"boxdl", 9488, "\xe2\x94\x90"},
+ {"Epsilon", 917, "\xce\x95"},
+ {"iiiint", 10764, "\xe2\xa8\x8c"},
+ {"Rightarrow", 8658, "\xe2\x87\x92"},
+ {"conint", 8750, "\xe2\x88\xae"},
+ {"boxDl", 9558, "\xe2\x95\x96"},
+ {"kappav", 1008, "\xcf\xb0"},
+ {"profsurf", 8979, "\xe2\x8c\x93"},
+ {"auml", 228, "\xc3\xa4"},
+ {"heartsuit", 9829, "\xe2\x99\xa5"},
+ {"eacute", 233, "\xc3\xa9"},
+ {"gt", 62, "\x3e"},
+ {"Gcedil", 290, "\xc4\xa2"},
+ {"easter", 10862, "\xe2\xa9\xae"},
+ {"Tcy", 1058, "\xd0\xa2"},
+ {"swarrow", 8601, "\xe2\x86\x99"},
+ {"lopf", 120157, "\xf0\x9d\x95\x9d"},
+ {"Agrave", 192, "\xc3\x80"},
+ {"Aring", 197, "\xc3\x85"},
+ {"fpartint", 10765, "\xe2\xa8\x8d"},
+ {"xoplus", 10753, "\xe2\xa8\x81"},
+ {"LeftDownTeeVector", 10593, "\xe2\xa5\xa1"},
+ {"int", 8747, "\xe2\x88\xab"},
+ {"Zeta", 918, "\xce\x96"},
+ {"loz", 9674, "\xe2\x97\x8a"},
+ {"ncup", 10818, "\xe2\xa9\x82"},
+ {"napE", 10864, "\xe2\xa9\xb0\xcc\xb8"},
+ {"csup", 10960, "\xe2\xab\x90"},
+ {"Ncedil", 325, "\xc5\x85"},
+ {"cuwed", 8911, "\xe2\x8b\x8f"},
+ {"Dot", 168, "\xc2\xa8"},
+ {"SquareIntersection", 8851, "\xe2\x8a\x93"},
+ {"map", 8614, "\xe2\x86\xa6"},
+ {"aelig", 230, "\xc3\xa6"},
+ {"RightArrow", 8594, "\xe2\x86\x92"},
+ {"rightharpoondown", 8641, "\xe2\x87\x81"},
+ {"bNot", 10989, "\xe2\xab\xad"},
+ {"nsccue", 8929, "\xe2\x8b\xa1"},
+ {"zigrarr", 8669, "\xe2\x87\x9d"},
+ {"Sacute", 346, "\xc5\x9a"},
+ {"orv", 10843, "\xe2\xa9\x9b"},
+ {"RightVectorBar", 10579, "\xe2\xa5\x93"},
+ {"nrarrw", 8605, "\xe2\x86\x9d\xcc\xb8"},
+ {"nbump", 8782, "\xe2\x89\x8e\xcc\xb8"},
+ {"iquest", 191, "\xc2\xbf"},
+ {"wr", 8768, "\xe2\x89\x80"},
+ {"UpArrow", 8593, "\xe2\x86\x91"},
+ {"notinva", 8713, "\xe2\x88\x89"},
+ {"ddagger", 8225, "\xe2\x80\xa1"},
+ {"nLeftarrow", 8653, "\xe2\x87\x8d"},
+ {"rbbrk", 10099, "\xe2\x9d\xb3"},
+ {"RightTriangle", 8883, "\xe2\x8a\xb3"},
+ {"leqq", 8806, "\xe2\x89\xa6"},
+ {"Vert", 8214, "\xe2\x80\x96"},
+ {"gesl", 8923, "\xe2\x8b\x9b\xef\xb8\x80"},
+ {"LeftTeeVector", 10586, "\xe2\xa5\x9a"},
+ {"Union", 8899, "\xe2\x8b\x83"},
+ {"sc", 8827, "\xe2\x89\xbb"},
+ {"ofr", 120108, "\xf0\x9d\x94\xac"},
+ {"quatint", 10774, "\xe2\xa8\x96"},
+ {"apacir", 10863, "\xe2\xa9\xaf"},
+ {"profalar", 9006, "\xe2\x8c\xae"},
+ {"subsetneq", 8842, "\xe2\x8a\x8a"},
+ {"Vvdash", 8874, "\xe2\x8a\xaa"},
+ {"ohbar", 10677, "\xe2\xa6\xb5"},
+ {"Gt", 8811, "\xe2\x89\xab"},
+ {"exist", 8707, "\xe2\x88\x83"},
+ {"gtrapprox", 10886, "\xe2\xaa\x86"},
+ {"euml", 235, "\xc3\xab"},
+ {"Equilibrium", 8652, "\xe2\x87\x8c"},
+ {"aacute", 225, "\xc3\xa1"},
+ {"omid", 10678, "\xe2\xa6\xb6"},
+ {"loarr", 8701, "\xe2\x87\xbd"},
+ {"SucceedsSlantEqual", 8829, "\xe2\x89\xbd"},
+ {"angsph", 8738, "\xe2\x88\xa2"},
+ {"nsmid", 8740, "\xe2\x88\xa4"},
+ {"lsquor", 8218, "\xe2\x80\x9a"},
+ {"cemptyv", 10674, "\xe2\xa6\xb2"},
+ {"rAarr", 8667, "\xe2\x87\x9b"},
+ {"searr", 8600, "\xe2\x86\x98"},
+ {"complexes", 8450, "\xe2\x84\x82"},
+ {"UnderParenthesis", 9181, "\xe2\x8f\x9d"},
+ {"nparsl", 11005, "\xe2\xab\xbd\xe2\x83\xa5"},
+ {"Lacute", 313, "\xc4\xb9"},
+ {"deg", 176, "\xc2\xb0"},
+ {"Racute", 340, "\xc5\x94"},
+ {"Verbar", 8214, "\xe2\x80\x96"},
+ {"sqcups", 8852, "\xe2\x8a\x94\xef\xb8\x80"},
+ {"Hopf", 8461, "\xe2\x84\x8d"},
+ {"naturals", 8469, "\xe2\x84\x95"},
+ {"Cedilla", 184, "\xc2\xb8"},
+ {"exponentiale", 8519, "\xe2\x85\x87"},
+ {"vnsup", 8835, "\xe2\x8a\x83\xe2\x83\x92"},
+ {"leftrightarrows", 8646, "\xe2\x87\x86"},
+ {"Laplacetrf", 8466, "\xe2\x84\x92"},
+ {"vartriangleright", 8883, "\xe2\x8a\xb3"},
+ {"rtri", 9657, "\xe2\x96\xb9"},
+ {"gE", 8807, "\xe2\x89\xa7"},
+ {"SmallCircle", 8728, "\xe2\x88\x98"},
+ {"diamondsuit", 9830, "\xe2\x99\xa6"},
+ {"Otilde", 213, "\xc3\x95"},
+ {"lneq", 10887, "\xe2\xaa\x87"},
+ {"lesdoto", 10881, "\xe2\xaa\x81"},
+ {"ltquest", 10875, "\xe2\xa9\xbb"},
+ {"thinsp", 8201, "\xe2\x80\x89"},
+ {"barwed", 8965, "\xe2\x8c\x85"},
+ {"elsdot", 10903, "\xe2\xaa\x97"},
+ {"circ", 710, "\xcb\x86"},
+ {"ni", 8715, "\xe2\x88\x8b"},
+ {"mlcp", 10971, "\xe2\xab\x9b"},
+ {"Vdash", 8873, "\xe2\x8a\xa9"},
+ {"ShortRightArrow", 8594, "\xe2\x86\x92"},
+ {"upharpoonleft", 8639, "\xe2\x86\xbf"},
+ {"UnderBracket", 9141, "\xe2\x8e\xb5"},
+ {"rAtail", 10524, "\xe2\xa4\x9c"},
+ {"iopf", 120154, "\xf0\x9d\x95\x9a"},
+ {"longleftarrow", 10229, "\xe2\x9f\xb5"},
+ {"Zacute", 377, "\xc5\xb9"},
+ {"duhar", 10607, "\xe2\xa5\xaf"},
+ {"Mfr", 120080, "\xf0\x9d\x94\x90"},
+ {"prnap", 10937, "\xe2\xaa\xb9"},
+ {"eqcirc", 8790, "\xe2\x89\x96"},
+ {"rarrlp", 8620, "\xe2\x86\xac"},
+ {"le", 8804, "\xe2\x89\xa4"},
+ {"Oscr", 119978, "\xf0\x9d\x92\xaa"},
+ {"langd", 10641, "\xe2\xa6\x91"},
+ {"Ucirc", 219, "\xc3\x9b"},
+ {"precnapprox", 10937, "\xe2\xaa\xb9"},
+ {"succcurlyeq", 8829, "\xe2\x89\xbd"},
+ {"Tau", 932, "\xce\xa4"},
+ {"larr", 8592, "\xe2\x86\x90"},
+ {"neArr", 8663, "\xe2\x87\x97"},
+ {"subsim", 10951, "\xe2\xab\x87"},
+ {"DScy", 1029, "\xd0\x85"},
+ {"preccurlyeq", 8828, "\xe2\x89\xbc"},
+ {"NotLessLess", 8810, "\xe2\x89\xaa\xcc\xb8"},
+ {"succnapprox", 10938, "\xe2\xaa\xba"},
+ {"prcue", 8828, "\xe2\x89\xbc"},
+ {"Downarrow", 8659, "\xe2\x87\x93"},
+ {"angmsdah", 10671, "\xe2\xa6\xaf"},
+ {"Emacr", 274, "\xc4\x92"},
+ {"lsh", 8624, "\xe2\x86\xb0"},
+ {"simne", 8774, "\xe2\x89\x86"},
+ {"Bumpeq", 8782, "\xe2\x89\x8e"},
+ {"RightUpTeeVector", 10588, "\xe2\xa5\x9c"},
+ {"Sigma", 931, "\xce\xa3"},
+ {"nvltrie", 8884, "\xe2\x8a\xb4\xe2\x83\x92"},
+ {"lfr", 120105, "\xf0\x9d\x94\xa9"},
+ {"emsp13", 8196, "\xe2\x80\x84"},
+ {"parsl", 11005, "\xe2\xab\xbd"},
+ {"ucirc", 251, "\xc3\xbb"},
+ {"gsiml", 10896, "\xe2\xaa\x90"},
+ {"xsqcup", 10758, "\xe2\xa8\x86"},
+ {"Omicron", 927, "\xce\x9f"},
+ {"gsime", 10894, "\xe2\xaa\x8e"},
+ {"circlearrowleft", 8634, "\xe2\x86\xba"},
+ {"sqsupe", 8850, "\xe2\x8a\x92"},
+ {"supE", 10950, "\xe2\xab\x86"},
+ {"dlcrop", 8973, "\xe2\x8c\x8d"},
+ {"RightDownTeeVector", 10589, "\xe2\xa5\x9d"},
+ {"Colone", 10868, "\xe2\xa9\xb4"},
+ {"awconint", 8755, "\xe2\x88\xb3"},
+ {"smte", 10924, "\xe2\xaa\xac"},
+ {"lEg", 10891, "\xe2\xaa\x8b"},
+ {"circledast", 8859, "\xe2\x8a\x9b"},
+ {"ecolon", 8789, "\xe2\x89\x95"},
+ {"rect", 9645, "\xe2\x96\xad"},
+ {"Equal", 10869, "\xe2\xa9\xb5"},
+ {"nwnear", 10535, "\xe2\xa4\xa7"},
+ {"capdot", 10816, "\xe2\xa9\x80"},
+ {"straightphi", 981, "\xcf\x95"},
+ {"forkv", 10969, "\xe2\xab\x99"},
+ {"ZHcy", 1046, "\xd0\x96"},
+ {"Element", 8712, "\xe2\x88\x88"},
+ {"rthree", 8908, "\xe2\x8b\x8c"},
+ {"vzigzag", 10650, "\xe2\xa6\x9a"},
+ {"hybull", 8259, "\xe2\x81\x83"},
+ {"intprod", 10812, "\xe2\xa8\xbc"},
+ {"HumpEqual", 8783, "\xe2\x89\x8f"},
+ {"bigsqcup", 10758, "\xe2\xa8\x86"},
+ {"mp", 8723, "\xe2\x88\x93"},
+ {"lescc", 10920, "\xe2\xaa\xa8"},
+ {"NotPrecedes", 8832, "\xe2\x8a\x80"},
+ {"wedge", 8743, "\xe2\x88\xa7"},
+ {"Supset", 8913, "\xe2\x8b\x91"},
+ {"pm", 177, "\xc2\xb1"},
+ {"kfr", 120104, "\xf0\x9d\x94\xa8"},
+ {"ufisht", 10622, "\xe2\xa5\xbe"},
+ {"ecaron", 283, "\xc4\x9b"},
+ {"chcy", 1095, "\xd1\x87"},
+ {"Esim", 10867, "\xe2\xa9\xb3"},
+ {"fltns", 9649, "\xe2\x96\xb1"},
+ {"nsce", 10928, "\xe2\xaa\xb0\xcc\xb8"},
+ {"hookrightarrow", 8618, "\xe2\x86\xaa"},
+ {"semi", 59, "\x3b"},
+ {"ges", 10878, "\xe2\xa9\xbe"},
+ {"approxeq", 8778, "\xe2\x89\x8a"},
+ {"rarrsim", 10612, "\xe2\xa5\xb4"},
+ {"boxhD", 9573, "\xe2\x95\xa5"},
+ {"varpi", 982, "\xcf\x96"},
+ {"larrb", 8676, "\xe2\x87\xa4"},
+ {"copf", 120148, "\xf0\x9d\x95\x94"},
+ {"Dopf", 120123, "\xf0\x9d\x94\xbb"},
+ {"LeftVector", 8636, "\xe2\x86\xbc"},
+ {"iff", 8660, "\xe2\x87\x94"},
+ {"lnap", 10889, "\xe2\xaa\x89"},
+ {"NotGreaterFullEqual", 8807, "\xe2\x89\xa7\xcc\xb8"},
+ {"varrho", 1009, "\xcf\xb1"},
+ {"NotSucceeds", 8833, "\xe2\x8a\x81"},
+ {"ltrPar", 10646, "\xe2\xa6\x96"},
+ {"nlE", 8806, "\xe2\x89\xa6\xcc\xb8"},
+ {"Zfr", 8488, "\xe2\x84\xa8"},
+ {"LeftArrowBar", 8676, "\xe2\x87\xa4"},
+ {"boxplus", 8862, "\xe2\x8a\x9e"},
+ {"sqsube", 8849, "\xe2\x8a\x91"},
+ {"Re", 8476, "\xe2\x84\x9c"},
+ {"Wfr", 120090, "\xf0\x9d\x94\x9a"},
+ {"epsi", 949, "\xce\xb5"},
+ {"oacute", 243, "\xc3\xb3"},
+ {"bdquo", 8222, "\xe2\x80\x9e"},
+ {"wscr", 120012, "\xf0\x9d\x93\x8c"},
+ {"bullet", 8226, "\xe2\x80\xa2"},
+ {"frown", 8994, "\xe2\x8c\xa2"},
+ {"siml", 10909, "\xe2\xaa\x9d"},
+ {"Rarr", 8608, "\xe2\x86\xa0"},
+ {"Scaron", 352, "\xc5\xa0"},
+ {"gtreqqless", 10892, "\xe2\xaa\x8c"},
+ {"Larr", 8606, "\xe2\x86\x9e"},
+ {"notniva", 8716, "\xe2\x88\x8c"},
+ {"gg", 8811, "\xe2\x89\xab"},
+ {"phmmat", 8499, "\xe2\x84\xb3"},
+ {"boxVL", 9571, "\xe2\x95\xa3"},
+ {"sigmav", 962, "\xcf\x82"},
+ {"order", 8500, "\xe2\x84\xb4"},
+ {"subsup", 10963, "\xe2\xab\x93"},
+ {"afr", 120094, "\xf0\x9d\x94\x9e"},
+ {"lbrace", 123, "\x7b"},
+ {"urcorn", 8989, "\xe2\x8c\x9d"},
+ {"Im", 8465, "\xe2\x84\x91"},
+ {"CounterClockwiseContourIntegral", 8755, "\xe2\x88\xb3"},
+ {"lne", 10887, "\xe2\xaa\x87"},
+ {"chi", 967, "\xcf\x87"},
+ {"cudarrl", 10552, "\xe2\xa4\xb8"},
+ {"ang", 8736, "\xe2\x88\xa0"},
+ {"isindot", 8949, "\xe2\x8b\xb5"},
+ {"Lfr", 120079, "\xf0\x9d\x94\x8f"},
+ {"Rsh", 8625, "\xe2\x86\xb1"},
+ {"Ocy", 1054, "\xd0\x9e"},
+ {"nvrArr", 10499, "\xe2\xa4\x83"},
+ {"otimes", 8855, "\xe2\x8a\x97"},
+ {"eqslantgtr", 10902, "\xe2\xaa\x96"},
+ {"Rfr", 8476, "\xe2\x84\x9c"},
+ {"blacktriangleleft", 9666, "\xe2\x97\x82"},
+ {"Lsh", 8624, "\xe2\x86\xb0"},
+ {"boxvr", 9500, "\xe2\x94\x9c"},
+ {"scedil", 351, "\xc5\x9f"},
+ {"iuml", 239, "\xc3\xaf"},
+ {"NJcy", 1034, "\xd0\x8a"},
+ {"Dagger", 8225, "\xe2\x80\xa1"},
+ {"rarrap", 10613, "\xe2\xa5\xb5"},
+ {"udblac", 369, "\xc5\xb1"},
+ {"Sopf", 120138, "\xf0\x9d\x95\x8a"},
+ {"scnsim", 8937, "\xe2\x8b\xa9"},
+ {"hbar", 8463, "\xe2\x84\x8f"},
+ {"frac15", 8533, "\xe2\x85\x95"},
+ {"sup3", 179, "\xc2\xb3"},
+ {"NegativeThickSpace", 8203, "\xe2\x80\x8b"},
+ {"npr", 8832, "\xe2\x8a\x80"},
+ {"doteq", 8784, "\xe2\x89\x90"},
+ {"subrarr", 10617, "\xe2\xa5\xb9"},
+ {"SquareSubset", 8847, "\xe2\x8a\x8f"},
+ {"vprop", 8733, "\xe2\x88\x9d"},
+ {"OpenCurlyQuote", 8216, "\xe2\x80\x98"},
+ {"supseteq", 8839, "\xe2\x8a\x87"},
+ {"nRightarrow", 8655, "\xe2\x87\x8f"},
+ {"Longleftarrow", 10232, "\xe2\x9f\xb8"},
+ {"lsquo", 8216, "\xe2\x80\x98"},
+ {"hstrok", 295, "\xc4\xa7"},
+ {"NotTilde", 8769, "\xe2\x89\x81"},
+ {"ogt", 10689, "\xe2\xa7\x81"},
+ {"block", 9608, "\xe2\x96\x88"},
+ {"minusd", 8760, "\xe2\x88\xb8"},
+ {"esdot", 8784, "\xe2\x89\x90"},
+ {"nsim", 8769, "\xe2\x89\x81"},
+ {"scsim", 8831, "\xe2\x89\xbf"},
+ {"boxVl", 9570, "\xe2\x95\xa2"},
+ {"ltimes", 8905, "\xe2\x8b\x89"},
+ {"thkap", 8776, "\xe2\x89\x88"},
+ {"vnsub", 8834, "\xe2\x8a\x82\xe2\x83\x92"},
+ {"thetasym", 977, "\xcf\x91"},
+ {"eopf", 120150, "\xf0\x9d\x95\x96"},
+ {"image", 8465, "\xe2\x84\x91"},
+ {"doteqdot", 8785, "\xe2\x89\x91"},
+ {"Udblac", 368, "\xc5\xb0"},
+ {"gnsim", 8935, "\xe2\x8b\xa7"},
+ {"yicy", 1111, "\xd1\x97"},
+ {"vopf", 120167, "\xf0\x9d\x95\xa7"},
+ {"DDotrahd", 10513, "\xe2\xa4\x91"},
+ {"Iota", 921, "\xce\x99"},
+ {"GJcy", 1027, "\xd0\x83"},
+ {"rightthreetimes", 8908, "\xe2\x8b\x8c"},
+ {"nrtri", 8939, "\xe2\x8b\xab"},
+ {"TildeFullEqual", 8773, "\xe2\x89\x85"},
+ {"Dcaron", 270, "\xc4\x8e"},
+ {"ccaron", 269, "\xc4\x8d"},
+ {"lacute", 314, "\xc4\xba"},
+ {"VerticalBar", 8739, "\xe2\x88\xa3"},
+ {"Igrave", 204, "\xc3\x8c"},
+ {"boxH", 9552, "\xe2\x95\x90"},
+ {"Pfr", 120083, "\xf0\x9d\x94\x93"},
+ {"equals", 61, "\x3d"},
+ {"rbrack", 93, "\x5d"},
+ {"OverParenthesis", 9180, "\xe2\x8f\x9c"},
+ {"in", 8712, "\xe2\x88\x88"},
+ {"llcorner", 8990, "\xe2\x8c\x9e"},
+ {"mcomma", 10793, "\xe2\xa8\xa9"},
+ {"NotGreater", 8815, "\xe2\x89\xaf"},
+ {"midcir", 10992, "\xe2\xab\xb0"},
+ {"Edot", 278, "\xc4\x96"},
+ {"oplus", 8853, "\xe2\x8a\x95"},
+ {"geqq", 8807, "\xe2\x89\xa7"},
+ {"curvearrowleft", 8630, "\xe2\x86\xb6"},
+ {"Poincareplane", 8460, "\xe2\x84\x8c"},
+ {"yscr", 120014, "\xf0\x9d\x93\x8e"},
+ {"ccaps", 10829, "\xe2\xa9\x8d"},
+ {"rpargt", 10644, "\xe2\xa6\x94"},
+ {"topfork", 10970, "\xe2\xab\x9a"},
+ {"Gamma", 915, "\xce\x93"},
+ {"umacr", 363, "\xc5\xab"},
+ {"frac13", 8531, "\xe2\x85\x93"},
+ {"cirfnint", 10768, "\xe2\xa8\x90"},
+ {"xlArr", 10232, "\xe2\x9f\xb8"},
+ {"digamma", 989, "\xcf\x9d"},
+ {"Hat", 94, "\x5e"},
+ {"lates", 10925, "\xe2\xaa\xad\xef\xb8\x80"},
+ {"lgE", 10897, "\xe2\xaa\x91"},
+ {"commat", 64, "\x40"},
+ {"NotPrecedesSlantEqual", 8928, "\xe2\x8b\xa0"},
+ {"phone", 9742, "\xe2\x98\x8e"},
+ {"Ecirc", 202, "\xc3\x8a"},
+ {"lt", 60, "\x3c"},
+ {"intcal", 8890, "\xe2\x8a\xba"},
+ {"xdtri", 9661, "\xe2\x96\xbd"},
+ {"Abreve", 258, "\xc4\x82"},
+ {"gopf", 120152, "\xf0\x9d\x95\x98"},
+ {"Xopf", 120143, "\xf0\x9d\x95\x8f"},
+ {"Iacute", 205, "\xc3\x8d"},
+ {"Aopf", 120120, "\xf0\x9d\x94\xb8"},
+ {"gbreve", 287, "\xc4\x9f"},
+ {"nleq", 8816, "\xe2\x89\xb0"},
+ {"xopf", 120169, "\xf0\x9d\x95\xa9"},
+ {"SquareSupersetEqual", 8850, "\xe2\x8a\x92"},
+ {"NotLessTilde", 8820, "\xe2\x89\xb4"},
+ {"SubsetEqual", 8838, "\xe2\x8a\x86"},
+ {"Sc", 10940, "\xe2\xaa\xbc"},
+ {"sdote", 10854, "\xe2\xa9\xa6"},
+ {"loplus", 10797, "\xe2\xa8\xad"},
+ {"zfr", 120119, "\xf0\x9d\x94\xb7"},
+ {"subseteqq", 10949, "\xe2\xab\x85"},
+ {"Vdashl", 10982, "\xe2\xab\xa6"},
+ {"integers", 8484, "\xe2\x84\xa4"},
+ {"Umacr", 362, "\xc5\xaa"},
+ {"dopf", 120149, "\xf0\x9d\x95\x95"},
+ {"RightDownVectorBar", 10581, "\xe2\xa5\x95"},
+ {"angmsdaf", 10669, "\xe2\xa6\xad"},
+ {"Jfr", 120077, "\xf0\x9d\x94\x8d"},
+ {"bernou", 8492, "\xe2\x84\xac"},
+ {"lceil", 8968, "\xe2\x8c\x88"},
+ {"nvsim", 8764, "\xe2\x88\xbc\xe2\x83\x92"},
+ {"NotSucceedsSlantEqual", 8929, "\xe2\x8b\xa1"},
+ {"hearts", 9829, "\xe2\x99\xa5"},
+ {"vee", 8744, "\xe2\x88\xa8"},
+ {"LJcy", 1033, "\xd0\x89"},
+ {"nlt", 8814, "\xe2\x89\xae"},
+ {"because", 8757, "\xe2\x88\xb5"},
+ {"hairsp", 8202, "\xe2\x80\x8a"},
+ {"comma", 44, "\x2c"},
+ {"iecy", 1077, "\xd0\xb5"},
+ {"npre", 10927, "\xe2\xaa\xaf\xcc\xb8"},
+ {"NotSquareSubset", 8847, "\xe2\x8a\x8f\xcc\xb8"},
+ {"mscr", 120002, "\xf0\x9d\x93\x82"},
+ {"jopf", 120155, "\xf0\x9d\x95\x9b"},
+ {"bumpE", 10926, "\xe2\xaa\xae"},
+ {"thicksim", 8764, "\xe2\x88\xbc"},
+ {"Nfr", 120081, "\xf0\x9d\x94\x91"},
+ {"yucy", 1102, "\xd1\x8e"},
+ {"notinvc", 8950, "\xe2\x8b\xb6"},
+ {"lstrok", 322, "\xc5\x82"},
+ {"robrk", 10215, "\xe2\x9f\xa7"},
+ {"LeftTriangleBar", 10703, "\xe2\xa7\x8f"},
+ {"hksearow", 10533, "\xe2\xa4\xa5"},
+ {"bigcap", 8898, "\xe2\x8b\x82"},
+ {"udhar", 10606, "\xe2\xa5\xae"},
+ {"Yscr", 119988, "\xf0\x9d\x92\xb4"},
+ {"smeparsl", 10724, "\xe2\xa7\xa4"},
+ {"NotLess", 8814, "\xe2\x89\xae"},
+ {"dcaron", 271, "\xc4\x8f"},
+ {"ange", 10660, "\xe2\xa6\xa4"},
+ {"dHar", 10597, "\xe2\xa5\xa5"},
+ {"UpperRightArrow", 8599, "\xe2\x86\x97"},
+ {"trpezium", 9186, "\xe2\x8f\xa2"},
+ {"boxminus", 8863, "\xe2\x8a\x9f"},
+ {"notni", 8716, "\xe2\x88\x8c"},
+ {"dtrif", 9662, "\xe2\x96\xbe"},
+ {"nhArr", 8654, "\xe2\x87\x8e"},
+ {"larrpl", 10553, "\xe2\xa4\xb9"},
+ {"simeq", 8771, "\xe2\x89\x83"},
+ {"geqslant", 10878, "\xe2\xa9\xbe"},
+ {"RightUpVectorBar", 10580, "\xe2\xa5\x94"},
+ {"nsc", 8833, "\xe2\x8a\x81"},
+ {"div", 247, "\xc3\xb7"},
+ {"orslope", 10839, "\xe2\xa9\x97"},
+ {"lparlt", 10643, "\xe2\xa6\x93"},
+ {"trie", 8796, "\xe2\x89\x9c"},
+ {"cirmid", 10991, "\xe2\xab\xaf"},
+ {"wp", 8472, "\xe2\x84\x98"},
+ {"dagger", 8224, "\xe2\x80\xa0"},
+ {"utri", 9653, "\xe2\x96\xb5"},
+ {"supnE", 10956, "\xe2\xab\x8c"},
+ {"eg", 10906, "\xe2\xaa\x9a"},
+ {"LeftDownVector", 8643, "\xe2\x87\x83"},
+ {"NotLessEqual", 8816, "\xe2\x89\xb0"},
+ {"Bopf", 120121, "\xf0\x9d\x94\xb9"},
+ {"LongLeftRightArrow", 10231, "\xe2\x9f\xb7"},
+ {"Gfr", 120074, "\xf0\x9d\x94\x8a"},
+ {"sqsubseteq", 8849, "\xe2\x8a\x91"},
+ {"ograve", 242, "\xc3\xb2"},
+ {"larrhk", 8617, "\xe2\x86\xa9"},
+ {"sigma", 963, "\xcf\x83"},
+ {"NotSquareSupersetEqual", 8931, "\xe2\x8b\xa3"},
+ {"gvnE", 8809, "\xe2\x89\xa9\xef\xb8\x80"},
+ {"timesbar", 10801, "\xe2\xa8\xb1"},
+ {"Iukcy", 1030, "\xd0\x86"},
+ {"bscr", 119991, "\xf0\x9d\x92\xb7"},
+ {"Exists", 8707, "\xe2\x88\x83"},
+ {"tscr", 120009, "\xf0\x9d\x93\x89"},
+ {"tcy", 1090, "\xd1\x82"},
+ {"nwarr", 8598, "\xe2\x86\x96"},
+ {"hoarr", 8703, "\xe2\x87\xbf"},
+ {"lnapprox", 10889, "\xe2\xaa\x89"},
+ {"nu", 957, "\xce\xbd"},
+ {"bcy", 1073, "\xd0\xb1"},
+ {"ndash", 8211, "\xe2\x80\x93"},
+ {"smt", 10922, "\xe2\xaa\xaa"},
+ {"scaron", 353, "\xc5\xa1"},
+ {"IOcy", 1025, "\xd0\x81"},
+ {"Ifr", 8465, "\xe2\x84\x91"},
+ {"cularrp", 10557, "\xe2\xa4\xbd"},
+ {"lvertneqq", 8808, "\xe2\x89\xa8\xef\xb8\x80"},
+ {"nlarr", 8602, "\xe2\x86\x9a"},
+ {"colon", 58, "\x3a"},
+ {"ddotseq", 10871, "\xe2\xa9\xb7"},
+ {"zacute", 378, "\xc5\xba"},
+ {"DoubleVerticalBar", 8741, "\xe2\x88\xa5"},
+ {"larrfs", 10525, "\xe2\xa4\x9d"},
+ {"NotExists", 8708, "\xe2\x88\x84"},
+ {"geq", 8805, "\xe2\x89\xa5"},
+ {"Ffr", 120073, "\xf0\x9d\x94\x89"},
+ {"divide", 247, "\xc3\xb7"},
+ {"blank", 9251, "\xe2\x90\xa3"},
+ {"IEcy", 1045, "\xd0\x95"},
+ {"ordm", 186, "\xc2\xba"},
+ {"fopf", 120151, "\xf0\x9d\x95\x97"},
+ {"ecir", 8790, "\xe2\x89\x96"},
+ {"complement", 8705, "\xe2\x88\x81"},
+ {"top", 8868, "\xe2\x8a\xa4"},
+ {"DoubleContourIntegral", 8751, "\xe2\x88\xaf"},
+ {"nisd", 8954, "\xe2\x8b\xba"},
+ {"bcong", 8780, "\xe2\x89\x8c"},
+ {"plusdu", 10789, "\xe2\xa8\xa5"},
+ {"TildeTilde", 8776, "\xe2\x89\x88"},
+ {"lnE", 8808, "\xe2\x89\xa8"},
+ {"DoubleLongRightArrow", 10233, "\xe2\x9f\xb9"},
+ {"nsubseteqq", 10949, "\xe2\xab\x85\xcc\xb8"},
+ {"DownTeeArrow", 8615, "\xe2\x86\xa7"},
+ {"Cscr", 119966, "\xf0\x9d\x92\x9e"},
+ {"NegativeVeryThinSpace", 8203, "\xe2\x80\x8b"},
+ {"emsp", 8195, "\xe2\x80\x83"},
+ {"vartriangleleft", 8882, "\xe2\x8a\xb2"},
+ {"ropar", 10630, "\xe2\xa6\x86"},
+ {"checkmark", 10003, "\xe2\x9c\x93"},
+ {"Ycy", 1067, "\xd0\xab"},
+ {"supset", 8835, "\xe2\x8a\x83"},
+ {"gneqq", 8809, "\xe2\x89\xa9"},
+ {"Lstrok", 321, "\xc5\x81"},
+ {"AMP", 38, "\x26"},
+ {"acE", 8766, "\xe2\x88\xbe\xcc\xb3"},
+ {"sqsupseteq", 8850, "\xe2\x8a\x92"},
+ {"nle", 8816, "\xe2\x89\xb0"},
+ {"nesear", 10536, "\xe2\xa4\xa8"},
+ {"LeftDownVectorBar", 10585, "\xe2\xa5\x99"},
+ {"Integral", 8747, "\xe2\x88\xab"},
+ {"Beta", 914, "\xce\x92"},
+ {"nvdash", 8876, "\xe2\x8a\xac"},
+ {"nges", 10878, "\xe2\xa9\xbe\xcc\xb8"},
+ {"demptyv", 10673, "\xe2\xa6\xb1"},
+ {"eta", 951, "\xce\xb7"},
+ {"GreaterSlantEqual", 10878, "\xe2\xa9\xbe"},
+ {"ccedil", 231, "\xc3\xa7"},
+ {"pfr", 120109, "\xf0\x9d\x94\xad"},
+ {"bbrktbrk", 9142, "\xe2\x8e\xb6"},
+ {"mcy", 1084, "\xd0\xbc"},
+ {"Not", 10988, "\xe2\xab\xac"},
+ {"qscr", 120006, "\xf0\x9d\x93\x86"},
+ {"zwj", 8205, "\xe2\x80\x8d"},
+ {"ntrianglerighteq", 8941, "\xe2\x8b\xad"},
+ {"permil", 8240, "\xe2\x80\xb0"},
+ {"squarf", 9642, "\xe2\x96\xaa"},
+ {"apos", 39, "\x27"},
+ {"lrm", 8206, "\xe2\x80\x8e"},
+ {"male", 9794, "\xe2\x99\x82"},
+ {"agrave", 224, "\xc3\xa0"},
+ {"Lt", 8810, "\xe2\x89\xaa"},
+ {"capand", 10820, "\xe2\xa9\x84"},
+ {"aring", 229, "\xc3\xa5"},
+ {"Jukcy", 1028, "\xd0\x84"},
+ {"bumpe", 8783, "\xe2\x89\x8f"},
+ {"dd", 8518, "\xe2\x85\x86"},
+ {"tscy", 1094, "\xd1\x86"},
+ {"oS", 9416, "\xe2\x93\x88"},
+ {"succeq", 10928, "\xe2\xaa\xb0"},
+ {"xharr", 10231, "\xe2\x9f\xb7"},
+ {"pluse", 10866, "\xe2\xa9\xb2"},
+ {"rfisht", 10621, "\xe2\xa5\xbd"},
+ {"HorizontalLine", 9472, "\xe2\x94\x80"},
+ {"DiacriticalAcute", 180, "\xc2\xb4"},
+ {"hfr", 120101, "\xf0\x9d\x94\xa5"},
+ {"preceq", 10927, "\xe2\xaa\xaf"},
+ {"rationals", 8474, "\xe2\x84\x9a"},
+ {"Auml", 196, "\xc3\x84"},
+ {"LeftRightArrow", 8596, "\xe2\x86\x94"},
+ {"blacktriangleright", 9656, "\xe2\x96\xb8"},
+ {"dharr", 8642, "\xe2\x87\x82"},
+ {"isin", 8712, "\xe2\x88\x88"},
+ {"ldrushar", 10571, "\xe2\xa5\x8b"},
+ {"squ", 9633, "\xe2\x96\xa1"},
+ {"rbrksld", 10638, "\xe2\xa6\x8e"},
+ {"bigwedge", 8896, "\xe2\x8b\x80"},
+ {"swArr", 8665, "\xe2\x87\x99"},
+ {"IJlig", 306, "\xc4\xb2"},
+ {"harr", 8596, "\xe2\x86\x94"},
+ {"range", 10661, "\xe2\xa6\xa5"},
+ {"urtri", 9721, "\xe2\x97\xb9"},
+ {"NotVerticalBar", 8740, "\xe2\x88\xa4"},
+ {"ic", 8291, "\xe2\x81\xa3"},
+ {"solbar", 9023, "\xe2\x8c\xbf"},
+ {"approx", 8776, "\xe2\x89\x88"},
+ {"SquareSuperset", 8848, "\xe2\x8a\x90"},
+ {"numsp", 8199, "\xe2\x80\x87"},
+ {"nLt", 8810, "\xe2\x89\xaa\xe2\x83\x92"},
+ {"tilde", 732, "\xcb\x9c"},
+ {"rlarr", 8644, "\xe2\x87\x84"},
+ {"langle", 10216, "\xe2\x9f\xa8"},
+ {"nleqslant", 10877, "\xe2\xa9\xbd\xcc\xb8"},
+ {"Nacute", 323, "\xc5\x83"},
+ {"NotLeftTriangle", 8938, "\xe2\x8b\xaa"},
+ {"sopf", 120164, "\xf0\x9d\x95\xa4"},
+ {"xmap", 10236, "\xe2\x9f\xbc"},
+ {"supne", 8843, "\xe2\x8a\x8b"},
+ {"Int", 8748, "\xe2\x88\xac"},
+ {"nsupseteqq", 10950, "\xe2\xab\x86\xcc\xb8"},
+ {"circlearrowright", 8635, "\xe2\x86\xbb"},
+ {"NotCongruent", 8802, "\xe2\x89\xa2"},
+ {"Scedil", 350, "\xc5\x9e"},
+ {"raquo", 187, "\xc2\xbb"},
+ {"ycy", 1099, "\xd1\x8b"},
+ {"notinvb", 8951, "\xe2\x8b\xb7"},
+ {"andv", 10842, "\xe2\xa9\x9a"},
+ {"nap", 8777, "\xe2\x89\x89"},
+ {"shcy", 1096, "\xd1\x88"},
+ {"ssetmn", 8726, "\xe2\x88\x96"},
+ {"downarrow", 8595, "\xe2\x86\x93"},
+ {"gesdotol", 10884, "\xe2\xaa\x84"},
+ {"Congruent", 8801, "\xe2\x89\xa1"},
+ {"pound", 163, "\xc2\xa3"},
+ {"ZeroWidthSpace", 8203, "\xe2\x80\x8b"},
+ {"rdca", 10551, "\xe2\xa4\xb7"},
+ {"rmoust", 9137, "\xe2\x8e\xb1"},
+ {"zcy", 1079, "\xd0\xb7"},
+ {"Square", 9633, "\xe2\x96\xa1"},
+ {"subE", 10949, "\xe2\xab\x85"},
+ {"infintie", 10717, "\xe2\xa7\x9d"},
+ {"Cayleys", 8493, "\xe2\x84\xad"},
+ {"lsaquo", 8249, "\xe2\x80\xb9"},
+ {"realpart", 8476, "\xe2\x84\x9c"},
+ {"nprec", 8832, "\xe2\x8a\x80"},
+ {"RightTriangleBar", 10704, "\xe2\xa7\x90"},
+ {"Kopf", 120130, "\xf0\x9d\x95\x82"},
+ {"Ubreve", 364, "\xc5\xac"},
+ {"Uopf", 120140, "\xf0\x9d\x95\x8c"},
+ {"trianglelefteq", 8884, "\xe2\x8a\xb4"},
+ {"rotimes", 10805, "\xe2\xa8\xb5"},
+ {"qfr", 120110, "\xf0\x9d\x94\xae"},
+ {"gtcc", 10919, "\xe2\xaa\xa7"},
+ {"fnof", 402, "\xc6\x92"},
+ {"tritime", 10811, "\xe2\xa8\xbb"},
+ {"andslope", 10840, "\xe2\xa9\x98"},
+ {"harrw", 8621, "\xe2\x86\xad"},
+ {"NotSquareSuperset", 8848, "\xe2\x8a\x90\xcc\xb8"},
+ {"Amacr", 256, "\xc4\x80"},
+ {"OpenCurlyDoubleQuote", 8220, "\xe2\x80\x9c"},
+ {"thorn", 254, "\xc3\xbe"},
+ {"ordf", 170, "\xc2\xaa"},
+ {"natur", 9838, "\xe2\x99\xae"},
+ {"xi", 958, "\xce\xbe"},
+ {"infin", 8734, "\xe2\x88\x9e"},
+ {"nspar", 8742, "\xe2\x88\xa6"},
+ {"Jcy", 1049, "\xd0\x99"},
+ {"DownLeftTeeVector", 10590, "\xe2\xa5\x9e"},
+ {"rbarr", 10509, "\xe2\xa4\x8d"},
+ {"Xi", 926, "\xce\x9e"},
+ {"bull", 8226, "\xe2\x80\xa2"},
+ {"cuesc", 8927, "\xe2\x8b\x9f"},
+ {"backcong", 8780, "\xe2\x89\x8c"},
+ {"frac35", 8535, "\xe2\x85\x97"},
+ {"hscr", 119997, "\xf0\x9d\x92\xbd"},
+ {"LessEqualGreater", 8922, "\xe2\x8b\x9a"},
+ {"Implies", 8658, "\xe2\x87\x92"},
+ {"ETH", 208, "\xc3\x90"},
+ {"Yacute", 221, "\xc3\x9d"},
+ {"shy", 173, "\xc2\xad"},
+ {"Rarrtl", 10518, "\xe2\xa4\x96"},
+ {"sup1", 185, "\xc2\xb9"},
+ {"reals", 8477, "\xe2\x84\x9d"},
+ {"blacklozenge", 10731, "\xe2\xa7\xab"},
+ {"ncedil", 326, "\xc5\x86"},
+ {"Lambda", 923, "\xce\x9b"},
+ {"uopf", 120166, "\xf0\x9d\x95\xa6"},
+ {"bigodot", 10752, "\xe2\xa8\x80"},
+ {"ubreve", 365, "\xc5\xad"},
+ {"drbkarow", 10512, "\xe2\xa4\x90"},
+ {"els", 10901, "\xe2\xaa\x95"},
+ {"shortparallel", 8741, "\xe2\x88\xa5"},
+ {"Pcy", 1055, "\xd0\x9f"},
+ {"dsol", 10742, "\xe2\xa7\xb6"},
+ {"supsim", 10952, "\xe2\xab\x88"},
+ {"Longrightarrow", 10233, "\xe2\x9f\xb9"},
+ {"ThickSpace", 8287, "\xe2\x81\x9f\xe2\x80\x8a"},
+ {"Itilde", 296, "\xc4\xa8"},
+ {"nparallel", 8742, "\xe2\x88\xa6"},
+ {"And", 10835, "\xe2\xa9\x93"},
+ {"boxhd", 9516, "\xe2\x94\xac"},
+ {"Dashv", 10980, "\xe2\xab\xa4"},
+ {"NotSuperset", 8835, "\xe2\x8a\x83\xe2\x83\x92"},
+ {"Eta", 919, "\xce\x97"},
+ {"Qopf", 8474, "\xe2\x84\x9a"},
+ {"period", 46, "\x2e"},
+ {"angmsd", 8737, "\xe2\x88\xa1"},
+ {"fllig", 64258, "\xef\xac\x82"},
+ {"cuvee", 8910, "\xe2\x8b\x8e"},
+ {"wedbar", 10847, "\xe2\xa9\x9f"},
+ {"Fscr", 8497, "\xe2\x84\xb1"},
+ {"veebar", 8891, "\xe2\x8a\xbb"},
+ {"Longleftrightarrow", 10234, "\xe2\x9f\xba"},
+ {"reg", 174, "\xc2\xae"},
+ {"NegativeMediumSpace", 8203, "\xe2\x80\x8b"},
+ {"Upsi", 978, "\xcf\x92"},
+ {"Mellintrf", 8499, "\xe2\x84\xb3"},
+ {"boxHU", 9577, "\xe2\x95\xa9"},
+ {"bne", 61, "\x3d\xe2\x83\xa5"},
+ {"frac56", 8538, "\xe2\x85\x9a"},
+ {"utrif", 9652, "\xe2\x96\xb4"},
+ {"LeftTriangle", 8882, "\xe2\x8a\xb2"},
+ {"nsime", 8772, "\xe2\x89\x84"},
+ {"rcedil", 343, "\xc5\x97"},
+ {"aogon", 261, "\xc4\x85"},
+ {"uHar", 10595, "\xe2\xa5\xa3"},
+ {"ForAll", 8704, "\xe2\x88\x80"},
+ {"prE", 10931, "\xe2\xaa\xb3"},
+ {"boxV", 9553, "\xe2\x95\x91"},
+ {"softcy", 1100, "\xd1\x8c"},
+ {"hercon", 8889, "\xe2\x8a\xb9"},
+ {"lmoustache", 9136, "\xe2\x8e\xb0"},
+ {"Product", 8719, "\xe2\x88\x8f"},
+ {"lsimg", 10895, "\xe2\xaa\x8f"},
+ {"verbar", 124, "\x7c"},
+ {"ofcir", 10687, "\xe2\xa6\xbf"},
+ {"curlyeqprec", 8926, "\xe2\x8b\x9e"},
+ {"ldquo", 8220, "\xe2\x80\x9c"},
+ {"bot", 8869, "\xe2\x8a\xa5"},
+ {"Psi", 936, "\xce\xa8"},
+ {"OElig", 338, "\xc5\x92"},
+ {"DownRightVectorBar", 10583, "\xe2\xa5\x97"},
+ {"minusb", 8863, "\xe2\x8a\x9f"},
+ {"Iscr", 8464, "\xe2\x84\x90"},
+ {"Tcedil", 354, "\xc5\xa2"},
+ {"ffilig", 64259, "\xef\xac\x83"},
+ {"Gcy", 1043, "\xd0\x93"},
+ {"oline", 8254, "\xe2\x80\xbe"},
+ {"bottom", 8869, "\xe2\x8a\xa5"},
+ {"nVDash", 8879, "\xe2\x8a\xaf"},
+ {"lessdot", 8918, "\xe2\x8b\x96"},
+ {"cups", 8746, "\xe2\x88\xaa\xef\xb8\x80"},
+ {"gla", 10917, "\xe2\xaa\xa5"},
+ {"hellip", 8230, "\xe2\x80\xa6"},
+ {"hookleftarrow", 8617, "\xe2\x86\xa9"},
+ {"Cup", 8915, "\xe2\x8b\x93"},
+ {"upsi", 965, "\xcf\x85"},
+ {"DownArrowBar", 10515, "\xe2\xa4\x93"},
+ {"lowast", 8727, "\xe2\x88\x97"},
+ {"profline", 8978, "\xe2\x8c\x92"},
+ {"ngsim", 8821, "\xe2\x89\xb5"},
+ {"boxhu", 9524, "\xe2\x94\xb4"},
+ {"operp", 10681, "\xe2\xa6\xb9"},
+ {"cap", 8745, "\xe2\x88\xa9"},
+ {"Hcirc", 292, "\xc4\xa4"},
+ {"Ncy", 1053, "\xd0\x9d"},
+ {"zeetrf", 8488, "\xe2\x84\xa8"},
+ {"cuepr", 8926, "\xe2\x8b\x9e"},
+ {"supsetneq", 8843, "\xe2\x8a\x8b"},
+ {"lfloor", 8970, "\xe2\x8c\x8a"},
+ {"ngtr", 8815, "\xe2\x89\xaf"},
+ {"ccups", 10828, "\xe2\xa9\x8c"},
+ {"pscr", 120005, "\xf0\x9d\x93\x85"},
+ {"Cfr", 8493, "\xe2\x84\xad"},
+ {"dtri", 9663, "\xe2\x96\xbf"},
+ {"icirc", 238, "\xc3\xae"},
+ {"leftarrow", 8592, "\xe2\x86\x90"},
+ {"vdash", 8866, "\xe2\x8a\xa2"},
+ {"leftrightharpoons", 8651, "\xe2\x87\x8b"},
+ {"rightrightarrows", 8649, "\xe2\x87\x89"},
+ {"strns", 175, "\xc2\xaf"},
+ {"intlarhk", 10775, "\xe2\xa8\x97"},
+ {"downharpoonright", 8642, "\xe2\x87\x82"},
+ {"yacute", 253, "\xc3\xbd"},
+ {"boxUr", 9561, "\xe2\x95\x99"},
+ {"triangleleft", 9667, "\xe2\x97\x83"},
+ {"DiacriticalDot", 729, "\xcb\x99"},
+ {"thetav", 977, "\xcf\x91"},
+ {"OverBracket", 9140, "\xe2\x8e\xb4"},
+ {"PrecedesTilde", 8830, "\xe2\x89\xbe"},
+ {"rtrie", 8885, "\xe2\x8a\xb5"},
+ {"Scirc", 348, "\xc5\x9c"},
+ {"vsupne", 8843, "\xe2\x8a\x8b\xef\xb8\x80"},
+ {"OverBrace", 9182, "\xe2\x8f\x9e"},
+ {"Yfr", 120092, "\xf0\x9d\x94\x9c"},
+ {"scnE", 10934, "\xe2\xaa\xb6"},
+ {"simlE", 10911, "\xe2\xaa\x9f"},
+ {"Proportional", 8733, "\xe2\x88\x9d"},
+ {"edot", 279, "\xc4\x97"},
+ {"loang", 10220, "\xe2\x9f\xac"},
+ {"gesdot", 10880, "\xe2\xaa\x80"},
+ {"DownBreve", 785, "\xcc\x91"},
+ {"pcy", 1087, "\xd0\xbf"},
+ {"Succeeds", 8827, "\xe2\x89\xbb"},
+ {"mfr", 120106, "\xf0\x9d\x94\xaa"},
+ {"Leftarrow", 8656, "\xe2\x87\x90"},
+ {"boxDr", 9555, "\xe2\x95\x93"},
+ {"Nscr", 119977, "\xf0\x9d\x92\xa9"},
+ {"diam", 8900, "\xe2\x8b\x84"},
+ {"CHcy", 1063, "\xd0\xa7"},
+ {"boxdr", 9484, "\xe2\x94\x8c"},
+ {"rlm", 8207, "\xe2\x80\x8f"},
+ {"Coproduct", 8720, "\xe2\x88\x90"},
+ {"RightTeeArrow", 8614, "\xe2\x86\xa6"},
+ {"tridot", 9708, "\xe2\x97\xac"},
+ {"ldquor", 8222, "\xe2\x80\x9e"},
+ {"sol", 47, "\x2f"},
+ {"ecirc", 234, "\xc3\xaa"},
+ {"DoubleLeftArrow", 8656, "\xe2\x87\x90"},
+ {"Gscr", 119970, "\xf0\x9d\x92\xa2"},
+ {"ap", 8776, "\xe2\x89\x88"},
+ {"rbrke", 10636, "\xe2\xa6\x8c"},
+ {"LeftFloor", 8970, "\xe2\x8c\x8a"},
+ {"blk12", 9618, "\xe2\x96\x92"},
+ {"Conint", 8751, "\xe2\x88\xaf"},
+ {"triangledown", 9663, "\xe2\x96\xbf"},
+ {"Icy", 1048, "\xd0\x98"},
+ {"backprime", 8245, "\xe2\x80\xb5"},
+ {"longleftrightarrow", 10231, "\xe2\x9f\xb7"},
+ {"ntriangleleft", 8938, "\xe2\x8b\xaa"},
+ {"copy", 169, "\xc2\xa9"},
+ {"mapstodown", 8615, "\xe2\x86\xa7"},
+ {"seArr", 8664, "\xe2\x87\x98"},
+ {"ENG", 330, "\xc5\x8a"},
+ {"DoubleRightArrow", 8658, "\xe2\x87\x92"},
+ {"tfr", 120113, "\xf0\x9d\x94\xb1"},
+ {"rharul", 10604, "\xe2\xa5\xac"},
+ {"bfr", 120095, "\xf0\x9d\x94\x9f"},
+ {"origof", 8886, "\xe2\x8a\xb6"},
+ {"Therefore", 8756, "\xe2\x88\xb4"},
+ {"glE", 10898, "\xe2\xaa\x92"},
+ {"leftarrowtail", 8610, "\xe2\x86\xa2"},
+ {"NotEqual", 8800, "\xe2\x89\xa0"},
+ {"LeftCeiling", 8968, "\xe2\x8c\x88"},
+ {"lArr", 8656, "\xe2\x87\x90"},
+ {"subseteq", 8838, "\xe2\x8a\x86"},
+ {"larrbfs", 10527, "\xe2\xa4\x9f"},
+ {"Gammad", 988, "\xcf\x9c"},
+ {"rtriltri", 10702, "\xe2\xa7\x8e"},
+ {"Fcy", 1060, "\xd0\xa4"},
+ {"Vopf", 120141, "\xf0\x9d\x95\x8d"},
+ {"lrarr", 8646, "\xe2\x87\x86"},
+ {"delta", 948, "\xce\xb4"},
+ {"xodot", 10752, "\xe2\xa8\x80"},
+ {"larrtl", 8610, "\xe2\x86\xa2"},
+ {"gsim", 8819, "\xe2\x89\xb3"},
+ {"ratail", 10522, "\xe2\xa4\x9a"},
+ {"vsubne", 8842, "\xe2\x8a\x8a\xef\xb8\x80"},
+ {"boxur", 9492, "\xe2\x94\x94"},
+ {"succsim", 8831, "\xe2\x89\xbf"},
+ {"triplus", 10809, "\xe2\xa8\xb9"},
+ {"nless", 8814, "\xe2\x89\xae"},
+ {"uharr", 8638, "\xe2\x86\xbe"},
+ {"lambda", 955, "\xce\xbb"},
+ {"uuml", 252, "\xc3\xbc"},
+ {"horbar", 8213, "\xe2\x80\x95"},
+ {"ccirc", 265, "\xc4\x89"},
+ {"sqcup", 8852, "\xe2\x8a\x94"},
+ {"Pscr", 119979, "\xf0\x9d\x92\xab"},
+ {"supsup", 10966, "\xe2\xab\x96"},
+ {"Cacute", 262, "\xc4\x86"},
+ {"upsih", 978, "\xcf\x92"},
+ {"precsim", 8830, "\xe2\x89\xbe"},
+ {"longrightarrow", 10230, "\xe2\x9f\xb6"},
+ {"circledR", 174, "\xc2\xae"},
+ {"UpTeeArrow", 8613, "\xe2\x86\xa5"},
+ {"bepsi", 1014, "\xcf\xb6"},
+ {"oast", 8859, "\xe2\x8a\x9b"},
+ {"yfr", 120118, "\xf0\x9d\x94\xb6"},
+ {"rdsh", 8627, "\xe2\x86\xb3"},
+ {"Ograve", 210, "\xc3\x92"},
+ {"LeftVectorBar", 10578, "\xe2\xa5\x92"},
+ {"NotNestedLessLess", 10913, "\xe2\xaa\xa1\xcc\xb8"},
+ {"Jscr", 119973, "\xf0\x9d\x92\xa5"},
+ {"psi", 968, "\xcf\x88"},
+ {"orarr", 8635, "\xe2\x86\xbb"},
+ {"Subset", 8912, "\xe2\x8b\x90"},
+ {"curarr", 8631, "\xe2\x86\xb7"},
+ {"CirclePlus", 8853, "\xe2\x8a\x95"},
+ {"gtrless", 8823, "\xe2\x89\xb7"},
+ {"nvle", 8804, "\xe2\x89\xa4\xe2\x83\x92"},
+ {"prop", 8733, "\xe2\x88\x9d"},
+ {"gEl", 10892, "\xe2\xaa\x8c"},
+ {"gtlPar", 10645, "\xe2\xa6\x95"},
+ {"frasl", 8260, "\xe2\x81\x84"},
+ {"nearr", 8599, "\xe2\x86\x97"},
+ {"NotSubsetEqual", 8840, "\xe2\x8a\x88"},
+ {"planck", 8463, "\xe2\x84\x8f"},
+ {"Uuml", 220, "\xc3\x9c"},
+ {"spadesuit", 9824, "\xe2\x99\xa0"},
+ {"sect", 167, "\xc2\xa7"},
+ {"cdot", 267, "\xc4\x8b"},
+ {"boxVh", 9579, "\xe2\x95\xab"},
+ {"zscr", 120015, "\xf0\x9d\x93\x8f"},
+ {"nsqsube", 8930, "\xe2\x8b\xa2"},
+ {"grave", 96, "\x60"},
+ {"angrtvb", 8894, "\xe2\x8a\xbe"},
+ {"MediumSpace", 8287, "\xe2\x81\x9f"},
+ {"Ntilde", 209, "\xc3\x91"},
+ {"solb", 10692, "\xe2\xa7\x84"},
+ {"angzarr", 9084, "\xe2\x8d\xbc"},
+ {"nopf", 120159, "\xf0\x9d\x95\x9f"},
+ {"rtrif", 9656, "\xe2\x96\xb8"},
+ {"nrightarrow", 8603, "\xe2\x86\x9b"},
+ {"Kappa", 922, "\xce\x9a"},
+ {"simrarr", 10610, "\xe2\xa5\xb2"},
+ {"imacr", 299, "\xc4\xab"},
+ {"vrtri", 8883, "\xe2\x8a\xb3"},
+ {"part", 8706, "\xe2\x88\x82"},
+ {"esim", 8770, "\xe2\x89\x82"},
+ {"atilde", 227, "\xc3\xa3"},
+ {"DownRightTeeVector", 10591, "\xe2\xa5\x9f"},
+ {"jcirc", 309, "\xc4\xb5"},
+ {"Ecaron", 282, "\xc4\x9a"},
+ {"VerticalSeparator", 10072, "\xe2\x9d\x98"},
+ {"rHar", 10596, "\xe2\xa5\xa4"},
+ {"rcaron", 345, "\xc5\x99"},
+ {"subnE", 10955, "\xe2\xab\x8b"},
+ {"ii", 8520, "\xe2\x85\x88"},
+ {"Cconint", 8752, "\xe2\x88\xb0"},
+ {"Mcy", 1052, "\xd0\x9c"},
+ {"eqcolon", 8789, "\xe2\x89\x95"},
+ {"cupor", 10821, "\xe2\xa9\x85"},
+ {"DoubleUpArrow", 8657, "\xe2\x87\x91"},
+ {"boxbox", 10697, "\xe2\xa7\x89"},
+ {"setminus", 8726, "\xe2\x88\x96"},
+ {"Lleftarrow", 8666, "\xe2\x87\x9a"},
+ {"nang", 8736, "\xe2\x88\xa0\xe2\x83\x92"},
+ {"TRADE", 8482, "\xe2\x84\xa2"},
+ {"urcorner", 8989, "\xe2\x8c\x9d"},
+ {"lsqb", 91, "\x5b"},
+ {"cupcup", 10826, "\xe2\xa9\x8a"},
+ {"kjcy", 1116, "\xd1\x9c"},
+ {"llhard", 10603, "\xe2\xa5\xab"},
+ {"mumap", 8888, "\xe2\x8a\xb8"},
+ {"iiint", 8749, "\xe2\x88\xad"},
+ {"RightTee", 8866, "\xe2\x8a\xa2"},
+ {"Tcaron", 356, "\xc5\xa4"},
+ {"bigcirc", 9711, "\xe2\x97\xaf"},
+ {"trianglerighteq", 8885, "\xe2\x8a\xb5"},
+ {"NotLessGreater", 8824, "\xe2\x89\xb8"},
+ {"hArr", 8660, "\xe2\x87\x94"},
+ {"ocy", 1086, "\xd0\xbe"},
+ {"tosa", 10537, "\xe2\xa4\xa9"},
+ {"twixt", 8812, "\xe2\x89\xac"},
+ {"square", 9633, "\xe2\x96\xa1"},
+ {"Otimes", 10807, "\xe2\xa8\xb7"},
+ {"Kcedil", 310, "\xc4\xb6"},
+ {"beth", 8502, "\xe2\x84\xb6"},
+ {"triminus", 10810, "\xe2\xa8\xba"},
+ {"nlArr", 8653, "\xe2\x87\x8d"},
+ {"Oacute", 211, "\xc3\x93"},
+ {"zwnj", 8204, "\xe2\x80\x8c"},
+ {"ll", 8810, "\xe2\x89\xaa"},
+ {"smashp", 10803, "\xe2\xa8\xb3"},
+ {"ngeqq", 8807, "\xe2\x89\xa7\xcc\xb8"},
+ {"rnmid", 10990, "\xe2\xab\xae"},
+ {"nwArr", 8662, "\xe2\x87\x96"},
+ {"RightUpDownVector", 10575, "\xe2\xa5\x8f"},
+ {"lbbrk", 10098, "\xe2\x9d\xb2"},
+ {"compfn", 8728, "\xe2\x88\x98"},
+ {"eDDot", 10871, "\xe2\xa9\xb7"},
+ {"Jsercy", 1032, "\xd0\x88"},
+ {"HARDcy", 1066, "\xd0\xaa"},
+ {"nexists", 8708, "\xe2\x88\x84"},
+ {"theta", 952, "\xce\xb8"},
+ {"plankv", 8463, "\xe2\x84\x8f"},
+ {"sup2", 178, "\xc2\xb2"},
+ {"lessapprox", 10885, "\xe2\xaa\x85"},
+ {"gdot", 289, "\xc4\xa1"},
+ {"angmsdae", 10668, "\xe2\xa6\xac"},
+ {"Superset", 8835, "\xe2\x8a\x83"},
+ {"prap", 10935, "\xe2\xaa\xb7"},
+ {"Zscr", 119989, "\xf0\x9d\x92\xb5"},
+ {"nsucc", 8833, "\xe2\x8a\x81"},
+ {"supseteqq", 10950, "\xe2\xab\x86"},
+ {"UpTee", 8869, "\xe2\x8a\xa5"},
+ {"LowerLeftArrow", 8601, "\xe2\x86\x99"},
+ {"ssmile", 8995, "\xe2\x8c\xa3"},
+ {"niv", 8715, "\xe2\x88\x8b"},
+ {"bigvee", 8897, "\xe2\x8b\x81"},
+ {"kscr", 120000, "\xf0\x9d\x93\x80"},
+ {"xutri", 9651, "\xe2\x96\xb3"},
+ {"caret", 8257, "\xe2\x81\x81"},
+ {"caron", 711, "\xcb\x87"},
+ {"Wedge", 8896, "\xe2\x8b\x80"},
+ {"sdotb", 8865, "\xe2\x8a\xa1"},
+ {"bigoplus", 10753, "\xe2\xa8\x81"},
+ {"Breve", 728, "\xcb\x98"},
+ {"ImaginaryI", 8520, "\xe2\x85\x88"},
+ {"longmapsto", 10236, "\xe2\x9f\xbc"},
+ {"boxVH", 9580, "\xe2\x95\xac"},
+ {"lozenge", 9674, "\xe2\x97\x8a"},
+ {"toea", 10536, "\xe2\xa4\xa8"},
+ {"nbumpe", 8783, "\xe2\x89\x8f\xcc\xb8"},
+ {"gcirc", 285, "\xc4\x9d"},
+ {"NotHumpEqual", 8783, "\xe2\x89\x8f\xcc\xb8"},
+ {"pre", 10927, "\xe2\xaa\xaf"},
+ {"ascr", 119990, "\xf0\x9d\x92\xb6"},
+ {"Acirc", 194, "\xc3\x82"},
+ {"questeq", 8799, "\xe2\x89\x9f"},
+ {"ncaron", 328, "\xc5\x88"},
+ {"LeftTeeArrow", 8612, "\xe2\x86\xa4"},
+ {"xcirc", 9711, "\xe2\x97\xaf"},
+ {"swarr", 8601, "\xe2\x86\x99"},
+ {"MinusPlus", 8723, "\xe2\x88\x93"},
+ {"plus", 43, "\x2b"},
+ {"NotDoubleVerticalBar", 8742, "\xe2\x88\xa6"},
+ {"rppolint", 10770, "\xe2\xa8\x92"},
+ {"NotTildeFullEqual", 8775, "\xe2\x89\x87"},
+ {"ltdot", 8918, "\xe2\x8b\x96"},
+ {"NotNestedGreaterGreater", 10914, "\xe2\xaa\xa2\xcc\xb8"},
+ {"Lscr", 8466, "\xe2\x84\x92"},
+ {"pitchfork", 8916, "\xe2\x8b\x94"},
+ {"Eopf", 120124, "\xf0\x9d\x94\xbc"},
+ {"ropf", 120163, "\xf0\x9d\x95\xa3"},
+ {"Delta", 916, "\xce\x94"},
+ {"lozf", 10731, "\xe2\xa7\xab"},
+ {"RightTeeVector", 10587, "\xe2\xa5\x9b"},
+ {"UpDownArrow", 8597, "\xe2\x86\x95"},
+ {"bump", 8782, "\xe2\x89\x8e"},
+ {"Rscr", 8475, "\xe2\x84\x9b"},
+ {"slarr", 8592, "\xe2\x86\x90"},
+ {"lcy", 1083, "\xd0\xbb"},
+ {"Vee", 8897, "\xe2\x8b\x81"},
+ {"Iogon", 302, "\xc4\xae"},
+ {"minus", 8722, "\xe2\x88\x92"},
+ {"GreaterFullEqual", 8807, "\xe2\x89\xa7"},
+ {"xhArr", 10234, "\xe2\x9f\xba"},
+ {"shortmid", 8739, "\xe2\x88\xa3"},
+ {"DoubleDownArrow", 8659, "\xe2\x87\x93"},
+ {"Wscr", 119986, "\xf0\x9d\x92\xb2"},
+ {"rang", 10217, "\xe2\x9f\xa9"},
+ {"lcub", 123, "\x7b"},
+ {"mnplus", 8723, "\xe2\x88\x93"},
+ {"ulcrop", 8975, "\xe2\x8c\x8f"},
+ {"wfr", 120116, "\xf0\x9d\x94\xb4"},
+ {"DifferentialD", 8518, "\xe2\x85\x86"},
+ {"ThinSpace", 8201, "\xe2\x80\x89"},
+ {"NotGreaterGreater", 8811, "\xe2\x89\xab\xcc\xb8"},
+ {"Topf", 120139, "\xf0\x9d\x95\x8b"},
+ {"sbquo", 8218, "\xe2\x80\x9a"},
+ {"sdot", 8901, "\xe2\x8b\x85"},
+ {"DoubleLeftTee", 10980, "\xe2\xab\xa4"},
+ {"vBarv", 10985, "\xe2\xab\xa9"},
+ {"subne", 8842, "\xe2\x8a\x8a"},
+ {"gtrdot", 8919, "\xe2\x8b\x97"},
+ {"opar", 10679, "\xe2\xa6\xb7"},
+ {"apid", 8779, "\xe2\x89\x8b"},
+ {"Cross", 10799, "\xe2\xa8\xaf"},
+ {"lhblk", 9604, "\xe2\x96\x84"},
+ {"capcap", 10827, "\xe2\xa9\x8b"},
+ {"midast", 42, "\x2a"},
+ {"lscr", 120001, "\xf0\x9d\x93\x81"},
+ {"nGt", 8811, "\xe2\x89\xab\xe2\x83\x92"},
+ {"Euml", 203, "\xc3\x8b"},
+ {"blacktriangledown", 9662, "\xe2\x96\xbe"},
+ {"Rcy", 1056, "\xd0\xa0"},
+ {"dfisht", 10623, "\xe2\xa5\xbf"},
+ {"dashv", 8867, "\xe2\x8a\xa3"},
+ {"ast", 42, "\x2a"},
+ {"ContourIntegral", 8750, "\xe2\x88\xae"},
+ {"Ofr", 120082, "\xf0\x9d\x94\x92"},
+ {"Lcy", 1051, "\xd0\x9b"},
+ {"nltrie", 8940, "\xe2\x8b\xac"},
+ {"ShortUpArrow", 8593, "\xe2\x86\x91"},
+ {"acy", 1072, "\xd0\xb0"},
+ {"rightarrow", 8594, "\xe2\x86\x92"},
+ {"UnderBar", 95, "\x5f"},
+ {"LongLeftArrow", 10229, "\xe2\x9f\xb5"},
+ {"andd", 10844, "\xe2\xa9\x9c"},
+ {"xlarr", 10229, "\xe2\x9f\xb5"},
+ {"percnt", 37, "\x25"},
+ {"rharu", 8640, "\xe2\x87\x80"},
+ {"plusdo", 8724, "\xe2\x88\x94"},
+ {"TScy", 1062, "\xd0\xa6"},
+ {"kcy", 1082, "\xd0\xba"},
+ {"boxVR", 9568, "\xe2\x95\xa0"},
+ {"looparrowleft", 8619, "\xe2\x86\xab"},
+ {"scirc", 349, "\xc5\x9d"},
+ {"drcorn", 8991, "\xe2\x8c\x9f"},
+ {"iiota", 8489, "\xe2\x84\xa9"},
+ {"Zcy", 1047, "\xd0\x97"},
+ {"frac58", 8541, "\xe2\x85\x9d"},
+ {"alpha", 945, "\xce\xb1"},
+ {"daleth", 8504, "\xe2\x84\xb8"},
+ {"gtreqless", 8923, "\xe2\x8b\x9b"},
+ {"tstrok", 359, "\xc5\xa7"},
+ {"plusb", 8862, "\xe2\x8a\x9e"},
+ {"odsold", 10684, "\xe2\xa6\xbc"},
+ {"varsupsetneqq", 10956, "\xe2\xab\x8c\xef\xb8\x80"},
+ {"otilde", 245, "\xc3\xb5"},
+ {"gtcir", 10874, "\xe2\xa9\xba"},
+ {"lltri", 9722, "\xe2\x97\xba"},
+ {"rx", 8478, "\xe2\x84\x9e"},
+ {"ljcy", 1113, "\xd1\x99"},
+ {"parsim", 10995, "\xe2\xab\xb3"},
+ {"NotElement", 8713, "\xe2\x88\x89"},
+ {"plusmn", 177, "\xc2\xb1"},
+ {"varsubsetneq", 8842, "\xe2\x8a\x8a\xef\xb8\x80"},
+ {"subset", 8834, "\xe2\x8a\x82"},
+ {"awint", 10769, "\xe2\xa8\x91"},
+ {"laemptyv", 10676, "\xe2\xa6\xb4"},
+ {"phiv", 981, "\xcf\x95"},
+ {"sfrown", 8994, "\xe2\x8c\xa2"},
+ {"DoubleUpDownArrow", 8661, "\xe2\x87\x95"},
+ {"lpar", 40, "\x28"},
+ {"frac45", 8536, "\xe2\x85\x98"},
+ {"rBarr", 10511, "\xe2\xa4\x8f"},
+ {"npolint", 10772, "\xe2\xa8\x94"},
+ {"emacr", 275, "\xc4\x93"},
+ {"maltese", 10016, "\xe2\x9c\xa0"},
+ {"PlusMinus", 177, "\xc2\xb1"},
+ {"ReverseEquilibrium", 8651, "\xe2\x87\x8b"},
+ {"oscr", 8500, "\xe2\x84\xb4"},
+ {"blacksquare", 9642, "\xe2\x96\xaa"},
+ {"TSHcy", 1035, "\xd0\x8b"},
+ {"gap", 10886, "\xe2\xaa\x86"},
+ {"xnis", 8955, "\xe2\x8b\xbb"},
+ {"Ll", 8920, "\xe2\x8b\x98"},
+ {"PrecedesEqual", 10927, "\xe2\xaa\xaf"},
+ {"incare", 8453, "\xe2\x84\x85"},
+ {"nharr", 8622, "\xe2\x86\xae"},
+ {"varnothing", 8709, "\xe2\x88\x85"},
+ {"ShortDownArrow", 8595, "\xe2\x86\x93"},
+ {"nbsp", 160, " "},
+ {"asympeq", 8781, "\xe2\x89\x8d"},
+ {"rbrkslu", 10640, "\xe2\xa6\x90"},
+ {"rho", 961, "\xcf\x81"},
+ {"Mscr", 8499, "\xe2\x84\xb3"},
+ {"eth", 240, "\xc3\xb0"},
+ {"suplarr", 10619, "\xe2\xa5\xbb"},
+ {"Tab", 9, "\x09"},
+ {"omicron", 959, "\xce\xbf"},
+ {"blacktriangle", 9652, "\xe2\x96\xb4"},
+ {"nldr", 8229, "\xe2\x80\xa5"},
+ {"downharpoonleft", 8643, "\xe2\x87\x83"},
+ {"circledcirc", 8858, "\xe2\x8a\x9a"},
+ {"leftleftarrows", 8647, "\xe2\x87\x87"},
+ {"NotHumpDownHump", 8782, "\xe2\x89\x8e\xcc\xb8"},
+ {"nvgt", 62, "\x3e\xe2\x83\x92"},
+ {"rhard", 8641, "\xe2\x87\x81"},
+ {"nGg", 8921, "\xe2\x8b\x99\xcc\xb8"},
+ {"lurdshar", 10570, "\xe2\xa5\x8a"},
+ {"cirE", 10691, "\xe2\xa7\x83"},
+ {"isinE", 8953, "\xe2\x8b\xb9"},
+ {"eparsl", 10723, "\xe2\xa7\xa3"},
+ {"RightAngleBracket", 10217, "\xe2\x9f\xa9"},
+ {"hcirc", 293, "\xc4\xa5"},
+ {"bumpeq", 8783, "\xe2\x89\x8f"},
+ {"cire", 8791, "\xe2\x89\x97"},
+ {"dotplus", 8724, "\xe2\x88\x94"},
+ {"itilde", 297, "\xc4\xa9"},
+ {"uwangle", 10663, "\xe2\xa6\xa7"},
+ {"rlhar", 8652, "\xe2\x87\x8c"},
+ {"rbrace", 125, "\x7d"},
+ {"mid", 8739, "\xe2\x88\xa3"},
+ {"el", 10905, "\xe2\xaa\x99"},
+ {"KJcy", 1036, "\xd0\x8c"},
+ {"odiv", 10808, "\xe2\xa8\xb8"},
+ {"amacr", 257, "\xc4\x81"},
+ {"qprime", 8279, "\xe2\x81\x97"},
+ {"tcedil", 355, "\xc5\xa3"},
+ {"UpArrowDownArrow", 8645, "\xe2\x87\x85"},
+ {"spades", 9824, "\xe2\x99\xa0"},
+ {"napos", 329, "\xc5\x89"},
+ {"straightepsilon", 1013, "\xcf\xb5"},
+ {"CupCap", 8781, "\xe2\x89\x8d"},
+ {"Oopf", 120134, "\xf0\x9d\x95\x86"},
+ {"sub", 8834, "\xe2\x8a\x82"},
+ {"ohm", 937, "\xce\xa9"},
+ {"UnderBrace", 9183, "\xe2\x8f\x9f"},
+ {"looparrowright", 8620, "\xe2\x86\xac"},
+ {"xotime", 10754, "\xe2\xa8\x82"},
+ {"ntgl", 8825, "\xe2\x89\xb9"},
+ {"minusdu", 10794, "\xe2\xa8\xaa"},
+ {"rarrb", 8677, "\xe2\x87\xa5"},
+ {"nvlArr", 10498, "\xe2\xa4\x82"},
+ {"triangle", 9653, "\xe2\x96\xb5"},
+ {"nacute", 324, "\xc5\x84"},
+ {"boxHD", 9574, "\xe2\x95\xa6"},
+ {"ratio", 8758, "\xe2\x88\xb6"},
+ {"larrsim", 10611, "\xe2\xa5\xb3"},
+ {"LessLess", 10913, "\xe2\xaa\xa1"},
+ {"yacy", 1103, "\xd1\x8f"},
+ {"ctdot", 8943, "\xe2\x8b\xaf"},
+ {"and", 8743, "\xe2\x88\xa7"},
+ {"lrtri", 8895, "\xe2\x8a\xbf"},
+ {"eDot", 8785, "\xe2\x89\x91"},
+ {"sqsub", 8847, "\xe2\x8a\x8f"},
+ {"real", 8476, "\xe2\x84\x9c"},
+ {"Dcy", 1044, "\xd0\x94"},
+ {"vartheta", 977, "\xcf\x91"},
+ {"nsub", 8836, "\xe2\x8a\x84"},
+ {"DownTee", 8868, "\xe2\x8a\xa4"},
+ {"acute", 180, "\xc2\xb4"},
+ {"GreaterLess", 8823, "\xe2\x89\xb7"},
+ {"supplus", 10944, "\xe2\xab\x80"},
+ {"Vbar", 10987, "\xe2\xab\xab"},
+ {"divideontimes", 8903, "\xe2\x8b\x87"},
+ {"lsim", 8818, "\xe2\x89\xb2"},
+ {"nearhk", 10532, "\xe2\xa4\xa4"},
+ {"nLtv", 8810, "\xe2\x89\xaa\xcc\xb8"},
+ {"RuleDelayed", 10740, "\xe2\xa7\xb4"},
+ {"smile", 8995, "\xe2\x8c\xa3"},
+ {"coprod", 8720, "\xe2\x88\x90"},
+ {"imof", 8887, "\xe2\x8a\xb7"},
+ {"ecy", 1101, "\xd1\x8d"},
+ {"RightCeiling", 8969, "\xe2\x8c\x89"},
+ {"dlcorn", 8990, "\xe2\x8c\x9e"},
+ {"Nu", 925, "\xce\x9d"},
+ {"frac18", 8539, "\xe2\x85\x9b"},
+ {"diamond", 8900, "\xe2\x8b\x84"},
+ {"Icirc", 206, "\xc3\x8e"},
+ {"ngeq", 8817, "\xe2\x89\xb1"},
+ {"epsilon", 949, "\xce\xb5"},
+ {"fork", 8916, "\xe2\x8b\x94"},
+ {"xrarr", 10230, "\xe2\x9f\xb6"},
+ {"racute", 341, "\xc5\x95"},
+ {"ntlg", 8824, "\xe2\x89\xb8"},
+ {"xvee", 8897, "\xe2\x8b\x81"},
+ {"LeftArrowRightArrow", 8646, "\xe2\x87\x86"},
+ {"DownLeftRightVector", 10576, "\xe2\xa5\x90"},
+ {"Eacute", 201, "\xc3\x89"},
+ {"gimel", 8503, "\xe2\x84\xb7"},
+ {"rtimes", 8906, "\xe2\x8b\x8a"},
+ {"forall", 8704, "\xe2\x88\x80"},
+ {"DiacriticalDoubleAcute", 733, "\xcb\x9d"},
+ {"dArr", 8659, "\xe2\x87\x93"},
+ {"fallingdotseq", 8786, "\xe2\x89\x92"},
+ {"Aogon", 260, "\xc4\x84"},
+ {"PartialD", 8706, "\xe2\x88\x82"},
+ {"mapstoup", 8613, "\xe2\x86\xa5"},
+ {"die", 168, "\xc2\xa8"},
+ {"ngt", 8815, "\xe2\x89\xaf"},
+ {"vcy", 1074, "\xd0\xb2"},
+ {"fjlig", 0, "\x66\x6a"},
+ {"submult", 10945, "\xe2\xab\x81"},
+ {"ubrcy", 1118, "\xd1\x9e"},
+ {"ovbar", 9021, "\xe2\x8c\xbd"},
+ {"bsime", 8909, "\xe2\x8b\x8d"},
+ {"precnsim", 8936, "\xe2\x8b\xa8"},
+ {"DiacriticalTilde", 732, "\xcb\x9c"},
+ {"cwint", 8753, "\xe2\x88\xb1"},
+ {"Scy", 1057, "\xd0\xa1"},
+ {"NotGreaterEqual", 8817, "\xe2\x89\xb1"},
+ {"boxUR", 9562, "\xe2\x95\x9a"},
+ {"LessSlantEqual", 10877, "\xe2\xa9\xbd"},
+ {"Barwed", 8966, "\xe2\x8c\x86"},
+ {"supdot", 10942, "\xe2\xaa\xbe"},
+ {"gel", 8923, "\xe2\x8b\x9b"},
+ {"iscr", 119998, "\xf0\x9d\x92\xbe"},
+ {"doublebarwedge", 8966, "\xe2\x8c\x86"},
+ {"Idot", 304, "\xc4\xb0"},
+ {"DoubleDot", 168, "\xc2\xa8"},
+ {"rsquo", 8217, "\xe2\x80\x99"},
+ {"subsetneqq", 10955, "\xe2\xab\x8b"},
+ {"UpEquilibrium", 10606, "\xe2\xa5\xae"},
+ {"copysr", 8471, "\xe2\x84\x97"},
+ {"RightDoubleBracket", 10215, "\xe2\x9f\xa7"},
+ {"LeftRightVector", 10574, "\xe2\xa5\x8e"},
+ {"DownLeftVectorBar", 10582, "\xe2\xa5\x96"},
+ {"suphsub", 10967, "\xe2\xab\x97"},
+ {"cedil", 184, "\xc2\xb8"},
+ {"prurel", 8880, "\xe2\x8a\xb0"},
+ {"imagpart", 8465, "\xe2\x84\x91"},
+ {"Hscr", 8459, "\xe2\x84\x8b"},
+ {"jmath", 567, "\xc8\xb7"},
+ {"nrtrie", 8941, "\xe2\x8b\xad"},
+ {"nsup", 8837, "\xe2\x8a\x85"},
+ {"Ubrcy", 1038, "\xd0\x8e"},
+ {"succnsim", 8937, "\xe2\x8b\xa9"},
+ {"nesim", 8770, "\xe2\x89\x82\xcc\xb8"},
+ {"varepsilon", 1013, "\xcf\xb5"},
+ {"DoubleRightTee", 8872, "\xe2\x8a\xa8"},
+ {"not", 172, "\xc2\xac"},
+ {"lesdot", 10879, "\xe2\xa9\xbf"},
+ {"backepsilon", 1014, "\xcf\xb6"},
+ {"srarr", 8594, "\xe2\x86\x92"},
+ {"varsubsetneqq", 10955, "\xe2\xab\x8b\xef\xb8\x80"},
+ {"sqcap", 8851, "\xe2\x8a\x93"},
+ {"rightleftarrows", 8644, "\xe2\x87\x84"},
+ {"diams", 9830, "\xe2\x99\xa6"},
+ {"boxdR", 9554, "\xe2\x95\x92"},
+ {"ngeqslant", 10878, "\xe2\xa9\xbe\xcc\xb8"},
+ {"boxDR", 9556, "\xe2\x95\x94"},
+ {"sext", 10038, "\xe2\x9c\xb6"},
+ {"backsim", 8765, "\xe2\x88\xbd"},
+ {"nfr", 120107, "\xf0\x9d\x94\xab"},
+ {"CloseCurlyDoubleQuote", 8221, "\xe2\x80\x9d"},
+ {"npart", 8706, "\xe2\x88\x82\xcc\xb8"},
+ {"dharl", 8643, "\xe2\x87\x83"},
+ {"NewLine", 10, "\x0a"},
+ {"bigotimes", 10754, "\xe2\xa8\x82"},
+ {"lAtail", 10523, "\xe2\xa4\x9b"},
+ {"frac14", 188, "\xc2\xbc"},
+ {"or", 8744, "\xe2\x88\xa8"},
+ {"subedot", 10947, "\xe2\xab\x83"},
+ {"nmid", 8740, "\xe2\x88\xa4"},
+ {"DownArrowUpArrow", 8693, "\xe2\x87\xb5"},
+ {"icy", 1080, "\xd0\xb8"},
+ {"num", 35, "\x23"},
+ {"Gdot", 288, "\xc4\xa0"},
+ {"urcrop", 8974, "\xe2\x8c\x8e"},
+ {"epsiv", 1013, "\xcf\xb5"},
+ {"topcir", 10993, "\xe2\xab\xb1"},
+ {"ne", 8800, "\xe2\x89\xa0"},
+ {"osol", 8856, "\xe2\x8a\x98"},
+ {"amp", 38, "\x26"},
+ {"ncap", 10819, "\xe2\xa9\x83"},
+ {"Sscr", 119982, "\xf0\x9d\x92\xae"},
+ {"sung", 9834, "\xe2\x99\xaa"},
+ {"ltri", 9667, "\xe2\x97\x83"},
+ {"frac25", 8534, "\xe2\x85\x96"},
+ {"DZcy", 1039, "\xd0\x8f"},
+ {"RightUpVector", 8638, "\xe2\x86\xbe"},
+ {"rsquor", 8217, "\xe2\x80\x99"},
+ {"uplus", 8846, "\xe2\x8a\x8e"},
+ {"triangleright", 9657, "\xe2\x96\xb9"},
+ {"lAarr", 8666, "\xe2\x87\x9a"},
+ {"HilbertSpace", 8459, "\xe2\x84\x8b"},
+ {"there4", 8756, "\xe2\x88\xb4"},
+ {"vscr", 120011, "\xf0\x9d\x93\x8b"},
+ {"cirscir", 10690, "\xe2\xa7\x82"},
+ {"roarr", 8702, "\xe2\x87\xbe"},
+ {"hslash", 8463, "\xe2\x84\x8f"},
+ {"supdsub", 10968, "\xe2\xab\x98"},
+ {"simg", 10910, "\xe2\xaa\x9e"},
+ {"trade", 8482, "\xe2\x84\xa2"},
+ {"searrow", 8600, "\xe2\x86\x98"},
+ {"DownLeftVector", 8637, "\xe2\x86\xbd"},
+ {"FilledSmallSquare", 9724, "\xe2\x97\xbc"},
+ {"prod", 8719, "\xe2\x88\x8f"},
+ {"oror", 10838, "\xe2\xa9\x96"},
+ {"udarr", 8645, "\xe2\x87\x85"},
+ {"jsercy", 1112, "\xd1\x98"},
+ {"tprime", 8244, "\xe2\x80\xb4"},
+ {"bprime", 8245, "\xe2\x80\xb5"},
+ {"malt", 10016, "\xe2\x9c\xa0"},
+ {"bigcup", 8899, "\xe2\x8b\x83"},
+ {"oint", 8750, "\xe2\x88\xae"},
+ {"female", 9792, "\xe2\x99\x80"},
+ {"omacr", 333, "\xc5\x8d"},
+ {"SquareSubsetEqual", 8849, "\xe2\x8a\x91"},
+ {"SucceedsEqual", 10928, "\xe2\xaa\xb0"},
+ {"plusacir", 10787, "\xe2\xa8\xa3"},
+ {"Gcirc", 284, "\xc4\x9c"},
+ {"lesdotor", 10883, "\xe2\xaa\x83"},
+ {"escr", 8495, "\xe2\x84\xaf"},
+ {"THORN", 222, "\xc3\x9e"},
+ {"UpArrowBar", 10514, "\xe2\xa4\x92"},
+ {"nvrtrie", 8885, "\xe2\x8a\xb5\xe2\x83\x92"},
+ {"varkappa", 1008, "\xcf\xb0"},
+ {"NotReverseElement", 8716, "\xe2\x88\x8c"},
+ {"zdot", 380, "\xc5\xbc"},
+ {"ExponentialE", 8519, "\xe2\x85\x87"},
+ {"lesseqgtr", 8922, "\xe2\x8b\x9a"},
+ {"cscr", 119992, "\xf0\x9d\x92\xb8"},
+ {"Dscr", 119967, "\xf0\x9d\x92\x9f"},
+ {"lthree", 8907, "\xe2\x8b\x8b"},
+ {"Ccedil", 199, "\xc3\x87"},
+ {"nge", 8817, "\xe2\x89\xb1"},
+ {"UpperLeftArrow", 8598, "\xe2\x86\x96"},
+ {"vDash", 8872, "\xe2\x8a\xa8"},
+ {"efDot", 8786, "\xe2\x89\x92"},
+ {"telrec", 8981, "\xe2\x8c\x95"},
+ {"vellip", 8942, "\xe2\x8b\xae"},
+ {"nrArr", 8655, "\xe2\x87\x8f"},
+ {"ugrave", 249, "\xc3\xb9"},
+ {"uring", 367, "\xc5\xaf"},
+ {"Bernoullis", 8492, "\xe2\x84\xac"},
+ {"nles", 10877, "\xe2\xa9\xbd\xcc\xb8"},
+ {"macr", 175, "\xc2\xaf"},
+ {"boxuR", 9560, "\xe2\x95\x98"},
+ {"clubsuit", 9827, "\xe2\x99\xa3"},
+ {"rightarrowtail", 8611, "\xe2\x86\xa3"},
+ {"epar", 8917, "\xe2\x8b\x95"},
+ {"ltcc", 10918, "\xe2\xaa\xa6"},
+ {"twoheadleftarrow", 8606, "\xe2\x86\x9e"},
+ {"aleph", 8501, "\xe2\x84\xb5"},
+ {"Colon", 8759, "\xe2\x88\xb7"},
+ {"vltri", 8882, "\xe2\x8a\xb2"},
+ {"quaternions", 8461, "\xe2\x84\x8d"},
+ {"rfr", 120111, "\xf0\x9d\x94\xaf"},
+ {"Ouml", 214, "\xc3\x96"},
+ {"rsh", 8625, "\xe2\x86\xb1"},
+ {"emptyv", 8709, "\xe2\x88\x85"},
+ {"sqsup", 8848, "\xe2\x8a\x90"},
+ {"marker", 9646, "\xe2\x96\xae"},
+ {"Efr", 120072, "\xf0\x9d\x94\x88"},
+ {"DotEqual", 8784, "\xe2\x89\x90"},
+ {"eqsim", 8770, "\xe2\x89\x82"},
+ {"NotSucceedsEqual", 10928, "\xe2\xaa\xb0\xcc\xb8"},
+ {"primes", 8473, "\xe2\x84\x99"},
+ {"times", 215, "\xc3\x97"},
+ {"rangd", 10642, "\xe2\xa6\x92"},
+ {"rightharpoonup", 8640, "\xe2\x87\x80"},
+ {"lrhard", 10605, "\xe2\xa5\xad"},
+ {"ape", 8778, "\xe2\x89\x8a"},
+ {"varsupsetneq", 8843, "\xe2\x8a\x8b\xef\xb8\x80"},
+ {"larrlp", 8619, "\xe2\x86\xab"},
+ {"NotPrecedesEqual", 10927, "\xe2\xaa\xaf\xcc\xb8"},
+ {"ulcorner", 8988, "\xe2\x8c\x9c"},
+ {"acd", 8767, "\xe2\x88\xbf"},
+ {"Hacek", 711, "\xcb\x87"},
+ {"xuplus", 10756, "\xe2\xa8\x84"},
+ {"therefore", 8756, "\xe2\x88\xb4"},
+ {"YIcy", 1031, "\xd0\x87"},
+ {"Tfr", 120087, "\xf0\x9d\x94\x97"},
+ {"Jcirc", 308, "\xc4\xb4"},
+ {"LessGreater", 8822, "\xe2\x89\xb6"},
+ {"Uring", 366, "\xc5\xae"},
+ {"Ugrave", 217, "\xc3\x99"},
+ {"rarr", 8594, "\xe2\x86\x92"},
+ {"wopf", 120168, "\xf0\x9d\x95\xa8"},
+ {"imath", 305, "\xc4\xb1"},
+ {"Yopf", 120144, "\xf0\x9d\x95\x90"},
+ {"colone", 8788, "\xe2\x89\x94"},
+ {"csube", 10961, "\xe2\xab\x91"},
+ {"odash", 8861, "\xe2\x8a\x9d"},
+ {"olarr", 8634, "\xe2\x86\xba"},
+ {"angrt", 8735, "\xe2\x88\x9f"},
+ {"NotLeftTriangleBar", 10703, "\xe2\xa7\x8f\xcc\xb8"},
+ {"GreaterEqual", 8805, "\xe2\x89\xa5"},
+ {"scnap", 10938, "\xe2\xaa\xba"},
+ {"pi", 960, "\xcf\x80"},
+ {"lesg", 8922, "\xe2\x8b\x9a\xef\xb8\x80"},
+ {"orderof", 8500, "\xe2\x84\xb4"},
+ {"uacute", 250, "\xc3\xba"},
+ {"Barv", 10983, "\xe2\xab\xa7"},
+ {"Theta", 920, "\xce\x98"},
+ {"leftrightsquigarrow", 8621, "\xe2\x86\xad"},
+ {"Atilde", 195, "\xc3\x83"},
+ {"cupdot", 8845, "\xe2\x8a\x8d"},
+ {"ntriangleright", 8939, "\xe2\x8b\xab"},
+ {"measuredangle", 8737, "\xe2\x88\xa1"},
+ {"jscr", 119999, "\xf0\x9d\x92\xbf"},
+ {"inodot", 305, "\xc4\xb1"},
+ {"mopf", 120158, "\xf0\x9d\x95\x9e"},
+ {"hkswarow", 10534, "\xe2\xa4\xa6"},
+ {"lopar", 10629, "\xe2\xa6\x85"},
+ {"thksim", 8764, "\xe2\x88\xbc"},
+ {"bkarow", 10509, "\xe2\xa4\x8d"},
+ {"rarrfs", 10526, "\xe2\xa4\x9e"},
+ {"ntrianglelefteq", 8940, "\xe2\x8b\xac"},
+ {"Bscr", 8492, "\xe2\x84\xac"},
+ {"topf", 120165, "\xf0\x9d\x95\xa5"},
+ {"Uacute", 218, "\xc3\x9a"},
+ {"lap", 10885, "\xe2\xaa\x85"},
+ {"djcy", 1106, "\xd1\x92"},
+ {"bopf", 120147, "\xf0\x9d\x95\x93"},
+ {"empty", 8709, "\xe2\x88\x85"},
+ {"LeftAngleBracket", 10216, "\xe2\x9f\xa8"},
+ {"Imacr", 298, "\xc4\xaa"},
+ {"ltcir", 10873, "\xe2\xa9\xb9"},
+ {"trisb", 10701, "\xe2\xa7\x8d"},
+ {"gjcy", 1107, "\xd1\x93"},
+ {"pr", 8826, "\xe2\x89\xba"},
+ {"Mu", 924, "\xce\x9c"},
+ {"ogon", 731, "\xcb\x9b"},
+ {"pertenk", 8241, "\xe2\x80\xb1"},
+ {"plustwo", 10791, "\xe2\xa8\xa7"},
+ {"Vfr", 120089, "\xf0\x9d\x94\x99"},
+ {"ApplyFunction", 8289, "\xe2\x81\xa1"},
+ {"Sub", 8912, "\xe2\x8b\x90"},
+ {"DoubleLeftRightArrow", 8660, "\xe2\x87\x94"},
+ {"Lmidot", 319, "\xc4\xbf"},
+ {"nwarrow", 8598, "\xe2\x86\x96"},
+ {"angrtvbd", 10653, "\xe2\xa6\x9d"},
+ {"fcy", 1092, "\xd1\x84"},
+ {"ltlarr", 10614, "\xe2\xa5\xb6"},
+ {"CircleMinus", 8854, "\xe2\x8a\x96"},
+ {"angmsdab", 10665, "\xe2\xa6\xa9"},
+ {"wedgeq", 8793, "\xe2\x89\x99"},
+ {"iogon", 303, "\xc4\xaf"},
+ {"laquo", 171, "\xc2\xab"},
+ {"NestedGreaterGreater", 8811, "\xe2\x89\xab"},
+ {"UnionPlus", 8846, "\xe2\x8a\x8e"},
+ {"CircleDot", 8857, "\xe2\x8a\x99"},
+ {"coloneq", 8788, "\xe2\x89\x94"},
+ {"csupe", 10962, "\xe2\xab\x92"},
+ {"tcaron", 357, "\xc5\xa5"},
+ {"GreaterTilde", 8819, "\xe2\x89\xb3"},
+ {"Map", 10501, "\xe2\xa4\x85"},
+ {"DoubleLongLeftArrow", 10232, "\xe2\x9f\xb8"},
+ {"Uparrow", 8657, "\xe2\x87\x91"},
+ {"scy", 1089, "\xd1\x81"},
+ {"llarr", 8647, "\xe2\x87\x87"},
+ {"rangle", 10217, "\xe2\x9f\xa9"},
+ {"sstarf", 8902, "\xe2\x8b\x86"},
+ {"InvisibleTimes", 8290, "\xe2\x81\xa2"},
+ {"egsdot", 10904, "\xe2\xaa\x98"},
+ {"target", 8982, "\xe2\x8c\x96"},
+ {"lesges", 10899, "\xe2\xaa\x93"},
+ {"curren", 164, "\xc2\xa4"},
+ {"yopf", 120170, "\xf0\x9d\x95\xaa"},
+ {"frac23", 8532, "\xe2\x85\x94"},
+ {"NotSucceedsTilde", 8831, "\xe2\x89\xbf\xcc\xb8"},
+ {"napprox", 8777, "\xe2\x89\x89"},
+ {"odblac", 337, "\xc5\x91"},
+ {"gammad", 989, "\xcf\x9d"},
+ {"dscr", 119993, "\xf0\x9d\x92\xb9"},
+ {"SupersetEqual", 8839, "\xe2\x8a\x87"},
+ {"squf", 9642, "\xe2\x96\xaa"},
+ {"Because", 8757, "\xe2\x88\xb5"},
+ {"sccue", 8829, "\xe2\x89\xbd"},
+ {"KHcy", 1061, "\xd0\xa5"},
+ {"Wcirc", 372, "\xc5\xb4"},
+ {"uparrow", 8593, "\xe2\x86\x91"},
+ {"lessgtr", 8822, "\xe2\x89\xb6"},
+ {"thickapprox", 8776, "\xe2\x89\x88"},
+ {"lbrksld", 10639, "\xe2\xa6\x8f"},
+ {"oslash", 248, "\xc3\xb8"},
+ {"NotCupCap", 8813, "\xe2\x89\xad"},
+ {"elinters", 9191, "\xe2\x8f\xa7"},
+ {"Assign", 8788, "\xe2\x89\x94"},
+ {"ClockwiseContourIntegral", 8754, "\xe2\x88\xb2"},
+ {"lfisht", 10620, "\xe2\xa5\xbc"},
+ {"DownArrow", 8595, "\xe2\x86\x93"},
+ {"Zdot", 379, "\xc5\xbb"},
+ {"xscr", 120013, "\xf0\x9d\x93\x8d"},
+ {"DiacriticalGrave", 96, "\x60"},
+ {"DoubleLongLeftRightArrow", 10234, "\xe2\x9f\xba"},
+ {"angle", 8736, "\xe2\x88\xa0"},
+ {"race", 8765, "\xe2\x88\xbd\xcc\xb1"},
+ {"Ascr", 119964, "\xf0\x9d\x92\x9c"},
+ {"Xscr", 119987, "\xf0\x9d\x92\xb3"},
+ {"acirc", 226, "\xc3\xa2"},
+ {"otimesas", 10806, "\xe2\xa8\xb6"},
+ {"gscr", 8458, "\xe2\x84\x8a"},
+ {"gcy", 1075, "\xd0\xb3"},
+ {"angmsdag", 10670, "\xe2\xa6\xae"},
+ {"tshcy", 1115, "\xd1\x9b"},
+ {"Acy", 1040, "\xd0\x90"},
+ {"NotGreaterLess", 8825, "\xe2\x89\xb9"},
+ {"dtdot", 8945, "\xe2\x8b\xb1"},
+ {"quot", 34, "\x22"},
+ {"micro", 181, "\xc2\xb5"},
+ {"simplus", 10788, "\xe2\xa8\xa4"},
+ {"nsupseteq", 8841, "\xe2\x8a\x89"},
+ {"Ufr", 120088, "\xf0\x9d\x94\x98"},
+ {"Pr", 10939, "\xe2\xaa\xbb"},
+ {"napid", 8779, "\xe2\x89\x8b\xcc\xb8"},
+ {"rceil", 8969, "\xe2\x8c\x89"},
+ {"boxtimes", 8864, "\xe2\x8a\xa0"},
+ {"erarr", 10609, "\xe2\xa5\xb1"},
+ {"downdownarrows", 8650, "\xe2\x87\x8a"},
+ {"Kfr", 120078, "\xf0\x9d\x94\x8e"},
+ {"mho", 8487, "\xe2\x84\xa7"},
+ {"scpolint", 10771, "\xe2\xa8\x93"},
+ {"vArr", 8661, "\xe2\x87\x95"},
+ {"Ccaron", 268, "\xc4\x8c"},
+ {"NotRightTriangle", 8939, "\xe2\x8b\xab"},
+ {"topbot", 9014, "\xe2\x8c\xb6"},
+ {"qopf", 120162, "\xf0\x9d\x95\xa2"},
+ {"eogon", 281, "\xc4\x99"},
+ {"luruhar", 10598, "\xe2\xa5\xa6"},
+ {"gtdot", 8919, "\xe2\x8b\x97"},
+ {"Egrave", 200, "\xc3\x88"},
+ {"roplus", 10798, "\xe2\xa8\xae"},
+ {"Intersection", 8898, "\xe2\x8b\x82"},
+ {"Uarr", 8607, "\xe2\x86\x9f"},
+ {"dcy", 1076, "\xd0\xb4"},
+ {"boxvl", 9508, "\xe2\x94\xa4"},
+ {"RightArrowBar", 8677, "\xe2\x87\xa5"},
+ {"yuml", 255, "\xc3\xbf"},
+ {"parallel", 8741, "\xe2\x88\xa5"},
+ {"succneqq", 10934, "\xe2\xaa\xb6"},
+ {"bemptyv", 10672, "\xe2\xa6\xb0"},
+ {"starf", 9733, "\xe2\x98\x85"},
+ {"OverBar", 8254, "\xe2\x80\xbe"},
+ {"Alpha", 913, "\xce\x91"},
+ {"LeftUpVectorBar", 10584, "\xe2\xa5\x98"},
+ {"ufr", 120114, "\xf0\x9d\x94\xb2"},
+ {"swarhk", 10534, "\xe2\xa4\xa6"},
+ {"GreaterEqualLess", 8923, "\xe2\x8b\x9b"},
+ {"sscr", 120008, "\xf0\x9d\x93\x88"},
+ {"Pi", 928, "\xce\xa0"},
+ {"boxh", 9472, "\xe2\x94\x80"},
+ {"frac16", 8537, "\xe2\x85\x99"},
+ {"lbrack", 91, "\x5b"},
+ {"vert", 124, "\x7c"},
+ {"precneqq", 10933, "\xe2\xaa\xb5"},
+ {"NotGreaterSlantEqual", 10878, "\xe2\xa9\xbe\xcc\xb8"},
+ {"Omega", 937, "\xce\xa9"},
+ {"uarr", 8593, "\xe2\x86\x91"},
+ {"boxVr", 9567, "\xe2\x95\x9f"},
+ {"ruluhar", 10600, "\xe2\xa5\xa8"},
+ {"ShortLeftArrow", 8592, "\xe2\x86\x90"},
+ {"Qfr", 120084, "\xf0\x9d\x94\x94"},
+ {"olt", 10688, "\xe2\xa7\x80"},
+ {"nequiv", 8802, "\xe2\x89\xa2"},
+ {"fscr", 119995, "\xf0\x9d\x92\xbb"},
+ {"rarrhk", 8618, "\xe2\x86\xaa"},
+ {"nsqsupe", 8931, "\xe2\x8b\xa3"},
+ {"nsubseteq", 8840, "\xe2\x8a\x88"},
+ {"numero", 8470, "\xe2\x84\x96"},
+ {"emsp14", 8197, "\xe2\x80\x85"},
+ {"gl", 8823, "\xe2\x89\xb7"},
+ {"ocirc", 244, "\xc3\xb4"},
+ {"weierp", 8472, "\xe2\x84\x98"},
+ {"boxvL", 9569, "\xe2\x95\xa1"},
+ {"RightArrowLeftArrow", 8644, "\xe2\x87\x84"},
+ {"Precedes", 8826, "\xe2\x89\xba"},
+ {"RightVector", 8640, "\xe2\x87\x80"},
+ {"xcup", 8899, "\xe2\x8b\x83"},
+ {"angmsdad", 10667, "\xe2\xa6\xab"},
+ {"gtrsim", 8819, "\xe2\x89\xb3"},
+ {"natural", 9838, "\xe2\x99\xae"},
+ {"nVdash", 8878, "\xe2\x8a\xae"},
+ {"RightTriangleEqual", 8885, "\xe2\x8a\xb5"},
+ {"dscy", 1109, "\xd1\x95"},
+ {"leftthreetimes", 8907, "\xe2\x8b\x8b"},
+ {"prsim", 8830, "\xe2\x89\xbe"},
+ {"Bcy", 1041, "\xd0\x91"},
+ {"Chi", 935, "\xce\xa7"},
+ {"timesb", 8864, "\xe2\x8a\xa0"},
+ {"Del", 8711, "\xe2\x88\x87"},
+ {"lmidot", 320, "\xc5\x80"},
+ {"RightDownVector", 8642, "\xe2\x87\x82"},
+ {"simdot", 10858, "\xe2\xa9\xaa"},
+ {"FilledVerySmallSquare", 9642, "\xe2\x96\xaa"},
+ {"NotLessSlantEqual", 10877, "\xe2\xa9\xbd\xcc\xb8"},
+ {"SucceedsTilde", 8831, "\xe2\x89\xbf"},
+ {"duarr", 8693, "\xe2\x87\xb5"},
+ {"apE", 10864, "\xe2\xa9\xb0"},
+ {"odot", 8857, "\xe2\x8a\x99"},
+ {"mldr", 8230, "\xe2\x80\xa6"},
+ {"Uarrocir", 10569, "\xe2\xa5\x89"},
+ {"nLl", 8920, "\xe2\x8b\x98\xcc\xb8"},
+ {"rarrpl", 10565, "\xe2\xa5\x85"},
+ {"cir", 9675, "\xe2\x97\x8b"},
+ {"blk14", 9617, "\xe2\x96\x91"},
+ {"VerticalLine", 124, "\x7c"},
+ {"jcy", 1081, "\xd0\xb9"},
+ {"filig", 64257, "\xef\xac\x81"},
+ {"LongRightArrow", 10230, "\xe2\x9f\xb6"},
+ {"beta", 946, "\xce\xb2"},
+ {"ccupssm", 10832, "\xe2\xa9\x90"},
+ {"supsub", 10964, "\xe2\xab\x94"},
+ {"spar", 8741, "\xe2\x88\xa5"},
+ {"Tstrok", 358, "\xc5\xa6"},
+ {"isinv", 8712, "\xe2\x88\x88"},
+ {"rightsquigarrow", 8605, "\xe2\x86\x9d"},
+ {"Diamond", 8900, "\xe2\x8b\x84"},
+ {"curlyeqsucc", 8927, "\xe2\x8b\x9f"},
+ {"ijlig", 307, "\xc4\xb3"},
+ {"puncsp", 8200, "\xe2\x80\x88"},
+ {"hamilt", 8459, "\xe2\x84\x8b"},
+ {"mapstoleft", 8612, "\xe2\x86\xa4"},
+ {"Copf", 8450, "\xe2\x84\x82"},
+ {"prnsim", 8936, "\xe2\x8b\xa8"},
+ {"DotDot", 8412, "\xe2\x83\x9c"},
+ {"lobrk", 10214, "\xe2\x9f\xa6"},
+ {"twoheadrightarrow", 8608, "\xe2\x86\xa0"},
+ {"ngE", 8807, "\xe2\x89\xa7\xcc\xb8"},
+ {"cylcty", 9005, "\xe2\x8c\xad"},
+ {"sube", 8838, "\xe2\x8a\x86"},
+ {"NotEqualTilde", 8770, "\xe2\x89\x82\xcc\xb8"},
+ {"Yuml", 376, "\xc5\xb8"},
+ {"comp", 8705, "\xe2\x88\x81"},
+ {"dotminus", 8760, "\xe2\x88\xb8"},
+ {"crarr", 8629, "\xe2\x86\xb5"},
+ {"imped", 437, "\xc6\xb5"},
+ {"barwedge", 8965, "\xe2\x8c\x85"},
+ {"harrcir", 10568, "\xe2\xa5\x88"},
};
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libserver/html_tags.h b/src/libserver/html_tags.h
index c865fa21a..8f430204e 100644
--- a/src/libserver/html_tags.h
+++ b/src/libserver/html_tags.h
@@ -16,9 +16,12 @@
#ifndef SRC_LIBSERVER_HTML_TAGS_H_
#define SRC_LIBSERVER_HTML_TAGS_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/* Known HTML tags */
-typedef enum
-{
+typedef enum {
Tag_UNKNOWN, /**< Unknown tag! */
Tag_A, /**< A */
Tag_ABBR, /**< ABBR */
@@ -196,5 +199,8 @@ typedef enum
/* Unique elements */
#define CM_UNIQUE (1 << 22)
+#ifdef __cplusplus
+}
+#endif
#endif /* SRC_LIBSERVER_HTML_TAGS_H_ */
diff --git a/src/libserver/milter.h b/src/libserver/milter.h
index 7906aeadf..00fd38488 100644
--- a/src/libserver/milter.h
+++ b/src/libserver/milter.h
@@ -23,6 +23,10 @@
#include "contrib/libev/ev.h"
#include "ref.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
enum rspamd_milter_reply {
RSPAMD_MILTER_ADDRCPT = '+',
RSPAMD_MILTER_DELRCPT = '-',
@@ -69,10 +73,11 @@ struct rspamd_milter_session {
};
typedef void (*rspamd_milter_finish) (gint fd,
- struct rspamd_milter_session *session, void *ud);
+ struct rspamd_milter_session *session, void *ud);
+
typedef void (*rspamd_milter_error) (gint fd,
- struct rspamd_milter_session *session,
- void *ud, GError *err);
+ struct rspamd_milter_session *session,
+ void *ud, GError *err);
/**
* Handles socket with milter protocol
@@ -83,9 +88,9 @@ typedef void (*rspamd_milter_error) (gint fd,
* @return
*/
gboolean rspamd_milter_handle_socket (gint fd, ev_tstamp timeout,
- rspamd_mempool_t *pool,
- struct ev_loop *ev_base, rspamd_milter_finish finish_cb,
- rspamd_milter_error error_cb, void *ud);
+ rspamd_mempool_t *pool,
+ struct ev_loop *ev_base, rspamd_milter_finish finish_cb,
+ rspamd_milter_error error_cb, void *ud);
/**
* Updates userdata for a session, returns previous userdata
@@ -93,8 +98,8 @@ gboolean rspamd_milter_handle_socket (gint fd, ev_tstamp timeout,
* @param ud
* @return
*/
-void * rspamd_milter_update_userdata (struct rspamd_milter_session *session,
- void *ud);
+void *rspamd_milter_update_userdata (struct rspamd_milter_session *session,
+ void *ud);
/**
* Sets SMTP reply string
@@ -105,9 +110,9 @@ void * rspamd_milter_update_userdata (struct rspamd_milter_session *session,
* @return
*/
gboolean rspamd_milter_set_reply (struct rspamd_milter_session *session,
- rspamd_fstring_t *rcode,
- rspamd_fstring_t *xcode,
- rspamd_fstring_t *reply);
+ rspamd_fstring_t *rcode,
+ rspamd_fstring_t *xcode,
+ rspamd_fstring_t *reply);
/**
* Send some action to the MTA
@@ -117,7 +122,7 @@ gboolean rspamd_milter_set_reply (struct rspamd_milter_session *session,
* @return
*/
gboolean rspamd_milter_send_action (struct rspamd_milter_session *session,
- enum rspamd_milter_reply act, ...);
+ enum rspamd_milter_reply act, ...);
/**
* Adds some header
@@ -127,7 +132,7 @@ gboolean rspamd_milter_send_action (struct rspamd_milter_session *session,
* @return
*/
gboolean rspamd_milter_add_header (struct rspamd_milter_session *session,
- GString *name, GString *value);
+ GString *name, GString *value);
/**
* Removes some header
@@ -136,11 +141,11 @@ gboolean rspamd_milter_add_header (struct rspamd_milter_session *session,
* @return
*/
gboolean rspamd_milter_del_header (struct rspamd_milter_session *session,
- GString *name);
+ GString *name);
void rspamd_milter_session_unref (struct rspamd_milter_session *session);
-struct rspamd_milter_session * rspamd_milter_session_ref (
+struct rspamd_milter_session *rspamd_milter_session_ref (
struct rspamd_milter_session *session);
/**
@@ -148,7 +153,7 @@ struct rspamd_milter_session * rspamd_milter_session_ref (
* @param session
* @return
*/
-struct rspamd_http_message * rspamd_milter_to_http (
+struct rspamd_http_message *rspamd_milter_to_http (
struct rspamd_milter_session *session);
/**
@@ -157,7 +162,7 @@ struct rspamd_http_message * rspamd_milter_to_http (
* @param results
*/
void rspamd_milter_send_task_results (struct rspamd_milter_session *session,
- const ucl_object_t *results);
+ const ucl_object_t *results);
/**
* Init internal milter context
@@ -173,4 +178,8 @@ void rspamd_milter_init_library (const struct rspamd_milter_context *ctx);
rspamd_mempool_t *rspamd_milter_get_session_pool (
struct rspamd_milter_session *session);
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libserver/milter_internal.h b/src/libserver/milter_internal.h
index 41862a169..fff6de38f 100644
--- a/src/libserver/milter_internal.h
+++ b/src/libserver/milter_internal.h
@@ -24,6 +24,10 @@
#include "libutil/str_util.h"
#include "libutil/libev_helper.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
enum rspamd_milter_state {
st_len_1 = 0,
st_len_2,
@@ -97,45 +101,45 @@ enum rspamd_milter_io_cmd {
/*
* Protocol flags
*/
-#define RSPAMD_MILTER_FLAG_NOUNKNOWN (1L<<8) /* filter does not want unknown cmd */
-#define RSPAMD_MILTER_FLAG_NODATA (1L<<9) /* filter does not want DATA */
-#define RSPAMD_MILTER_FLAG_NR_HDR (1L<<7) /* filter won't reply for header */
-#define RSPAMD_MILTER_FLAG_SKIP (1L<<10)/* MTA supports SMFIR_SKIP */
-#define RSPAMD_MILTER_FLAG_RCPT_REJ (1L<<11)/* filter wants rejected RCPTs */
-#define RSPAMD_MILTER_FLAG_NR_CONN (1L<<12)/* filter won't reply for connect */
-#define RSPAMD_MILTER_FLAG_NR_HELO (1L<<13)/* filter won't reply for HELO */
-#define RSPAMD_MILTER_FLAG_NR_MAIL (1L<<14)/* filter won't reply for MAIL */
-#define RSPAMD_MILTER_FLAG_NR_RCPT (1L<<15)/* filter won't reply for RCPT */
-#define RSPAMD_MILTER_FLAG_NR_DATA (1L<<16)/* filter won't reply for DATA */
-#define RSPAMD_MILTER_FLAG_NR_UNKN (1L<<17)/* filter won't reply for UNKNOWN */
-#define RSPAMD_MILTER_FLAG_NR_EOH (1L<<18)/* filter won't reply for eoh */
-#define RSPAMD_MILTER_FLAG_NR_BODY (1L<<19)/* filter won't reply for body chunk */
+#define RSPAMD_MILTER_FLAG_NOUNKNOWN (1L<<8) /* filter does not want unknown cmd */
+#define RSPAMD_MILTER_FLAG_NODATA (1L<<9) /* filter does not want DATA */
+#define RSPAMD_MILTER_FLAG_NR_HDR (1L<<7) /* filter won't reply for header */
+#define RSPAMD_MILTER_FLAG_SKIP (1L<<10)/* MTA supports SMFIR_SKIP */
+#define RSPAMD_MILTER_FLAG_RCPT_REJ (1L<<11)/* filter wants rejected RCPTs */
+#define RSPAMD_MILTER_FLAG_NR_CONN (1L<<12)/* filter won't reply for connect */
+#define RSPAMD_MILTER_FLAG_NR_HELO (1L<<13)/* filter won't reply for HELO */
+#define RSPAMD_MILTER_FLAG_NR_MAIL (1L<<14)/* filter won't reply for MAIL */
+#define RSPAMD_MILTER_FLAG_NR_RCPT (1L<<15)/* filter won't reply for RCPT */
+#define RSPAMD_MILTER_FLAG_NR_DATA (1L<<16)/* filter won't reply for DATA */
+#define RSPAMD_MILTER_FLAG_NR_UNKN (1L<<17)/* filter won't reply for UNKNOWN */
+#define RSPAMD_MILTER_FLAG_NR_EOH (1L<<18)/* filter won't reply for eoh */
+#define RSPAMD_MILTER_FLAG_NR_BODY (1L<<19)/* filter won't reply for body chunk */
/*
* For now, we specify that we want to reply just after EOM
*/
#define RSPAMD_MILTER_FLAG_NOREPLY_MASK \
- (RSPAMD_MILTER_FLAG_NR_CONN | RSPAMD_MILTER_FLAG_NR_HELO | \
- RSPAMD_MILTER_FLAG_NR_MAIL | RSPAMD_MILTER_FLAG_NR_RCPT | \
- RSPAMD_MILTER_FLAG_NR_DATA | RSPAMD_MILTER_FLAG_NR_UNKN | \
- RSPAMD_MILTER_FLAG_NR_HDR | RSPAMD_MILTER_FLAG_NR_EOH | \
- RSPAMD_MILTER_FLAG_NR_BODY)
+ (RSPAMD_MILTER_FLAG_NR_CONN | RSPAMD_MILTER_FLAG_NR_HELO | \
+ RSPAMD_MILTER_FLAG_NR_MAIL | RSPAMD_MILTER_FLAG_NR_RCPT | \
+ RSPAMD_MILTER_FLAG_NR_DATA | RSPAMD_MILTER_FLAG_NR_UNKN | \
+ RSPAMD_MILTER_FLAG_NR_HDR | RSPAMD_MILTER_FLAG_NR_EOH | \
+ RSPAMD_MILTER_FLAG_NR_BODY)
/*
* Options that the filter may send at initial handshake time, and message
* modifications that the filter may request at the end of the message body.
*/
-#define RSPAMD_MILTER_FLAG_ADDHDRS (1L<<0) /* filter may add headers */
-#define RSPAMD_MILTER_FLAG_CHGBODY (1L<<1) /* filter may replace body */
-#define RSPAMD_MILTER_FLAG_ADDRCPT (1L<<2) /* filter may add recipients */
-#define RSPAMD_MILTER_FLAG_DELRCPT (1L<<3) /* filter may delete recipients */
-#define RSPAMD_MILTER_FLAG_CHGHDRS (1L<<4) /* filter may change/delete headers */
-#define RSPAMD_MILTER_FLAG_QUARANTINE (1L<<5) /* filter may request quarantine */
+#define RSPAMD_MILTER_FLAG_ADDHDRS (1L<<0) /* filter may add headers */
+#define RSPAMD_MILTER_FLAG_CHGBODY (1L<<1) /* filter may replace body */
+#define RSPAMD_MILTER_FLAG_ADDRCPT (1L<<2) /* filter may add recipients */
+#define RSPAMD_MILTER_FLAG_DELRCPT (1L<<3) /* filter may delete recipients */
+#define RSPAMD_MILTER_FLAG_CHGHDRS (1L<<4) /* filter may change/delete headers */
+#define RSPAMD_MILTER_FLAG_QUARANTINE (1L<<5) /* filter may request quarantine */
#define RSPAMD_MILTER_ACTIONS_MASK \
- (RSPAMD_MILTER_FLAG_ADDHDRS | RSPAMD_MILTER_FLAG_ADDRCPT | \
- RSPAMD_MILTER_FLAG_DELRCPT | RSPAMD_MILTER_FLAG_CHGHDRS | \
- RSPAMD_MILTER_FLAG_QUARANTINE)
+ (RSPAMD_MILTER_FLAG_ADDHDRS | RSPAMD_MILTER_FLAG_ADDRCPT | \
+ RSPAMD_MILTER_FLAG_DELRCPT | RSPAMD_MILTER_FLAG_CHGHDRS | \
+ RSPAMD_MILTER_FLAG_QUARANTINE)
enum rspamd_milter_connect_proto {
RSPAMD_MILTER_CONN_UNKNOWN = 'U',
@@ -163,4 +167,9 @@ enum rspamd_milter_connect_proto {
#define RSPAMD_MILTER_SPAM_HEADER "X-Spam"
#define RSPAMD_MILTER_DKIM_HEADER "DKIM-Signature"
#define RSPAMD_MILTER_ACTION_HEADER "X-Rspamd-Action"
+
+#ifdef __cplusplus
+}
#endif
+
+#endif \ No newline at end of file
diff --git a/src/libserver/monitored.h b/src/libserver/monitored.h
index 0189e0e6c..5b2b60d11 100644
--- a/src/libserver/monitored.h
+++ b/src/libserver/monitored.h
@@ -19,6 +19,10 @@
#include "config.h"
#include "rdns.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_monitored;
struct rspamd_monitored_ctx;
struct rspamd_config;
@@ -41,8 +45,9 @@ enum rspamd_monitored_flags {
struct rspamd_monitored_ctx *rspamd_monitored_ctx_init (void);
typedef void (*mon_change_cb) (struct rspamd_monitored_ctx *ctx,
- struct rspamd_monitored *m, gboolean alive,
- void *ud);
+ struct rspamd_monitored *m, gboolean alive,
+ void *ud);
+
/**
* Configure context for monitored objects
* @param ctx context
@@ -51,11 +56,11 @@ typedef void (*mon_change_cb) (struct rspamd_monitored_ctx *ctx,
* @param resolver resolver object
*/
void rspamd_monitored_ctx_config (struct rspamd_monitored_ctx *ctx,
- struct rspamd_config *cfg,
- struct ev_loop *ev_base,
- struct rdns_resolver *resolver,
- mon_change_cb change_cb,
- gpointer ud);
+ struct rspamd_config *cfg,
+ struct ev_loop *ev_base,
+ struct rdns_resolver *resolver,
+ mon_change_cb change_cb,
+ gpointer ud);
struct ev_loop *rspamd_monitored_ctx_get_ev_base (struct rspamd_monitored_ctx *ctx);
@@ -74,8 +79,9 @@ struct rspamd_monitored *rspamd_monitored_create_ (
enum rspamd_monitored_flags flags,
const ucl_object_t *opts,
const gchar *loc);
+
#define rspamd_monitored_create(ctx, line, type, flags, opts) \
- rspamd_monitored_create_(ctx, line, type, flags, opts, G_STRFUNC)
+ rspamd_monitored_create_(ctx, line, type, flags, opts, G_STRFUNC)
/**
* Return monitored by its tag
@@ -83,8 +89,8 @@ struct rspamd_monitored *rspamd_monitored_create_ (
* @param tag
* @return
*/
-struct rspamd_monitored * rspamd_monitored_by_tag (struct rspamd_monitored_ctx *ctx,
- guchar tag[RSPAMD_MONITORED_TAG_LEN]);
+struct rspamd_monitored *rspamd_monitored_by_tag (struct rspamd_monitored_ctx *ctx,
+ guchar tag[RSPAMD_MONITORED_TAG_LEN]);
/**
* Sets `tag_out` to the monitored tag
@@ -92,7 +98,7 @@ struct rspamd_monitored * rspamd_monitored_by_tag (struct rspamd_monitored_ctx *
* @param tag_out
*/
void rspamd_monitored_get_tag (struct rspamd_monitored *m,
- guchar tag_out[RSPAMD_MONITORED_TAG_LEN]);
+ guchar tag_out[RSPAMD_MONITORED_TAG_LEN]);
/**
* Return TRUE if monitored object is alive
@@ -134,6 +140,7 @@ gdouble rspamd_monitored_latency (struct rspamd_monitored *m);
* @param m
*/
void rspamd_monitored_stop (struct rspamd_monitored *m);
+
/**
* Explicitly enable monitored object
* @param m
@@ -146,4 +153,8 @@ void rspamd_monitored_start (struct rspamd_monitored *m);
*/
void rspamd_monitored_ctx_destroy (struct rspamd_monitored_ctx *ctx);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* SRC_LIBSERVER_MONITORED_H_ */
diff --git a/src/libserver/protocol.h b/src/libserver/protocol.h
index 2059110fb..280ceedcb 100644
--- a/src/libserver/protocol.h
+++ b/src/libserver/protocol.h
@@ -11,6 +11,10 @@
#include "http_connection.h"
#include "task.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#define RSPAMD_BASE_ERROR 500
#define RSPAMD_FILTER_ERROR RSPAMD_BASE_ERROR + 1
#define RSPAMD_NETWORK_ERROR RSPAMD_BASE_ERROR + 2
@@ -40,7 +44,7 @@ struct rspamd_metric;
* @return
*/
gboolean rspamd_protocol_handle_headers (struct rspamd_task *task,
- struct rspamd_http_message *msg);
+ struct rspamd_http_message *msg);
/**
* Process control chunk and update task structure accordingly
@@ -49,7 +53,7 @@ gboolean rspamd_protocol_handle_headers (struct rspamd_task *task,
* @return
*/
gboolean rspamd_protocol_handle_control (struct rspamd_task *task,
- const ucl_object_t *control);
+ const ucl_object_t *control);
/**
* Process HTTP request to the task structure
@@ -58,7 +62,7 @@ gboolean rspamd_protocol_handle_control (struct rspamd_task *task,
* @return
*/
gboolean rspamd_protocol_handle_request (struct rspamd_task *task,
- struct rspamd_http_message *msg);
+ struct rspamd_http_message *msg);
/**
* Write task results to http message
@@ -66,7 +70,8 @@ gboolean rspamd_protocol_handle_request (struct rspamd_task *task,
* @param task
*/
void rspamd_protocol_http_reply (struct rspamd_http_message *msg,
- struct rspamd_task *task, ucl_object_t **pobj);
+ struct rspamd_task *task, ucl_object_t **pobj);
+
/**
* Write data to log pipes
* @param task
@@ -84,19 +89,20 @@ enum rspamd_protocol_flags {
};
#define RSPAMD_PROTOCOL_DEFAULT (RSPAMD_PROTOCOL_BASIC| \
- RSPAMD_PROTOCOL_METRICS| \
- RSPAMD_PROTOCOL_MESSAGES| \
- RSPAMD_PROTOCOL_RMILTER| \
- RSPAMD_PROTOCOL_DKIM| \
- RSPAMD_PROTOCOL_EXTRA)
+ RSPAMD_PROTOCOL_METRICS| \
+ RSPAMD_PROTOCOL_MESSAGES| \
+ RSPAMD_PROTOCOL_RMILTER| \
+ RSPAMD_PROTOCOL_DKIM| \
+ RSPAMD_PROTOCOL_EXTRA)
+
/**
* Write reply to ucl object filling log buffer
* @param task
* @param logbuf
* @return
*/
-ucl_object_t * rspamd_protocol_write_ucl (struct rspamd_task *task,
- enum rspamd_protocol_flags flags);
+ucl_object_t *rspamd_protocol_write_ucl (struct rspamd_task *task,
+ enum rspamd_protocol_flags flags);
/**
* Write reply for specified task command
@@ -112,9 +118,13 @@ void rspamd_protocol_write_reply (struct rspamd_task *task, ev_tstamp timeout);
* @param out
*/
void rspamd_ucl_torspamc_output (const ucl_object_t *top,
- rspamd_fstring_t **out);
+ rspamd_fstring_t **out);
+
+void rspamd_ucl_tospamc_output (const ucl_object_t *top,
+ rspamd_fstring_t **out);
-void rspamd_ucl_tospamc_output (const ucl_object_t *top,
- rspamd_fstring_t **out);
+#ifdef __cplusplus
+}
+#endif
#endif
diff --git a/src/libserver/protocol_internal.h b/src/libserver/protocol_internal.h
index fb2ee115a..1c49a04f2 100644
--- a/src/libserver/protocol_internal.h
+++ b/src/libserver/protocol_internal.h
@@ -17,6 +17,10 @@
#ifndef RSPAMD_PROTOCOL_INTERNAL_H
#define RSPAMD_PROTOCOL_INTERNAL_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/*
* Just check if the passed message is spam or not and reply as
* described below
@@ -85,4 +89,8 @@
#define MAILER_HEADER "Mailer"
#define RAW_DATA_HEADER "Raw"
+#ifdef __cplusplus
+}
+#endif
+
#endif //RSPAMD_PROTOCOL_INTERNAL_H
diff --git a/src/libserver/re_cache.h b/src/libserver/re_cache.h
index 15146c5dd..b9f80375e 100644
--- a/src/libserver/re_cache.h
+++ b/src/libserver/re_cache.h
@@ -19,6 +19,10 @@
#include "config.h"
#include "libutil/regexp.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_re_cache;
struct rspamd_re_runtime;
struct rspamd_task;
@@ -76,14 +80,14 @@ rspamd_re_cache_add (struct rspamd_re_cache *cache, rspamd_regexp_t *re,
* @param with regexp object to replace the origin
*/
void rspamd_re_cache_replace (struct rspamd_re_cache *cache,
- rspamd_regexp_t *what,
- rspamd_regexp_t *with);
+ rspamd_regexp_t *what,
+ rspamd_regexp_t *with);
/**
* Initialize and optimize re cache structure
*/
void rspamd_re_cache_init (struct rspamd_re_cache *cache,
- struct rspamd_config *cfg);
+ struct rspamd_config *cfg);
/**
* Returns true when hyperscan is loaded
@@ -95,13 +99,13 @@ gboolean rspamd_re_cache_is_hs_loaded (struct rspamd_re_cache *cache);
/**
* Get runtime data for a cache
*/
-struct rspamd_re_runtime* rspamd_re_cache_runtime_new (struct rspamd_re_cache *cache);
+struct rspamd_re_runtime *rspamd_re_cache_runtime_new (struct rspamd_re_cache *cache);
/**
* Get runtime statistics
*/
const struct rspamd_re_cache_stat *
- rspamd_re_cache_get_stat (struct rspamd_re_runtime *rt);
+rspamd_re_cache_get_stat (struct rspamd_re_runtime *rt);
/**
* Process regexp runtime and return the result for a specific regexp
@@ -114,17 +118,17 @@ const struct rspamd_re_cache_stat *
* @param is_strong use case sensitive match when looking for headers
*/
gint rspamd_re_cache_process (struct rspamd_task *task,
- rspamd_regexp_t *re,
- enum rspamd_re_type type,
- gconstpointer type_data,
- gsize datalen,
- gboolean is_strong);
+ rspamd_regexp_t *re,
+ enum rspamd_re_type type,
+ gconstpointer type_data,
+ gsize datalen,
+ gboolean is_strong);
int rspamd_re_cache_process_ffi (void *ptask,
- void *pre,
- int type,
- void *type_data,
- int is_strong);
+ void *pre,
+ int type,
+ void *type_data,
+ int is_strong);
/**
* Destroy runtime data
@@ -135,6 +139,7 @@ void rspamd_re_cache_runtime_destroy (struct rspamd_re_runtime *rt);
* Unref re cache
*/
void rspamd_re_cache_unref (struct rspamd_re_cache *cache);
+
/**
* Retain reference to re cache
*/
@@ -148,7 +153,7 @@ guint rspamd_re_cache_set_limit (struct rspamd_re_cache *cache, guint limit);
/**
* Convert re type to a human readable string (constant one)
*/
-const gchar * rspamd_re_cache_type_to_string (enum rspamd_re_type type);
+const gchar *rspamd_re_cache_type_to_string (enum rspamd_re_type type);
/**
* Convert re type string to the type enum
@@ -159,25 +164,30 @@ enum rspamd_re_type rspamd_re_cache_type_from_string (const char *str);
* Compile expressions to the hyperscan tree and store in the `cache_dir`
*/
gint rspamd_re_cache_compile_hyperscan (struct rspamd_re_cache *cache,
- const char *cache_dir, gdouble max_time, gboolean silent,
- GError **err);
+ const char *cache_dir, gdouble max_time, gboolean silent,
+ GError **err);
/**
* Returns TRUE if the specified file is valid hyperscan cache
*/
gboolean rspamd_re_cache_is_valid_hyperscan_file (struct rspamd_re_cache *cache,
- const char *path, gboolean silent, gboolean try_load);
+ const char *path, gboolean silent, gboolean try_load);
/**
* Loads all hyperscan regexps precompiled
*/
gboolean rspamd_re_cache_load_hyperscan (struct rspamd_re_cache *cache,
- const char *cache_dir);
+ const char *cache_dir);
/**
* Registers lua selector in the cache
*/
void rspamd_re_cache_add_selector (struct rspamd_re_cache *cache,
- const gchar *sname, gint ref);
+ const gchar *sname, gint ref);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libserver/redis_pool.h b/src/libserver/redis_pool.h
index 7a9bf99ab..0df650326 100644
--- a/src/libserver/redis_pool.h
+++ b/src/libserver/redis_pool.h
@@ -18,6 +18,10 @@
#include "config.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_redis_pool;
struct rspamd_config;
struct redisAsyncContext;
@@ -35,8 +39,8 @@ struct rspamd_redis_pool *rspamd_redis_pool_init (void);
* @param ev_base
*/
void rspamd_redis_pool_config (struct rspamd_redis_pool *pool,
- struct rspamd_config *cfg,
- struct ev_loop *ev_base);
+ struct rspamd_config *cfg,
+ struct ev_loop *ev_base);
/**
@@ -48,7 +52,7 @@ void rspamd_redis_pool_config (struct rspamd_redis_pool *pool,
* @param port
* @return
*/
-struct redisAsyncContext* rspamd_redis_pool_connect (
+struct redisAsyncContext *rspamd_redis_pool_connect (
struct rspamd_redis_pool *pool,
const gchar *db, const gchar *password,
const char *ip, int port);
@@ -65,7 +69,8 @@ enum rspamd_redis_pool_release_type {
* @param ctx
*/
void rspamd_redis_pool_release_connection (struct rspamd_redis_pool *pool,
- struct redisAsyncContext *ctx, enum rspamd_redis_pool_release_type how);
+ struct redisAsyncContext *ctx,
+ enum rspamd_redis_pool_release_type how);
/**
* Stops redis pool and destroys it
@@ -78,6 +83,10 @@ void rspamd_redis_pool_destroy (struct rspamd_redis_pool *pool);
* @param type
* @return
*/
-const gchar* rspamd_redis_type_to_string (int type);
+const gchar *rspamd_redis_type_to_string (int type);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* SRC_LIBSERVER_REDIS_POOL_H_ */
diff --git a/src/libserver/roll_history.h b/src/libserver/roll_history.h
index d0f140098..aeb731e82 100644
--- a/src/libserver/roll_history.h
+++ b/src/libserver/roll_history.h
@@ -19,6 +19,10 @@
#include "config.h"
#include "mem_pool.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/*
* Roll history is a special cycled buffer for checked messages, it is designed for writing history messages
* and displaying them in webui
@@ -58,8 +62,8 @@ struct roll_history {
* @param pool pool for shared memory
* @return new structure
*/
-struct roll_history * rspamd_roll_history_new (rspamd_mempool_t *pool,
- guint max_rows, struct rspamd_config *cfg);
+struct roll_history *rspamd_roll_history_new (rspamd_mempool_t *pool,
+ guint max_rows, struct rspamd_config *cfg);
/**
* Update roll history with data from task
@@ -67,7 +71,7 @@ struct roll_history * rspamd_roll_history_new (rspamd_mempool_t *pool,
* @param task task object
*/
void rspamd_roll_history_update (struct roll_history *history,
- struct rspamd_task *task);
+ struct rspamd_task *task);
/**
* Load previously saved history from file
@@ -76,7 +80,7 @@ void rspamd_roll_history_update (struct roll_history *history,
* @return TRUE if history has been loaded
*/
gboolean rspamd_roll_history_load (struct roll_history *history,
- const gchar *filename);
+ const gchar *filename);
/**
* Save history to file
@@ -85,6 +89,10 @@ gboolean rspamd_roll_history_load (struct roll_history *history,
* @return TRUE if history has been saved
*/
gboolean rspamd_roll_history_save (struct roll_history *history,
- const gchar *filename);
+ const gchar *filename);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* ROLL_HISTORY_H_ */
diff --git a/src/libserver/rspamd_control.h b/src/libserver/rspamd_control.h
index 1928ab00f..08d3946c7 100644
--- a/src/libserver/rspamd_control.h
+++ b/src/libserver/rspamd_control.h
@@ -20,6 +20,10 @@
#include "mem_pool.h"
#include "contrib/libev/ev.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_main;
struct rspamd_worker;
@@ -179,42 +183,42 @@ struct rspamd_srv_reply {
};
typedef gboolean (*rspamd_worker_control_handler) (struct rspamd_main *rspamd_main,
- struct rspamd_worker *worker,
- gint fd,
- gint attached_fd,
- struct rspamd_control_command *cmd,
- gpointer ud);
+ struct rspamd_worker *worker,
+ gint fd,
+ gint attached_fd,
+ struct rspamd_control_command *cmd,
+ gpointer ud);
typedef void (*rspamd_srv_reply_handler) (struct rspamd_worker *worker,
- struct rspamd_srv_reply *rep, gint rep_fd,
- gpointer ud);
+ struct rspamd_srv_reply *rep, gint rep_fd,
+ gpointer ud);
/**
* Process client socket connection
*/
void rspamd_control_process_client_socket (struct rspamd_main *rspamd_main,
- gint fd, rspamd_inet_addr_t *addr);
+ gint fd, rspamd_inet_addr_t *addr);
/**
* Register default handlers for a worker
*/
void rspamd_control_worker_add_default_handler (struct rspamd_worker *worker,
- struct ev_loop *ev_base);
+ struct ev_loop *ev_base);
/**
* Register custom handler for a specific control command for this worker
*/
void rspamd_control_worker_add_cmd_handler (struct rspamd_worker *worker,
- enum rspamd_control_type type,
- rspamd_worker_control_handler handler,
- gpointer ud);
+ enum rspamd_control_type type,
+ rspamd_worker_control_handler handler,
+ gpointer ud);
/**
* Start watching on srv pipe
*/
void rspamd_srv_start_watching (struct rspamd_main *srv,
- struct rspamd_worker *worker,
- struct ev_loop *ev_base);
+ struct rspamd_worker *worker,
+ struct ev_loop *ev_base);
/**
@@ -222,9 +226,14 @@ void rspamd_srv_start_watching (struct rspamd_main *srv,
* end
*/
void rspamd_srv_send_command (struct rspamd_worker *worker,
- struct ev_loop *ev_base,
- struct rspamd_srv_command *cmd,
- gint attached_fd,
- rspamd_srv_reply_handler handler,
- gpointer ud);
+ struct ev_loop *ev_base,
+ struct rspamd_srv_command *cmd,
+ gint attached_fd,
+ rspamd_srv_reply_handler handler,
+ gpointer ud);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libserver/rspamd_symcache.h b/src/libserver/rspamd_symcache.h
index 640a1c898..ce2f3f7bf 100644
--- a/src/libserver/rspamd_symcache.h
+++ b/src/libserver/rspamd_symcache.h
@@ -19,9 +19,14 @@
#include "config.h"
#include "ucl.h"
#include "cfg_file.h"
-#include <lua.h>
#include "contrib/libev/ev.h"
+#include <lua.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_task;
struct rspamd_config;
struct rspamd_symcache;
@@ -29,9 +34,9 @@ struct rspamd_worker;
struct rspamd_symcache_item;
struct rspamd_config_settings_elt;
-typedef void (*symbol_func_t)(struct rspamd_task *task,
- struct rspamd_symcache_item *item,
- gpointer user_data);
+typedef void (*symbol_func_t) (struct rspamd_task *task,
+ struct rspamd_symcache_item *item,
+ gpointer user_data);
enum rspamd_symbol_type {
SYMBOL_TYPE_NORMAL = (1u << 0u),
@@ -67,7 +72,7 @@ struct rspamd_abstract_callback_data {
* Creates new cache structure
* @return
*/
-struct rspamd_symcache* rspamd_symcache_new (struct rspamd_config *cfg);
+struct rspamd_symcache *rspamd_symcache_new (struct rspamd_config *cfg);
/**
* Remove the cache structure syncing data if needed
@@ -112,6 +117,7 @@ gint rspamd_symcache_add_symbol (struct rspamd_symcache *cache,
*/
void rspamd_symcache_set_peak_callback (struct rspamd_symcache *cache,
gint cbref);
+
/**
* Add delayed condition to the specific symbol in cache. So symbol can be absent
* to the moment of addition
@@ -149,14 +155,15 @@ gboolean rspamd_symcache_stat_symbol (struct rspamd_symcache *cache,
gdouble *freq_stddev,
gdouble *tm,
guint *nhits);
+
/**
* Find symbol in cache by its id
* @param cache
* @param id
* @return symbol's name or NULL
*/
-const gchar * rspamd_symcache_symbol_by_id (struct rspamd_symcache *cache,
- gint id);
+const gchar *rspamd_symcache_symbol_by_id (struct rspamd_symcache *cache,
+ gint id);
/**
* Returns number of symbols registered in symbols cache
@@ -243,13 +250,14 @@ void rspamd_symcache_disable_symbol_perm (struct rspamd_symcache *cache,
*/
void rspamd_symcache_enable_symbol_perm (struct rspamd_symcache *cache,
const gchar *symbol);
+
/**
* Get abstract callback data for a symbol (or its parent symbol)
* @param cache cache object
* @param symbol symbol name
* @return abstract callback data or NULL if symbol is absent or has no data attached
*/
-struct rspamd_abstract_callback_data* rspamd_symcache_get_cbdata (
+struct rspamd_abstract_callback_data *rspamd_symcache_get_cbdata (
struct rspamd_symcache *cache, const gchar *symbol);
/**
@@ -259,7 +267,7 @@ struct rspamd_abstract_callback_data* rspamd_symcache_get_cbdata (
* @return
*/
const gchar *rspamd_symcache_get_parent (struct rspamd_symcache *cache,
- const gchar *symbol);
+ const gchar *symbol);
/**
* Adds flags to a symbol
@@ -269,15 +277,16 @@ const gchar *rspamd_symcache_get_parent (struct rspamd_symcache *cache,
* @return
*/
gboolean rspamd_symcache_add_symbol_flags (struct rspamd_symcache *cache,
- const gchar *symbol,
- guint flags);
+ const gchar *symbol,
+ guint flags);
gboolean rspamd_symcache_set_symbol_flags (struct rspamd_symcache *cache,
const gchar *symbol,
guint flags);
guint rspamd_symcache_get_symbol_flags (struct rspamd_symcache *cache,
- const gchar *symbol);
+ const gchar *symbol);
+
/**
* Process settings for task
* @param task
@@ -338,6 +347,7 @@ gboolean rspamd_symcache_enable_symbol (struct rspamd_task *task,
gboolean rspamd_symcache_disable_symbol (struct rspamd_task *task,
struct rspamd_symcache *cache,
const gchar *symbol);
+
/**
* Process specific function for each cache element (in order they are added)
* @param cache
@@ -377,20 +387,24 @@ void rspamd_symcache_finalize_item (struct rspamd_task *task,
* Increase number of async events pending for an item
*/
guint rspamd_symcache_item_async_inc_full (struct rspamd_task *task,
- struct rspamd_symcache_item *item,
- const gchar *subsystem,
- const gchar *loc);
+ struct rspamd_symcache_item *item,
+ const gchar *subsystem,
+ const gchar *loc);
+
#define rspamd_symcache_item_async_inc(task, item, subsystem) \
- rspamd_symcache_item_async_inc_full(task, item, subsystem, G_STRLOC)
+ rspamd_symcache_item_async_inc_full(task, item, subsystem, G_STRLOC)
+
/*
* Decrease number of async events pending for an item, asserts if no events pending
*/
guint rspamd_symcache_item_async_dec_full (struct rspamd_task *task,
- struct rspamd_symcache_item *item,
- const gchar *subsystem,
- const gchar *loc);
+ struct rspamd_symcache_item *item,
+ const gchar *subsystem,
+ const gchar *loc);
+
#define rspamd_symcache_item_async_dec(task, item, subsystem) \
- rspamd_symcache_item_async_dec_full(task, item, subsystem, G_STRLOC)
+ rspamd_symcache_item_async_dec_full(task, item, subsystem, G_STRLOC)
+
/**
* Decrease number of async events pending for an item, asserts if no events pending
* If no events are left, this function calls `rspamd_symbols_cache_finalize_item` and returns TRUE
@@ -399,11 +413,12 @@ guint rspamd_symcache_item_async_dec_full (struct rspamd_task *task,
* @return
*/
gboolean rspamd_symcache_item_async_dec_check_full (struct rspamd_task *task,
- struct rspamd_symcache_item *item,
- const gchar *subsystem,
- const gchar *loc);
+ struct rspamd_symcache_item *item,
+ const gchar *subsystem,
+ const gchar *loc);
+
#define rspamd_symcache_item_async_dec_check(task, item, subsystem) \
- rspamd_symcache_item_async_dec_check_full(task, item, subsystem, G_STRLOC)
+ rspamd_symcache_item_async_dec_check_full(task, item, subsystem, G_STRLOC)
/**
* Disables execution of all symbols, excluding those specified in `skip_mask`
@@ -446,9 +461,9 @@ bool rspamd_symcache_set_allowed_settings_ids (struct rspamd_symcache *cache,
* @param nids
*/
bool rspamd_symcache_set_forbidden_settings_ids (struct rspamd_symcache *cache,
- const gchar *symbol,
- const guint32 *ids,
- guint nids);
+ const gchar *symbol,
+ const guint32 *ids,
+ guint nids);
/**
* Returns allowed ids for a symbol as a constant array
@@ -457,9 +472,10 @@ bool rspamd_symcache_set_forbidden_settings_ids (struct rspamd_symcache *cache,
* @param nids
* @return
*/
-const guint32* rspamd_symcache_get_allowed_settings_ids (struct rspamd_symcache *cache,
+const guint32 *rspamd_symcache_get_allowed_settings_ids (struct rspamd_symcache *cache,
const gchar *symbol,
guint *nids);
+
/**
* Returns denied ids for a symbol as a constant array
* @param cache
@@ -467,9 +483,9 @@ const guint32* rspamd_symcache_get_allowed_settings_ids (struct rspamd_symcache
* @param nids
* @return
*/
-const guint32* rspamd_symcache_get_forbidden_settings_ids (struct rspamd_symcache *cache,
- const gchar *symbol,
- guint *nids);
+const guint32 *rspamd_symcache_get_forbidden_settings_ids (struct rspamd_symcache *cache,
+ const gchar *symbol,
+ guint *nids);
/**
@@ -499,4 +515,9 @@ gboolean rspamd_symcache_is_item_allowed (struct rspamd_task *task,
* @return
*/
enum rspamd_symbol_type rspamd_symcache_item_flags (struct rspamd_symcache_item *item);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libserver/spf.h b/src/libserver/spf.h
index 722e98c03..725d84fe4 100644
--- a/src/libserver/spf.h
+++ b/src/libserver/spf.h
@@ -5,11 +5,15 @@
#include "ref.h"
#include "addr.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_task;
struct spf_resolved;
-typedef void (*spf_cb_t)(struct spf_resolved *record,
- struct rspamd_task *task, gpointer cbdata);
+typedef void (*spf_cb_t) (struct spf_resolved *record,
+ struct rspamd_task *task, gpointer cbdata);
typedef enum spf_mech_e {
SPF_FAIL,
@@ -74,18 +78,18 @@ struct spf_resolved {
* Resolve spf record for specified task and call a callback after resolution fails/succeed
*/
gboolean rspamd_spf_resolve (struct rspamd_task *task, spf_cb_t callback,
- gpointer cbdata);
+ gpointer cbdata);
/*
* Get a domain for spf for specified task
*/
-const gchar * rspamd_spf_get_domain (struct rspamd_task *task);
+const gchar *rspamd_spf_get_domain (struct rspamd_task *task);
/*
* Increase refcount
*/
-struct spf_resolved * spf_record_ref (struct spf_resolved *rec);
+struct spf_resolved *spf_record_ref (struct spf_resolved *rec);
/*
* Decrease refcount
@@ -105,6 +109,11 @@ gchar *spf_addr_mask_to_string (struct spf_addr *addr);
* @param rec
* @return
*/
-struct spf_addr * spf_addr_match_task (struct rspamd_task *task,
- struct spf_resolved *rec);
+struct spf_addr *spf_addr_match_task (struct rspamd_task *task,
+ struct spf_resolved *rec);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libserver/task.h b/src/libserver/task.h
index d581378b7..ac55dd910 100644
--- a/src/libserver/task.h
+++ b/src/libserver/task.h
@@ -24,6 +24,10 @@
#include "dns.h"
#include "re_cache.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
enum rspamd_command {
CMD_CHECK,
CMD_SYMBOLS,
@@ -58,33 +62,33 @@ enum rspamd_task_stage {
};
#define RSPAMD_TASK_PROCESS_ALL (RSPAMD_TASK_STAGE_CONNECT | \
- RSPAMD_TASK_STAGE_ENVELOPE | \
- RSPAMD_TASK_STAGE_READ_MESSAGE | \
- RSPAMD_TASK_STAGE_PRE_FILTERS | \
- RSPAMD_TASK_STAGE_PROCESS_MESSAGE | \
- RSPAMD_TASK_STAGE_FILTERS | \
- RSPAMD_TASK_STAGE_CLASSIFIERS_PRE | \
- RSPAMD_TASK_STAGE_CLASSIFIERS | \
- RSPAMD_TASK_STAGE_CLASSIFIERS_POST | \
- RSPAMD_TASK_STAGE_COMPOSITES | \
- RSPAMD_TASK_STAGE_POST_FILTERS | \
- RSPAMD_TASK_STAGE_LEARN_PRE | \
- RSPAMD_TASK_STAGE_LEARN | \
- RSPAMD_TASK_STAGE_LEARN_POST | \
- RSPAMD_TASK_STAGE_COMPOSITES_POST | \
- RSPAMD_TASK_STAGE_IDEMPOTENT | \
- RSPAMD_TASK_STAGE_DONE)
+ RSPAMD_TASK_STAGE_ENVELOPE | \
+ RSPAMD_TASK_STAGE_READ_MESSAGE | \
+ RSPAMD_TASK_STAGE_PRE_FILTERS | \
+ RSPAMD_TASK_STAGE_PROCESS_MESSAGE | \
+ RSPAMD_TASK_STAGE_FILTERS | \
+ RSPAMD_TASK_STAGE_CLASSIFIERS_PRE | \
+ RSPAMD_TASK_STAGE_CLASSIFIERS | \
+ RSPAMD_TASK_STAGE_CLASSIFIERS_POST | \
+ RSPAMD_TASK_STAGE_COMPOSITES | \
+ RSPAMD_TASK_STAGE_POST_FILTERS | \
+ RSPAMD_TASK_STAGE_LEARN_PRE | \
+ RSPAMD_TASK_STAGE_LEARN | \
+ RSPAMD_TASK_STAGE_LEARN_POST | \
+ RSPAMD_TASK_STAGE_COMPOSITES_POST | \
+ RSPAMD_TASK_STAGE_IDEMPOTENT | \
+ RSPAMD_TASK_STAGE_DONE)
#define RSPAMD_TASK_PROCESS_LEARN (RSPAMD_TASK_STAGE_CONNECT | \
- RSPAMD_TASK_STAGE_ENVELOPE | \
- RSPAMD_TASK_STAGE_READ_MESSAGE | \
- RSPAMD_TASK_STAGE_PROCESS_MESSAGE | \
- RSPAMD_TASK_STAGE_CLASSIFIERS_PRE | \
- RSPAMD_TASK_STAGE_CLASSIFIERS | \
- RSPAMD_TASK_STAGE_CLASSIFIERS_POST | \
- RSPAMD_TASK_STAGE_LEARN_PRE | \
- RSPAMD_TASK_STAGE_LEARN | \
- RSPAMD_TASK_STAGE_LEARN_POST | \
- RSPAMD_TASK_STAGE_DONE)
+ RSPAMD_TASK_STAGE_ENVELOPE | \
+ RSPAMD_TASK_STAGE_READ_MESSAGE | \
+ RSPAMD_TASK_STAGE_PROCESS_MESSAGE | \
+ RSPAMD_TASK_STAGE_CLASSIFIERS_PRE | \
+ RSPAMD_TASK_STAGE_CLASSIFIERS | \
+ RSPAMD_TASK_STAGE_CLASSIFIERS_POST | \
+ RSPAMD_TASK_STAGE_LEARN_PRE | \
+ RSPAMD_TASK_STAGE_LEARN | \
+ RSPAMD_TASK_STAGE_LEARN_POST | \
+ RSPAMD_TASK_STAGE_DONE)
#define RSPAMD_TASK_FLAG_MIME (1u << 0u)
#define RSPAMD_TASK_FLAG_JSON (1u << 1u)
@@ -135,80 +139,82 @@ enum rspamd_newlines_type;
* Worker task structure
*/
struct rspamd_task {
- struct rspamd_worker *worker; /**< pointer to worker object */
- enum rspamd_command cmd; /**< command */
- gint sock; /**< socket descriptor */
- guint32 flags; /**< Bit flags */
- guint32 dns_requests; /**< number of DNS requests per this task */
- gulong message_len; /**< Message length */
- gchar *helo; /**< helo header value */
- gchar *queue_id; /**< queue id if specified */
- const gchar *message_id; /**< message id */
- rspamd_inet_addr_t *from_addr; /**< from addr for a task */
- rspamd_inet_addr_t *client_addr; /**< address of connected socket */
- gchar *deliver_to; /**< address to deliver */
- gchar *user; /**< user to deliver */
- gchar *subject; /**< subject (for non-mime) */
- const gchar *hostname; /**< hostname reported by MTA */
- GHashTable *request_headers; /**< HTTP headers in a request */
- GHashTable *reply_headers; /**< Custom reply headers */
+ struct rspamd_worker *worker; /**< pointer to worker object */
+ enum rspamd_command cmd; /**< command */
+ gint sock; /**< socket descriptor */
+ guint32 flags; /**< Bit flags */
+ guint32 dns_requests; /**< number of DNS requests per this task */
+ gulong message_len; /**< Message length */
+ gchar *helo; /**< helo header value */
+ gchar *queue_id; /**< queue id if specified */
+ const gchar *message_id; /**< message id */
+ rspamd_inet_addr_t *from_addr; /**< from addr for a task */
+ rspamd_inet_addr_t *client_addr; /**< address of connected socket */
+ gchar *deliver_to; /**< address to deliver */
+ gchar *user; /**< user to deliver */
+ gchar *subject; /**< subject (for non-mime) */
+ const gchar *hostname; /**< hostname reported by MTA */
+ GHashTable *request_headers; /**< HTTP headers in a request */
+ GHashTable *reply_headers; /**< Custom reply headers */
struct {
const gchar *begin;
gsize len;
gchar *fpath;
- } msg; /**< message buffer */
- struct rspamd_http_connection *http_conn; /**< HTTP server connection */
- struct rspamd_async_session * s; /**< async session object */
- GPtrArray *parts; /**< list of parsed parts */
- GPtrArray *text_parts; /**< list of text parts */
+ } msg; /**< message buffer */
+ struct rspamd_http_connection *http_conn; /**< HTTP server connection */
+ struct rspamd_async_session *s; /**< async session object */
+ GPtrArray *parts; /**< list of parsed parts */
+ GPtrArray *text_parts; /**< list of text parts */
struct {
const gchar *begin;
gsize len;
const gchar *body_start;
- } raw_headers_content; /**< list of raw headers */
- GPtrArray *received; /**< list of received headers */
- GHashTable *urls; /**< list of parsed urls */
- GHashTable *emails; /**< list of parsed emails */
- GHashTable *raw_headers; /**< list of raw headers */
- GQueue *headers_order; /**< order of raw headers */
- struct rspamd_metric_result *result; /**< Metric result */
- GHashTable *lua_cache; /**< cache of lua objects */
- GPtrArray *tokens; /**< statistics tokens */
- GArray *meta_words; /**< rspamd_stat_token_t produced from meta headers
+ } raw_headers_content; /**< list of raw headers */
+ GPtrArray *received; /**< list of received headers */
+ GHashTable *urls; /**< list of parsed urls */
+ GHashTable *emails; /**< list of parsed emails */
+ GHashTable *raw_headers; /**< list of raw headers */
+ GQueue *headers_order; /**< order of raw headers */
+ struct rspamd_metric_result *result; /**< Metric result */
+ GHashTable *lua_cache; /**< cache of lua objects */
+ GPtrArray *tokens; /**< statistics tokens */
+ GArray *meta_words; /**< rspamd_stat_token_t produced from meta headers
(e.g. Subject) */
GPtrArray *rcpt_mime;
- GPtrArray *rcpt_envelope; /**< array of rspamd_email_address */
+ GPtrArray *rcpt_envelope; /**< array of rspamd_email_address */
GPtrArray *from_mime;
struct rspamd_email_address *from_envelope;
- enum rspamd_newlines_type nlines_type; /**< type of newlines (detected on most of headers */
+ enum rspamd_newlines_type nlines_type; /**< type of newlines (detected on most of headers */
- ucl_object_t *messages; /**< list of messages that would be reported */
- struct rspamd_re_runtime *re_rt; /**< regexp runtime */
- GPtrArray *stat_runtimes; /**< backend runtime */
- struct rspamd_config *cfg; /**< pointer to config object */
+ ucl_object_t *messages; /**< list of messages that would be reported */
+ struct rspamd_re_runtime *re_rt; /**< regexp runtime */
+ GPtrArray *stat_runtimes; /**< backend runtime */
+ struct rspamd_config *cfg; /**< pointer to config object */
GError *err;
- rspamd_mempool_t *task_pool; /**< memory pool for task */
+ rspamd_mempool_t *task_pool; /**< memory pool for task */
double time_virtual;
double time_real_finish;
double time_virtual_finish;
ev_tstamp task_timestamp;
- gboolean (*fin_callback)(struct rspamd_task *task, void *arg);
- /**< callback for filters finalizing */
- void *fin_arg; /**< argument for fin callback */
-
- struct rspamd_dns_resolver *resolver; /**< DNS resolver */
- struct ev_loop *event_loop; /**< Event base */
- struct ev_timer timeout_ev; /**< Global task timeout */
- struct ev_io guard_ev; /**< Event for input sanity guard */
-
- gpointer checkpoint; /**< Opaque checkpoint data */
- ucl_object_t *settings; /**< Settings applied to task */
- guint32 processed_stages; /**< bits of stages that are processed */
- struct rspamd_config_settings_elt *settings_elt; /**< preprocessed settings id elt */
-
- const gchar *classifier; /**< Classifier to learn (if needed) */
- struct rspamd_lang_detector *lang_det; /**< Languages detector */
+
+ gboolean (*fin_callback) (struct rspamd_task *task, void *arg);
+
+ /**< callback for filters finalizing */
+ void *fin_arg; /**< argument for fin callback */
+
+ struct rspamd_dns_resolver *resolver; /**< DNS resolver */
+ struct ev_loop *event_loop; /**< Event base */
+ struct ev_timer timeout_ev; /**< Global task timeout */
+ struct ev_io guard_ev; /**< Event for input sanity guard */
+
+ gpointer checkpoint; /**< Opaque checkpoint data */
+ ucl_object_t *settings; /**< Settings applied to task */
+ guint32 processed_stages; /**< bits of stages that are processed */
+ struct rspamd_config_settings_elt *settings_elt; /**< preprocessed settings id elt */
+
+ const gchar *classifier; /**< Classifier to learn (if needed) */
+ struct rspamd_lang_detector *lang_det; /**< Languages detector */
guchar digest[16];
};
@@ -220,6 +226,7 @@ struct rspamd_task *rspamd_task_new (struct rspamd_worker *worker,
rspamd_mempool_t *pool,
struct rspamd_lang_detector *lang_det,
struct ev_loop *event_loop);
+
/**
* Destroy task object and remove its IO dispatcher if it exists
*/
@@ -245,7 +252,7 @@ gboolean rspamd_task_fin (void *arg);
* @return
*/
gboolean rspamd_task_load_message (struct rspamd_task *task,
- struct rspamd_http_message *msg, const gchar *start, gsize len);
+ struct rspamd_http_message *msg, const gchar *start, gsize len);
/**
* Process task
@@ -259,7 +266,7 @@ gboolean rspamd_task_process (struct rspamd_task *task, guint stages);
* @param task
* @return
*/
-struct rspamd_email_address* rspamd_task_get_sender (struct rspamd_task *task);
+struct rspamd_email_address *rspamd_task_get_sender (struct rspamd_task *task);
/**
* Return addresses in the following precedence:
@@ -287,9 +294,9 @@ gboolean rspamd_task_add_recipient (struct rspamd_task *task, const gchar *rcpt)
* @return true if learn succeed
*/
gboolean rspamd_learn_task_spam (struct rspamd_task *task,
- gboolean is_spam,
- const gchar *classifier,
- GError **err);
+ gboolean is_spam,
+ const gchar *classifier,
+ GError **err);
/**
* Returns required score for a message (usually reject score)
@@ -298,8 +305,9 @@ gboolean rspamd_learn_task_spam (struct rspamd_task *task,
* @return
*/
struct rspamd_metric_result;
+
gdouble rspamd_task_get_required_score (struct rspamd_task *task,
- struct rspamd_metric_result *m);
+ struct rspamd_metric_result *m);
/**
* Returns the first header as value for a header
@@ -307,8 +315,8 @@ gdouble rspamd_task_get_required_score (struct rspamd_task *task,
* @param name
* @return
*/
-rspamd_ftok_t * rspamd_task_get_request_header (struct rspamd_task *task,
- const gchar *name);
+rspamd_ftok_t *rspamd_task_get_request_header (struct rspamd_task *task,
+ const gchar *name);
/**
* Returns all headers with the specific name
@@ -316,8 +324,8 @@ rspamd_ftok_t * rspamd_task_get_request_header (struct rspamd_task *task,
* @param name
* @return
*/
-GPtrArray* rspamd_task_get_request_header_multiple (struct rspamd_task *task,
- const gchar *name);
+GPtrArray *rspamd_task_get_request_header_multiple (struct rspamd_task *task,
+ const gchar *name);
/**
* Adds a new request header to task (name and value should be mapped to fstring)
@@ -326,7 +334,7 @@ GPtrArray* rspamd_task_get_request_header_multiple (struct rspamd_task *task,
* @param value
*/
void rspamd_task_add_request_header (struct rspamd_task *task,
- rspamd_ftok_t *name, rspamd_ftok_t *value);
+ rspamd_ftok_t *name, rspamd_ftok_t *value);
/**
* Write log line about the specified task if needed
@@ -340,7 +348,7 @@ void rspamd_task_write_log (struct rspamd_task *task);
* @param value
*/
void rspamd_task_profile_set (struct rspamd_task *task, const gchar *key,
- gdouble value);
+ gdouble value);
/**
* Get value for a specific profiling key
@@ -348,7 +356,7 @@ void rspamd_task_profile_set (struct rspamd_task *task, const gchar *key,
* @param key
* @return
*/
-gdouble* rspamd_task_profile_get (struct rspamd_task *task, const gchar *key);
+gdouble *rspamd_task_profile_get (struct rspamd_task *task, const gchar *key);
/**
* Sets finishing time for a task if not yet set
@@ -364,4 +372,8 @@ gboolean rspamd_task_set_finish_time (struct rspamd_task *task);
*/
const gchar *rspamd_task_stage_name (enum rspamd_task_stage stg);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* TASK_H_ */
diff --git a/src/libserver/url.h b/src/libserver/url.h
index 734f48bbf..6f1ccf59f 100644
--- a/src/libserver/url.h
+++ b/src/libserver/url.h
@@ -6,6 +6,10 @@
#include "mem_pool.h"
#include "fstring.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_task;
struct rspamd_mime_text_part;
@@ -106,7 +110,9 @@ enum rspamd_url_find_type {
* @param cfg
*/
void rspamd_url_init (const gchar *tld_file);
+
void rspamd_url_deinit (void);
+
/*
* Parse urls inside text
* @param pool memory pool
@@ -147,10 +153,11 @@ gboolean rspamd_url_find (rspamd_mempool_t *pool,
enum rspamd_url_find_type how,
goffset *url_pos,
gboolean *prefix_added);
+
/*
* Return text representation of url parsing error
*/
-const gchar * rspamd_url_strerror (int err);
+const gchar *rspamd_url_strerror (int err);
/**
@@ -163,7 +170,7 @@ const gchar * rspamd_url_strerror (int err);
gboolean rspamd_url_find_tld (const gchar *in, gsize inlen, rspamd_ftok_t *out);
typedef void (*url_insert_function) (struct rspamd_url *url,
- gsize start_offset, gsize end_offset, void *ud);
+ gsize start_offset, gsize end_offset, void *ud);
/**
* Search for multiple urls in text and call `func` for each url found
@@ -180,6 +187,7 @@ void rspamd_url_find_multiple (rspamd_mempool_t *pool,
GPtrArray *nlines,
url_insert_function func,
gpointer ud);
+
/**
* Search for a single url in text and call `func` for each url found
* @param pool
@@ -217,7 +225,9 @@ void rspamd_url_add_tag (struct rspamd_url *url, const gchar *tag,
rspamd_mempool_t *pool);
guint rspamd_url_hash (gconstpointer u);
+
guint rspamd_email_hash (gconstpointer u);
+
guint rspamd_url_host_hash (gconstpointer u);
@@ -226,6 +236,7 @@ gboolean rspamd_emails_cmp (gconstpointer a, gconstpointer b);
/* Compare two urls for building emails hash */
gboolean rspamd_urls_cmp (gconstpointer a, gconstpointer b);
+
gboolean rspamd_urls_host_cmp (gconstpointer a, gconstpointer b);
/**
@@ -244,8 +255,8 @@ gsize rspamd_url_decode (gchar *dst, const gchar *src, gsize size);
* @param pool
* @return
*/
-const gchar * rspamd_url_encode (struct rspamd_url *url, gsize *dlen,
- rspamd_mempool_t *pool);
+const gchar *rspamd_url_encode (struct rspamd_url *url, gsize *dlen,
+ rspamd_mempool_t *pool);
/**
@@ -260,7 +271,7 @@ gboolean rspamd_url_is_domain (int c);
* @param proto
* @return
*/
-const gchar* rspamd_url_protocol_name (enum rspamd_url_protocol proto);
+const gchar *rspamd_url_protocol_name (enum rspamd_url_protocol proto);
/**
@@ -269,4 +280,9 @@ const gchar* rspamd_url_protocol_name (enum rspamd_url_protocol proto);
* @return
*/
enum rspamd_url_protocol rspamd_url_protocol_from_string (const gchar *str);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libserver/worker_util.h b/src/libserver/worker_util.h
index d3ea738aa..d0966e009 100644
--- a/src/libserver/worker_util.h
+++ b/src/libserver/worker_util.h
@@ -21,10 +21,16 @@
#include "http_connection.h"
#include "rspamd.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#ifndef HAVE_SA_SIGINFO
typedef void (*rspamd_sig_handler_t) (gint);
#else
+
typedef void (*rspamd_sig_handler_t) (gint, siginfo_t *, void *);
+
#endif
struct rspamd_worker;
@@ -37,7 +43,7 @@ struct rspamd_worker_signal_handler;
*/
void rspamd_worker_init_signals (struct rspamd_worker *worker, struct ev_loop *event_loop);
-typedef void (*rspamd_accept_handler)(struct ev_loop *loop, ev_io *w, int revents);
+typedef void (*rspamd_accept_handler) (struct ev_loop *loop, ev_io *w, int revents);
/**
* Prepare worker's startup
@@ -55,10 +61,10 @@ rspamd_prepare_worker (struct rspamd_worker *worker, const char *name,
* Set special signal handler for a worker
*/
void rspamd_worker_set_signal_handler (int signo,
- struct rspamd_worker *worker,
- struct ev_loop *event_loop,
- rspamd_worker_signal_cb_t handler,
- void *handler_data);
+ struct rspamd_worker *worker,
+ struct ev_loop *event_loop,
+ rspamd_worker_signal_cb_t handler,
+ void *handler_data);
/**
* Stop accepting new connections for a worker
@@ -67,9 +73,9 @@ void rspamd_worker_set_signal_handler (int signo,
void rspamd_worker_stop_accept (struct rspamd_worker *worker);
typedef gint (*rspamd_controller_func_t) (
- struct rspamd_http_connection_entry *conn_ent,
- struct rspamd_http_message *msg,
- struct module_ctx *ctx);
+ struct rspamd_http_connection_entry *conn_ent,
+ struct rspamd_http_message *msg,
+ struct module_ctx *ctx);
struct rspamd_custom_controller_command {
const gchar *command;
@@ -102,7 +108,7 @@ struct rspamd_controller_session {
* @param error_msg error message
*/
void rspamd_controller_send_error (struct rspamd_http_connection_entry *entry,
- gint code, const gchar *error_msg, ...);
+ gint code, const gchar *error_msg, ...);
/**
* Send a custom string using HTTP
@@ -110,7 +116,7 @@ void rspamd_controller_send_error (struct rspamd_http_connection_entry *entry,
* @param str string to send
*/
void rspamd_controller_send_string (struct rspamd_http_connection_entry *entry,
- const gchar *str);
+ const gchar *str);
/**
* Send UCL using HTTP and JSON serialization
@@ -118,14 +124,14 @@ void rspamd_controller_send_string (struct rspamd_http_connection_entry *entry,
* @param obj object to send
*/
void rspamd_controller_send_ucl (struct rspamd_http_connection_entry *entry,
- ucl_object_t *obj);
+ ucl_object_t *obj);
/**
* Return worker's control structure by its type
* @param type
* @return worker's control structure or NULL
*/
-worker_t * rspamd_get_worker_by_type (struct rspamd_config *cfg, GQuark type);
+worker_t *rspamd_get_worker_by_type (struct rspamd_config *cfg, GQuark type);
/**
* Block signals before terminations
@@ -162,8 +168,8 @@ gboolean rspamd_worker_is_primary_controller (struct rspamd_worker *w);
* @param w
* @return
*/
-void * rspamd_worker_session_cache_new (struct rspamd_worker *w,
- struct ev_loop *ev_base);
+void *rspamd_worker_session_cache_new (struct rspamd_worker *w,
+ struct ev_loop *ev_base);
/**
* Adds a new session identified by pointer
@@ -173,7 +179,7 @@ void * rspamd_worker_session_cache_new (struct rspamd_worker *w,
* @param ptr
*/
void rspamd_worker_session_cache_add (void *cache, const gchar *tag,
- guint *pref, void *ptr);
+ guint *pref, void *ptr);
/**
* Removes session from cache
@@ -202,8 +208,8 @@ void rspamd_set_crash_handler (struct rspamd_main *);
* @param resolver
*/
void rspamd_worker_init_monitored (struct rspamd_worker *worker,
- struct ev_loop *ev_base,
- struct rspamd_dns_resolver *resolver);
+ struct ev_loop *ev_base,
+ struct rspamd_dns_resolver *resolver);
/**
* Performs throttling for accept events
@@ -221,15 +227,17 @@ void rspamd_worker_throttle_accept_events (gint sock, void *data);
* @return TRUE if refork is desired
*/
gboolean rspamd_check_termination_clause (struct rspamd_main *rspamd_main,
- struct rspamd_worker *wrk, int status);
+ struct rspamd_worker *wrk, int status);
#ifdef WITH_HYPERSCAN
struct rspamd_control_command;
+
gboolean rspamd_worker_hyperscan_ready (struct rspamd_main *rspamd_main,
struct rspamd_worker *worker, gint fd,
gint attached_fd,
struct rspamd_control_command *cmd,
gpointer ud);
+
#endif
#define msg_err_main(...) rspamd_default_log_function (G_LOG_LEVEL_CRITICAL, \
@@ -245,4 +253,8 @@ gboolean rspamd_worker_hyperscan_ready (struct rspamd_main *rspamd_main,
G_STRFUNC, \
__VA_ARGS__)
+#ifdef __cplusplus
+}
+#endif
+
#endif /* WORKER_UTIL_H_ */
diff --git a/src/libstat/backends/backends.h b/src/libstat/backends/backends.h
index 025e9bf34..fa3785540 100644
--- a/src/libstat/backends/backends.h
+++ b/src/libstat/backends/backends.h
@@ -21,6 +21,10 @@
#define RSPAMD_DEFAULT_BACKEND "mmap"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/* Forwarded declarations */
struct rspamd_classifier_config;
struct rspamd_statfile_config;
@@ -32,73 +36,93 @@ struct rspamd_task;
struct rspamd_stat_backend {
const char *name;
- gpointer (*init)(struct rspamd_stat_ctx *ctx, struct rspamd_config *cfg,
- struct rspamd_statfile *st);
- gpointer (*runtime)(struct rspamd_task *task,
- struct rspamd_statfile_config *stcf, gboolean learn, gpointer ctx);
- gboolean (*process_tokens)(struct rspamd_task *task, GPtrArray *tokens,
- gint id,
- gpointer ctx);
- gboolean (*finalize_process)(struct rspamd_task *task,
- gpointer runtime, gpointer ctx);
- gboolean (*learn_tokens)(struct rspamd_task *task, GPtrArray *tokens,
- gint id,
- gpointer ctx);
- gulong (*total_learns)(struct rspamd_task *task,
- gpointer runtime, gpointer ctx);
- gboolean (*finalize_learn)(struct rspamd_task *task,
- gpointer runtime, gpointer ctx, GError **err);
- gulong (*inc_learns)(struct rspamd_task *task,
- gpointer runtime, gpointer ctx);
- gulong (*dec_learns)(struct rspamd_task *task,
- gpointer runtime, gpointer ctx);
- ucl_object_t* (*get_stat)(gpointer runtime, gpointer ctx);
- void (*close)(gpointer ctx);
-
- gpointer (*load_tokenizer_config)(gpointer runtime, gsize *sz);
+
+ gpointer (*init) (struct rspamd_stat_ctx *ctx, struct rspamd_config *cfg,
+ struct rspamd_statfile *st);
+
+ gpointer (*runtime) (struct rspamd_task *task,
+ struct rspamd_statfile_config *stcf, gboolean learn, gpointer ctx);
+
+ gboolean (*process_tokens) (struct rspamd_task *task, GPtrArray *tokens,
+ gint id,
+ gpointer ctx);
+
+ gboolean (*finalize_process) (struct rspamd_task *task,
+ gpointer runtime, gpointer ctx);
+
+ gboolean (*learn_tokens) (struct rspamd_task *task, GPtrArray *tokens,
+ gint id,
+ gpointer ctx);
+
+ gulong (*total_learns) (struct rspamd_task *task,
+ gpointer runtime, gpointer ctx);
+
+ gboolean (*finalize_learn) (struct rspamd_task *task,
+ gpointer runtime, gpointer ctx, GError **err);
+
+ gulong (*inc_learns) (struct rspamd_task *task,
+ gpointer runtime, gpointer ctx);
+
+ gulong (*dec_learns) (struct rspamd_task *task,
+ gpointer runtime, gpointer ctx);
+
+ ucl_object_t *(*get_stat) (gpointer runtime, gpointer ctx);
+
+ void (*close) (gpointer ctx);
+
+ gpointer (*load_tokenizer_config) (gpointer runtime, gsize *sz);
+
gpointer ctx;
};
#define RSPAMD_STAT_BACKEND_DEF(name) \
- gpointer rspamd_##name##_init (struct rspamd_stat_ctx *ctx, \
- struct rspamd_config *cfg, struct rspamd_statfile *st); \
- gpointer rspamd_##name##_runtime (struct rspamd_task *task, \
- struct rspamd_statfile_config *stcf, \
- gboolean learn, gpointer ctx); \
- gboolean rspamd_##name##_process_tokens (struct rspamd_task *task, \
+ gpointer rspamd_##name##_init (struct rspamd_stat_ctx *ctx, \
+ struct rspamd_config *cfg, struct rspamd_statfile *st); \
+ gpointer rspamd_##name##_runtime (struct rspamd_task *task, \
+ struct rspamd_statfile_config *stcf, \
+ gboolean learn, gpointer ctx); \
+ gboolean rspamd_##name##_process_tokens (struct rspamd_task *task, \
GPtrArray *tokens, gint id, \
- gpointer ctx); \
- gboolean rspamd_##name##_finalize_process (struct rspamd_task *task, \
- gpointer runtime, \
- gpointer ctx); \
- gboolean rspamd_##name##_learn_tokens (struct rspamd_task *task, \
+ gpointer ctx); \
+ gboolean rspamd_##name##_finalize_process (struct rspamd_task *task, \
+ gpointer runtime, \
+ gpointer ctx); \
+ gboolean rspamd_##name##_learn_tokens (struct rspamd_task *task, \
GPtrArray *tokens, gint id, \
- gpointer ctx); \
- gboolean rspamd_##name##_finalize_learn (struct rspamd_task *task, \
- gpointer runtime, \
- gpointer ctx, GError **err); \
- gulong rspamd_##name##_total_learns (struct rspamd_task *task, \
- gpointer runtime, \
- gpointer ctx); \
- gulong rspamd_##name##_inc_learns (struct rspamd_task *task, \
- gpointer runtime, \
- gpointer ctx); \
- gulong rspamd_##name##_dec_learns (struct rspamd_task *task, \
- gpointer runtime, \
- gpointer ctx); \
- gulong rspamd_##name##_learns (struct rspamd_task *task, \
- gpointer runtime, \
- gpointer ctx); \
- ucl_object_t * rspamd_##name##_get_stat (gpointer runtime, \
- gpointer ctx); \
- gpointer rspamd_##name##_load_tokenizer_config (gpointer runtime, \
- gsize *len); \
- void rspamd_##name##_close (gpointer ctx)
+ gpointer ctx); \
+ gboolean rspamd_##name##_finalize_learn (struct rspamd_task *task, \
+ gpointer runtime, \
+ gpointer ctx, GError **err); \
+ gulong rspamd_##name##_total_learns (struct rspamd_task *task, \
+ gpointer runtime, \
+ gpointer ctx); \
+ gulong rspamd_##name##_inc_learns (struct rspamd_task *task, \
+ gpointer runtime, \
+ gpointer ctx); \
+ gulong rspamd_##name##_dec_learns (struct rspamd_task *task, \
+ gpointer runtime, \
+ gpointer ctx); \
+ gulong rspamd_##name##_learns (struct rspamd_task *task, \
+ gpointer runtime, \
+ gpointer ctx); \
+ ucl_object_t * rspamd_##name##_get_stat (gpointer runtime, \
+ gpointer ctx); \
+ gpointer rspamd_##name##_load_tokenizer_config (gpointer runtime, \
+ gsize *len); \
+ void rspamd_##name##_close (gpointer ctx)
RSPAMD_STAT_BACKEND_DEF(mmaped_file);
+
RSPAMD_STAT_BACKEND_DEF(sqlite3);
+
#ifdef WITH_HIREDIS
+
RSPAMD_STAT_BACKEND_DEF(redis);
+
+#endif
+
+#ifdef __cplusplus
+}
#endif
#endif /* BACKENDS_H_ */
diff --git a/src/libstat/classifiers/classifiers.h b/src/libstat/classifiers/classifiers.h
index 738a5e8c9..4e159fb13 100644
--- a/src/libstat/classifiers/classifiers.h
+++ b/src/libstat/classifiers/classifiers.h
@@ -9,6 +9,10 @@
/* Consider this value as 0 */
#define ALPHA 0.0001
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_classifier_config;
struct rspamd_task;
struct rspamd_config;
@@ -18,49 +22,58 @@ struct token_node_s;
struct rspamd_stat_classifier {
char *name;
- gboolean (*init_func)(struct rspamd_config *cfg,
- struct ev_loop *ev_base,
- struct rspamd_classifier *cl);
- gboolean (*classify_func)(struct rspamd_classifier * ctx,
- GPtrArray *tokens,
- struct rspamd_task *task);
- gboolean (*learn_spam_func)(struct rspamd_classifier * ctx,
- GPtrArray *input,
- struct rspamd_task *task,
- gboolean is_spam,
- gboolean unlearn,
- GError **err);
- void (*fin_func)(struct rspamd_classifier *cl);
+
+ gboolean (*init_func) (struct rspamd_config *cfg,
+ struct ev_loop *ev_base,
+ struct rspamd_classifier *cl);
+
+ gboolean (*classify_func) (struct rspamd_classifier *ctx,
+ GPtrArray *tokens,
+ struct rspamd_task *task);
+
+ gboolean (*learn_spam_func) (struct rspamd_classifier *ctx,
+ GPtrArray *input,
+ struct rspamd_task *task,
+ gboolean is_spam,
+ gboolean unlearn,
+ GError **err);
+
+ void (*fin_func) (struct rspamd_classifier *cl);
};
/* Bayes algorithm */
gboolean bayes_init (struct rspamd_config *cfg,
struct ev_loop *ev_base,
struct rspamd_classifier *);
+
gboolean bayes_classify (struct rspamd_classifier *ctx,
- GPtrArray *tokens,
- struct rspamd_task *task);
+ GPtrArray *tokens,
+ struct rspamd_task *task);
+
gboolean bayes_learn_spam (struct rspamd_classifier *ctx,
- GPtrArray *tokens,
- struct rspamd_task *task,
- gboolean is_spam,
- gboolean unlearn,
- GError **err);
+ GPtrArray *tokens,
+ struct rspamd_task *task,
+ gboolean is_spam,
+ gboolean unlearn,
+ GError **err);
+
void bayes_fin (struct rspamd_classifier *);
/* Generic lua classifier */
gboolean lua_classifier_init (struct rspamd_config *cfg,
struct ev_loop *ev_base,
struct rspamd_classifier *);
+
gboolean lua_classifier_classify (struct rspamd_classifier *ctx,
- GPtrArray *tokens,
- struct rspamd_task *task);
+ GPtrArray *tokens,
+ struct rspamd_task *task);
+
gboolean lua_classifier_learn_spam (struct rspamd_classifier *ctx,
- GPtrArray *tokens,
- struct rspamd_task *task,
- gboolean is_spam,
- gboolean unlearn,
- GError **err);
+ GPtrArray *tokens,
+ struct rspamd_task *task,
+ gboolean is_spam,
+ gboolean unlearn,
+ GError **err);
extern guint rspamd_bayes_log_id;
#define msg_debug_bayes(...) rspamd_conditional_debug_fast (NULL, task->from_addr, \
@@ -68,7 +81,9 @@ extern guint rspamd_bayes_log_id;
G_STRFUNC, \
__VA_ARGS__)
+
+#ifdef __cplusplus
+}
+#endif
+
#endif
-/*
- * vi:ts=4
- */
diff --git a/src/libstat/learn_cache/learn_cache.h b/src/libstat/learn_cache/learn_cache.h
index 6673d2239..1816c9f7a 100644
--- a/src/libstat/learn_cache/learn_cache.h
+++ b/src/libstat/learn_cache/learn_cache.h
@@ -19,6 +19,10 @@
#include "config.h"
#include "ucl.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#define RSPAMD_DEFAULT_CACHE "sqlite3"
struct rspamd_task;
@@ -28,40 +32,53 @@ struct rspamd_statfile;
struct rspamd_stat_cache {
const char *name;
- gpointer (*init)(struct rspamd_stat_ctx *ctx,
- struct rspamd_config *cfg,
- struct rspamd_statfile *st,
- const ucl_object_t *cf);
- gpointer (*runtime)(struct rspamd_task *task,
- gpointer ctx, gboolean learn);
- gint (*check)(struct rspamd_task *task,
- gboolean is_spam,
- gpointer runtime);
- gint (*learn)(struct rspamd_task *task,
- gboolean is_spam,
- gpointer runtime);
+
+ gpointer (*init) (struct rspamd_stat_ctx *ctx,
+ struct rspamd_config *cfg,
+ struct rspamd_statfile *st,
+ const ucl_object_t *cf);
+
+ gpointer (*runtime) (struct rspamd_task *task,
+ gpointer ctx, gboolean learn);
+
+ gint (*check) (struct rspamd_task *task,
+ gboolean is_spam,
+ gpointer runtime);
+
+ gint (*learn) (struct rspamd_task *task,
+ gboolean is_spam,
+ gpointer runtime);
+
void (*close) (gpointer ctx);
+
gpointer ctx;
};
#define RSPAMD_STAT_CACHE_DEF(name) \
- gpointer rspamd_stat_cache_##name##_init (struct rspamd_stat_ctx *ctx, \
- struct rspamd_config *cfg, \
- struct rspamd_statfile *st, \
- const ucl_object_t *cf); \
- gpointer rspamd_stat_cache_##name##_runtime (struct rspamd_task *task, \
- gpointer ctx, gboolean learn); \
- gint rspamd_stat_cache_##name##_check (struct rspamd_task *task, \
- gboolean is_spam, \
- gpointer runtime); \
- gint rspamd_stat_cache_##name##_learn (struct rspamd_task *task, \
- gboolean is_spam, \
- gpointer runtime); \
- void rspamd_stat_cache_##name##_close (gpointer ctx)
+ gpointer rspamd_stat_cache_##name##_init (struct rspamd_stat_ctx *ctx, \
+ struct rspamd_config *cfg, \
+ struct rspamd_statfile *st, \
+ const ucl_object_t *cf); \
+ gpointer rspamd_stat_cache_##name##_runtime (struct rspamd_task *task, \
+ gpointer ctx, gboolean learn); \
+ gint rspamd_stat_cache_##name##_check (struct rspamd_task *task, \
+ gboolean is_spam, \
+ gpointer runtime); \
+ gint rspamd_stat_cache_##name##_learn (struct rspamd_task *task, \
+ gboolean is_spam, \
+ gpointer runtime); \
+ void rspamd_stat_cache_##name##_close (gpointer ctx)
RSPAMD_STAT_CACHE_DEF(sqlite3);
+
#ifdef WITH_HIREDIS
+
RSPAMD_STAT_CACHE_DEF(redis);
+
+#endif
+
+#ifdef __cplusplus
+}
#endif
#endif /* LEARN_CACHE_H_ */
diff --git a/src/libstat/stat_api.h b/src/libstat/stat_api.h
index 40a6bc716..f91c8b79a 100644
--- a/src/libstat/stat_api.h
+++ b/src/libstat/stat_api.h
@@ -18,9 +18,13 @@
#include "config.h"
#include "task.h"
-#include <lua.h>
+#include "lua/lua_common.h"
#include "contrib/libev/ev.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* @file stat_api.h
* High level statistics API
@@ -89,7 +93,7 @@ void rspamd_stat_close (void);
* @param task
*/
void rspamd_stat_process_tokenize (struct rspamd_stat_ctx *st_ctx,
- struct rspamd_task *task);
+ struct rspamd_task *task);
/**
* Classify the task specified and insert symbols if needed
@@ -99,7 +103,7 @@ void rspamd_stat_process_tokenize (struct rspamd_stat_ctx *st_ctx,
* @return TRUE if task has been classified
*/
rspamd_stat_result_t rspamd_stat_classify (struct rspamd_task *task,
- lua_State *L, guint stage, GError **err);
+ lua_State *L, guint stage, GError **err);
/**
@@ -119,9 +123,9 @@ gboolean rspamd_stat_check_autolearn (struct rspamd_task *task);
* @return TRUE if task has been learned
*/
rspamd_stat_result_t rspamd_stat_learn (struct rspamd_task *task,
- gboolean spam, lua_State *L, const gchar *classifier,
- guint stage,
- GError **err);
+ gboolean spam, lua_State *L, const gchar *classifier,
+ guint stage,
+ GError **err);
/**
* Get the overall statistics for all statfile backends
@@ -130,10 +134,14 @@ rspamd_stat_result_t rspamd_stat_learn (struct rspamd_task *task,
* @return array of statistical information
*/
rspamd_stat_result_t rspamd_stat_statistics (struct rspamd_task *task,
- struct rspamd_config *cfg,
- guint64 *total_learns,
- ucl_object_t **res);
+ struct rspamd_config *cfg,
+ guint64 *total_learns,
+ ucl_object_t **res);
void rspamd_stat_unload (void);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* STAT_API_H_ */
diff --git a/src/libstat/stat_internal.h b/src/libstat/stat_internal.h
index 50dbae9c1..967a3c4d6 100644
--- a/src/libstat/stat_internal.h
+++ b/src/libstat/stat_internal.h
@@ -24,6 +24,10 @@
#include "backends/backends.h"
#include "learn_cache/learn_cache.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_statfile_runtime {
struct rspamd_statfile_config *st;
gpointer backend_runtime;
@@ -54,10 +58,11 @@ struct rspamd_statfile {
struct rspamd_stat_async_elt;
-typedef void (*rspamd_stat_async_handler)(struct rspamd_stat_async_elt *elt,
- gpointer ud);
-typedef void (*rspamd_stat_async_cleanup)(struct rspamd_stat_async_elt *elt,
- gpointer ud);
+typedef void (*rspamd_stat_async_handler) (struct rspamd_stat_async_elt *elt,
+ gpointer ud);
+
+typedef void (*rspamd_stat_async_cleanup) (struct rspamd_stat_async_elt *elt,
+ gpointer ud);
struct rspamd_stat_async_elt {
rspamd_stat_async_handler handler;
@@ -102,18 +107,26 @@ typedef enum rspamd_learn_cache_result {
RSPAMD_LEARN_INGORE
} rspamd_learn_t;
-struct rspamd_stat_ctx * rspamd_stat_get_ctx (void);
-struct rspamd_stat_classifier * rspamd_stat_get_classifier (const gchar *name);
-struct rspamd_stat_backend * rspamd_stat_get_backend (const gchar *name);
-struct rspamd_stat_tokenizer * rspamd_stat_get_tokenizer (const gchar *name);
-struct rspamd_stat_cache * rspamd_stat_get_cache (const gchar *name);
-struct rspamd_stat_async_elt* rspamd_stat_ctx_register_async (
+struct rspamd_stat_ctx *rspamd_stat_get_ctx (void);
+
+struct rspamd_stat_classifier *rspamd_stat_get_classifier (const gchar *name);
+
+struct rspamd_stat_backend *rspamd_stat_get_backend (const gchar *name);
+
+struct rspamd_stat_tokenizer *rspamd_stat_get_tokenizer (const gchar *name);
+
+struct rspamd_stat_cache *rspamd_stat_get_cache (const gchar *name);
+
+struct rspamd_stat_async_elt *rspamd_stat_ctx_register_async (
rspamd_stat_async_handler handler, rspamd_stat_async_cleanup cleanup,
gpointer d, gdouble timeout);
-static GQuark rspamd_stat_quark (void)
-{
+static GQuark rspamd_stat_quark (void) {
return g_quark_from_static_string ("rspamd-statistics");
}
+#ifdef __cplusplus
+}
+#endif
+
#endif /* STAT_INTERNAL_H_ */
diff --git a/src/libstat/tokenizers/tokenizers.h b/src/libstat/tokenizers/tokenizers.h
index 784426d31..bf4987c7a 100644
--- a/src/libstat/tokenizers/tokenizers.h
+++ b/src/libstat/tokenizers/tokenizers.h
@@ -11,20 +11,26 @@
#define RSPAMD_DEFAULT_TOKENIZER "osb"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_tokenizer_runtime;
struct rspamd_stat_ctx;
/* Common tokenizer structure */
struct rspamd_stat_tokenizer {
gchar *name;
+
gpointer (*get_config) (rspamd_mempool_t *pool,
struct rspamd_tokenizer_config *cf, gsize *len);
- gint (*tokenize_func)(struct rspamd_stat_ctx *ctx,
- struct rspamd_task *task,
- GArray *words,
- gboolean is_utf,
- const gchar *prefix,
- GPtrArray *result);
+
+ gint (*tokenize_func) (struct rspamd_stat_ctx *ctx,
+ struct rspamd_task *task,
+ GArray *words,
+ gboolean is_utf,
+ const gchar *prefix,
+ GPtrArray *result);
};
enum rspamd_tokenize_type {
@@ -38,13 +44,13 @@ gint token_node_compare_func (gconstpointer a, gconstpointer b);
/* Tokenize text into array of words (rspamd_stat_token_t type) */
-GArray * rspamd_tokenize_text (const gchar *text, gsize len,
- const UText *utxt,
- enum rspamd_tokenize_type how,
- struct rspamd_config *cfg,
- GList *exceptions,
- guint64 *hash,
- GArray *cur_words);
+GArray *rspamd_tokenize_text (const gchar *text, gsize len,
+ const UText *utxt,
+ enum rspamd_tokenize_type how,
+ struct rspamd_config *cfg,
+ GList *exceptions,
+ guint64 *hash,
+ GArray *cur_words);
/* OSB tokenize function */
gint rspamd_tokenizer_osb (struct rspamd_stat_ctx *ctx,
@@ -59,14 +65,19 @@ gpointer rspamd_tokenizer_osb_get_config (rspamd_mempool_t *pool,
gsize *len);
struct rspamd_lang_detector;
+
void rspamd_normalize_single_word (rspamd_stat_token_t *tok, rspamd_mempool_t *pool);
+
void rspamd_normalize_words (GArray *words, rspamd_mempool_t *pool);
+
void rspamd_stem_words (GArray *words, rspamd_mempool_t *pool,
const gchar *language,
struct rspamd_lang_detector *d);
void rspamd_tokenize_meta_words (struct rspamd_task *task);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif
-/*
- * vi:ts=4
- */
diff --git a/src/libutil/addr.h b/src/libutil/addr.h
index 7efa5e318..fe00ccc86 100644
--- a/src/libutil/addr.h
+++ b/src/libutil/addr.h
@@ -35,6 +35,10 @@
#include "mem_pool.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* Opaque structure
*/
@@ -43,6 +47,7 @@ typedef struct rspamd_inet_addr_s rspamd_inet_addr_t;
struct rspamd_radix_map_helper;
struct rspamd_radix_map_helper **rspamd_inet_library_init (void);
+
void rspamd_inet_library_destroy (void);
/**
@@ -51,7 +56,7 @@ void rspamd_inet_library_destroy (void);
* @param init
* @return new inet addr
*/
-rspamd_inet_addr_t * rspamd_inet_address_new (int af, const void *init);
+rspamd_inet_addr_t *rspamd_inet_address_new (int af, const void *init);
/**
* Create new inet address structure from struct sockaddr
@@ -59,15 +64,15 @@ rspamd_inet_addr_t * rspamd_inet_address_new (int af, const void *init);
* @param slen
* @return
*/
-rspamd_inet_addr_t * rspamd_inet_address_from_sa (const struct sockaddr *sa,
- socklen_t slen);
+rspamd_inet_addr_t *rspamd_inet_address_from_sa (const struct sockaddr *sa,
+ socklen_t slen);
/**
* Create new inet address from rdns reply
* @param rep reply element
* @return new ipv4 or ipv6 addr (port is NOT set)
*/
-rspamd_inet_addr_t * rspamd_inet_address_from_rnds (
+rspamd_inet_addr_t *rspamd_inet_address_from_rnds (
const struct rdns_reply_entry *rep);
/**
@@ -79,7 +84,7 @@ rspamd_inet_addr_t * rspamd_inet_address_from_rnds (
* @return TRUE if the address has been parsed, otherwise `target` content is undefined
*/
gboolean rspamd_parse_inet_address_ip6 (const guchar *text, gsize len,
- gpointer target);
+ gpointer target);
/**
* Parse string with ipv4 address of length `len` to `target` which should be
@@ -90,7 +95,7 @@ gboolean rspamd_parse_inet_address_ip6 (const guchar *text, gsize len,
* @return TRUE if the address has been parsed, otherwise `target` content is undefined
*/
gboolean rspamd_parse_inet_address_ip4 (const guchar *text, gsize len,
- gpointer target);
+ gpointer target);
/**
* Parse ipv4 or ipv6 address to a static buffer `target`. Does not support Unix sockets
@@ -100,7 +105,7 @@ gboolean rspamd_parse_inet_address_ip4 (const guchar *text, gsize len,
* @return
*/
gboolean rspamd_parse_inet_address_ip (const char *src,
- gsize srclen, rspamd_inet_addr_t *target);
+ gsize srclen, rspamd_inet_addr_t *target);
/**
* Try to parse address from string
@@ -109,8 +114,8 @@ gboolean rspamd_parse_inet_address_ip (const char *src,
* @return TRUE if addr has been parsed
*/
gboolean rspamd_parse_inet_address (rspamd_inet_addr_t **target,
- const char *src,
- gsize srclen);
+ const char *src,
+ gsize srclen);
/**
* Use memory pool allocated inet address
@@ -119,23 +124,23 @@ gboolean rspamd_parse_inet_address (rspamd_inet_addr_t **target,
* @param pool
* @return
*/
-rspamd_inet_addr_t* rspamd_parse_inet_address_pool (const char *src,
- gsize srclen,
- rspamd_mempool_t *pool);
+rspamd_inet_addr_t *rspamd_parse_inet_address_pool (const char *src,
+ gsize srclen,
+ rspamd_mempool_t *pool);
/**
* Returns string representation of inet address
* @param addr
* @return statically allocated string pointer (not thread safe)
*/
-const char * rspamd_inet_address_to_string (const rspamd_inet_addr_t *addr);
+const char *rspamd_inet_address_to_string (const rspamd_inet_addr_t *addr);
/**
* Returns pretty string representation of inet address
* @param addr
* @return statically allocated string pointer (not thread safe)
*/
-const char * rspamd_inet_address_to_string_pretty (const rspamd_inet_addr_t *addr);
+const char *rspamd_inet_address_to_string_pretty (const rspamd_inet_addr_t *addr);
/**
* Returns port number for the specified inet address in host byte order
@@ -157,8 +162,8 @@ gint rspamd_inet_address_get_af (const rspamd_inet_addr_t *addr);
* @param sz
* @return
*/
-struct sockaddr* rspamd_inet_address_get_sa (const rspamd_inet_addr_t *addr,
- socklen_t *sz);
+struct sockaddr *rspamd_inet_address_get_sa (const rspamd_inet_addr_t *addr,
+ socklen_t *sz);
/**
* Makes a radix key from inet address
@@ -166,7 +171,7 @@ struct sockaddr* rspamd_inet_address_get_sa (const rspamd_inet_addr_t *addr,
* @param klen
* @return
*/
-guchar * rspamd_inet_address_get_hash_key (const rspamd_inet_addr_t *addr, guint *klen);
+guchar *rspamd_inet_address_get_hash_key (const rspamd_inet_addr_t *addr, guint *klen);
/**
* Receive data from an unconnected socket and fill the inet_addr structure if needed
@@ -177,7 +182,7 @@ guchar * rspamd_inet_address_get_hash_key (const rspamd_inet_addr_t *addr, guint
* @return same as recvfrom(2)
*/
gssize rspamd_inet_address_recvfrom (gint fd, void *buf, gsize len, gint fl,
- rspamd_inet_addr_t **target);
+ rspamd_inet_addr_t **target);
/**
* Send data via unconnected socket using the specified inet_addr structure
@@ -188,7 +193,7 @@ gssize rspamd_inet_address_recvfrom (gint fd, void *buf, gsize len, gint fl,
* @return
*/
gssize rspamd_inet_address_sendto (gint fd, const void *buf, gsize len, gint fl,
- const rspamd_inet_addr_t *addr);
+ const rspamd_inet_addr_t *addr);
/**
* Set port for inet address
@@ -202,7 +207,7 @@ void rspamd_inet_address_set_port (rspamd_inet_addr_t *addr, uint16_t port);
* @return newly created and connected socket
*/
int rspamd_inet_address_connect (const rspamd_inet_addr_t *addr, gint type,
- gboolean async);
+ gboolean async);
/**
* Listen on a specified inet address
@@ -212,7 +217,8 @@ int rspamd_inet_address_connect (const rspamd_inet_addr_t *addr, gint type,
* @return
*/
int rspamd_inet_address_listen (const rspamd_inet_addr_t *addr, gint type,
- gboolean async);
+ gboolean async);
+
/**
* Check whether specified ip is valid (not INADDR_ANY or INADDR_NONE) for ipv4 or ipv6
* @param ptr pointer to struct in_addr or struct in6_addr
@@ -221,7 +227,8 @@ int rspamd_inet_address_listen (const rspamd_inet_addr_t *addr, gint type,
*/
gboolean rspamd_ip_is_valid (const rspamd_inet_addr_t *addr);
-typedef void (*rspamd_accept_throttling_handler)(gint, void *);
+typedef void (*rspamd_accept_throttling_handler) (gint, void *);
+
/**
* Accept from listening socket filling addr structure
* @param sock listening socket
@@ -241,9 +248,9 @@ gint rspamd_accept_from_socket (gint sock,
* @return TRUE if string was parsed
*/
gboolean rspamd_parse_host_port_priority (const gchar *str,
- GPtrArray **addrs,
- guint *priority, gchar **name, guint default_port,
- rspamd_mempool_t *pool);
+ GPtrArray **addrs,
+ guint *priority, gchar **name, guint default_port,
+ rspamd_mempool_t *pool);
/**
* Destroy the specified IP address
@@ -265,7 +272,7 @@ void rspamd_inet_address_apply_mask (rspamd_inet_addr_t *addr, guint mask);
* @return
*/
gint rspamd_inet_address_compare (const rspamd_inet_addr_t *a1,
- const rspamd_inet_addr_t *a2, gboolean compare_ports);
+ const rspamd_inet_addr_t *a2, gboolean compare_ports);
/**
* Utility function to compare addresses by in g_ptr_array
@@ -274,7 +281,8 @@ gint rspamd_inet_address_compare (const rspamd_inet_addr_t *a1,
* @return
*/
gint rspamd_inet_address_compare_ptr (gconstpointer a1,
- gconstpointer a2);
+ gconstpointer a2);
+
/**
* Performs deep copy of rspamd inet addr
* @param addr
@@ -286,19 +294,21 @@ rspamd_inet_addr_t *rspamd_inet_address_copy (const rspamd_inet_addr_t *addr);
* Returns hash for inet address (ignoring port)
*/
guint rspamd_inet_address_hash (gconstpointer a);
+
guint rspamd_inet_address_port_hash (gconstpointer a);
/**
* Returns true if two address are equal
*/
gboolean rspamd_inet_address_equal (gconstpointer a, gconstpointer b);
+
gboolean rspamd_inet_address_port_equal (gconstpointer a, gconstpointer b);
/**
* Returns TRUE if an address belongs to some local address
*/
gboolean rspamd_inet_address_is_local (const rspamd_inet_addr_t *addr,
- gboolean check_laddrs);
+ gboolean check_laddrs);
/**
* Returns size of storage required to store a complete IP address
@@ -306,4 +316,8 @@ gboolean rspamd_inet_address_is_local (const rspamd_inet_addr_t *addr,
*/
gsize rspamd_inet_address_storage_size (void);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* ADDR_H_ */
diff --git a/src/libutil/expression.h b/src/libutil/expression.h
index bd336b87b..bd18fa75f 100644
--- a/src/libutil/expression.h
+++ b/src/libutil/expression.h
@@ -20,6 +20,10 @@
#include "mem_pool.h"
#include "fstring.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#define RSPAMD_EXPRESSION_MAX_PRIORITY 1024
#define RSPAMD_EXPRESSION_FLAG_NOOPT (1 << 0)
@@ -56,17 +60,20 @@ typedef struct rspamd_expression_atom_s {
gint priority;
} rspamd_expression_atom_t;
-typedef gdouble (*rspamd_expression_process_cb)(gpointer runtime_data,
- rspamd_expression_atom_t *atom);
+typedef gdouble (*rspamd_expression_process_cb) (gpointer runtime_data,
+ rspamd_expression_atom_t *atom);
struct rspamd_atom_subr {
/* Parses atom from string and returns atom structure */
- rspamd_expression_atom_t * (*parse)(const gchar *line, gsize len,
- rspamd_mempool_t *pool, gpointer ud, GError **err);
+ rspamd_expression_atom_t *(*parse) (const gchar *line, gsize len,
+ rspamd_mempool_t *pool, gpointer ud, GError **err);
+
/* Process atom via the opaque pointer (e.g. struct rspamd_task *) */
rspamd_expression_process_cb process;
+
/* Calculates the relative priority of the expression */
gint (*priority) (rspamd_expression_atom_t *atom);
+
void (*destroy) (rspamd_expression_atom_t *atom);
};
@@ -85,9 +92,9 @@ struct rspamd_expression;
* @return TRUE if an expression have been parsed
*/
gboolean rspamd_parse_expression (const gchar *line, gsize len,
- const struct rspamd_atom_subr *subr, gpointer subr_data,
- rspamd_mempool_t *pool, GError **err,
- struct rspamd_expression **target);
+ const struct rspamd_atom_subr *subr, gpointer subr_data,
+ rspamd_mempool_t *pool, GError **err,
+ struct rspamd_expression **target);
/**
* Process the expression and return its value using atom 'process' functions with the specified data pointer
@@ -124,6 +131,7 @@ gdouble rspamd_process_expression_closure (struct rspamd_expression *expr,
gint flags,
gpointer runtime_ud,
GPtrArray **track);
+
/**
* Shows string representation of an expression
* @param expr expression to show
@@ -136,7 +144,7 @@ GString *rspamd_expression_tostring (struct rspamd_expression *expr);
* and should not be modified within callback
*/
typedef void (*rspamd_expression_atom_foreach_cb) (const rspamd_ftok_t *atom,
- gpointer ud);
+ gpointer ud);
/**
* Traverse over all atoms in the expression
@@ -145,7 +153,7 @@ typedef void (*rspamd_expression_atom_foreach_cb) (const rspamd_ftok_t *atom,
* @param ud opaque data passed to `cb`
*/
void rspamd_expression_atom_foreach (struct rspamd_expression *expr,
- rspamd_expression_atom_foreach_cb cb, gpointer cbdata);
+ rspamd_expression_atom_foreach_cb cb, gpointer cbdata);
/**
* Checks if a specified node in AST is the specified operation
@@ -155,4 +163,8 @@ void rspamd_expression_atom_foreach (struct rspamd_expression *expr,
*/
gboolean rspamd_expression_node_is_op (GNode *node, enum rspamd_expression_op op);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* SRC_LIBUTIL_EXPRESSION_H_ */
diff --git a/src/libutil/fstring.h b/src/libutil/fstring.h
index 1a4d25eb9..6102215d4 100644
--- a/src/libutil/fstring.h
+++ b/src/libutil/fstring.h
@@ -20,6 +20,10 @@
#include "mem_pool.h"
#include <unicode/uchar.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* Fixed strings library
* These strings are NOT null-terminated for speed
@@ -47,26 +51,26 @@ typedef struct f_str_unicode_tok {
/**
* Create new fixed length string
*/
-rspamd_fstring_t* rspamd_fstring_new (void)
- G_GNUC_WARN_UNUSED_RESULT;
+rspamd_fstring_t *rspamd_fstring_new (void)
+G_GNUC_WARN_UNUSED_RESULT;
/**
* Create new fixed length string with preallocated size
*/
rspamd_fstring_t *rspamd_fstring_sized_new (gsize initial_size)
- G_GNUC_WARN_UNUSED_RESULT;
+G_GNUC_WARN_UNUSED_RESULT;
/**
* Create new fixed length string and initialize it with the initial data
*/
rspamd_fstring_t *rspamd_fstring_new_init (const gchar *init, gsize len)
- G_GNUC_WARN_UNUSED_RESULT;
+G_GNUC_WARN_UNUSED_RESULT;
/**
* Assign new value to fixed string
*/
rspamd_fstring_t *rspamd_fstring_assign (rspamd_fstring_t *str,
- const gchar *init, gsize len) G_GNUC_WARN_UNUSED_RESULT;
+ const gchar *init, gsize len) G_GNUC_WARN_UNUSED_RESULT;
/**
* Free fixed length string
@@ -76,14 +80,14 @@ void rspamd_fstring_free (rspamd_fstring_t *str);
/**
* Append data to a fixed length string
*/
-rspamd_fstring_t* rspamd_fstring_append (rspamd_fstring_t *str,
- const char *in, gsize len) G_GNUC_WARN_UNUSED_RESULT;
+rspamd_fstring_t *rspamd_fstring_append (rspamd_fstring_t *str,
+ const char *in, gsize len) G_GNUC_WARN_UNUSED_RESULT;
/**
* Append `len` repeated chars `c` to string `str`
*/
rspamd_fstring_t *rspamd_fstring_append_chars (rspamd_fstring_t *str,
- char c, gsize len) G_GNUC_WARN_UNUSED_RESULT;
+ char c, gsize len) G_GNUC_WARN_UNUSED_RESULT;
/**
* Erase `len` characters at position `pos`
@@ -96,14 +100,16 @@ void rspamd_fstring_erase (rspamd_fstring_t *str, gsize pos, gsize len);
* Convert fixed string to a zero terminated string. This string must be
* freed by a caller
*/
-char * rspamd_fstring_cstr (const rspamd_fstring_t *str)
- G_GNUC_WARN_UNUSED_RESULT;
+char *rspamd_fstring_cstr (const rspamd_fstring_t *str)
+G_GNUC_WARN_UNUSED_RESULT;
+
/**
* Convert fixed string usign ftok_t to a zero terminated string. This string must be
* freed by a caller
*/
-char * rspamd_ftok_cstr (const rspamd_ftok_t *str)
- G_GNUC_WARN_UNUSED_RESULT;
+char *rspamd_ftok_cstr (const rspamd_ftok_t *str)
+G_GNUC_WARN_UNUSED_RESULT;
+
/*
* Return fast hash value for fixed string converted to lowercase
*/
@@ -113,31 +119,31 @@ guint32 rspamd_fstrhash_lc (const rspamd_ftok_t *str, gboolean is_utf);
* Return true if two strings are equal
*/
gboolean rspamd_fstring_equal (const rspamd_fstring_t *s1,
- const rspamd_fstring_t *s2);
+ const rspamd_fstring_t *s2);
/**
* Compare two fixed strings ignoring case
*/
gint rspamd_fstring_casecmp (const rspamd_fstring_t *s1,
- const rspamd_fstring_t *s2);
+ const rspamd_fstring_t *s2);
/**
* Compare two fixed strings
*/
gint rspamd_fstring_cmp (const rspamd_fstring_t *s1,
- const rspamd_fstring_t *s2);
+ const rspamd_fstring_t *s2);
/**
* Compare two fixed tokens ignoring case
*/
gint rspamd_ftok_casecmp (const rspamd_ftok_t *s1,
- const rspamd_ftok_t *s2);
+ const rspamd_ftok_t *s2);
/**
* Compare two fixed tokens
*/
gint rspamd_ftok_cmp (const rspamd_ftok_t *s1,
- const rspamd_ftok_t *s2);
+ const rspamd_ftok_t *s2);
/**
* Returns true if `s1` starts with `s2`
@@ -152,7 +158,7 @@ gboolean rspamd_ftok_starts_with (const rspamd_ftok_t *s1,
* Return TRUE if ftok is equal to specified C string
*/
gboolean rspamd_ftok_cstr_equal (const rspamd_ftok_t *s,
- const gchar *pat, gboolean icase);
+ const gchar *pat, gboolean icase);
/**
* Free fstring_t that is mapped to ftok_t
@@ -184,8 +190,8 @@ gsize rspamd_fstring_suggest_size (gsize len, gsize allocated, gsize needed_len)
* @param needed_len
* @return
*/
-rspamd_fstring_t * rspamd_fstring_grow (rspamd_fstring_t *str,
- gsize needed_len) G_GNUC_WARN_UNUSED_RESULT;
+rspamd_fstring_t *rspamd_fstring_grow (rspamd_fstring_t *str,
+ gsize needed_len) G_GNUC_WARN_UNUSED_RESULT;
/**
* Copies ftok to zero terminated string (must be freed using g_free)
@@ -203,14 +209,17 @@ gchar *rspamd_fstringdup (const rspamd_fstring_t *src) G_GNUC_WARN_UNUSED_RESULT
#define RSPAMD_FTOK_ASSIGN(t, lit) do { (t)->begin = (lit); (t)->len = sizeof(lit) - 1; } while (0)
#define RSPAMD_FTOK_FROM_STR(t, str) do { \
- if (G_LIKELY(str)) { \
- (t)->begin = (const char*)(str); \
- (t)->len = strlen (str); \
- } \
- else { \
- (t)->begin = NULL; \
- (t)->len = 0; \
- } \
+ if (G_LIKELY(str)) { \
+ (t)->begin = (const char*)(str); \
+ (t)->len = strlen (str); \
+ } \
+ else { \
+ (t)->begin = NULL; \
+ (t)->len = 0; \
+ } \
} while (0)
+#ifdef __cplusplus
+}
+#endif
#endif
diff --git a/src/libutil/hash.h b/src/libutil/hash.h
index bae3cacfa..e1284a885 100644
--- a/src/libutil/hash.h
+++ b/src/libutil/hash.h
@@ -9,6 +9,10 @@
#include "config.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_lru_hash_s;
typedef struct rspamd_lru_hash_s rspamd_lru_hash_t;
struct rspamd_lru_element_s;
@@ -23,9 +27,9 @@ typedef struct rspamd_lru_element_s rspamd_lru_element_t;
* @param key_equal_func pointer to function for comparing keys
* @return new rspamd_hash object
*/
-rspamd_lru_hash_t * rspamd_lru_hash_new (gint maxsize,
- GDestroyNotify key_destroy,
- GDestroyNotify value_destroy);
+rspamd_lru_hash_t *rspamd_lru_hash_new (gint maxsize,
+ GDestroyNotify key_destroy,
+ GDestroyNotify value_destroy);
/**
@@ -36,11 +40,11 @@ rspamd_lru_hash_t * rspamd_lru_hash_new (gint maxsize,
* @param key_equal_func pointer to function for comparing keys
* @return new rspamd_hash object
*/
-rspamd_lru_hash_t * rspamd_lru_hash_new_full (gint maxsize,
- GDestroyNotify key_destroy,
- GDestroyNotify value_destroy,
- GHashFunc hfunc,
- GEqualFunc eqfunc);
+rspamd_lru_hash_t *rspamd_lru_hash_new_full (gint maxsize,
+ GDestroyNotify key_destroy,
+ GDestroyNotify value_destroy,
+ GHashFunc hfunc,
+ GEqualFunc eqfunc);
/**
* Lookup item from hash
@@ -60,6 +64,7 @@ gpointer rspamd_lru_hash_lookup (rspamd_lru_hash_t *hash,
*/
gboolean rspamd_lru_hash_remove (rspamd_lru_hash_t *hash,
gconstpointer key);
+
/**
* Insert item in hash
* @param hash hash object
@@ -88,7 +93,7 @@ void rspamd_lru_hash_destroy (rspamd_lru_hash_t *hash);
* @return new it or -1 if iteration has been reached over
*/
int rspamd_lru_hash_foreach (rspamd_lru_hash_t *hash, int it, gpointer *k,
- gpointer *v);
+ gpointer *v);
/**
* Returns number of elements in a hash
@@ -101,4 +106,9 @@ guint rspamd_lru_hash_size (rspamd_lru_hash_t *hash);
* @param hash hash object
*/
guint rspamd_lru_hash_capacity (rspamd_lru_hash_t *hash);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libutil/heap.h b/src/libutil/heap.h
index 7d6ef4fff..94501a740 100644
--- a/src/libutil/heap.h
+++ b/src/libutil/heap.h
@@ -18,6 +18,10 @@
#include "config.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* Binary minimal heap interface based on glib
*/
@@ -44,14 +48,14 @@ struct rspamd_min_heap *rspamd_min_heap_create (gsize reserved_size);
* @param elt element to push
*/
void rspamd_min_heap_push (struct rspamd_min_heap *heap,
- struct rspamd_min_heap_elt *elt);
+ struct rspamd_min_heap_elt *elt);
/**
* Pops the minimum element from the heap and reorder the queue
* @param heap heap structure
* @return minimum element
*/
-struct rspamd_min_heap_elt* rspamd_min_heap_pop (struct rspamd_min_heap *heap);
+struct rspamd_min_heap_elt *rspamd_min_heap_pop (struct rspamd_min_heap *heap);
/**
* Updates priority for the element. It must be in queue (so `idx` should be sane)
@@ -60,7 +64,7 @@ struct rspamd_min_heap_elt* rspamd_min_heap_pop (struct rspamd_min_heap *heap);
* @param npri new priority
*/
void rspamd_min_heap_update_elt (struct rspamd_min_heap *heap,
- struct rspamd_min_heap_elt *elt, guint npri);
+ struct rspamd_min_heap_elt *elt, guint npri);
/**
@@ -69,7 +73,7 @@ void rspamd_min_heap_update_elt (struct rspamd_min_heap *heap,
* @param elt
*/
void rspamd_min_heap_remove_elt (struct rspamd_min_heap *heap,
- struct rspamd_min_heap_elt *elt);
+ struct rspamd_min_heap_elt *elt);
/**
* Destroys heap (elements are not destroyed themselves)
@@ -83,7 +87,11 @@ void rspamd_min_heap_destroy (struct rspamd_min_heap *heap);
* @param idx
* @return
*/
-struct rspamd_min_heap_elt* rspamd_min_heap_index (struct rspamd_min_heap *heap,
- guint idx);
+struct rspamd_min_heap_elt *rspamd_min_heap_index (struct rspamd_min_heap *heap,
+ guint idx);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* SRC_LIBUTIL_HEAP_H_ */
diff --git a/src/libutil/http_connection.h b/src/libutil/http_connection.h
index fc1303446..1923e5953 100644
--- a/src/libutil/http_connection.h
+++ b/src/libutil/http_connection.h
@@ -33,6 +33,10 @@
#include "contrib/libev/ev.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
enum rspamd_http_connection_type {
RSPAMD_HTTP_SERVER,
RSPAMD_HTTP_CLIENT
@@ -88,15 +92,15 @@ enum rspamd_http_options {
};
typedef int (*rspamd_http_body_handler_t) (struct rspamd_http_connection *conn,
- struct rspamd_http_message *msg,
- const gchar *chunk,
- gsize len);
+ struct rspamd_http_message *msg,
+ const gchar *chunk,
+ gsize len);
typedef void (*rspamd_http_error_handler_t) (struct rspamd_http_connection *conn,
- GError *err);
+ GError *err);
typedef int (*rspamd_http_finish_handler_t) (struct rspamd_http_connection *conn,
- struct rspamd_http_message *msg);
+ struct rspamd_http_message *msg);
/**
* HTTP connection structure
@@ -195,14 +199,14 @@ struct rspamd_http_connection *rspamd_http_connection_new_client_socket (
* @param key opaque key structure
*/
void rspamd_http_connection_set_key (struct rspamd_http_connection *conn,
- struct rspamd_cryptobox_keypair *key);
+ struct rspamd_cryptobox_keypair *key);
/**
* Get peer's public key
* @param conn connection structure
* @return pubkey structure or NULL
*/
-const struct rspamd_cryptobox_pubkey* rspamd_http_connection_get_peer_key (
+const struct rspamd_cryptobox_pubkey *rspamd_http_connection_get_peer_key (
struct rspamd_http_connection *conn);
/**
@@ -263,8 +267,7 @@ void rspamd_http_connection_free (struct rspamd_http_connection *conn);
* @return
*/
static inline struct rspamd_http_connection *
-rspamd_http_connection_ref (struct rspamd_http_connection *conn)
-{
+rspamd_http_connection_ref (struct rspamd_http_connection *conn) {
conn->ref++;
return conn;
}
@@ -274,8 +277,7 @@ rspamd_http_connection_ref (struct rspamd_http_connection *conn)
* @param conn
*/
static void
-rspamd_http_connection_unref (struct rspamd_http_connection *conn)
-{
+rspamd_http_connection_unref (struct rspamd_http_connection *conn) {
if (--conn->ref <= 0) {
rspamd_http_connection_free (conn);
}
@@ -292,8 +294,12 @@ void rspamd_http_connection_reset (struct rspamd_http_connection *conn);
* @param sz
*/
void rspamd_http_connection_set_max_size (struct rspamd_http_connection *conn,
- gsize sz);
+ gsize sz);
void rspamd_http_connection_disable_encryption (struct rspamd_http_connection *conn);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* HTTP_H_ */
diff --git a/src/libutil/http_context.h b/src/libutil/http_context.h
index c610ffbbd..f7697c406 100644
--- a/src/libutil/http_context.h
+++ b/src/libutil/http_context.h
@@ -23,6 +23,10 @@
#include "contrib/libev/ev.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_http_context;
struct rspamd_config;
struct rspamd_http_message;
@@ -44,20 +48,21 @@ struct rspamd_http_context_cfg {
* @param ev_base event base
* @return new context used for both client and server HTTP connections
*/
-struct rspamd_http_context* rspamd_http_context_create (struct rspamd_config *cfg,
- struct ev_loop *ev_base, struct upstream_ctx *ctx);
+struct rspamd_http_context *rspamd_http_context_create (struct rspamd_config *cfg,
+ struct ev_loop *ev_base, struct upstream_ctx *ctx);
-struct rspamd_http_context* rspamd_http_context_create_config (
+struct rspamd_http_context *rspamd_http_context_create_config (
struct rspamd_http_context_cfg *cfg,
struct ev_loop *ev_base,
struct upstream_ctx *ctx);
+
/**
* Destroys context
* @param ctx
*/
void rspamd_http_context_free (struct rspamd_http_context *ctx);
-struct rspamd_http_context* rspamd_http_context_default (void);
+struct rspamd_http_context *rspamd_http_context_default (void);
/**
* Returns preserved keepalive connection if it's available.
@@ -67,7 +72,7 @@ struct rspamd_http_context* rspamd_http_context_default (void);
* @param host
* @return
*/
-struct rspamd_http_connection* rspamd_http_context_check_keepalive (
+struct rspamd_http_connection *rspamd_http_context_check_keepalive (
struct rspamd_http_context *ctx, const rspamd_inet_addr_t *addr,
const gchar *host);
@@ -83,6 +88,7 @@ void rspamd_http_context_prepare_keepalive (struct rspamd_http_context *ctx,
struct rspamd_http_connection *conn,
const rspamd_inet_addr_t *addr,
const gchar *host);
+
/**
* Pushes a connection to keepalive pool after client request is finished,
* keepalive key *must* be prepared before using of this function
@@ -95,4 +101,8 @@ void rspamd_http_context_push_keepalive (struct rspamd_http_context *ctx,
struct rspamd_http_message *msg,
struct ev_loop *ev_base);
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libutil/http_message.h b/src/libutil/http_message.h
index c9e6abfce..e13c7427c 100644
--- a/src/libutil/http_message.h
+++ b/src/libutil/http_message.h
@@ -22,16 +22,23 @@
#include "fstring.h"
#include "ref.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_http_connection;
-enum rspamd_http_message_type { HTTP_REQUEST = 0, HTTP_RESPONSE };
+enum rspamd_http_message_type {
+ HTTP_REQUEST = 0, HTTP_RESPONSE
+};
/**
* Extract the current message from a connection to deal with separately
* @param conn
* @return
*/
-struct rspamd_http_message * rspamd_http_connection_steal_msg (
+struct rspamd_http_message *rspamd_http_connection_steal_msg (
struct rspamd_http_connection *conn);
/**
@@ -39,7 +46,7 @@ struct rspamd_http_message * rspamd_http_connection_steal_msg (
* @param conn
* @return
*/
-struct rspamd_http_message * rspamd_http_connection_copy_msg (
+struct rspamd_http_message *rspamd_http_connection_copy_msg (
struct rspamd_http_message *msg, GError **err);
/**
@@ -47,14 +54,15 @@ struct rspamd_http_message * rspamd_http_connection_copy_msg (
* @param type request or response
* @return new http message
*/
-struct rspamd_http_message * rspamd_http_new_message (enum rspamd_http_message_type type);
+struct rspamd_http_message *rspamd_http_new_message (enum rspamd_http_message_type type);
/**
* Increase refcount number for an HTTP message
* @param msg message to use
* @return
*/
-struct rspamd_http_message * rspamd_http_message_ref (struct rspamd_http_message *msg);
+struct rspamd_http_message *rspamd_http_message_ref (struct rspamd_http_message *msg);
+
/**
* Decrease number of refcounts for http message
* @param msg
@@ -68,12 +76,13 @@ void rspamd_http_message_unref (struct rspamd_http_message *msg);
*/
void rspamd_http_message_set_peer_key (struct rspamd_http_message *msg,
struct rspamd_cryptobox_pubkey *pk);
+
/**
* Create HTTP message from URL
* @param url
* @return new message or NULL
*/
-struct rspamd_http_message* rspamd_http_message_from_url (const gchar *url);
+struct rspamd_http_message *rspamd_http_message_from_url (const gchar *url);
/**
* Returns body for a message
@@ -101,6 +110,7 @@ gboolean rspamd_http_message_set_body (struct rspamd_http_message *msg,
*/
void rspamd_http_message_set_method (struct rspamd_http_message *msg,
const gchar *method);
+
/**
* Maps fd as message's body
* @param msg
@@ -162,7 +172,7 @@ void rspamd_http_message_add_header_fstr (struct rspamd_http_message *msg,
* @param msg message
* @param name name of header
*/
-const rspamd_ftok_t * rspamd_http_message_find_header (
+const rspamd_ftok_t *rspamd_http_message_find_header (
struct rspamd_http_message *msg,
const gchar *name);
@@ -172,7 +182,7 @@ const rspamd_ftok_t * rspamd_http_message_find_header (
* @param name
* @return list of rspamd_ftok_t * with values
*/
-GPtrArray* rspamd_http_message_find_header_multiple (
+GPtrArray *rspamd_http_message_find_header_multiple (
struct rspamd_http_message *msg,
const gchar *name);
@@ -198,13 +208,14 @@ void rspamd_http_message_free (struct rspamd_http_message *msg);
* @return new GHashTable which maps rspamd_ftok_t* to rspamd_ftok_t*
* (table must be freed by a caller)
*/
-GHashTable* rspamd_http_message_parse_query (struct rspamd_http_message *msg);
+GHashTable *rspamd_http_message_parse_query (struct rspamd_http_message *msg);
/**
* Increase refcount for shared file (if any) to prevent early memory unlinking
* @param msg
*/
-struct rspamd_storage_shmem* rspamd_http_message_shmem_ref (struct rspamd_http_message *msg);
+struct rspamd_storage_shmem *rspamd_http_message_shmem_ref (struct rspamd_http_message *msg);
+
/**
* Decrease external ref for shmem segment associated with a message
* @param msg
@@ -218,4 +229,8 @@ void rspamd_http_message_shmem_unref (struct rspamd_storage_shmem *p);
*/
guint rspamd_http_message_get_flags (struct rspamd_http_message *msg);
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libutil/http_private.h b/src/libutil/http_private.h
index f5a7dd9cc..53c9a81f2 100644
--- a/src/libutil/http_private.h
+++ b/src/libutil/http_private.h
@@ -27,6 +27,10 @@
#define HASH_CASELESS
#include "uthash_strcase.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* HTTP header structure
*/
@@ -84,9 +88,10 @@ struct rspamd_keepalive_hash_key {
GQueue conns;
};
-gint32 rspamd_keep_alive_key_hash (struct rspamd_keepalive_hash_key* k);
-bool rspamd_keep_alive_key_equal (struct rspamd_keepalive_hash_key* k1,
- struct rspamd_keepalive_hash_key* k2);
+gint32 rspamd_keep_alive_key_hash (struct rspamd_keepalive_hash_key *k);
+
+bool rspamd_keep_alive_key_equal (struct rspamd_keepalive_hash_key *k1,
+ struct rspamd_keepalive_hash_key *k2);
KHASH_INIT (rspamd_keep_alive_hash, struct rspamd_keepalive_hash_key *,
char, 0, rspamd_keep_alive_key_hash, rspamd_keep_alive_key_equal);
@@ -106,10 +111,16 @@ struct rspamd_http_context {
};
#define HTTP_ERROR http_error_quark ()
+
GQuark http_error_quark (void);
void rspamd_http_message_storage_cleanup (struct rspamd_http_message *msg);
+
gboolean rspamd_http_message_grow_body (struct rspamd_http_message *msg,
gsize len);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* SRC_LIBUTIL_HTTP_PRIVATE_H_ */
diff --git a/src/libutil/http_router.h b/src/libutil/http_router.h
index b946067b7..115ee9b8a 100644
--- a/src/libutil/http_router.h
+++ b/src/libutil/http_router.h
@@ -19,14 +19,20 @@
#include "config.h"
#include "http_connection.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_http_connection_router;
struct rspamd_http_connection_entry;
typedef int (*rspamd_http_router_handler_t) (struct rspamd_http_connection_entry
*conn_ent,
struct rspamd_http_message *msg);
+
typedef void (*rspamd_http_router_error_handler_t) (struct rspamd_http_connection_entry *conn_ent,
GError *err);
+
typedef void (*rspamd_http_router_finish_handler_t) (struct rspamd_http_connection_entry *conn_ent);
@@ -62,7 +68,7 @@ struct rspamd_http_connection_router {
* the specified directory
* @return
*/
-struct rspamd_http_connection_router * rspamd_http_router_new (
+struct rspamd_http_connection_router *rspamd_http_router_new (
rspamd_http_router_error_handler_t eh,
rspamd_http_router_finish_handler_t fh,
ev_tstamp timeout,
@@ -109,6 +115,7 @@ void rspamd_http_router_insert_headers (struct rspamd_http_connection_router *ro
struct rspamd_http_message *msg);
struct rspamd_regexp_s;
+
/**
* Adds new pattern to router, regexp object is refcounted by this function
* @param router
@@ -117,6 +124,7 @@ struct rspamd_regexp_s;
*/
void rspamd_http_router_add_regexp (struct rspamd_http_connection_router *router,
struct rspamd_regexp_s *re, rspamd_http_router_handler_t handler);
+
/**
* Handle new accepted socket
* @param router router object
@@ -134,4 +142,8 @@ void rspamd_http_router_handle_socket (
*/
void rspamd_http_router_free (struct rspamd_http_connection_router *router);
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libutil/http_util.h b/src/libutil/http_util.h
index 30d806ae0..7a22ffb16 100644
--- a/src/libutil/http_util.h
+++ b/src/libutil/http_util.h
@@ -19,6 +19,10 @@
#include "config.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* Parse HTTP date header and return it as time_t
* @param header HTTP date header
@@ -45,4 +49,8 @@ glong rspamd_http_date_format (gchar *buf, gsize len, time_t time);
*/
void rspamd_http_normalize_path_inplace (gchar *path, guint len, guint *nlen);
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libutil/libev_helper.h b/src/libutil/libev_helper.h
index cf52db557..8502043e6 100644
--- a/src/libutil/libev_helper.h
+++ b/src/libutil/libev_helper.h
@@ -20,12 +20,17 @@
#include "config.h"
#include "contrib/libev/ev.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/*
* This module is a little helper to simplify libevent->libev transition
* It allows to create timed IO watchers utilising both
*/
-typedef void (*rspamd_ev_cb)(int fd, short what, void *ud);
+typedef void (*rspamd_ev_cb) (int fd, short what, void *ud);
struct rspamd_io_ev {
ev_io io;
@@ -45,7 +50,7 @@ struct rspamd_io_ev {
* @param ud
*/
void rspamd_ev_watcher_init (struct rspamd_io_ev *ev,
- int fd, short what, rspamd_ev_cb cb, void *ud);
+ int fd, short what, rspamd_ev_cb cb, void *ud);
/**
* Start watcher with the specific timeout
@@ -75,4 +80,8 @@ void rspamd_ev_watcher_reschedule (struct ev_loop *loop,
struct rspamd_io_ev *ev,
short what);
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libutil/logger.h b/src/libutil/logger.h
index 7347e67b1..e56c37aad 100644
--- a/src/libutil/logger.h
+++ b/src/libutil/logger.h
@@ -2,23 +2,28 @@
#define RSPAMD_LOGGER_H
#include "config.h"
-#include "cfg_file.h"
#include "radix.h"
#include "util.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#ifndef G_LOG_LEVEL_USER_SHIFT
#define G_LOG_LEVEL_USER_SHIFT 8
#endif
+struct rspamd_config;
+
enum rspamd_log_flags {
RSPAMD_LOG_FORCED = (1 << G_LOG_LEVEL_USER_SHIFT),
RSPAMD_LOG_ENCRYPTED = (1 << (G_LOG_LEVEL_USER_SHIFT + 1)),
- RSPAMD_LOG_LEVEL_MASK = ~(RSPAMD_LOG_FORCED|RSPAMD_LOG_ENCRYPTED)
+ RSPAMD_LOG_LEVEL_MASK = ~(RSPAMD_LOG_FORCED | RSPAMD_LOG_ENCRYPTED)
};
typedef void (*rspamd_log_func_t) (const gchar *module, const gchar *id,
- const gchar *function,
- gint level_flags, const gchar *message, gpointer arg);
+ const gchar *function,
+ gint level_flags, const gchar *message, gpointer arg);
typedef struct rspamd_logger_s rspamd_logger_t;
@@ -28,9 +33,9 @@ typedef struct rspamd_logger_s rspamd_logger_t;
* Init logger
*/
void rspamd_set_logger (struct rspamd_config *cfg,
- GQuark ptype,
- rspamd_logger_t **plogger,
- rspamd_mempool_t *pool);
+ GQuark ptype,
+ rspamd_logger_t **plogger,
+ rspamd_mempool_t *pool);
/**
* Open log file or initialize other structures
@@ -76,7 +81,7 @@ void rspamd_log_flush (rspamd_logger_t *logger);
* Log function that is compatible for glib messages
*/
void rspamd_glib_log_function (const gchar *log_domain,
- GLogLevelFlags log_level, const gchar *message, gpointer arg);
+ GLogLevelFlags log_level, const gchar *message, gpointer arg);
/**
* Log function for printing glib assertions
@@ -87,13 +92,13 @@ void rspamd_glib_printerr_function (const gchar *message);
* Function with variable number of arguments support
*/
void rspamd_common_log_function (rspamd_logger_t *logger,
- gint level_flags,
- const gchar *module, const gchar *id,
- const gchar *function, const gchar *fmt, ...);
+ gint level_flags,
+ const gchar *module, const gchar *id,
+ const gchar *function, const gchar *fmt, ...);
void rspamd_common_logv (rspamd_logger_t *logger, gint level_flags,
- const gchar *module, const gchar *id, const gchar *function,
- const gchar *fmt, va_list args);
+ const gchar *module, const gchar *id, const gchar *function,
+ const gchar *fmt, va_list args);
/**
* Add new logging module, returns module ID
@@ -106,15 +111,15 @@ guint rspamd_logger_add_debug_module (const gchar *mod);
* Macro to use for faster debug modules
*/
#define INIT_LOG_MODULE(mname) \
- static guint rspamd_##mname##_log_id = (guint)-1; \
- RSPAMD_CONSTRUCTOR(rspamd_##mname##_log_init) { \
- rspamd_##mname##_log_id = rspamd_logger_add_debug_module(#mname); \
+ static guint rspamd_##mname##_log_id = (guint)-1; \
+ RSPAMD_CONSTRUCTOR(rspamd_##mname##_log_init) { \
+ rspamd_##mname##_log_id = rspamd_logger_add_debug_module(#mname); \
}
#define INIT_LOG_MODULE_PUBLIC(mname) \
- guint rspamd_##mname##_log_id = (guint)-1; \
- RSPAMD_CONSTRUCTOR(rspamd_##mname##_log_init) { \
- rspamd_##mname##_log_id = rspamd_logger_add_debug_module(#mname); \
+ guint rspamd_##mname##_log_id = (guint)-1; \
+ RSPAMD_CONSTRUCTOR(rspamd_##mname##_log_init) { \
+ rspamd_##mname##_log_id = rspamd_logger_add_debug_module(#mname); \
}
void rspamd_logger_configure_modules (GHashTable *mods_enabled);
@@ -123,22 +128,22 @@ void rspamd_logger_configure_modules (GHashTable *mods_enabled);
* Conditional debug function
*/
void rspamd_conditional_debug (rspamd_logger_t *logger,
- rspamd_inet_addr_t *addr, const gchar *module, const gchar *id,
- const gchar *function, const gchar *fmt, ...);
+ rspamd_inet_addr_t *addr, const gchar *module, const gchar *id,
+ const gchar *function, const gchar *fmt, ...);
void rspamd_conditional_debug_fast (rspamd_logger_t *logger,
- rspamd_inet_addr_t *addr,
- guint mod_id, const gchar *module, const gchar *id,
- const gchar *function, const gchar *fmt, ...);
+ rspamd_inet_addr_t *addr,
+ guint mod_id, const gchar *module, const gchar *id,
+ const gchar *function, const gchar *fmt, ...);
/**
* Function with variable number of arguments support that uses static default logger
*/
void rspamd_default_log_function (gint level_flags,
- const gchar *module, const gchar *id,
- const gchar *function,
- const gchar *fmt,
- ...);
+ const gchar *module, const gchar *id,
+ const gchar *function,
+ const gchar *fmt,
+ ...);
/**
* Varargs version of default log function
@@ -148,10 +153,10 @@ void rspamd_default_log_function (gint level_flags,
* @param args
*/
void rspamd_default_logv (gint level_flags,
- const gchar *module, const gchar *id,
- const gchar *function,
- const gchar *fmt,
- va_list args);
+ const gchar *module, const gchar *id,
+ const gchar *function,
+ const gchar *fmt,
+ va_list args);
/**
* Temporary turn on debug
@@ -180,20 +185,20 @@ void rspamd_log_lock (rspamd_logger_t *logger);
* 2 - info messages
* 3 - debug messages
*/
-const guint64* rspamd_log_counters (rspamd_logger_t *logger);
+const guint64 *rspamd_log_counters (rspamd_logger_t *logger);
/**
* Returns errors ring buffer as ucl array
* @param logger
* @return
*/
-ucl_object_t * rspamd_log_errorbuf_export (const rspamd_logger_t *logger);
+ucl_object_t *rspamd_log_errorbuf_export (const rspamd_logger_t *logger);
/**
* Returns the current logger object
* @return
*/
-rspamd_logger_t* rspamd_logger_get_singleton (void);
+rspamd_logger_t *rspamd_logger_get_singleton (void);
/* Typical functions */
@@ -282,7 +287,7 @@ extern guint rspamd_task_log_id;
G_STRFUNC, \
__VA_ARGS__)
#define msg_debug_task_check(...) rspamd_conditional_debug_fast (NULL, \
- task ? task->from_addr : NULL, \
+ task ? task->from_addr : NULL, \
rspamd_task_log_id, "task", task ? task->task_pool->tag.uid : NULL, \
G_STRFUNC, \
__VA_ARGS__)
@@ -310,7 +315,7 @@ extern guint rspamd_task_log_id;
G_STRFUNC, \
__VA_ARGS__)
#define msg_warn_pool_check(...) rspamd_default_log_function (G_LOG_LEVEL_WARNING, \
- pool ? pool->tag.tagname : NULL, pool ? pool->tag.uid : NULL, \
+ pool ? pool->tag.tagname : NULL, pool ? pool->tag.uid : NULL, \
G_STRFUNC, \
__VA_ARGS__)
#define msg_info_pool_check(...) rspamd_default_log_function (G_LOG_LEVEL_INFO, \
@@ -318,7 +323,12 @@ extern guint rspamd_task_log_id;
G_STRFUNC, \
__VA_ARGS__)
#define msg_debug_pool_check(...) rspamd_conditional_debug (NULL, NULL, \
- pool ? pool->tag.tagname : NULL, pool ? pool->tag.uid : NULL, \
- G_STRFUNC, \
- __VA_ARGS__)
+ pool ? pool->tag.tagname : NULL, pool ? pool->tag.uid : NULL, \
+ G_STRFUNC, \
+ __VA_ARGS__)
+
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libutil/map.h b/src/libutil/map.h
index 9f04d4c6c..9e09ab8fe 100644
--- a/src/libutil/map.h
+++ b/src/libutil/map.h
@@ -9,26 +9,34 @@
#include "radix.h"
#include "dns.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* Maps API is designed to load lists data from different dynamic sources.
* It monitor files and HTTP locations for modifications and reload them if they are
* modified.
*/
struct map_cb_data;
+struct rspamd_worker;
/**
* Callback types
*/
-typedef gchar * (*map_cb_t)(gchar *chunk, gint len,
- struct map_cb_data *data, gboolean final);
-typedef void (*map_fin_cb_t)(struct map_cb_data *data, void **target);
-typedef void (*map_dtor_t)(struct map_cb_data *data);
+typedef gchar *(*map_cb_t) (gchar *chunk, gint len,
+ struct map_cb_data *data, gboolean final);
+
+typedef void (*map_fin_cb_t) (struct map_cb_data *data, void **target);
+
+typedef void (*map_dtor_t) (struct map_cb_data *data);
-typedef gboolean (*rspamd_map_traverse_cb)(gconstpointer key,
- gconstpointer value, gsize hits, gpointer ud);
-typedef void (*rspamd_map_traverse_function)(void *data,
- rspamd_map_traverse_cb cb,
- gpointer cbdata, gboolean reset_hits);
+typedef gboolean (*rspamd_map_traverse_cb) (gconstpointer key,
+ gconstpointer value, gsize hits, gpointer ud);
+
+typedef void (*rspamd_map_traverse_function) (void *data,
+ rspamd_map_traverse_cb cb,
+ gpointer cbdata, gboolean reset_hits);
/**
* Common map object
@@ -56,7 +64,7 @@ gboolean rspamd_map_is_map (const gchar *map_line);
/**
* Add map from line
*/
-struct rspamd_map* rspamd_map_add (struct rspamd_config *cfg,
+struct rspamd_map *rspamd_map_add (struct rspamd_config *cfg,
const gchar *map_line,
const gchar *description,
map_cb_t read_callback,
@@ -67,7 +75,7 @@ struct rspamd_map* rspamd_map_add (struct rspamd_config *cfg,
/**
* Add map from ucl
*/
-struct rspamd_map* rspamd_map_add_from_ucl (struct rspamd_config *cfg,
+struct rspamd_map *rspamd_map_add_from_ucl (struct rspamd_config *cfg,
const ucl_object_t *obj,
const gchar *description,
map_cb_t read_callback,
@@ -111,6 +119,10 @@ rspamd_map_traverse_function rspamd_map_get_traverse_function (struct rspamd_map
* @return
*/
void rspamd_map_traverse (struct rspamd_map *map, rspamd_map_traverse_cb cb,
- gpointer cbdata, gboolean reset_hits);
+ gpointer cbdata, gboolean reset_hits);
+
+#ifdef __cplusplus
+}
+#endif
#endif
diff --git a/src/libutil/map_helpers.h b/src/libutil/map_helpers.h
index 4645024e3..4f7b5b804 100644
--- a/src/libutil/map_helpers.h
+++ b/src/libutil/map_helpers.h
@@ -27,6 +27,11 @@
* Defines helper structures to deal with different map types
*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* Common structures, abstract for simplicity
*/
@@ -42,56 +47,64 @@ enum rspamd_regexp_map_flags {
};
typedef void (*insert_func) (gpointer st, gconstpointer key,
- gconstpointer value);
+ gconstpointer value);
/**
* Radix list is a list like ip/mask
*/
-gchar * rspamd_radix_read (
+gchar *rspamd_radix_read (
gchar *chunk,
gint len,
struct map_cb_data *data,
gboolean final);
+
void rspamd_radix_fin (struct map_cb_data *data, void **target);
+
void rspamd_radix_dtor (struct map_cb_data *data);
/**
* Kv list is an ordinal list of keys and values separated by whitespace
*/
-gchar * rspamd_kv_list_read (
+gchar *rspamd_kv_list_read (
gchar *chunk,
gint len,
struct map_cb_data *data,
gboolean final);
+
void rspamd_kv_list_fin (struct map_cb_data *data, void **target);
+
void rspamd_kv_list_dtor (struct map_cb_data *data);
/**
* Regexp list is a list of regular expressions
*/
-gchar * rspamd_regexp_list_read_single (
+gchar *rspamd_regexp_list_read_single (
gchar *chunk,
gint len,
struct map_cb_data *data,
gboolean final);
-gchar * rspamd_regexp_list_read_multiple (
+
+gchar *rspamd_regexp_list_read_multiple (
gchar *chunk,
gint len,
struct map_cb_data *data,
gboolean final);
-gchar * rspamd_glob_list_read_single (
+gchar *rspamd_glob_list_read_single (
gchar *chunk,
gint len,
struct map_cb_data *data,
gboolean final);
-gchar * rspamd_glob_list_read_multiple (
+
+gchar *rspamd_glob_list_read_multiple (
gchar *chunk,
gint len,
struct map_cb_data *data,
gboolean final);
+
void rspamd_regexp_list_fin (struct map_cb_data *data, void **target);
+
void rspamd_regexp_list_dtor (struct map_cb_data *data);
/**
@@ -99,7 +112,7 @@ void rspamd_regexp_list_dtor (struct map_cb_data *data);
*/
gchar *
rspamd_parse_kv_list (
- gchar * chunk,
+ gchar *chunk,
gint len,
struct map_cb_data *data,
insert_func func,
@@ -115,7 +128,7 @@ rspamd_parse_kv_list (
* @return
*/
gconstpointer rspamd_match_regexp_map_single (struct rspamd_regexp_map_helper *map,
- const gchar *in, gsize len);
+ const gchar *in, gsize len);
/**
* Find a multiple (all) matching regexp for the specified text or NULL if
@@ -125,8 +138,8 @@ gconstpointer rspamd_match_regexp_map_single (struct rspamd_regexp_map_helper *m
* @param len
* @return
*/
-GPtrArray* rspamd_match_regexp_map_all (struct rspamd_regexp_map_helper *map,
- const gchar *in, gsize len);
+GPtrArray *rspamd_match_regexp_map_all (struct rspamd_regexp_map_helper *map,
+ const gchar *in, gsize len);
/**
* Find value matching specific key in a hash map
@@ -136,7 +149,7 @@ GPtrArray* rspamd_match_regexp_map_all (struct rspamd_regexp_map_helper *map,
* @return
*/
gconstpointer rspamd_match_hash_map (struct rspamd_hash_map_helper *map,
- const gchar *in);
+ const gchar *in);
/**
* Find value matching specific key in a hash map
@@ -146,10 +159,10 @@ gconstpointer rspamd_match_hash_map (struct rspamd_hash_map_helper *map,
* @return
*/
gconstpointer rspamd_match_radix_map (struct rspamd_radix_map_helper *map,
- const guchar *in, gsize inlen);
+ const guchar *in, gsize inlen);
gconstpointer rspamd_match_radix_map_addr (struct rspamd_radix_map_helper *map,
- const rspamd_inet_addr_t *addr);
+ const rspamd_inet_addr_t *addr);
/**
* Creates radix map helper
@@ -157,6 +170,7 @@ gconstpointer rspamd_match_radix_map_addr (struct rspamd_radix_map_helper *map,
* @return
*/
struct rspamd_radix_map_helper *rspamd_map_helper_new_radix (struct rspamd_map *map);
+
/**
* Inserts new value into radix map
* @param st
@@ -164,6 +178,7 @@ struct rspamd_radix_map_helper *rspamd_map_helper_new_radix (struct rspamd_map *
* @param value
*/
void rspamd_map_helper_insert_radix (gpointer st, gconstpointer key, gconstpointer value);
+
/**
* Inserts new value into radix map performing synchronous resolving
* @param st
@@ -171,7 +186,8 @@ void rspamd_map_helper_insert_radix (gpointer st, gconstpointer key, gconstpoint
* @param value
*/
void rspamd_map_helper_insert_radix_resolve (gpointer st, gconstpointer key,
- gconstpointer value);
+ gconstpointer value);
+
/**
* Destroys radix map helper
* @param r
@@ -185,6 +201,7 @@ void rspamd_map_helper_destroy_radix (struct rspamd_radix_map_helper *r);
* @return
*/
struct rspamd_hash_map_helper *rspamd_map_helper_new_hash (struct rspamd_map *map);
+
/**
* Inserts a new value into a hash map
* @param st
@@ -192,6 +209,7 @@ struct rspamd_hash_map_helper *rspamd_map_helper_new_hash (struct rspamd_map *ma
* @param value
*/
void rspamd_map_helper_insert_hash (gpointer st, gconstpointer key, gconstpointer value);
+
/**
* Destroys hash map helper
* @param r
@@ -204,8 +222,9 @@ void rspamd_map_helper_destroy_hash (struct rspamd_hash_map_helper *r);
* @param flags
* @return
*/
-struct rspamd_regexp_map_helper * rspamd_map_helper_new_regexp (struct rspamd_map *map,
- enum rspamd_regexp_map_flags flags);
+struct rspamd_regexp_map_helper *rspamd_map_helper_new_regexp (struct rspamd_map *map,
+ enum rspamd_regexp_map_flags flags);
+
/**
* Inserts a new regexp into regexp map
* @param st
@@ -213,10 +232,15 @@ struct rspamd_regexp_map_helper * rspamd_map_helper_new_regexp (struct rspamd_ma
* @param value
*/
void rspamd_map_helper_insert_re (gpointer st, gconstpointer key, gconstpointer value);
+
/**
* Destroy regexp map
* @param re_map
*/
void rspamd_map_helper_destroy_regexp (struct rspamd_regexp_map_helper *re_map);
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/libutil/map_private.h b/src/libutil/map_private.h
index e08c2dce3..de84322ec 100644
--- a/src/libutil/map_private.h
+++ b/src/libutil/map_private.h
@@ -23,18 +23,23 @@
#include "map.h"
#include "ref.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
typedef void (*rspamd_map_tmp_dtor) (gpointer p);
+
extern guint rspamd_map_log_id;
#define msg_err_map(...) rspamd_default_log_function (G_LOG_LEVEL_CRITICAL, \
- "map", map->tag, \
+ "map", map->tag, \
G_STRFUNC, \
__VA_ARGS__)
#define msg_warn_map(...) rspamd_default_log_function (G_LOG_LEVEL_WARNING, \
- "map", map->tag, \
+ "map", map->tag, \
G_STRFUNC, \
__VA_ARGS__)
#define msg_info_map(...) rspamd_default_log_function (G_LOG_LEVEL_INFO, \
- "map", map->tag, \
+ "map", map->tag, \
G_STRFUNC, \
__VA_ARGS__)
#define msg_debug_map(...) rspamd_conditional_debug_fast (NULL, NULL, \
@@ -209,4 +214,8 @@ struct http_callback_data {
ref_entry_t ref;
};
+#ifdef __cplusplus
+}
+#endif
+
#endif /* SRC_LIBUTIL_MAP_PRIVATE_H_ */
diff --git a/src/libutil/mem_pool.h b/src/libutil/mem_pool.h
index 0a2e86b6d..5a663e35f 100644
--- a/src/libutil/mem_pool.h
+++ b/src/libutil/mem_pool.h
@@ -13,13 +13,17 @@
#define RSPAMD_MEM_POOL_H
#include "config.h"
+
+
#if defined(HAVE_PTHREAD_PROCESS_SHARED) && !defined(DISABLE_PTHREAD_MUTEX)
#include <pthread.h>
#endif
-struct f_str_s;
-
+#ifdef __cplusplus
+extern "C" {
+#endif
+struct f_str_s;
#ifdef __has_attribute
# if __has_attribute(alloc_size)
@@ -60,7 +64,7 @@ enum rspamd_mempool_chain_type {
/**
* Destructor type definition
*/
-typedef void (*rspamd_mempool_destruct_t)(void *ptr);
+typedef void (*rspamd_mempool_destruct_t) (void *ptr);
/**
* Pool mutex structure
@@ -122,7 +126,7 @@ typedef struct memory_pool_s {
GArray *destructors;
GPtrArray *trash_stack;
GHashTable *variables; /**< private memory pool variables */
- gsize elt_len; /**< size of an element */
+ gsize elt_len; /**< size of an element */
struct rspamd_mempool_entry_point *entry;
struct rspamd_mempool_tag tag; /**< memory pool tag */
} rspamd_mempool_t;
@@ -142,13 +146,13 @@ typedef struct memory_pool_stat_s {
} rspamd_mempool_stat_t;
-
/**
* Allocate new memory poll
* @param size size of pool's page
* @return new memory pool object
*/
-rspamd_mempool_t * rspamd_mempool_new_ (gsize size, const gchar *tag, const gchar *loc);
+rspamd_mempool_t *rspamd_mempool_new_ (gsize size, const gchar *tag, const gchar *loc);
+
#define rspamd_mempool_new(size, tag) rspamd_mempool_new_((size), (tag), G_STRLOC)
/**
@@ -157,8 +161,8 @@ rspamd_mempool_t * rspamd_mempool_new_ (gsize size, const gchar *tag, const gcha
* @param size bytes to allocate
* @return pointer to allocated object
*/
-void * rspamd_mempool_alloc (rspamd_mempool_t * pool, gsize size)
- RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MIN_MEM_ALIGNMENT) RSPAMD_ATTR_RETURNS_NONNUL;
+void *rspamd_mempool_alloc (rspamd_mempool_t *pool, gsize size)
+RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MIN_MEM_ALIGNMENT) RSPAMD_ATTR_RETURNS_NONNUL;
/**
* Get memory from temporary pool
@@ -166,7 +170,7 @@ void * rspamd_mempool_alloc (rspamd_mempool_t * pool, gsize size)
* @param size bytes to allocate
* @return pointer to allocated object
*/
-void * rspamd_mempool_alloc_tmp (rspamd_mempool_t * pool, gsize size) RSPAMD_ATTR_RETURNS_NONNUL;
+void *rspamd_mempool_alloc_tmp (rspamd_mempool_t *pool, gsize size) RSPAMD_ATTR_RETURNS_NONNUL;
/**
* Get memory and set it to zero
@@ -174,8 +178,8 @@ void * rspamd_mempool_alloc_tmp (rspamd_mempool_t * pool, gsize size) RSPAMD_ATT
* @param size bytes to allocate
* @return pointer to allocated object
*/
-void * rspamd_mempool_alloc0 (rspamd_mempool_t * pool, gsize size)
- RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MIN_MEM_ALIGNMENT) RSPAMD_ATTR_RETURNS_NONNUL;
+void *rspamd_mempool_alloc0 (rspamd_mempool_t *pool, gsize size)
+RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MIN_MEM_ALIGNMENT) RSPAMD_ATTR_RETURNS_NONNUL;
/**
* Get memory and set it to zero
@@ -183,12 +187,12 @@ void * rspamd_mempool_alloc0 (rspamd_mempool_t * pool, gsize size)
* @param size bytes to allocate
* @return pointer to allocated object
*/
-void * rspamd_mempool_alloc0_tmp (rspamd_mempool_t * pool, gsize size) RSPAMD_ATTR_RETURNS_NONNUL;
+void *rspamd_mempool_alloc0_tmp (rspamd_mempool_t *pool, gsize size) RSPAMD_ATTR_RETURNS_NONNUL;
/**
* Cleanup temporary data in pool
*/
-void rspamd_mempool_cleanup_tmp (rspamd_mempool_t * pool);
+void rspamd_mempool_cleanup_tmp (rspamd_mempool_t *pool);
/**
* Make a copy of string in pool
@@ -196,8 +200,8 @@ void rspamd_mempool_cleanup_tmp (rspamd_mempool_t * pool);
* @param src source string
* @return pointer to newly created string that is copy of src
*/
-gchar * rspamd_mempool_strdup (rspamd_mempool_t * pool, const gchar *src)
- RSPAMD_ATTR_ALLOC_ALIGN(MIN_MEM_ALIGNMENT);
+gchar *rspamd_mempool_strdup (rspamd_mempool_t *pool, const gchar *src)
+RSPAMD_ATTR_ALLOC_ALIGN(MIN_MEM_ALIGNMENT);
/**
* Make a copy of fixed string in pool as null terminated string
@@ -205,8 +209,8 @@ gchar * rspamd_mempool_strdup (rspamd_mempool_t * pool, const gchar *src)
* @param src source string
* @return pointer to newly created string that is copy of src
*/
-gchar * rspamd_mempool_fstrdup (rspamd_mempool_t * pool,
- const struct f_str_s *src) RSPAMD_ATTR_ALLOC_ALIGN(MIN_MEM_ALIGNMENT);
+gchar *rspamd_mempool_fstrdup (rspamd_mempool_t *pool,
+ const struct f_str_s *src) RSPAMD_ATTR_ALLOC_ALIGN(MIN_MEM_ALIGNMENT);
struct f_str_tok;
@@ -216,18 +220,20 @@ struct f_str_tok;
* @param src source string
* @return pointer to newly created string that is copy of src
*/
-gchar * rspamd_mempool_ftokdup (rspamd_mempool_t *pool,
- const struct f_str_tok *src) RSPAMD_ATTR_ALLOC_ALIGN(MIN_MEM_ALIGNMENT);
+gchar *rspamd_mempool_ftokdup (rspamd_mempool_t *pool,
+ const struct f_str_tok *src) RSPAMD_ATTR_ALLOC_ALIGN(MIN_MEM_ALIGNMENT);
/**
* Allocate piece of shared memory
* @param pool memory pool object
* @param size bytes to allocate
*/
-void * rspamd_mempool_alloc_shared (rspamd_mempool_t * pool, gsize size)
- RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MIN_MEM_ALIGNMENT) RSPAMD_ATTR_RETURNS_NONNUL;
-void * rspamd_mempool_alloc0_shared (rspamd_mempool_t *pool, gsize size)
- RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MIN_MEM_ALIGNMENT) RSPAMD_ATTR_RETURNS_NONNUL;
+void *rspamd_mempool_alloc_shared (rspamd_mempool_t *pool, gsize size)
+RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MIN_MEM_ALIGNMENT) RSPAMD_ATTR_RETURNS_NONNUL;
+
+void *rspamd_mempool_alloc0_shared (rspamd_mempool_t *pool, gsize size)
+RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MIN_MEM_ALIGNMENT) RSPAMD_ATTR_RETURNS_NONNUL;
+
/**
* Add destructor callback to pool
* @param pool memory pool object
@@ -235,14 +241,14 @@ void * rspamd_mempool_alloc0_shared (rspamd_mempool_t *pool, gsize size)
* @param data pointer to data that would be passed to destructor
*/
void rspamd_mempool_add_destructor_full (rspamd_mempool_t *pool,
- rspamd_mempool_destruct_t func,
- void *data,
- const gchar *function,
- const gchar *line);
+ rspamd_mempool_destruct_t func,
+ void *data,
+ const gchar *function,
+ const gchar *line);
/* Macros for common usage */
#define rspamd_mempool_add_destructor(pool, func, data) \
- rspamd_mempool_add_destructor_full (pool, func, data, G_STRFUNC, G_STRLOC)
+ rspamd_mempool_add_destructor_full (pool, func, data, G_STRFUNC, G_STRLOC)
/**
* Replace destructor callback to pool for specified pointer
@@ -252,7 +258,7 @@ void rspamd_mempool_add_destructor_full (rspamd_mempool_t *pool,
* @param new_data pointer to data that would be passed to destructor
*/
void rspamd_mempool_replace_destructor (rspamd_mempool_t *pool,
- rspamd_mempool_destruct_t func, void *old_data, void *new_data);
+ rspamd_mempool_destruct_t func, void *old_data, void *new_data);
/**
* Calls all destructors associated with the specific memory pool without removing
@@ -272,7 +278,7 @@ void rspamd_mempool_delete (rspamd_mempool_t *pool);
* @param pool memory pool object
* @return mutex object
*/
-rspamd_mempool_mutex_t * rspamd_mempool_get_mutex (rspamd_mempool_t *pool);
+rspamd_mempool_mutex_t *rspamd_mempool_get_mutex (rspamd_mempool_t *pool);
/**
* Lock mutex
@@ -291,7 +297,7 @@ void rspamd_mempool_unlock_mutex (rspamd_mempool_mutex_t *mutex);
* @param pool memory pool object
* @return rwlock object
*/
-rspamd_mempool_rwlock_t * rspamd_mempool_get_rwlock (rspamd_mempool_t *pool);
+rspamd_mempool_rwlock_t *rspamd_mempool_get_rwlock (rspamd_mempool_t *pool);
/**
* Acquire read lock
@@ -333,6 +339,7 @@ void rspamd_mempool_stat_reset (void);
* @return size of memory page in system
*/
#define rspamd_mempool_suggest_size() rspamd_mempool_suggest_size_(G_STRLOC)
+
gsize rspamd_mempool_suggest_size_ (const char *loc);
/**
@@ -343,7 +350,7 @@ gsize rspamd_mempool_suggest_size_ (const char *loc);
* @param destructor pointer to function-destructor
*/
void rspamd_mempool_set_variable (rspamd_mempool_t *pool, const gchar *name,
- gpointer value, rspamd_mempool_destruct_t destructor);
+ gpointer value, rspamd_mempool_destruct_t destructor);
/**
* Get memory pool variable
@@ -352,7 +359,7 @@ void rspamd_mempool_set_variable (rspamd_mempool_t *pool, const gchar *name,
* @return NULL or pointer to variable data
*/
gpointer rspamd_mempool_get_variable (rspamd_mempool_t *pool,
- const gchar *name);
+ const gchar *name);
/**
* Removes variable from memory pool
@@ -360,7 +367,8 @@ gpointer rspamd_mempool_get_variable (rspamd_mempool_t *pool,
* @param name name of variable
*/
void rspamd_mempool_remove_variable (rspamd_mempool_t *pool,
- const gchar *name);
+ const gchar *name);
+
/**
* Prepend element to a list creating it in the memory pool
* @param l
@@ -368,7 +376,8 @@ void rspamd_mempool_remove_variable (rspamd_mempool_t *pool,
* @return
*/
GList *rspamd_mempool_glist_prepend (rspamd_mempool_t *pool,
- GList *l, gpointer p) G_GNUC_WARN_UNUSED_RESULT;
+ GList *l, gpointer p) G_GNUC_WARN_UNUSED_RESULT;
+
/**
* Append element to a list creating it in the memory pool
* @param l
@@ -376,6 +385,10 @@ GList *rspamd_mempool_glist_prepend (rspamd_mempool_t *pool,
* @return
*/
GList *rspamd_mempool_glist_append (rspamd_mempool_t *pool,
- GList *l, gpointer p) G_GNUC_WARN_UNUSED_RESULT;
+ GList *l, gpointer p) G_GNUC_WARN_UNUSED_RESULT;
+
+#ifdef __cplusplus
+}
+#endif
#endif
diff --git a/src/libutil/multipattern.h b/src/libutil/multipattern.h
index 785c09e3d..959b13455 100644
--- a/src/libutil/multipattern.h
+++ b/src/libutil/multipattern.h
@@ -26,13 +26,17 @@
* hyperscan and ac-trie
*/
+#ifdef __cplusplus
+extern "C" {
+#endif
+
enum rspamd_multipattern_flags {
RSPAMD_MULTIPATTERN_DEFAULT = 0,
RSPAMD_MULTIPATTERN_ICASE = (1 << 0),
RSPAMD_MULTIPATTERN_UTF8 = (1 << 1),
RSPAMD_MULTIPATTERN_TLD = (1 << 2),
/* Not supported by acism */
- RSPAMD_MULTIPATTERN_GLOB = (1 << 3),
+ RSPAMD_MULTIPATTERN_GLOB = (1 << 3),
RSPAMD_MULTIPATTERN_RE = (1 << 4),
};
@@ -50,12 +54,12 @@ struct rspamd_cryptobox_library_ctx;
* @return if 0 then search for another pattern, otherwise return this value to caller
*/
typedef gint (*rspamd_multipattern_cb_t) (struct rspamd_multipattern *mp,
- guint strnum,
- gint match_start,
- gint match_pos,
- const gchar *text,
- gsize len,
- void *context);
+ guint strnum,
+ gint match_start,
+ gint match_pos,
+ const gchar *text,
+ gsize len,
+ void *context);
/**
* Init multipart library and set the appropriate cache dir
@@ -78,7 +82,7 @@ struct rspamd_multipattern *rspamd_multipattern_create (
* @return
*/
struct rspamd_multipattern *rspamd_multipattern_create_sized (guint reserved,
- enum rspamd_multipattern_flags flags);
+ enum rspamd_multipattern_flags flags);
/**
* Creates new multipattern structure
@@ -98,7 +102,7 @@ struct rspamd_multipattern *rspamd_multipattern_create_full (
* @param pattern
*/
void rspamd_multipattern_add_pattern (struct rspamd_multipattern *mp,
- const gchar *pattern, gint flags);
+ const gchar *pattern, gint flags);
/**
* Adds new pattern from arbitrary string
@@ -108,7 +112,7 @@ void rspamd_multipattern_add_pattern (struct rspamd_multipattern *mp,
* @param flags
*/
void rspamd_multipattern_add_pattern_len (struct rspamd_multipattern *mp,
- const gchar *pattern, gsize patlen, gint flags);
+ const gchar *pattern, gsize patlen, gint flags);
/**
* Compiles multipattern structure
@@ -116,7 +120,7 @@ void rspamd_multipattern_add_pattern_len (struct rspamd_multipattern *mp,
* @return
*/
gboolean rspamd_multipattern_compile (struct rspamd_multipattern *mp,
- GError **err);
+ GError **err);
/**
* Lookups for patterns in a text using the specified callback function
@@ -128,16 +132,17 @@ gboolean rspamd_multipattern_compile (struct rspamd_multipattern *mp,
* @return
*/
gint rspamd_multipattern_lookup (struct rspamd_multipattern *mp,
- const gchar *in, gsize len, rspamd_multipattern_cb_t cb,
- gpointer ud, guint *pnfound);
+ const gchar *in, gsize len, rspamd_multipattern_cb_t cb,
+ gpointer ud, guint *pnfound);
+
/**
* Get pattern string from multipattern identified by index
* @param mp
* @param index
* @return
*/
-const gchar* rspamd_multipattern_get_pattern (struct rspamd_multipattern *mp,
- guint index);
+const gchar *rspamd_multipattern_get_pattern (struct rspamd_multipattern *mp,
+ guint index);
/**
* Returns number of patterns in a multipattern matcher
@@ -158,4 +163,8 @@ void rspamd_multipattern_destroy (struct rspamd_multipattern *mp);
*/
gboolean rspamd_multipattern_has_hyperscan (void);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* SRC_LIBUTIL_MULTIPATTERN_H_ */
diff --git a/src/libutil/printf.h b/src/libutil/printf.h
index 86947f67c..008e08245 100644
--- a/src/libutil/printf.h
+++ b/src/libutil/printf.h
@@ -19,6 +19,9 @@
#include "config.h"
#include "fstring.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
/*
* supported formats:
* %[0][width][x][X]O off_t
@@ -59,24 +62,35 @@
* @param ud opaque pointer
* @return number of characters written
*/
-typedef glong (*rspamd_printf_append_func)(const gchar *buf, glong buflen,
- gpointer ud);
+typedef glong (*rspamd_printf_append_func) (const gchar *buf, glong buflen,
+ gpointer ud);
glong rspamd_fprintf (FILE *f, const gchar *fmt, ...);
+
glong rspamd_printf (const gchar *fmt, ...);
+
glong rspamd_log_fprintf (FILE *f, const gchar *fmt, ...);
+
glong rspamd_snprintf (gchar *buf, glong max, const gchar *fmt, ...);
-gchar * rspamd_vsnprintf (gchar *buf, glong max, const gchar *fmt,
- va_list args);
+
+gchar *rspamd_vsnprintf (gchar *buf, glong max, const gchar *fmt,
+ va_list args);
+
glong rspamd_printf_gstring (GString *s, const gchar *fmt, ...);
+
glong rspamd_vprintf_gstring (GString *s, const gchar *fmt, va_list args);
glong rspamd_printf_fstring (rspamd_fstring_t **s, const gchar *fmt, ...);
+
glong rspamd_vprintf_fstring (rspamd_fstring_t **s, const gchar *fmt, va_list args);
glong rspamd_vprintf_common (rspamd_printf_append_func func,
- gpointer apd,
- const gchar *fmt,
- va_list args);
+ gpointer apd,
+ const gchar *fmt,
+ va_list args);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* PRINTF_H_ */
diff --git a/src/libutil/radix.h b/src/libutil/radix.h
index be75b1b7f..f08b6cc1b 100644
--- a/src/libutil/radix.h
+++ b/src/libutil/radix.h
@@ -22,6 +22,9 @@
#define RADIX_NO_VALUE (uintptr_t)-1
+#ifdef __cplusplus
+extern "C" {
+#endif
typedef struct radix_tree_compressed radix_compressed_t;
@@ -35,10 +38,10 @@ typedef struct radix_tree_compressed radix_compressed_t;
* @return previous value of the key or `RADIX_NO_VALUE`
*/
uintptr_t
-radix_insert_compressed (radix_compressed_t * tree,
- guint8 *key, gsize keylen,
- gsize masklen,
- uintptr_t value);
+radix_insert_compressed (radix_compressed_t *tree,
+ guint8 *key, gsize keylen,
+ gsize masklen,
+ uintptr_t value);
/**
* Find a key in a radix trie
@@ -47,8 +50,8 @@ radix_insert_compressed (radix_compressed_t * tree,
* @param keylen length of a key
* @return opaque pointer or `RADIX_NO_VALUE` if no value has been found
*/
-uintptr_t radix_find_compressed (radix_compressed_t * tree, const guint8 *key,
- gsize keylen);
+uintptr_t radix_find_compressed (radix_compressed_t *tree, const guint8 *key,
+ gsize keylen);
/**
* Find specified address in tree (works for IPv4 or IPv6 addresses)
@@ -57,7 +60,7 @@ uintptr_t radix_find_compressed (radix_compressed_t * tree, const guint8 *key,
* @return
*/
uintptr_t radix_find_compressed_addr (radix_compressed_t *tree,
- const rspamd_inet_addr_t *addr);
+ const rspamd_inet_addr_t *addr);
/**
* Destroy the complete radix trie
@@ -81,14 +84,14 @@ radix_compressed_t *radix_create_compressed_with_pool (rspamd_mempool_t *pool);
* @return number of elements inserted
*/
gint rspamd_radix_add_iplist (const gchar *list, const gchar *separators,
- radix_compressed_t *tree, gconstpointer value, gboolean resolve);
+ radix_compressed_t *tree, gconstpointer value, gboolean resolve);
/**
* Generic version of @see rspamd_radix_add_iplist. This function creates tree
* if `tree` is NULL.
*/
gboolean radix_add_generic_iplist (const gchar *ip_list,
- radix_compressed_t **tree, gboolean resolve);
+ radix_compressed_t **tree, gboolean resolve);
/**
* Returns number of elements in the tree
@@ -102,11 +105,15 @@ gsize radix_get_size (radix_compressed_t *tree);
* @param tree
* @return constant string
*/
-const gchar * radix_get_info (radix_compressed_t *tree);
+const gchar *radix_get_info (radix_compressed_t *tree);
/**
* Returns memory pool associated with the radix tree
*/
-rspamd_mempool_t* radix_get_pool (radix_compressed_t *tree);
+rspamd_mempool_t *radix_get_pool (radix_compressed_t *tree);
+
+#ifdef __cplusplus
+}
+#endif
#endif
diff --git a/src/libutil/ref.h b/src/libutil/ref.h
index 1e2fc30b5..99498ac31 100644
--- a/src/libutil/ref.h
+++ b/src/libutil/ref.h
@@ -19,6 +19,8 @@
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
+
+
/**
* @file ref.h
* A set of macros to handle refcounts
diff --git a/src/libutil/regexp.h b/src/libutil/regexp.h
index b982c08f6..f7ed05dad 100644
--- a/src/libutil/regexp.h
+++ b/src/libutil/regexp.h
@@ -35,6 +35,11 @@
#define RSPAMD_REGEXP_FLAG_DISABLE_JIT (1 << 5)
#define RSPAMD_REGEXP_FLAG_UTF (1 << 6)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_config;
typedef struct rspamd_regexp_s rspamd_regexp_t;
@@ -51,8 +56,8 @@ struct rspamd_re_capture {
* @param err error pointer set if compilation failed
* @return new regexp object
*/
-rspamd_regexp_t* rspamd_regexp_new (const gchar *pattern, const gchar *flags,
- GError **err);
+rspamd_regexp_t *rspamd_regexp_new (const gchar *pattern, const gchar *flags,
+ GError **err);
/**
* Search the specified regexp in the text
@@ -66,9 +71,9 @@ rspamd_regexp_t* rspamd_regexp_new (const gchar *pattern, const gchar *flags,
* @return
*/
gboolean rspamd_regexp_search (rspamd_regexp_t *re,
- const gchar *text, gsize len,
- const gchar **start, const gchar **end, gboolean raw,
- GArray *captures);
+ const gchar *text, gsize len,
+ const gchar **start, const gchar **end, gboolean raw,
+ GArray *captures);
/**
@@ -79,12 +84,12 @@ gboolean rspamd_regexp_search (rspamd_regexp_t *re,
* @return
*/
gboolean rspamd_regexp_match (rspamd_regexp_t *re,
- const gchar *text, gsize len, gboolean raw);
+ const gchar *text, gsize len, gboolean raw);
/**
* Increase refcount for a regexp object
*/
-rspamd_regexp_t* rspamd_regexp_ref (rspamd_regexp_t *re);
+rspamd_regexp_t *rspamd_regexp_ref (rspamd_regexp_t *re);
/**
* Unref regexp object
@@ -118,12 +123,13 @@ gpointer rspamd_regexp_get_id (rspamd_regexp_t *re);
* @param re
* @return
*/
-const char* rspamd_regexp_get_pattern (rspamd_regexp_t *re);
+const char *rspamd_regexp_get_pattern (rspamd_regexp_t *re);
/**
* Get PCRE flags for the regexp
*/
guint rspamd_regexp_get_pcre_flags (rspamd_regexp_t *re);
+
/**
* Get rspamd flags for the regexp
*/
@@ -179,7 +185,7 @@ gpointer rspamd_regexp_set_class (rspamd_regexp_t *re, gpointer re_class);
* Create new regexp cache
* @return
*/
-struct rspamd_regexp_cache* rspamd_regexp_cache_new (void);
+struct rspamd_regexp_cache *rspamd_regexp_cache_new (void);
/**
* Query rspamd cache for a specified regexp
@@ -188,9 +194,9 @@ struct rspamd_regexp_cache* rspamd_regexp_cache_new (void);
* @param flags
* @return
*/
-rspamd_regexp_t* rspamd_regexp_cache_query (struct rspamd_regexp_cache* cache,
- const gchar *pattern,
- const gchar *flags);
+rspamd_regexp_t *rspamd_regexp_cache_query (struct rspamd_regexp_cache *cache,
+ const gchar *pattern,
+ const gchar *flags);
/**
* Insert item to the cache using custom pattern and flags
@@ -199,9 +205,9 @@ rspamd_regexp_t* rspamd_regexp_cache_query (struct rspamd_regexp_cache* cache,
* @param flags
* @param re
*/
-void rspamd_regexp_cache_insert (struct rspamd_regexp_cache* cache,
- const gchar *pattern,
- const gchar *flags, rspamd_regexp_t *re);
+void rspamd_regexp_cache_insert (struct rspamd_regexp_cache *cache,
+ const gchar *pattern,
+ const gchar *flags, rspamd_regexp_t *re);
/**
* Create or get cached regexp from the specified cache
@@ -211,9 +217,9 @@ void rspamd_regexp_cache_insert (struct rspamd_regexp_cache* cache,
* @param err error pointer set if compilation failed
* @return new regexp object
*/
-rspamd_regexp_t* rspamd_regexp_cache_create (struct rspamd_regexp_cache *cache,
- const gchar *pattern,
- const gchar *flags, GError **err);
+rspamd_regexp_t *rspamd_regexp_cache_create (struct rspamd_regexp_cache *cache,
+ const gchar *pattern,
+ const gchar *flags, GError **err);
/**
* Remove regexp from the cache
@@ -222,7 +228,7 @@ rspamd_regexp_t* rspamd_regexp_cache_create (struct rspamd_regexp_cache *cache,
* @return TRUE if a regexp has been removed
*/
gboolean rspamd_regexp_cache_remove (struct rspamd_regexp_cache *cache,
- rspamd_regexp_t *re);
+ rspamd_regexp_t *re);
/**
* Destroy regexp cache and unref all elements inside it
@@ -268,4 +274,8 @@ void rspamd_regexp_library_finalize (void);
*/
rspamd_regexp_t *rspamd_regexp_from_glob (const gchar *gl, gsize sz, GError **err);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* REGEXP_H_ */
diff --git a/src/libutil/rrd.c b/src/libutil/rrd.c
index d17e823e6..9208c71da 100644
--- a/src/libutil/rrd.c
+++ b/src/libutil/rrd.c
@@ -16,6 +16,7 @@
#include "config.h"
#include "rrd.h"
#include "util.h"
+#include "cfg_file.h"
#include "logger.h"
#include "unix-std.h"
#include "cryptobox.h"
diff --git a/src/libutil/rrd.h b/src/libutil/rrd.h
index d24249965..ffffa921d 100644
--- a/src/libutil/rrd.h
+++ b/src/libutil/rrd.h
@@ -26,6 +26,10 @@
#define RRD_VERSION "0003"
#define RRD_FLOAT_COOKIE ((double)8.642135E130)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
typedef union {
unsigned long lv;
double dv;
@@ -139,41 +143,41 @@ enum rrd_cdp_param {
CDP_val = 0,
/* the base_interval is always an
* average */
- CDP_unkn_pdp_cnt,
+ CDP_unkn_pdp_cnt,
/* how many unknown pdp were
* integrated. This and the cdp_xff
* will decide if this is going to
* be a UNKNOWN or a valid value */
- CDP_hw_intercept,
+ CDP_hw_intercept,
/* Current intercept coefficient for the Holt-Winters
* prediction algorithm. */
- CDP_hw_last_intercept,
+ CDP_hw_last_intercept,
/* Last iteration intercept coefficient for the Holt-Winters
* prediction algorihtm. */
- CDP_hw_slope,
+ CDP_hw_slope,
/* Current slope coefficient for the Holt-Winters
* prediction algorithm. */
- CDP_hw_last_slope,
+ CDP_hw_last_slope,
/* Last iteration slope coeffient. */
- CDP_null_count,
+ CDP_null_count,
/* Number of sequential Unknown (DNAN) values + 1 preceding
* the current prediction.
* */
- CDP_last_null_count,
+ CDP_last_null_count,
/* Last iteration count of Unknown (DNAN) values. */
- CDP_primary_val = 8,
+ CDP_primary_val = 8,
/* optimization for bulk updates: the value of the first CDP
* value to be written in the bulk update. */
- CDP_secondary_val = 9,
+ CDP_secondary_val = 9,
/* optimization for bulk updates: the value of subsequent
* CDP values to be written in the bulk update. */
- CDP_hw_seasonal = CDP_hw_intercept,
+ CDP_hw_seasonal = CDP_hw_intercept,
/* Current seasonal coefficient for the Holt-Winters
* prediction algorithm. This is stored in CDP prep to avoid
* redundant seek operations. */
- CDP_hw_last_seasonal = CDP_hw_last_intercept,
+ CDP_hw_last_seasonal = CDP_hw_last_intercept,
/* Last iteration seasonal coefficient. */
- CDP_seasonal_deviation = CDP_hw_intercept,
+ CDP_seasonal_deviation = CDP_hw_intercept,
CDP_last_seasonal_deviation = CDP_hw_last_intercept,
CDP_init_seasonal = CDP_null_count
};
@@ -200,7 +204,7 @@ struct rspamd_rrd_file {
gdouble *rrd_value; /* list of rrd values */
gchar *filename;
- guint8 * map; /* mmapped area */
+ guint8 *map; /* mmapped area */
gsize size; /* its size */
gboolean finalized;
gchar *id;
@@ -216,7 +220,7 @@ struct rspamd_rrd_file {
* @param err error pointer
* @return rrd file structure
*/
-struct rspamd_rrd_file * rspamd_rrd_open (const gchar *filename, GError **err);
+struct rspamd_rrd_file *rspamd_rrd_open (const gchar *filename, GError **err);
/**
* Create basic header for rrd file
@@ -228,11 +232,11 @@ struct rspamd_rrd_file * rspamd_rrd_open (const gchar *filename, GError **err);
* @return TRUE if file has been created
*/
struct rspamd_rrd_file *rspamd_rrd_create (const gchar *filename,
- gulong ds_count,
- gulong rra_count,
- gulong pdp_step,
- gdouble initial_ticks,
- GError **err);
+ gulong ds_count,
+ gulong rra_count,
+ gulong pdp_step,
+ gdouble initial_ticks,
+ GError **err);
/**
* Add data sources to rrd file
@@ -241,9 +245,9 @@ struct rspamd_rrd_file *rspamd_rrd_create (const gchar *filename,
* @param err error pointer
* @return TRUE if data sources were added
*/
-gboolean rspamd_rrd_add_ds (struct rspamd_rrd_file * file,
- GArray *ds,
- GError **err);
+gboolean rspamd_rrd_add_ds (struct rspamd_rrd_file *file,
+ GArray *ds,
+ GError **err);
/**
* Add round robin archives to rrd file
@@ -253,8 +257,8 @@ gboolean rspamd_rrd_add_ds (struct rspamd_rrd_file * file,
* @return TRUE if archives were added
*/
gboolean rspamd_rrd_add_rra (struct rspamd_rrd_file *file,
- GArray *rra,
- GError **err);
+ GArray *rra,
+ GError **err);
/**
* Finalize rrd file header and initialize all RRA in the file
@@ -272,16 +276,16 @@ gboolean rspamd_rrd_finalize (struct rspamd_rrd_file *file, GError **err);
* @return TRUE if a row has been added
*/
gboolean rspamd_rrd_add_record (struct rspamd_rrd_file *file,
- GArray *points,
- gdouble ticks,
- GError **err);
+ GArray *points,
+ gdouble ticks,
+ GError **err);
/**
* Close rrd file
* @param file
* @return
*/
-gint rspamd_rrd_close (struct rspamd_rrd_file * file);
+gint rspamd_rrd_close (struct rspamd_rrd_file *file);
/*
* Conversion functions
@@ -291,18 +295,21 @@ gint rspamd_rrd_close (struct rspamd_rrd_file * file);
* Convert rrd dst type from string to numeric value
*/
enum rrd_dst_type rrd_dst_from_string (const gchar *str);
+
/**
* Convert numeric presentation of dst to string
*/
-const gchar * rrd_dst_to_string (enum rrd_dst_type type);
+const gchar *rrd_dst_to_string (enum rrd_dst_type type);
+
/**
* Convert rrd consolidation function type from string to numeric value
*/
enum rrd_cf_type rrd_cf_from_string (const gchar *str);
+
/**
* Convert numeric presentation of cf to string
*/
-const gchar * rrd_cf_to_string (enum rrd_cf_type type);
+const gchar *rrd_cf_to_string (enum rrd_cf_type type);
/* Default RRA and DS */
@@ -310,23 +317,23 @@ const gchar * rrd_cf_to_string (enum rrd_cf_type type);
* Create default RRA
*/
void rrd_make_default_rra (const gchar *cf_name,
- gulong pdp_cnt,
- gulong rows,
- struct rrd_rra_def *rra);
+ gulong pdp_cnt,
+ gulong rows,
+ struct rrd_rra_def *rra);
/**
* Create default DS
*/
void rrd_make_default_ds (const gchar *name,
- const gchar *type,
- gulong pdp_step,
- struct rrd_ds_def *ds);
+ const gchar *type,
+ gulong pdp_step,
+ struct rrd_ds_def *ds);
/**
* Open or create the default rspamd rrd file
*/
struct rspamd_rrd_file *rspamd_rrd_file_default (const gchar *path,
- GError **err);
+ GError **err);
/**
* Returned by querying rrd database
@@ -346,6 +353,11 @@ struct rspamd_rrd_query_result {
* @param rra_num number of rra to return data for
* @return query result structure, that should be freed (using g_slice_free1) after usage
*/
-struct rspamd_rrd_query_result * rspamd_rrd_query (struct rspamd_rrd_file *file,
- gulong rra_num);
+struct rspamd_rrd_query_result *rspamd_rrd_query (struct rspamd_rrd_file *file,
+ gulong rra_num);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif /* RRD_H_ */
diff --git a/src/libutil/shingles.h b/src/libutil/shingles.h
index 5a107bdc4..2b2af9737 100644
--- a/src/libutil/shingles.h
+++ b/src/libutil/shingles.h
@@ -21,6 +21,10 @@
#define RSPAMD_SHINGLE_SIZE 32
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_shingle {
guint64 hashes[RSPAMD_SHINGLE_SIZE];
};
@@ -39,7 +43,7 @@ enum rspamd_shingle_alg {
* @return shingle value
*/
typedef guint64 (*rspamd_shingles_filter) (guint64 *input, gsize count,
- gint shno, const guchar *key, gpointer ud);
+ gint shno, const guchar *key, gpointer ud);
/**
* Generate shingles from the input of fixed size strings using lemmatizer
@@ -51,12 +55,12 @@ typedef guint64 (*rspamd_shingles_filter) (guint64 *input, gsize count,
* @param filterd opaque data for filtering function
* @return shingles array
*/
-struct rspamd_shingle* rspamd_shingles_from_text (GArray *input,
- const guchar key[16],
- rspamd_mempool_t *pool,
- rspamd_shingles_filter filter,
- gpointer filterd,
- enum rspamd_shingle_alg alg);
+struct rspamd_shingle *rspamd_shingles_from_text (GArray *input,
+ const guchar key[16],
+ rspamd_mempool_t *pool,
+ rspamd_shingles_filter filter,
+ gpointer filterd,
+ enum rspamd_shingle_alg alg);
/**
* Generate shingles from the DCT matrix of an image
@@ -67,12 +71,12 @@ struct rspamd_shingle* rspamd_shingles_from_text (GArray *input,
* @param filterd opaque data for filtering function
* @return shingles array
*/
-struct rspamd_shingle* rspamd_shingles_from_image (guchar *dct,
- const guchar key[16],
- rspamd_mempool_t *pool,
- rspamd_shingles_filter filter,
- gpointer filterd,
- enum rspamd_shingle_alg alg);
+struct rspamd_shingle *rspamd_shingles_from_image (guchar *dct,
+ const guchar key[16],
+ rspamd_mempool_t *pool,
+ rspamd_shingles_filter filter,
+ gpointer filterd,
+ enum rspamd_shingle_alg alg);
/**
* Compares two shingles and return result as a floating point value - 1.0
@@ -82,12 +86,16 @@ struct rspamd_shingle* rspamd_shingles_from_image (guchar *dct,
* @return
*/
gdouble rspamd_shingles_compare (const struct rspamd_shingle *a,
- const struct rspamd_shingle *b);
+ const struct rspamd_shingle *b);
/**
* Default filtering function
*/
guint64 rspamd_shingles_default_filter (guint64 *input, gsize count,
- gint shno, const guchar *key, gpointer ud);
+ gint shno, const guchar *key, gpointer ud);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* SHINGLES_H_ */
diff --git a/src/libutil/sqlite_utils.h b/src/libutil/sqlite_utils.h
index 78ee26fc6..53f13747c 100644
--- a/src/libutil/sqlite_utils.h
+++ b/src/libutil/sqlite_utils.h
@@ -22,6 +22,10 @@
#define RSPAMD_SQLITE3_STMT_MULTIPLE (1 << 0)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_sqlite3_prstmt {
gint idx;
const gchar *sql;
@@ -39,10 +43,10 @@ struct rspamd_sqlite3_prstmt {
* @param err
* @return new prepared statements array or NULL
*/
-GArray* rspamd_sqlite3_init_prstmt (sqlite3 *db,
- struct rspamd_sqlite3_prstmt *init_stmt,
- gint max_idx,
- GError **err);
+GArray *rspamd_sqlite3_init_prstmt (sqlite3 *db,
+ struct rspamd_sqlite3_prstmt *init_stmt,
+ gint max_idx,
+ GError **err);
/**
* Run prepared statements by its index getting parameters and setting results from
@@ -53,7 +57,7 @@ GArray* rspamd_sqlite3_init_prstmt (sqlite3 *db,
* @return
*/
gint rspamd_sqlite3_run_prstmt (rspamd_mempool_t *pool, sqlite3 *db, GArray *stmts,
- gint idx, ...);
+ gint idx, ...);
/**
* Close and free prepared statements
@@ -68,8 +72,9 @@ void rspamd_sqlite3_close_prstmt (sqlite3 *db, GArray *stmts);
* @param create_sql
* @return
*/
-sqlite3 * rspamd_sqlite3_open_or_create (rspamd_mempool_t *pool, const gchar *path, const
- gchar *create_sql, guint32 version, GError **err);
+sqlite3 *rspamd_sqlite3_open_or_create (rspamd_mempool_t *pool,
+ const gchar *path, const gchar *create_sql,
+ guint32 version, GError **err);
/**
@@ -78,4 +83,8 @@ sqlite3 * rspamd_sqlite3_open_or_create (rspamd_mempool_t *pool, const gchar *pa
*/
gboolean rspamd_sqlite3_sync (sqlite3 *db, gint *wal_frames, gint *wal_checkpoints);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* SRC_LIBUTIL_SQLITE_UTILS_H_ */
diff --git a/src/libutil/ssl_util.h b/src/libutil/ssl_util.h
index f7f1652de..75436f2cc 100644
--- a/src/libutil/ssl_util.h
+++ b/src/libutil/ssl_util.h
@@ -20,18 +20,23 @@
#include "libutil/addr.h"
#include "libutil/libev_helper.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_ssl_connection;
-typedef void (*rspamd_ssl_handler_t)(gint fd, short what, gpointer d);
-typedef void (*rspamd_ssl_error_handler_t)(gpointer d, GError *err);
+typedef void (*rspamd_ssl_handler_t) (gint fd, short what, gpointer d);
+
+typedef void (*rspamd_ssl_error_handler_t) (gpointer d, GError *err);
/**
* Creates a new ssl connection data structure
* @param ssl_ctx initialized SSL_CTX structure
* @return opaque connection data
*/
-struct rspamd_ssl_connection * rspamd_ssl_connection_new (gpointer ssl_ctx,
- struct ev_loop *ev_base, gboolean verify_peer);
+struct rspamd_ssl_connection *rspamd_ssl_connection_new (gpointer ssl_ctx,
+ struct ev_loop *ev_base, gboolean verify_peer);
/**
* Connects SSL session using the specified (connected) FD
@@ -45,9 +50,9 @@ struct rspamd_ssl_connection * rspamd_ssl_connection_new (gpointer ssl_ctx,
* @return TRUE if a session has been connected
*/
gboolean rspamd_ssl_connect_fd (struct rspamd_ssl_connection *conn, gint fd,
- const gchar *hostname, struct rspamd_io_ev *ev, ev_tstamp timeout,
- rspamd_ssl_handler_t handler, rspamd_ssl_error_handler_t err_handler,
- gpointer handler_data);
+ const gchar *hostname, struct rspamd_io_ev *ev, ev_tstamp timeout,
+ rspamd_ssl_handler_t handler, rspamd_ssl_error_handler_t err_handler,
+ gpointer handler_data);
/**
* Perform async read from SSL socket
@@ -57,7 +62,7 @@ gboolean rspamd_ssl_connect_fd (struct rspamd_ssl_connection *conn, gint fd,
* @return
*/
gssize rspamd_ssl_read (struct rspamd_ssl_connection *conn, gpointer buf,
- gsize buflen);
+ gsize buflen);
/**
* Perform async write to ssl buffer
@@ -69,7 +74,7 @@ gssize rspamd_ssl_read (struct rspamd_ssl_connection *conn, gpointer buf,
* @return
*/
gssize rspamd_ssl_write (struct rspamd_ssl_connection *conn, gconstpointer buf,
- gsize buflen);
+ gsize buflen);
/**
* Emulate writev by copying iovec to a temporary buffer
@@ -79,7 +84,7 @@ gssize rspamd_ssl_write (struct rspamd_ssl_connection *conn, gconstpointer buf,
* @return
*/
gssize rspamd_ssl_writev (struct rspamd_ssl_connection *conn, struct iovec *iov,
- gsize iovlen);
+ gsize iovlen);
/**
* Removes connection data
@@ -87,4 +92,8 @@ gssize rspamd_ssl_writev (struct rspamd_ssl_connection *conn, struct iovec *iov,
*/
void rspamd_ssl_connection_free (struct rspamd_ssl_connection *conn);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* SRC_LIBUTIL_SSL_UTIL_H_ */
diff --git a/src/libutil/str_util.h b/src/libutil/str_util.h
index 6fbb11ccf..c820bd10c 100644
--- a/src/libutil/str_util.h
+++ b/src/libutil/str_util.h
@@ -20,6 +20,9 @@
#include "ucl.h"
#include "fstring.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
enum rspamd_newlines_type {
RSPAMD_TASK_NEWLINES_CR,
@@ -37,6 +40,7 @@ gint rspamd_lc_cmp (const gchar *s, const gchar *d, gsize l);
* Convert string to lowercase in-place using ASCII conversion
*/
void rspamd_str_lc (gchar *str, guint size);
+
/**
* Convert string to lowercase in-place using utf (limited) conversion
*/
@@ -46,13 +50,16 @@ void rspamd_str_lc_utf8 (gchar *str, guint size);
* Hash table utility functions for case insensitive hashing
*/
guint64 rspamd_icase_hash (const gchar *in, gsize len, guint64 seed);
+
guint rspamd_strcase_hash (gconstpointer key);
+
gboolean rspamd_strcase_equal (gconstpointer v, gconstpointer v2);
/*
* Hash table utility functions for case sensitive hashing
*/
guint rspamd_str_hash (gconstpointer key);
+
gboolean rspamd_str_equal (gconstpointer v, gconstpointer v2);
@@ -60,10 +67,15 @@ gboolean rspamd_str_equal (gconstpointer v, gconstpointer v2);
* Hash table utility functions for hashing fixed strings
*/
guint rspamd_ftok_icase_hash (gconstpointer key);
+
gboolean rspamd_ftok_icase_equal (gconstpointer v, gconstpointer v2);
+
guint rspamd_ftok_hash (gconstpointer key);
+
gboolean rspamd_ftok_equal (gconstpointer v, gconstpointer v2);
+
guint rspamd_gstring_icase_hash (gconstpointer key);
+
gboolean rspamd_gstring_icase_equal (gconstpointer v, gconstpointer v2);
/**
@@ -77,6 +89,7 @@ gboolean rspamd_gstring_icase_equal (gconstpointer v, gconstpointer v2);
* @return bytes copied
*/
gsize rspamd_strlcpy_fast (gchar *dst, const gchar *src, gsize siz);
+
gsize rspamd_strlcpy_safe (gchar *dst, const gchar *src, gsize siz);
#if defined(__has_feature)
@@ -133,7 +146,7 @@ gpointer rspamd_str_pool_copy (gconstpointer data, gpointer ud);
* @param inlen input length
* @return freshly allocated base32 encoding of a specified string
*/
-gchar * rspamd_encode_base32 (const guchar *in, gsize inlen);
+gchar *rspamd_encode_base32 (const guchar *in, gsize inlen);
/**
* Decode string using base32 encoding
@@ -141,7 +154,7 @@ gchar * rspamd_encode_base32 (const guchar *in, gsize inlen);
* @param inlen input length
* @return freshly allocated base32 decoded value or NULL if input is invalid
*/
-guchar* rspamd_decode_base32 (const gchar *in, gsize inlen, gsize *outlen);
+guchar *rspamd_decode_base32 (const gchar *in, gsize inlen, gsize *outlen);
/**
* Encode string using hex encoding
@@ -149,7 +162,7 @@ guchar* rspamd_decode_base32 (const gchar *in, gsize inlen, gsize *outlen);
* @param inlen input length
* @return freshly allocated base32 encoding of a specified string
*/
-gchar * rspamd_encode_hex (const guchar *in, gsize inlen);
+gchar *rspamd_encode_hex (const guchar *in, gsize inlen);
/**
* Decode string using hex encoding
@@ -157,7 +170,7 @@ gchar * rspamd_encode_hex (const guchar *in, gsize inlen);
* @param inlen input length
* @return freshly allocated base32 decoded value or NULL if input is invalid
*/
-guchar* rspamd_decode_hex (const gchar *in, gsize inlen);
+guchar *rspamd_decode_hex (const gchar *in, gsize inlen);
/**
* Encode string using base32 encoding
@@ -168,7 +181,7 @@ guchar* rspamd_decode_hex (const gchar *in, gsize inlen);
* @return encoded len if `outlen` is enough to encode `inlen`
*/
gint rspamd_encode_base32_buf (const guchar *in, gsize inlen, gchar *out,
- gsize outlen);
+ gsize outlen);
/**
* Decode string using base32 encoding
@@ -179,7 +192,7 @@ gint rspamd_encode_base32_buf (const guchar *in, gsize inlen, gchar *out,
* @return decoded len if in is valid base32 and `outlen` is enough to encode `inlen`
*/
gint rspamd_decode_base32_buf (const gchar *in, gsize inlen,
- guchar *out, gsize outlen);
+ guchar *out, gsize outlen);
/**
* Encode string using hex encoding
@@ -190,7 +203,7 @@ gint rspamd_decode_base32_buf (const gchar *in, gsize inlen,
* @return encoded len if `outlen` is enough to encode `inlen`
*/
gint rspamd_encode_hex_buf (const guchar *in, gsize inlen, gchar *out,
- gsize outlen);
+ gsize outlen);
/**
@@ -202,7 +215,7 @@ gint rspamd_encode_hex_buf (const guchar *in, gsize inlen, gchar *out,
* @return decoded len if in is valid hex and `outlen` is enough to encode `inlen`
*/
gssize rspamd_decode_hex_buf (const gchar *in, gsize inlen,
- guchar *out, gsize outlen);
+ guchar *out, gsize outlen);
/**
* Common version of base64 encoder
@@ -221,6 +234,7 @@ rspamd_encode_base64_common (const guchar *in,
gsize *outlen,
gboolean fold,
enum rspamd_newlines_type how);
+
/**
* Encode string using base64 encoding
* @param in input
@@ -228,8 +242,8 @@ rspamd_encode_base64_common (const guchar *in,
* @param str_len maximum string length (if <= 0 then no lines are split)
* @return freshly allocated base64 encoded value or NULL if input is invalid
*/
-gchar * rspamd_encode_base64 (const guchar *in, gsize inlen, gint str_len,
- gsize *outlen);
+gchar *rspamd_encode_base64 (const guchar *in, gsize inlen, gint str_len,
+ gsize *outlen);
/**
* Encode and fold string using base64 encoding
@@ -238,8 +252,8 @@ gchar * rspamd_encode_base64 (const guchar *in, gsize inlen, gint str_len,
* @param str_len maximum string length (if <= 0 then no lines are split)
* @return freshly allocated base64 encoded value or NULL if input is invalid
*/
-gchar * rspamd_encode_base64_fold (const guchar *in, gsize inlen, gint str_len,
- gsize *outlen, enum rspamd_newlines_type how);
+gchar *rspamd_encode_base64_fold (const guchar *in, gsize inlen, gint str_len,
+ gsize *outlen, enum rspamd_newlines_type how);
/**
* Encode and fold string using quoted printable encoding
@@ -248,8 +262,8 @@ gchar * rspamd_encode_base64_fold (const guchar *in, gsize inlen, gint str_len,
* @param str_len maximum string length (if <= 0 then no lines are split)
* @return freshly allocated base64 encoded value or NULL if input is invalid
*/
-gchar * rspamd_encode_qp_fold (const guchar *in, gsize inlen, gint str_len,
- gsize *outlen, enum rspamd_newlines_type how);
+gchar *rspamd_encode_qp_fold (const guchar *in, gsize inlen, gint str_len,
+ gsize *outlen, enum rspamd_newlines_type how);
/**
* Decode quoted-printable encoded buffer, input and output must not overlap
@@ -260,7 +274,7 @@ gchar * rspamd_encode_qp_fold (const guchar *in, gsize inlen, gint str_len,
* @return real size of decoded output or (-1) if outlen is not enough
*/
gssize rspamd_decode_qp_buf (const gchar *in, gsize inlen,
- gchar *out, gsize outlen);
+ gchar *out, gsize outlen);
/**
* Decode quoted-printable encoded buffer using rfc2047 format, input and output must not overlap
@@ -271,7 +285,7 @@ gssize rspamd_decode_qp_buf (const gchar *in, gsize inlen,
* @return real size of decoded output or (-1) if outlen is not enough
*/
gssize rspamd_decode_qp2047_buf (const gchar *in, gsize inlen,
- gchar *out, gsize outlen);
+ gchar *out, gsize outlen);
/**
* Encode quoted-printable buffer using rfc2047 format, input and output must not overlap
@@ -282,7 +296,7 @@ gssize rspamd_decode_qp2047_buf (const gchar *in, gsize inlen,
* @return
*/
gssize rspamd_encode_qp2047_buf (const gchar *in, gsize inlen,
- gchar *out, gsize outlen);
+ gchar *out, gsize outlen);
#ifndef g_tolower
# define g_tolower(x) (((x) >= 'A' && (x) <= 'Z') ? (x) - 'A' + 'a' : (x))
@@ -297,7 +311,7 @@ gssize rspamd_encode_qp2047_buf (const gchar *in, gsize inlen,
* @return
*/
gint rspamd_strings_levenshtein_distance (const gchar *s1, gsize s1len,
- const gchar *s2, gsize s2len, guint replace_cost);
+ const gchar *s2, gsize s2len, guint replace_cost);
/**
* Fold header using rfc822 rules, return new GString from the previous one
@@ -309,10 +323,10 @@ gint rspamd_strings_levenshtein_distance (const gchar *s1, gsize s1len,
* @return new GString with the folded value
*/
GString *rspamd_header_value_fold (const gchar *name,
- const gchar *value,
- guint fold_max,
- enum rspamd_newlines_type how,
- const gchar *fold_on_chars);
+ const gchar *value,
+ guint fold_max,
+ enum rspamd_newlines_type how,
+ const gchar *fold_on_chars);
/**
* Search for a substring `srch` in the text `in` using Apostolico-Crochemore algorithm
@@ -324,7 +338,7 @@ GString *rspamd_header_value_fold (const gchar *name,
* @return position of the first substring match or (-1) if not found
*/
goffset rspamd_substring_search (const gchar *in, gsize inlen,
- const gchar *srch, gsize srchlen);
+ const gchar *srch, gsize srchlen);
/**
* Search for a substring `srch` in the text `in` using Apostolico-Crochemore algorithm in caseless matter (ASCII only)
@@ -336,7 +350,7 @@ goffset rspamd_substring_search (const gchar *in, gsize inlen,
* @return position of the first substring match or (-1) if not found
*/
goffset rspamd_substring_search_caseless (const gchar *in, gsize inlen,
- const gchar *srch, gsize srchlen);
+ const gchar *srch, gsize srchlen);
/**
* Search for end-of-headers mark in the input string. Returns position just after
@@ -348,7 +362,8 @@ goffset rspamd_string_find_eoh (GString *input, goffset *body_start);
#define rspamd_ucl_emit_gstring(o, t, target) \
- rspamd_ucl_emit_gstring_comments((o), (t), (target), NULL)
+ rspamd_ucl_emit_gstring_comments((o), (t), (target), NULL)
+
/**
* Emit UCL object to gstring
* @param obj object to emit
@@ -357,12 +372,13 @@ goffset rspamd_string_find_eoh (GString *input, goffset *body_start);
* @param target target string
*/
void rspamd_ucl_emit_gstring_comments (const ucl_object_t *obj,
- enum ucl_emitter emit_type,
- GString *target,
- const ucl_object_t *comments);
+ enum ucl_emitter emit_type,
+ GString *target,
+ const ucl_object_t *comments);
#define rspamd_ucl_emit_fstring(o, t, target) \
- rspamd_ucl_emit_fstring_comments((o), (t), (target), NULL)
+ rspamd_ucl_emit_fstring_comments((o), (t), (target), NULL)
+
/**
* Emit UCL object to fstring
* @param obj object to emit
@@ -371,9 +387,9 @@ void rspamd_ucl_emit_gstring_comments (const ucl_object_t *obj,
* @param target target string
*/
void rspamd_ucl_emit_fstring_comments (const ucl_object_t *obj,
- enum ucl_emitter emit_type,
- rspamd_fstring_t **target,
- const ucl_object_t *comments);
+ enum ucl_emitter emit_type,
+ rspamd_fstring_t **target,
+ const ucl_object_t *comments);
extern const guchar lc_map[256];
@@ -405,27 +421,26 @@ gsize rspamd_memcspn (const gchar *s, const gchar *e, gsize len);
gsize rspamd_memspn (const gchar *s, const gchar *e, gsize len);
/* https://graphics.stanford.edu/~seander/bithacks.html#HasMoreInWord */
-#define rspamd_str_hasmore(x,n) ((((x)+~0UL/255*(127-(n)))|(x))&~0UL/255*128)
+#define rspamd_str_hasmore(x, n) ((((x)+~0UL/255*(127-(n)))|(x))&~0UL/255*128)
static inline gboolean
-rspamd_str_has_8bit (const guchar *beg, gsize len)
-{
+rspamd_str_has_8bit (const guchar *beg, gsize len) {
unsigned long *w;
gsize i, leftover = len % sizeof (*w);
- w = (unsigned long *)beg;
+ w = (unsigned long *) beg;
- for (i = 0; i < len / sizeof (*w); i ++) {
+ for (i = 0; i < len / sizeof (*w); i++) {
if (rspamd_str_hasmore (*w, 127)) {
return TRUE;
}
- w ++;
+ w++;
}
- beg = (const guchar *)w;
+ beg = (const guchar *) w;
- for (i = 0; i < leftover; i ++) {
+ for (i = 0; i < leftover; i++) {
if (beg[i] > 127) {
return TRUE;
}
@@ -435,9 +450,11 @@ rspamd_str_has_8bit (const guchar *beg, gsize len)
}
struct UConverter;
+
struct UConverter *rspamd_get_utf8_converter (void);
struct UNormalizer2;
+
const struct UNormalizer2 *rspamd_get_unicode_normalizer (void);
enum rspamd_normalise_result {
@@ -456,7 +473,7 @@ enum rspamd_normalise_result {
* @return TRUE if a string has been normalised
*/
enum rspamd_normalise_result rspamd_normalise_unicode_inplace (rspamd_mempool_t *pool,
- gchar *start, guint *len);
+ gchar *start, guint *len);
enum rspamd_regexp_escape_flags {
RSPAMD_REGEXP_ESCAPE_ASCII = 0,
@@ -464,6 +481,7 @@ enum rspamd_regexp_escape_flags {
RSPAMD_REGEXP_ESCAPE_GLOB = 1u << 1,
RSPAMD_REGEXP_ESCAPE_RE = 1u << 2,
};
+
/**
* Escapes special characters when reading plain data to be processed in pcre
* @param pattern pattern to process
@@ -474,7 +492,7 @@ enum rspamd_regexp_escape_flags {
*/
gchar *
rspamd_str_regexp_escape (const gchar *pattern, gsize slen,
- gsize *dst_len, enum rspamd_regexp_escape_flags flags);
+ gsize *dst_len, enum rspamd_regexp_escape_flags flags);
/**
* Returns copy of src (zero terminated) where all unicode is made valid or replaced
@@ -484,7 +502,7 @@ rspamd_str_regexp_escape (const gchar *pattern, gsize slen,
* @param dstelen
* @return
*/
-gchar * rspamd_str_make_utf_valid (const guchar *src, gsize slen, gsize *dstlen);
+gchar *rspamd_str_make_utf_valid (const guchar *src, gsize slen, gsize *dstlen);
/**
* Strips characters in `strip_chars` from start and end of the GString
@@ -498,19 +516,23 @@ gsize rspamd_gstring_strip (GString *s, const gchar *strip_chars);
* @param s
* @param strip_chars
*/
-const gchar* rspamd_string_len_strip (const gchar *in,
- gsize *len, const gchar *strip_chars);
+const gchar *rspamd_string_len_strip (const gchar *in,
+ gsize *len, const gchar *strip_chars);
#define IS_ZERO_WIDTH_SPACE(uc) ((uc) == 0x200B || \
- (uc) == 0x200C || \
- (uc) == 0x200D || \
- (uc) == 0xFEFF)
+ (uc) == 0x200C || \
+ (uc) == 0x200D || \
+ (uc) == 0xFEFF)
#define IS_OBSCURED_CHAR(uc) (((uc) >= 0x200B && (uc) <= 0x200F) || \
- ((uc) >= 0x2028 && (uc) <= 0x202F) || \
- ((uc) >= 0x205F && (uc) <= 0x206F) || \
- (uc) == 0xFEFF)
+ ((uc) >= 0x2028 && (uc) <= 0x202F) || \
+ ((uc) >= 0x205F && (uc) <= 0x206F) || \
+ (uc) == 0xFEFF)
#define RSPAMD_LEN_CHECK_STARTS_WITH(s, len, lit) \
- ((len) >= sizeof(lit) - 1 && g_ascii_strncasecmp ((s), (lit), sizeof(lit) - 1) == 0)
+ ((len) >= sizeof(lit) - 1 && g_ascii_strncasecmp ((s), (lit), sizeof(lit) - 1) == 0)
+
+#ifdef __cplusplus
+}
+#endif
#endif /* SRC_LIBUTIL_STR_UTIL_H_ */
diff --git a/src/libutil/upstream.h b/src/libutil/upstream.h
index 89ac0ee9e..04ec6d984 100644
--- a/src/libutil/upstream.h
+++ b/src/libutil/upstream.h
@@ -6,6 +6,10 @@
#include "rdns.h"
#include "ucl.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
enum rspamd_upstream_rotation {
RSPAMD_UPSTREAM_RANDOM = 0,
RSPAMD_UPSTREAM_HASHED,
@@ -29,7 +33,7 @@ struct upstream_ctx;
* Init upstreams library
* @param resolver
*/
-struct upstream_ctx* rspamd_upstreams_library_init (void);
+struct upstream_ctx *rspamd_upstreams_library_init (void);
/**
* Remove reference from upstreams library
@@ -41,8 +45,8 @@ void rspamd_upstreams_library_unref (struct upstream_ctx *ctx);
* @param cfg
*/
void rspamd_upstreams_library_config (struct rspamd_config *cfg,
- struct upstream_ctx *ctx, struct ev_loop *event_loop,
- struct rdns_resolver *resolver);
+ struct upstream_ctx *ctx, struct ev_loop *event_loop,
+ struct rdns_resolver *resolver);
/**
* Upstream error logic
@@ -72,7 +76,7 @@ void rspamd_upstream_set_weight (struct upstream *up, guint weight);
* Create new list of upstreams
* @return
*/
-struct upstream_list* rspamd_upstreams_create (struct upstream_ctx *ctx);
+struct upstream_list *rspamd_upstreams_create (struct upstream_ctx *ctx);
/**
* Sets specific flag to the upstream list
@@ -80,7 +84,7 @@ struct upstream_list* rspamd_upstreams_create (struct upstream_ctx *ctx);
* @param flags
*/
void rspamd_upstreams_set_flags (struct upstream_list *ups,
- enum rspamd_upstream_flag flags);
+ enum rspamd_upstream_flag flags);
/**
* Sets custom limits for upstreams
@@ -106,7 +110,7 @@ void rspamd_upstreams_set_limits (struct upstream_list *ups,
* @param rot
*/
void rspamd_upstreams_set_rotation (struct upstream_list *ups,
- enum rspamd_upstream_rotation rot);
+ enum rspamd_upstream_rotation rot);
/**
* Destroy list of upstreams
@@ -142,8 +146,8 @@ enum rspamd_upstream_parse_type {
* @return TRUE if upstream has been added
*/
gboolean rspamd_upstreams_add_upstream (struct upstream_list *ups, const gchar *str,
- guint16 def_port, enum rspamd_upstream_parse_type parse_type,
- void *data);
+ guint16 def_port, enum rspamd_upstream_parse_type parse_type,
+ void *data);
/**
* Add multiple upstreams from comma, semicolon or space separated line
@@ -154,13 +158,14 @@ gboolean rspamd_upstreams_add_upstream (struct upstream_list *ups, const gchar *
* @return TRUE if **any** of upstreams has been added
*/
gboolean rspamd_upstreams_parse_line (struct upstream_list *ups,
- const gchar *str, guint16 def_port, void *data);
+ const gchar *str, guint16 def_port, void *data);
gboolean rspamd_upstreams_parse_line_len (struct upstream_list *ups,
const gchar *str, gsize len,
guint16 def_port,
void *data);
+
/**
* Parse upstreams list from the UCL object
* @param ups
@@ -170,11 +175,11 @@ gboolean rspamd_upstreams_parse_line_len (struct upstream_list *ups,
* @return
*/
gboolean rspamd_upstreams_from_ucl (struct upstream_list *ups,
- const ucl_object_t *in, guint16 def_port, void *data);
+ const ucl_object_t *in, guint16 def_port, void *data);
typedef void (*rspamd_upstream_traverse_func) (struct upstream *up, guint idx,
- void *ud);
+ void *ud);
/**
* Traverse upstreams list calling the function specified
@@ -183,7 +188,7 @@ typedef void (*rspamd_upstream_traverse_func) (struct upstream *up, guint idx,
* @param ud
*/
void rspamd_upstreams_foreach (struct upstream_list *ups,
- rspamd_upstream_traverse_func cb, void *ud);
+ rspamd_upstream_traverse_func cb, void *ud);
enum rspamd_upstreams_watch_event {
RSPAMD_UPSTREAM_WATCH_SUCCESS = 1u << 0,
@@ -216,14 +221,14 @@ void rspamd_upstreams_add_watch_callback (struct upstream_list *ups,
* @param up
* @return
*/
-rspamd_inet_addr_t* rspamd_upstream_addr_next (struct upstream *up);
+rspamd_inet_addr_t *rspamd_upstream_addr_next (struct upstream *up);
/**
* Returns the current IP address of the upstream
* @param up
* @return
*/
-rspamd_inet_addr_t* rspamd_upstream_addr_cur (const struct upstream *up);
+rspamd_inet_addr_t *rspamd_upstream_addr_cur (const struct upstream *up);
/**
* Add custom address for an upstream (ownership of addr is transferred to upstream)
@@ -231,14 +236,14 @@ rspamd_inet_addr_t* rspamd_upstream_addr_cur (const struct upstream *up);
* @return
*/
gboolean rspamd_upstream_add_addr (struct upstream *up,
- rspamd_inet_addr_t *addr);
+ rspamd_inet_addr_t *addr);
/**
* Returns the symbolic name of the upstream
* @param up
* @return
*/
-const gchar* rspamd_upstream_name (struct upstream *up);
+const gchar *rspamd_upstream_name (struct upstream *up);
/**
* Sets opaque user data associated with this upstream
@@ -261,9 +266,9 @@ gpointer rspamd_upstream_get_data (struct upstream *up);
* @param type type of rotation algorithm, for `RSPAMD_UPSTREAM_HASHED` it is required to specify `key` and `keylen` as arguments
* @return
*/
-struct upstream* rspamd_upstream_get (struct upstream_list *ups,
- enum rspamd_upstream_rotation default_type,
- const guchar *key, gsize keylen);
+struct upstream *rspamd_upstream_get (struct upstream_list *ups,
+ enum rspamd_upstream_rotation default_type,
+ const guchar *key, gsize keylen);
/**
* Get new upstream from the list
@@ -271,16 +276,17 @@ struct upstream* rspamd_upstream_get (struct upstream_list *ups,
* @param type type of rotation algorithm, for `RSPAMD_UPSTREAM_HASHED` it is required to specify `key` and `keylen` as arguments
* @return
*/
-struct upstream* rspamd_upstream_get_forced (struct upstream_list *ups,
- enum rspamd_upstream_rotation forced_type,
- const guchar *key, gsize keylen);
+struct upstream *rspamd_upstream_get_forced (struct upstream_list *ups,
+ enum rspamd_upstream_rotation forced_type,
+ const guchar *key, gsize keylen);
/**
* Re-resolve addresses for all upstreams registered
*/
void rspamd_upstream_reresolve (struct upstream_ctx *ctx);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* UPSTREAM_H */
-/*
- * vi:ts=4
- */
diff --git a/src/libutil/util.h b/src/libutil/util.h
index 7f13ded06..7c9eb5f91 100644
--- a/src/libutil/util.h
+++ b/src/libutil/util.h
@@ -15,6 +15,10 @@
#include "contrib/libev/ev.h"
#include <time.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct rspamd_config;
struct rspamd_main;
struct workq;
@@ -28,10 +32,12 @@ struct workq;
* @return socket FD or -1 in case of error
*/
gint rspamd_socket_create (gint af, gint type, gint protocol, gboolean async);
+
/*
* Create socket and bind or connect it to specified address and port
*/
gint rspamd_socket_tcp (struct addrinfo *, gboolean is_server, gboolean async);
+
/*
* Create socket and bind or connect it to specified address and port
*/
@@ -41,10 +47,10 @@ gint rspamd_socket_udp (struct addrinfo *, gboolean is_server, gboolean async);
* Create and bind or connect unix socket
*/
gint rspamd_socket_unix (const gchar *,
- struct sockaddr_un *,
- gint type,
- gboolean is_server,
- gboolean async);
+ struct sockaddr_un *,
+ gint type,
+ gboolean is_server,
+ gboolean async);
/**
* Make a universal socket
@@ -56,7 +62,7 @@ gint rspamd_socket_unix (const gchar *,
* @param try_resolve try name resolution for a socket (BLOCKING)
*/
gint rspamd_socket (const gchar *credits, guint16 port, gint type,
- gboolean async, gboolean is_server, gboolean try_resolve);
+ gboolean async, gboolean is_server, gboolean try_resolve);
/**
* Make a universal sockets
@@ -67,12 +73,13 @@ gint rspamd_socket (const gchar *credits, guint16 port, gint type,
* @param is_server make this socket as server socket
* @param try_resolve try name resolution for a socket (BLOCKING)
*/
-GList * rspamd_sockets_list (const gchar *credits,
- guint16 port,
- gint type,
- gboolean async,
- gboolean is_server,
- gboolean try_resolve);
+GList *rspamd_sockets_list (const gchar *credits,
+ guint16 port,
+ gint type,
+ gboolean async,
+ gboolean is_server,
+ gboolean try_resolve);
+
/*
* Create socketpair
*/
@@ -87,6 +94,7 @@ gint rspamd_write_pid (struct rspamd_main *);
* Make specified socket non-blocking
*/
gint rspamd_socket_nonblocking (gint);
+
/*
* Make specified socket blocking
*/
@@ -101,9 +109,11 @@ gint rspamd_socket_poll (gint fd, gint timeout, short events);
* Init signals
*/
#ifdef HAVE_SA_SIGINFO
-void rspamd_signals_init (struct sigaction *sa, void (*sig_handler)(gint,
- siginfo_t *,
- void *));
+
+void rspamd_signals_init (struct sigaction *sa, void (*sig_handler) (gint,
+ siginfo_t *,
+ void *));
+
#else
void rspamd_signals_init (struct sigaction *sa, void (*sig_handler)(gint));
#endif
@@ -111,14 +121,17 @@ void rspamd_signals_init (struct sigaction *sa, void (*sig_handler)(gint));
/*
* Send specified signal to each worker
*/
-void rspamd_pass_signal (GHashTable *, gint );
+void rspamd_pass_signal (GHashTable *, gint);
#ifndef HAVE_SETPROCTITLE
+
/*
* Process title utility functions
*/
gint init_title (struct rspamd_main *, gint argc, gchar *argv[], gchar *envp[]);
+
gint setproctitle (const gchar *fmt, ...);
+
#endif
#ifndef HAVE_PIDFILE
@@ -137,12 +150,17 @@ typedef struct rspamd_pidfh_s {
dev_t pf_dev;
ino_t pf_ino;
} rspamd_pidfh_t;
-rspamd_pidfh_t * rspamd_pidfile_open (const gchar *path,
- mode_t mode,
- pid_t *pidptr);
+
+rspamd_pidfh_t *rspamd_pidfile_open (const gchar *path,
+ mode_t mode,
+ pid_t *pidptr);
+
gint rspamd_pidfile_write (rspamd_pidfh_t *pfh);
+
gint rspamd_pidfile_close (rspamd_pidfh_t *pfh);
+
gint rspamd_pidfile_remove (rspamd_pidfh_t *pfh);
+
#else
typedef struct pidfh rspamd_pidfh_t;
#define rspamd_pidfile_open pidfile_open
@@ -154,10 +172,10 @@ typedef struct pidfh rspamd_pidfh_t;
/*
* Replace %r with rcpt value and %f with from value, new string is allocated in pool
*/
-gchar * resolve_stat_filename (rspamd_mempool_t *pool,
- gchar *pattern,
- gchar *rcpt,
- gchar *from);
+gchar *resolve_stat_filename (rspamd_mempool_t *pool,
+ gchar *pattern,
+ gchar *rcpt,
+ gchar *from);
const gchar *
rspamd_log_check_time (gdouble start, gdouble end, gint resolution);
@@ -166,12 +184,14 @@ rspamd_log_check_time (gdouble start, gdouble end, gint resolution);
* File locking functions
*/
gboolean rspamd_file_lock (gint fd, gboolean async);
+
gboolean rspamd_file_unlock (gint fd, gboolean async);
/*
* Google perf-tools initialization function
*/
void gperf_profiler_init (struct rspamd_config *cfg, const gchar *descr);
+
void gperf_profiler_stop (void);
/*
@@ -203,18 +223,18 @@ const gchar *g_environ_getenv (gchar **envp, const gchar *variable);
* Convert milliseconds to timeval fields
*/
#define msec_to_tv(msec, tv) do { (tv)->tv_sec = (msec) / 1000; (tv)->tv_usec = \
- ((msec) - (tv)->tv_sec * 1000) * 1000; \
+ ((msec) - (tv)->tv_sec * 1000) * 1000; \
} while (0)
#define double_to_tv(dbl, tv) do { (tv)->tv_sec = (int)(dbl); (tv)->tv_usec = \
- ((dbl) - (int)(dbl)) * 1000 * 1000; \
+ ((dbl) - (int)(dbl)) * 1000 * 1000; \
} while (0)
#define double_to_ts(dbl, ts) do { (ts)->tv_sec = (int)(dbl); (ts)->tv_nsec = \
((dbl) - (int)(dbl)) * 1e9; \
} while (0)
#define tv_to_msec(tv) ((tv)->tv_sec * 1000LLU + (tv)->tv_usec / 1000LLU)
#define tv_to_double(tv) ((double)(tv)->tv_sec + (tv)->tv_usec / 1.0e6)
-#define ts_to_usec(ts) ((ts)->tv_sec * 1000000LLU + \
- (ts)->tv_nsec / 1000LLU)
+#define ts_to_usec(ts) ((ts)->tv_sec * 1000000LLU + \
+ (ts)->tv_nsec / 1000LLU)
#define ts_to_double(tv) ((double)(tv)->tv_sec + (tv)->tv_nsec / 1.0e9)
/**
@@ -242,7 +262,7 @@ typedef struct rspamd_mutex_s {
* Create new mutex
* @return mutex or NULL
*/
-rspamd_mutex_t * rspamd_mutex_new (void);
+rspamd_mutex_t *rspamd_mutex_new (void);
/**
* Lock mutex
@@ -271,9 +291,9 @@ void rspamd_mutex_free (rspamd_mutex_t *mtx);
* @param ud user data for copy functions
*/
void rspamd_hash_table_copy (GHashTable *src, GHashTable *dst,
- gpointer (*key_copy_func)(gconstpointer data, gpointer ud),
- gpointer (*value_copy_func)(gconstpointer data, gpointer ud),
- gpointer ud);
+ gpointer (*key_copy_func) (gconstpointer data, gpointer ud),
+ gpointer (*value_copy_func) (gconstpointer data, gpointer ud),
+ gpointer ud);
/**
@@ -315,6 +335,7 @@ void rspamd_ptr_array_free_hard (gpointer p);
* @param p
*/
void rspamd_array_free_hard (gpointer p);
+
/**
* Special utility to help GString freeing in rspamd_mempool
* @param p
@@ -334,25 +355,28 @@ void rspamd_gerror_free_maybe (gpointer p);
void rspamd_gstring_free_soft (gpointer p);
struct rspamd_external_libs_ctx;
+
/**
* Initialize rspamd libraries
*/
-struct rspamd_external_libs_ctx* rspamd_init_libs (void);
+struct rspamd_external_libs_ctx *rspamd_init_libs (void);
gpointer rspamd_init_ssl_ctx (void);
+
gpointer rspamd_init_ssl_ctx_noverify (void);
/**
* Configure libraries
*/
void rspamd_config_libs (struct rspamd_external_libs_ctx *ctx,
- struct rspamd_config *cfg);
+ struct rspamd_config *cfg);
/**
* Reset and initialize decompressor
* @param ctx
*/
gboolean rspamd_libs_reset_decompression (struct rspamd_external_libs_ctx *ctx);
+
/**
* Reset and initialize compressor
* @param ctx
@@ -421,7 +445,7 @@ gboolean rspamd_constant_memcmp (const void *a, const void *b, gsize len);
* @return fd or -1 in case of error
*/
int rspamd_file_xopen (const char *fname, int oflags, guint mode,
- gboolean allow_symlink);
+ gboolean allow_symlink);
/**
* Map file without following symlinks or special stuff
@@ -431,7 +455,7 @@ int rspamd_file_xopen (const char *fname, int oflags, guint mode,
* @return pointer to memory (should be freed using munmap) or NULL in case of error
*/
gpointer rspamd_file_xmap (const char *fname, guint mode, gsize *size,
- gboolean allow_symlink);
+ gboolean allow_symlink);
/**
* Map named shared memory segment
@@ -441,7 +465,7 @@ gpointer rspamd_file_xmap (const char *fname, guint mode, gsize *size,
* @return pointer to memory (should be freed using munmap) or NULL in case of error
*/
gpointer rspamd_shmem_xmap (const char *fname, guint mode,
- gsize *size);
+ gsize *size);
/**
* Normalize probabilities using polynomial function
@@ -521,4 +545,8 @@ double rspamd_set_counter_ema (struct rspamd_counter_data *cd,
double rspamd_set_counter (struct rspamd_counter_data *cd,
gdouble value);
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/lua/lua_common.h b/src/lua/lua_common.h
index 93bb5a28e..d14ebba54 100644
--- a/src/lua/lua_common.h
+++ b/src/lua/lua_common.h
@@ -2,7 +2,6 @@
#define RSPAMD_LUA_H
#include "config.h"
-#ifdef WITH_LUA
#include <lua.h>
#include <lauxlib.h>
@@ -48,6 +47,10 @@ luaL_register (lua_State *L, const gchar *name, const struct luaL_reg *methods)
lua_State * L)
#define LUA_INTERFACE_DEF(class, name) { # name, lua_ ## class ## _ ## name }
+#ifdef __cplusplus
+extern "C" {
+#endif
+
extern const luaL_reg null_reg[];
#define RSPAMD_LUA_API_VERSION 12
@@ -126,17 +129,17 @@ struct rspamd_lua_cached_entry {
* Create and register new class
*/
void rspamd_lua_new_class (lua_State *L,
- const gchar *classname,
- const struct luaL_reg *methods);
+ const gchar *classname,
+ const struct luaL_reg *methods);
/**
* Create and register new class with static methods
*/
void rspamd_lua_new_class_full (lua_State *L,
- const gchar *classname,
- const gchar *static_name,
- const struct luaL_reg *methods,
- const struct luaL_reg *func);
+ const gchar *classname,
+ const gchar *static_name,
+ const struct luaL_reg *methods,
+ const struct luaL_reg *func);
/**
* Set class name for object at @param objidx position
@@ -151,7 +154,7 @@ void rspamd_lua_table_set (lua_State *L, const gchar *index, const gchar *value)
/**
* Get string value of index in a table (return t['index'])
*/
-const gchar * rspamd_lua_table_get (lua_State *L, const gchar *index);
+const gchar *rspamd_lua_table_get (lua_State *L, const gchar *index);
/**
* Convert classname to string
@@ -169,6 +172,7 @@ gpointer rspamd_lua_check_class (lua_State *L, gint index, const gchar *name);
lua_State *rspamd_lua_init (bool wipe_mem);
void rspamd_lua_start_gc (struct rspamd_config *cfg);
+
/**
* Sets field in a global variable
* @param L
@@ -178,7 +182,8 @@ void rspamd_lua_start_gc (struct rspamd_config *cfg);
*/
void
rspamd_plugins_table_push_elt (lua_State *L, const gchar *field_name,
- const gchar *new_elt);
+ const gchar *new_elt);
+
/**
* Load and initialize lua plugins
*/
@@ -188,7 +193,8 @@ rspamd_init_lua_filters (struct rspamd_config *cfg, gboolean force_load);
/**
* Initialize new locked lua_State structure
*/
-struct lua_locked_state * rspamd_init_lua_locked (struct rspamd_config *cfg);
+struct lua_locked_state *rspamd_init_lua_locked (struct rspamd_config *cfg);
+
/**
* Free locked state structure
*/
@@ -207,11 +213,11 @@ void rspamd_lua_task_push (lua_State *L, struct rspamd_task *task);
/**
* Return lua ip structure at the specified address
*/
-struct rspamd_lua_ip * lua_check_ip (lua_State * L, gint pos);
+struct rspamd_lua_ip *lua_check_ip (lua_State *L, gint pos);
-struct rspamd_lua_text * lua_check_text (lua_State * L, gint pos);
+struct rspamd_lua_text *lua_check_text (lua_State *L, gint pos);
-struct rspamd_lua_regexp *lua_check_regexp (lua_State * L, gint pos);
+struct rspamd_lua_regexp *lua_check_regexp (lua_State *L, gint pos);
enum rspamd_lua_task_header_type {
RSPAMD_TASK_HEADER_PUSH_SIMPLE = 0,
@@ -223,6 +229,7 @@ enum rspamd_lua_task_header_type {
gint rspamd_lua_push_header (lua_State *L,
struct rspamd_mime_header *h,
enum rspamd_lua_task_header_type how);
+
/**
* Push specific header to lua
*/
@@ -233,10 +240,11 @@ gint rspamd_lua_push_header_array (lua_State *L,
/**
* Check for task at the specified position
*/
-struct rspamd_task *lua_check_task (lua_State * L, gint pos);
-struct rspamd_task *lua_check_task_maybe (lua_State * L, gint pos);
+struct rspamd_task *lua_check_task (lua_State *L, gint pos);
+
+struct rspamd_task *lua_check_task_maybe (lua_State *L, gint pos);
-struct rspamd_lua_map *lua_check_map (lua_State * L, gint pos);
+struct rspamd_lua_map *lua_check_map (lua_State *L, gint pos);
/**
* Push ip address from a string (nil is pushed if a string cannot be converted)
@@ -257,74 +265,114 @@ int rspamd_lua_typerror (lua_State *L, int narg, const char *tname);
void rspamd_lua_add_preload (lua_State *L, const gchar *name, lua_CFunction func);
void luaopen_task (lua_State *L);
+
void luaopen_config (lua_State *L);
+
void luaopen_map (lua_State *L);
-void luaopen_trie (lua_State * L);
+
+void luaopen_trie (lua_State *L);
+
void luaopen_textpart (lua_State *L);
+
void luaopen_mimepart (lua_State *L);
+
void luaopen_image (lua_State *L);
+
void luaopen_url (lua_State *L);
+
void luaopen_classifier (lua_State *L);
-void luaopen_statfile (lua_State * L);
+
+void luaopen_statfile (lua_State *L);
+
void luaopen_regexp (lua_State *L);
+
void luaopen_cdb (lua_State *L);
-void luaopen_xmlrpc (lua_State * L);
-void luaopen_http (lua_State * L);
-void luaopen_redis (lua_State * L);
-void luaopen_upstream (lua_State * L);
-void luaopen_mempool (lua_State * L);
-void luaopen_dns_resolver (lua_State * L);
-void luaopen_rsa (lua_State * L);
-void luaopen_ip (lua_State * L);
-void luaopen_expression (lua_State * L);
-void luaopen_logger (lua_State * L);
+
+void luaopen_xmlrpc (lua_State *L);
+
+void luaopen_http (lua_State *L);
+
+void luaopen_redis (lua_State *L);
+
+void luaopen_upstream (lua_State *L);
+
+void luaopen_mempool (lua_State *L);
+
+void luaopen_dns_resolver (lua_State *L);
+
+void luaopen_rsa (lua_State *L);
+
+void luaopen_ip (lua_State *L);
+
+void luaopen_expression (lua_State *L);
+
+void luaopen_logger (lua_State *L);
+
void luaopen_text (lua_State *L);
-void luaopen_util (lua_State * L);
-void luaopen_tcp (lua_State * L);
-void luaopen_html (lua_State * L);
+
+void luaopen_util (lua_State *L);
+
+void luaopen_tcp (lua_State *L);
+
+void luaopen_html (lua_State *L);
+
void luaopen_sqlite3 (lua_State *L);
+
void luaopen_cryptobox (lua_State *L);
+
void luaopen_dns (lua_State *L);
-void luaopen_udp (lua_State * L);
-void luaopen_worker (lua_State * L);
-void luaopen_kann (lua_State * L);
+
+void luaopen_udp (lua_State *L);
+
+void luaopen_worker (lua_State *L);
+
+void luaopen_kann (lua_State *L);
void rspamd_lua_dostring (const gchar *line);
double rspamd_lua_normalize (struct rspamd_config *cfg,
- long double score,
- void *params);
+ long double score,
+ void *params);
/* Config file functions */
void rspamd_lua_post_load_config (struct rspamd_config *cfg);
+
gboolean rspamd_lua_handle_param (struct rspamd_task *task,
- gchar *mname,
- gchar *optname,
- enum lua_var_type expected_type,
- gpointer *res);
+ gchar *mname,
+ gchar *optname,
+ enum lua_var_type expected_type,
+ gpointer *res);
+
gboolean rspamd_lua_check_condition (struct rspamd_config *cfg,
- const gchar *condition);
+ const gchar *condition);
+
void rspamd_lua_dumpstack (lua_State *L);
/* Set lua path according to the configuration */
void rspamd_lua_set_path (lua_State *L, const ucl_object_t *cfg_obj,
- GHashTable *vars);
+ GHashTable *vars);
/* Set some lua globals */
gboolean rspamd_lua_set_env (lua_State *L, GHashTable *vars, char **lua_env,
- GError **err);
+ GError **err);
+
void rspamd_lua_set_globals (struct rspamd_config *cfg, lua_State *L);
-struct memory_pool_s * rspamd_lua_check_mempool (lua_State * L, gint pos);
-struct rspamd_config * lua_check_config (lua_State * L, gint pos);
-struct rspamd_async_session* lua_check_session (lua_State * L, gint pos);
-struct ev_loop* lua_check_ev_base (lua_State * L, gint pos);
-struct rspamd_dns_resolver * lua_check_dns_resolver (lua_State * L, gint pos);
+struct memory_pool_s *rspamd_lua_check_mempool (lua_State *L, gint pos);
+
+struct rspamd_config *lua_check_config (lua_State *L, gint pos);
+
+struct rspamd_async_session *lua_check_session (lua_State *L, gint pos);
+
+struct ev_loop *lua_check_ev_base (lua_State *L, gint pos);
+
+struct rspamd_dns_resolver *lua_check_dns_resolver (lua_State *L, gint pos);
enum rspamd_lua_parse_arguments_flags {
RSPAMD_LUA_PARSE_ARGUMENTS_DEFAULT = 0,
RSPAMD_LUA_PARSE_ARGUMENTS_IGNORE_MISSING,
};
+
/**
* Extract an arguments from lua table according to format string. Supported arguments are:
* [*]key=S|I|N|B|V|U{a-z};[key=...]
@@ -419,7 +467,7 @@ void *rspamd_lua_check_udata_maybe (lua_State *L, gint pos, const gchar *classna
* @param task
*/
void lua_call_finish_script (struct rspamd_config_cfg_lua_script *sc,
- struct rspamd_task *task);
+ struct rspamd_task *task);
/**
* Run post-load operations
@@ -428,9 +476,10 @@ void lua_call_finish_script (struct rspamd_config_cfg_lua_script *sc,
* @param ev_base
*/
void rspamd_lua_run_postloads (lua_State *L, struct rspamd_config *cfg,
- struct ev_loop *ev_base, struct rspamd_worker *w);
+ struct ev_loop *ev_base, struct rspamd_worker *w);
void rspamd_lua_run_config_post_init (lua_State *L, struct rspamd_config *cfg);
+
void rspamd_lua_run_config_unload (lua_State *L, struct rspamd_config *cfg);
/**
@@ -440,7 +489,7 @@ void rspamd_lua_run_config_unload (lua_State *L, struct rspamd_config *cfg);
* @param ref
*/
void rspamd_lua_add_ref_dtor (lua_State *L, rspamd_mempool_t *pool,
- gint ref);
+ gint ref);
/**
* Tries to load some module using `require` and get some method from it
@@ -450,7 +499,7 @@ void rspamd_lua_add_ref_dtor (lua_State *L, rspamd_mempool_t *pool,
* @return TRUE if function exists in that module, the function is pushed in stack, otherwise stack is unchanged and FALSE is returned
*/
gboolean rspamd_lua_require_function (lua_State *L, const gchar *modname,
- const gchar *funcname);
+ const gchar *funcname);
/**
* Tries to load redis server definition from ucl object specified
@@ -460,9 +509,10 @@ gboolean rspamd_lua_require_function (lua_State *L, const gchar *modname,
* @return
*/
gboolean rspamd_lua_try_load_redis (lua_State *L, const ucl_object_t *obj,
- struct rspamd_config *cfg, gint *ref_id);
+ struct rspamd_config *cfg, gint *ref_id);
struct rspamd_stat_token_s;
+
/**
* Pushes a single word into Lua
* @param L
@@ -477,6 +527,7 @@ enum rspamd_lua_words_type {
RSPAMD_LUA_WORDS_FULL,
RSPAMD_LUA_WORDS_MAX
};
+
/**
* Pushes words (rspamd_stat_token_t) to Lua
* @param L
@@ -484,7 +535,7 @@ enum rspamd_lua_words_type {
* @param how
*/
gint rspamd_lua_push_words (lua_State *L, GArray *words,
- enum rspamd_lua_words_type how);
+ enum rspamd_lua_words_type how);
/* Paths defs */
#define RSPAMD_CONFDIR_INDEX "CONFDIR"
@@ -516,5 +567,8 @@ extern ucl_object_t *lua_traces;
#define LUA_TRACE_POINT do {} while(0)
#endif
-#endif /* WITH_LUA */
+#ifdef __cplusplus
+}
+#endif
+
#endif /* RSPAMD_LUA_H */
diff --git a/src/lua/lua_map.h b/src/lua/lua_map.h
index a44bd12e9..7b18df7a5 100644
--- a/src/lua/lua_map.h
+++ b/src/lua/lua_map.h
@@ -18,6 +18,10 @@
#include "lua_common.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
LUA_PUBLIC_FUNCTION_DEF (config, add_radix_map);
LUA_PUBLIC_FUNCTION_DEF (config, radix_from_config);
LUA_PUBLIC_FUNCTION_DEF (config, radix_from_ucl);
@@ -27,4 +31,8 @@ LUA_PUBLIC_FUNCTION_DEF (config, add_kv_map);
LUA_PUBLIC_FUNCTION_DEF (config, add_map);
LUA_PUBLIC_FUNCTION_DEF (config, get_maps);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* SRC_LUA_LUA_MAP_H_ */
diff --git a/src/lua/lua_thread_pool.h b/src/lua/lua_thread_pool.h
index d44eb0d54..be954271d 100644
--- a/src/lua/lua_thread_pool.h
+++ b/src/lua/lua_thread_pool.h
@@ -3,10 +3,15 @@
#include <lua.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct thread_entry;
struct lua_thread_pool;
typedef void (*lua_thread_finish_t) (struct thread_entry *thread, int ret);
+
typedef void (*lua_thread_error_t) (struct thread_entry *thread, int ret, const char *msg);
struct thread_entry {
@@ -37,7 +42,7 @@ struct lua_callback_state {
* @return
*/
struct lua_thread_pool *
-lua_thread_pool_new (lua_State * L);
+lua_thread_pool_new (lua_State *L);
/**
* Destroys the pool
@@ -80,8 +85,9 @@ void
lua_thread_pool_return_full (struct lua_thread_pool *pool,
struct thread_entry *thread_entry,
const gchar *loc);
+
#define lua_thread_pool_return(pool, thread_entry) \
- lua_thread_pool_return_full (pool, thread_entry, G_STRLOC)
+ lua_thread_pool_return_full (pool, thread_entry, G_STRLOC)
/**
* Currently running thread. Typically needed in yielding point - to fill-up continuation.
@@ -92,8 +98,10 @@ lua_thread_pool_return_full (struct lua_thread_pool *pool,
struct thread_entry *
lua_thread_pool_get_running_entry_full (struct lua_thread_pool *pool,
const gchar *loc);
+
#define lua_thread_pool_get_running_entry(pool) \
- lua_thread_pool_get_running_entry_full (pool, G_STRLOC)
+ lua_thread_pool_get_running_entry_full (pool, G_STRLOC)
+
/**
* Updates currently running thread
*
@@ -104,8 +112,10 @@ void
lua_thread_pool_set_running_entry_full (struct lua_thread_pool *pool,
struct thread_entry *thread_entry,
const gchar *loc);
+
#define lua_thread_pool_set_running_entry(pool, thread_entry) \
- lua_thread_pool_set_running_entry_full (pool, thread_entry, G_STRLOC)
+ lua_thread_pool_set_running_entry_full (pool, thread_entry, G_STRLOC)
+
/**
* Prevents yielded thread to be used for callback execution. lua_thread_pool_restore_callback() should be called afterwards.
*
@@ -114,9 +124,11 @@ lua_thread_pool_set_running_entry_full (struct lua_thread_pool *pool,
*/
void
lua_thread_pool_prepare_callback_full (struct lua_thread_pool *pool,
- struct lua_callback_state *cbs, const gchar *loc);
+ struct lua_callback_state *cbs, const gchar *loc);
+
#define lua_thread_pool_prepare_callback(pool, cbs) \
- lua_thread_pool_prepare_callback_full (pool, cbs, G_STRLOC)
+ lua_thread_pool_prepare_callback_full (pool, cbs, G_STRLOC)
+
/**
* Restores state after lua_thread_pool_prepare_callback () usage
*
@@ -124,9 +136,10 @@ lua_thread_pool_prepare_callback_full (struct lua_thread_pool *pool,
*/
void
lua_thread_pool_restore_callback_full (struct lua_callback_state *cbs,
- const gchar *loc);
+ const gchar *loc);
+
#define lua_thread_pool_restore_callback(cbs) \
- lua_thread_pool_restore_callback_full (cbs, G_STRLOC)
+ lua_thread_pool_restore_callback_full (cbs, G_STRLOC)
/**
* Acts like lua_call but the tread is able to suspend execution.
@@ -139,8 +152,9 @@ void
lua_thread_call_full (struct thread_entry *thread_entry,
int narg,
const gchar *loc);
+
#define lua_thread_call(thread_entry, narg) \
- lua_thread_call_full (thread_entry, narg, G_STRLOC)
+ lua_thread_call_full (thread_entry, narg, G_STRLOC)
/**
* Yields thread. should be only called in return statement
@@ -150,9 +164,10 @@ lua_thread_call_full (struct thread_entry *thread_entry,
*/
int
lua_thread_yield_full (struct thread_entry *thread_entry, int nresults,
- const gchar *loc);
+ const gchar *loc);
+
#define lua_thread_yield(thread_entry, narg) \
- lua_thread_yield_full (thread_entry, narg, G_STRLOC)
+ lua_thread_yield_full (thread_entry, narg, G_STRLOC)
/**
* Resumes suspended by lua_yield_thread () thread
@@ -164,8 +179,13 @@ void
lua_thread_resume_full (struct thread_entry *thread_entry,
int narg,
const gchar *loc);
+
#define lua_thread_resume(thread_entry, narg) \
- lua_thread_resume_full (thread_entry, narg, G_STRLOC)
+ lua_thread_resume_full (thread_entry, narg, G_STRLOC)
+
+#ifdef __cplusplus
+}
+#endif
#endif /* LUA_THREAD_POOL_H_ */
diff --git a/src/rspamadm/rspamadm.h b/src/rspamadm/rspamadm.h
index e8ed9c873..e1a638df7 100644
--- a/src/rspamadm/rspamadm.h
+++ b/src/rspamadm/rspamadm.h
@@ -22,6 +22,10 @@
#include <lauxlib.h>
#include <lualib.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
extern GHashTable *ucl_vars;
extern gchar **lua_env;
extern struct rspamd_main *rspamd_main;
@@ -29,10 +33,13 @@ extern struct rspamd_main *rspamd_main;
GQuark rspamadm_error (void);
struct rspamadm_command;
-typedef const gchar* (*rspamadm_help_func) (gboolean full_help,
+
+typedef const gchar *(*rspamadm_help_func) (gboolean full_help,
const struct rspamadm_command *cmd);
+
typedef void (*rspamadm_run_func) (gint argc, gchar **argv,
const struct rspamadm_command *cmd);
+
typedef void (*rspamadm_lua_exports_func) (gpointer lua_state);
#define RSPAMADM_FLAG_NOHELP (1 << 0)
@@ -52,8 +59,10 @@ extern const struct rspamadm_command *commands[];
extern struct rspamadm_command help_command;
const struct rspamadm_command *rspamadm_search_command (const gchar *name,
- GPtrArray *all_commands);
+ GPtrArray *all_commands);
+
void rspamadm_fill_internal_commands (GPtrArray *dest);
+
void rspamadm_fill_lua_commands (lua_State *L, GPtrArray *dest);
gboolean rspamadm_execute_lua_ucl_subr (gint argc, gchar **argv,
@@ -62,6 +71,7 @@ gboolean rspamadm_execute_lua_ucl_subr (gint argc, gchar **argv,
gboolean rspamadm_subcommand);
struct thread_entry;
+
typedef void (*lua_thread_error_t) (struct thread_entry *thread, int ret, const char *msg);
@@ -70,7 +80,12 @@ struct lua_call_data {
gint ret;
gpointer ud;
};
+
gint lua_repl_thread_call (struct thread_entry *thread, gint narg,
- gpointer ud, lua_thread_error_t error_func);
+ gpointer ud, lua_thread_error_t error_func);
+
+#ifdef __cplusplus
+}
+#endif
#endif
diff --git a/src/rspamd.h b/src/rspamd.h
index a56fab2b4..0a0fb45fc 100644
--- a/src/rspamd.h
+++ b/src/rspamd.h
@@ -25,11 +25,13 @@
#include "libutil/http_connection.h"
#include "libutil/upstream.h"
#include "libutil/radix.h"
+#include "libserver/cfg_file.h"
#include "libserver/url.h"
#include "libserver/protocol.h"
#include "libserver/async_session.h"
#include "libserver/roll_history.h"
#include "libserver/task.h"
+
#include <openssl/ssl.h>
#include <magic.h>
@@ -52,6 +54,10 @@
#define CR '\r'
#define LF '\n'
+#ifdef __cplusplus
+extern "C" {
+#endif
+
enum rspamd_worker_flags {
RSPAMD_WORKER_HAS_SOCKET = (1 << 0),
RSPAMD_WORKER_UNIQUE = (1 << 1),
@@ -69,8 +75,8 @@ struct rspamd_worker_accept_event {
struct rspamd_worker_accept_event *prev, *next;
};
-typedef void (*rspamd_worker_term_cb)(EV_P_ ev_child *, struct rspamd_main *,
- struct rspamd_worker *);
+typedef void (*rspamd_worker_term_cb) (EV_P_ ev_child *, struct rspamd_main *,
+ struct rspamd_worker *);
/**
* Worker process structure
@@ -114,6 +120,7 @@ struct rspamd_abstract_worker_ctx {
};
struct rspamd_worker_signal_handler;
+
typedef gboolean (*rspamd_worker_signal_cb_t) (
struct rspamd_worker_signal_handler *, void *ud);
@@ -147,10 +154,11 @@ struct rspamd_controller_pbkdf {
* Common structure representing C module context
*/
struct module_s;
+
struct module_ctx {
- gint (*filter)(struct rspamd_task *task); /**< pointer to headers process function */
- struct module_s *mod; /**< module pointer */
- gboolean enabled; /**< true if module is enabled in configuration */
+ gint (*filter) (struct rspamd_task *task); /**< pointer to headers process function */
+ struct module_s *mod; /**< module pointer */
+ gboolean enabled; /**< true if module is enabled in configuration */
};
#ifndef WITH_HYPERSCAN
@@ -178,28 +186,33 @@ struct module_ctx {
#define RSPAMD_CUR_WORKER_VERSION 0x2
#define RSPAMD_FEATURES \
- RSPAMD_FEATURE_HYPERSCAN RSPAMD_FEATURE_PCRE2 \
- RSPAMD_FEATURE_FANN RSPAMD_FEATURE_SNOWBALL
+ RSPAMD_FEATURE_HYPERSCAN RSPAMD_FEATURE_PCRE2 \
+ RSPAMD_FEATURE_FANN RSPAMD_FEATURE_SNOWBALL
#define RSPAMD_MODULE_VER \
- RSPAMD_CUR_MODULE_VERSION, /* Module version */ \
- RSPAMD_VERSION_NUM, /* Rspamd version */ \
- RSPAMD_FEATURES /* Compilation features */ \
+ RSPAMD_CUR_MODULE_VERSION, /* Module version */ \
+ RSPAMD_VERSION_NUM, /* Rspamd version */ \
+ RSPAMD_FEATURES /* Compilation features */ \
#define RSPAMD_WORKER_VER \
- RSPAMD_CUR_WORKER_VERSION, /* Worker version */ \
- RSPAMD_VERSION_NUM, /* Rspamd version */ \
- RSPAMD_FEATURES /* Compilation features */ \
+ RSPAMD_CUR_WORKER_VERSION, /* Worker version */ \
+ RSPAMD_VERSION_NUM, /* Rspamd version */ \
+ RSPAMD_FEATURES /* Compilation features */ \
/**
* Module
*/
typedef struct module_s {
const gchar *name;
- int (*module_init_func)(struct rspamd_config *cfg, struct module_ctx **ctx);
- int (*module_config_func)(struct rspamd_config *cfg);
- int (*module_reconfig_func)(struct rspamd_config *cfg);
- int (*module_attach_controller_func)(struct module_ctx *ctx,
- GHashTable *custom_commands);
+
+ int (*module_init_func) (struct rspamd_config *cfg, struct module_ctx **ctx);
+
+ int (*module_config_func) (struct rspamd_config *cfg);
+
+ int (*module_reconfig_func) (struct rspamd_config *cfg);
+
+ int (*module_attach_controller_func) (struct module_ctx *ctx,
+ GHashTable *custom_commands);
+
guint module_version;
guint64 rspamd_version;
const gchar *rspamd_features;
@@ -220,8 +233,11 @@ struct rspamd_worker_listen_socket {
typedef struct worker_s {
const gchar *name;
- gpointer (*worker_init_func)(struct rspamd_config *cfg);
- void (*worker_start_func)(struct rspamd_worker *worker);
+
+ gpointer (*worker_init_func) (struct rspamd_config *cfg);
+
+ void (*worker_start_func) (struct rspamd_worker *worker);
+
int flags;
int listen_type;
guint worker_version;
@@ -313,8 +329,9 @@ struct rspamd_process_exception {
*/
struct controller_command;
struct controller_session;
-typedef gboolean (*controller_func_t)(gchar **args,
- struct controller_session *session);
+
+typedef gboolean (*controller_func_t) (gchar **args,
+ struct controller_session *session);
struct controller_session {
struct rspamd_worker *worker; /**< pointer to worker structure (controller in fact) */
@@ -322,7 +339,7 @@ struct controller_session {
struct controller_command *cmd; /**< real command */
struct rspamd_config *cfg; /**< pointer to config file */
GList *parts; /**< extracted mime parts */
- struct rspamd_async_session * s; /**< async session object */
+ struct rspamd_async_session *s; /**< async session object */
struct rspamd_dns_resolver *resolver; /**< DNS resolver */
struct ev_loop *ev_base; /**< Event base */
};
@@ -354,17 +371,20 @@ struct rspamd_external_libs_ctx {
* Register custom controller function
*/
void register_custom_controller_command (const gchar *name,
- controller_func_t handler,
- gboolean privilleged,
- gboolean require_message);
+ controller_func_t handler,
+ gboolean privilleged,
+ gboolean require_message);
enum rspamd_pbkdf_version_id {
RSPAMD_PBKDF_ID_V1 = 1,
- RSPAMD_PBKDF_ID_V2= 2,
+ RSPAMD_PBKDF_ID_V2 = 2,
RSPAMD_PBKDF_ID_MAX
};
extern const struct rspamd_controller_pbkdf pbkdf_list[];
+#ifdef __cplusplus
+}
+#endif
#endif \ No newline at end of file
diff --git a/src/worker_private.h b/src/worker_private.h
index 6d0e763aa..cef2c9a19 100644
--- a/src/worker_private.h
+++ b/src/worker_private.h
@@ -23,6 +23,10 @@
#include "libserver/cfg_file.h"
#include "libserver/rspamd_control.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
static const guint64 rspamd_worker_magic = 0xb48abc69d601dc1dULL;
struct rspamd_lang_detector;
@@ -52,13 +56,14 @@ struct rspamd_worker_ctx {
/* Language detector */
struct rspamd_lang_detector *lang_det;
};
+
/*
* Init scanning routines
*/
void rspamd_worker_init_scanner (struct rspamd_worker *worker,
- struct ev_loop *ev_base,
- struct rspamd_dns_resolver *resolver,
- struct rspamd_lang_detector **plang_det);
+ struct ev_loop *ev_base,
+ struct rspamd_dns_resolver *resolver,
+ struct rspamd_lang_detector **plang_det);
/*
* Called on forced timeout
@@ -70,4 +75,8 @@ void rspamd_task_timeout (EV_P_ ev_timer *w, int revents);
*/
void rspamd_worker_guard_handler (EV_P_ ev_io *w, int revents);
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/test/tests.h b/test/tests.h
index 56562ae8c..95eef354d 100644
--- a/test/tests.h
+++ b/test/tests.h
@@ -5,6 +5,10 @@
* Here are described test functions for rspamd test suite
*/
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/* URL parser test */
void rspamd_url_test_func (void);
@@ -38,6 +42,10 @@ void rspamd_cryptobox_test_func (void);
void rspamd_heap_test_func (void);
-void rspamd_lua_lua_pcall_vs_resume_test_func(void);
+void rspamd_lua_lua_pcall_vs_resume_test_func (void);
+
+#ifdef __cplusplus
+}
+#endif
#endif