/* tr46map.c - header file for IDNA2008 TR46
Copyright (C) 2016-2017 Tim Ruehsen
Libidn2 is free software: you can redistribute it and/or modify it
under the terms of either:
* the GNU Lesser General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at
your option) any later version.
or
* the GNU General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at
your option) any later version.
or both in parallel, as here.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received copies of the GNU General Public License and
the GNU Lesser General Public License along with this program. If
not, see .
*/
#ifndef LIBIDN2_TR46MAP_H
#define LIBIDN2_TR46MAP_H
#include
#include "idn2.h"
#define TR46_FLG_VALID 1
#define TR46_FLG_MAPPED 2
#define TR46_FLG_IGNORED 4
#define TR46_FLG_DEVIATION 8
#define TR46_FLG_DISALLOWED 16
#define TR46_FLG_DISALLOWED_STD3_MAPPED 32
#define TR46_FLG_DISALLOWED_STD3_VALID 64
typedef struct
{
uint32_t cp1;
uint16_t range;
unsigned nmappings:5, /* 0-18, # of uint32_t at */
offset:14, /* 0-16383, byte offset into mapdata */
flag_index:3; /* 0-7, index into flags */
} IDNAMap;
typedef struct
{
uint32_t cp1, cp2;
char check; /* 0=NO 2=MAYBE (YES if codepoint has no table entry) */
} NFCQCMap;
int
get_idna_map (uint32_t c, IDNAMap * map);
int
get_map_data (uint32_t * dst, const IDNAMap * map);
int G_GNUC_IDN2_ATTRIBUTE_PURE
map_is (const IDNAMap * map, unsigned flags);
G_GNUC_IDN2_ATTRIBUTE_PURE NFCQCMap
*get_nfcqc_map (uint32_t c);
#endif /* LIBIDN2_TR46MAP_H */