summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cregex.c126
-rw-r--r--src/libstc.c9
-rw-r--r--src/singleheader.py18
-rw-r--r--src/singleupdate.sh57
-rw-r--r--src/utf8code.c52
5 files changed, 149 insertions, 113 deletions
diff --git a/src/cregex.c b/src/cregex.c
index 0688d9e1..7907ddd9 100644
--- a/src/cregex.c
+++ b/src/cregex.c
@@ -25,9 +25,24 @@ THE SOFTWARE.
*/
#ifndef CREGEX_C_INCLUDED
#define CREGEX_C_INCLUDED
-#include <stc/cstr.h>
-#include <stc/cregex.h> // header only
+
#include <setjmp.h>
+#ifdef i_import
+# define _i_import
+#endif
+#ifndef CREGEX_H_INCLUDED
+# include "../include/stc/cregex.h"
+#endif
+#ifdef _i_import
+# include "utf8code.c"
+#endif
+#ifdef _i_import
+# define i_implement
+#else
+# undef i_implement
+#endif
+#undef _i_import
+#include "../include/stc/cstr.h"
typedef uint32_t _Rune; /* Utf8 code point */
typedef int32_t _Token;
@@ -249,8 +264,8 @@ _renewmatch(_Resub *mp, int ms, _Resublist *sp, int nsubids)
{
if (mp==NULL || ms==0)
return;
- if (mp[0].str == NULL || sp->m[0].str < mp[0].str ||
- (sp->m[0].str == mp[0].str && sp->m[0].size > mp[0].size)) {
+ if (mp[0].buf == NULL || sp->m[0].buf < mp[0].buf ||
+ (sp->m[0].buf == mp[0].buf && sp->m[0].size > mp[0].size)) {
for (int i=0; i<ms && i<=nsubids; i++)
mp[i] = sp->m[i];
}
@@ -271,7 +286,7 @@ _renewthread(_Relist *lp, /* _relist to add to */
for (p=lp; p->inst; p++) {
if (p->inst == ip) {
- if (sep->m[0].str < p->se.m[0].str) {
+ if (sep->m[0].buf < p->se.m[0].buf) {
if (ms > 1)
p->se = *sep;
else
@@ -303,10 +318,10 @@ _renewemptythread(_Relist *lp, /* _relist to add to */
for (p=lp; p->inst; p++) {
if (p->inst == ip) {
- if (sp < p->se.m[0].str) {
+ if (sp < p->se.m[0].buf) {
if (ms > 1)
memset(&p->se, 0, sizeof(p->se));
- p->se.m[0].str = sp;
+ p->se.m[0].buf = sp;
}
return 0;
}
@@ -314,7 +329,7 @@ _renewemptythread(_Relist *lp, /* _relist to add to */
p->inst = ip;
if (ms > 1)
memset(&p->se, 0, sizeof(p->se));
- p->se.m[0].str = sp;
+ p->se.m[0].buf = sp;
(++p)->inst = NULL;
return p;
}
@@ -347,7 +362,7 @@ typedef struct _Parser
bool lastwasand; /* Last token was _operand */
short nbra;
short nclass;
- size_t instcap;
+ intptr_t instcap;
_Rune yyrune; /* last lex'd rune */
_Reclass *yyclassp; /* last lex'd class */
_Reclass* classp;
@@ -547,11 +562,11 @@ _optimize(_Parser *par, _Reprog *pp)
* necessary. Reallocate to the actual space used
* and then relocate the code.
*/
- if ((par->freep - pp->firstinst)*2 > (ptrdiff_t)par->instcap)
+ if ((par->freep - pp->firstinst)*2 > par->instcap)
return pp;
- intptr_t ipp = (intptr_t)pp;
- size_t size = sizeof(_Reprog) + (size_t)(par->freep - pp->firstinst)*sizeof(_Reinst);
+ intptr_t ipp = (intptr_t)pp; // convert pointer to intptr_t!
+ intptr_t size = c_sizeof(_Reprog) + (par->freep - pp->firstinst)*c_sizeof(_Reinst);
_Reprog *npp = (_Reprog *)c_realloc(pp, size);
ptrdiff_t diff = (intptr_t)npp - ipp;
@@ -842,20 +857,21 @@ _bldcclass(_Parser *par)
static _Reprog*
-_regcomp1(_Reprog *progp, _Parser *par, const char *s, int cflags)
+_regcomp1(_Reprog *pp, _Parser *par, const char *s, int cflags)
{
_Token token;
/* get memory for the program. estimated max usage */
- par->instcap = 5U + 6*strlen(s);
- _Reprog* pp = (_Reprog *)c_realloc(progp, sizeof(_Reprog) + par->instcap*sizeof(_Reinst));
- if (pp == NULL) {
+ par->instcap = 5 + 6*c_strlen(s);
+ _Reprog* old_pp = pp;
+ pp = (_Reprog *)c_realloc(pp, c_sizeof(_Reprog) + par->instcap*c_sizeof(_Reinst));
+ if (! pp) {
+ c_free(old_pp);
par->error = CREG_OUTOFMEMORY;
- c_free(progp);
return NULL;
}
- pp->flags.icase = (cflags & CREG_C_ICASE) != 0;
- pp->flags.dotall = (cflags & CREG_C_DOTALL) != 0;
+ pp->flags.icase = (cflags & CREG_ICASE) != 0;
+ pp->flags.dotall = (cflags & CREG_DOTALL) != 0;
par->freep = pp->firstinst;
par->classp = pp->cclass;
par->error = 0;
@@ -928,14 +944,14 @@ _runematch(_Rune s, _Rune r)
case ASC_LO: inv = 1; case ASC_lo: return inv ^ (islower((int)r) != 0);
case ASC_UP: inv = 1; case ASC_up: return inv ^ (isupper((int)r) != 0);
case ASC_XD: inv = 1; case ASC_xd: return inv ^ (isxdigit((int)r) != 0);
- case UTF_AN: inv = 1; case UTF_an: return inv ^ utf8_isalnum(r);
- case UTF_BL: inv = 1; case UTF_bl: return inv ^ utf8_isblank(r);
- case UTF_SP: inv = 1; case UTF_sp: return inv ^ utf8_isspace(r);
- case UTF_LL: inv = 1; case UTF_ll: return inv ^ utf8_islower(r);
- case UTF_LU: inv = 1; case UTF_lu: return inv ^ utf8_isupper(r);
- case UTF_LC: inv = 1; case UTF_lc: return inv ^ utf8_iscased(r);
- case UTF_AL: inv = 1; case UTF_al: return inv ^ utf8_isalpha(r);
- case UTF_WR: inv = 1; case UTF_wr: return inv ^ utf8_isword(r);
+ case UTF_AN: inv = 1; case UTF_an: return inv ^ (int)utf8_isalnum(r);
+ case UTF_BL: inv = 1; case UTF_bl: return inv ^ (int)utf8_isblank(r);
+ case UTF_SP: inv = 1; case UTF_sp: return inv ^ (int)utf8_isspace(r);
+ case UTF_LL: inv = 1; case UTF_ll: return inv ^ (int)utf8_islower(r);
+ case UTF_LU: inv = 1; case UTF_lu: return inv ^ (int)utf8_isupper(r);
+ case UTF_LC: inv = 1; case UTF_lc: return inv ^ (int)utf8_iscased(r);
+ case UTF_AL: inv = 1; case UTF_al: return inv ^ (int)utf8_isalpha(r);
+ case UTF_WR: inv = 1; case UTF_wr: return inv ^ (int)utf8_isword(r);
case UTF_cc: case UTF_CC:
case UTF_lt: case UTF_LT:
case UTF_nd: case UTF_ND:
@@ -956,7 +972,7 @@ _runematch(_Rune s, _Rune r)
case UTF_latin: case UTF_LATIN:
n = (int)s - UTF_GRP;
inv = n & 1;
- return inv ^ utf8_isgroup(n / 2, r);
+ return inv ^ (int)utf8_isgroup(n / 2, r);
}
return s == r;
}
@@ -989,7 +1005,7 @@ _regexec1(const _Reprog *progp, /* program to run */
checkstart = j->starttype;
if (mp)
for (i=0; i<ms; i++) {
- mp[i].str = NULL;
+ mp[i].buf = NULL;
mp[i].size = 0;
}
j->relist[0][0].inst = NULL;
@@ -1050,10 +1066,10 @@ _regexec1(const _Reprog *progp, /* program to run */
icase = inst->type == TOK_ICASE;
continue;
case TOK_LBRA:
- tlp->se.m[inst->r.subid].str = s;
+ tlp->se.m[inst->r.subid].buf = s;
continue;
case TOK_RBRA:
- tlp->se.m[inst->r.subid].size = (s - tlp->se.m[inst->r.subid].str);
+ tlp->se.m[inst->r.subid].size = (s - tlp->se.m[inst->r.subid].buf);
continue;
case TOK_ANY:
ok = (r != '\n');
@@ -1100,10 +1116,10 @@ _regexec1(const _Reprog *progp, /* program to run */
/* efficiency: advance and re-evaluate */
continue;
case TOK_END: /* Match! */
- match = !(mflags & CREG_M_FULLMATCH) ||
+ match = !(mflags & CREG_FULLMATCH) ||
((s == j->eol || r == 0 || r == '\n') &&
- (tlp->se.m[0].str == bol || tlp->se.m[0].str[-1] == '\n'));
- tlp->se.m[0].size = (s - tlp->se.m[0].str);
+ (tlp->se.m[0].buf == bol || tlp->se.m[0].buf[-1] == '\n'));
+ tlp->se.m[0].size = (s - tlp->se.m[0].buf);
if (mp != NULL)
_renewmatch(mp, ms, &tlp->se, progp->nsubids);
break;
@@ -1136,7 +1152,7 @@ _regexec2(const _Reprog *progp, /* program to run */
_Relist *relists;
/* mark space */
- relists = (_Relist *)c_malloc(2 * _BIGLISTSIZE*sizeof(_Relist));
+ relists = (_Relist *)c_malloc(2 * _BIGLISTSIZE*c_sizeof(_Relist));
if (relists == NULL)
return -1;
@@ -1168,10 +1184,10 @@ _regexec(const _Reprog *progp, /* program to run */
j.eol = NULL;
if (mp && mp[0].size) {
- if (mflags & CREG_M_STARTEND)
- j.starts = mp[0].str, j.eol = mp[0].str + mp[0].size;
- else if (mflags & CREG_M_NEXT)
- j.starts = mp[0].str + mp[0].size;
+ if (mflags & CREG_STARTEND)
+ j.starts = mp[0].buf, j.eol = mp[0].buf + mp[0].size;
+ else if (mflags & CREG_NEXT)
+ j.starts = mp[0].buf + mp[0].size;
}
j.starttype = 0;
@@ -1204,7 +1220,7 @@ _build_subst(const char* replace, int nmatch, const csview match[],
cstr_buf buf = cstr_buffer(subst);
intptr_t len = 0, cap = buf.cap;
char* dst = buf.data;
- cstr mstr = cstr_NULL;
+ cstr mstr = cstr_init();
while (*replace != '\0') {
if (*replace == '$') {
@@ -1216,12 +1232,12 @@ _build_subst(const char* replace, int nmatch, const csview match[],
g = arg - '0';
if (replace[1] >= '0' && replace[1] <= '9' && replace[2] == ';')
{ g = g*10 + (replace[1] - '0'); replace += 2; }
- if (g < (int)nmatch) {
+ if (g < nmatch) {
csview m = mfun && mfun(g, match[g], &mstr) ? cstr_sv(&mstr) : match[g];
if (len + m.size > cap)
- dst = cstr_reserve(subst, cap = cap*3/2 + m.size);
- for (int i = 0; i < (int)m.size; ++i)
- dst[len++] = m.str[i];
+ dst = cstr_reserve(subst, cap += cap/2 + m.size);
+ for (int i = 0; i < m.size; ++i)
+ dst[len++] = m.buf[i];
}
++replace;
case '\0':
@@ -1229,7 +1245,7 @@ _build_subst(const char* replace, int nmatch, const csview match[],
}
}
if (len == cap)
- dst = cstr_reserve(subst, cap = cap*3/2 + 4);
+ dst = cstr_reserve(subst, cap += cap/2 + 4);
dst[len++] = *replace++;
}
cstr_drop(&mstr);
@@ -1250,12 +1266,12 @@ cregex_compile_3(cregex *self, const char* pattern, int cflags) {
int
cregex_captures(const cregex* self) {
- return self->prog ? 1 + self->prog->nsubids : 0;
+ return self->prog ? self->prog->nsubids : 0;
}
int
cregex_find_4(const cregex* re, const char* input, csview match[], int mflags) {
- int res = _regexec(re->prog, input, cregex_captures(re), match, mflags);
+ int res = _regexec(re->prog, input, cregex_captures(re) + 1, match, mflags);
switch (res) {
case 1: return CREG_OK;
case 0: return CREG_NOMATCH;
@@ -1277,19 +1293,19 @@ cregex_find_pattern_4(const char* pattern, const char* input,
cstr
cregex_replace_sv_6(const cregex* re, csview input, const char* replace, int count,
bool (*mfun)(int, csview, cstr*), int rflags) {
- cstr out = cstr_NULL;
- cstr subst = cstr_NULL;
+ cstr out = cstr_init();
+ cstr subst = cstr_init();
csview match[CREG_MAX_CAPTURES];
- int nmatch = cregex_captures(re);
+ int nmatch = cregex_captures(re) + 1;
if (!count) count = INT32_MAX;
- bool copy = !(rflags & CREG_R_STRIP);
+ bool copy = !(rflags & CREG_STRIP);
while (count-- && cregex_find_sv(re, input, match) == CREG_OK) {
_build_subst(replace, nmatch, match, mfun, &subst);
- const intptr_t mpos = (match[0].str - input.str);
- if (copy & (mpos > 0)) cstr_append_n(&out, input.str, mpos);
+ const intptr_t mpos = (match[0].buf - input.buf);
+ if (copy & (mpos > 0)) cstr_append_n(&out, input.buf, mpos);
cstr_append_s(&out, subst);
- input.str = match[0].str + match[0].size;
+ input.buf = match[0].buf + match[0].size;
input.size -= mpos + match[0].size;
}
if (copy) cstr_append_sv(&out, input);
@@ -1303,7 +1319,7 @@ cregex_replace_pattern_6(const char* pattern, const char* input, const char* rep
cregex re = cregex_init();
if (cregex_compile(&re, pattern, crflags) != CREG_OK)
assert(0);
- csview sv = {input, c_strlen(input)};
+ csview sv = c_sv(input, c_strlen(input));
cstr out = cregex_replace_sv(&re, sv, replace, count, mfun, crflags);
cregex_drop(&re);
return out;
diff --git a/src/libstc.c b/src/libstc.c
new file mode 100644
index 00000000..1305abef
--- /dev/null
+++ b/src/libstc.c
@@ -0,0 +1,9 @@
+#define STC_IMPLEMENT
+#define i_import
+#include "../include/stc/cregex.h" /* cstr. utf8, and cregex */
+#include "../include/stc/csview.h"
+#include "../include/stc/crand.h"
+#include "../include/stc/cspan.h"
+#if __STDC_VERSION__ >= 201112L
+# include "../include/c11/fmt.h"
+#endif
diff --git a/src/singleheader.py b/src/singleheader.py
index 2255568d..637edbcb 100644
--- a/src/singleheader.py
+++ b/src/singleheader.py
@@ -68,12 +68,14 @@ def process_file(
if __name__ == "__main__":
- print(
- process_file(
- abspath(sys.argv[1]),
- [],
- # We use an include guard instead of `#pragma once` because Godbolt will
- # cause complaints about `#pragma once` when they are used in URL includes.
- [abspath(sys.argv[1])],
+ with open(sys.argv[2], "w", newline='\n') as f:
+ print(
+ process_file(
+ abspath(sys.argv[1]),
+ [],
+ # We use an include guard instead of `#pragma once` because Godbolt will
+ # cause complaints about `#pragma once` when they are used in URL includes.
+ [abspath(sys.argv[1])],
+ ),
+ file=f
)
- )
diff --git a/src/singleupdate.sh b/src/singleupdate.sh
index d9a16568..8c2bba45 100644
--- a/src/singleupdate.sh
+++ b/src/singleupdate.sh
@@ -1,27 +1,30 @@
-d=$(git rev-parse --show-toplevel)
-mkdir -p $d/../stcsingle/c11 $d/../stcsingle/stc
-python singleheader.py $d/include/c11/print.h > $d/../stcsingle/c11/print.h
-python singleheader.py $d/include/stc/calgo.h > $d/../stcsingle/stc/calgo.h
-python singleheader.py $d/include/stc/carc.h > $d/../stcsingle/stc/carc.h
-python singleheader.py $d/include/stc/cbits.h > $d/../stcsingle/stc/cbits.h
-python singleheader.py $d/include/stc/cbox.h > $d/../stcsingle/stc/cbox.h
-python singleheader.py $d/include/stc/ccommon.h > $d/../stcsingle/stc/ccommon.h
-python singleheader.py $d/include/stc/cdeq.h > $d/../stcsingle/stc/cdeq.h
-python singleheader.py $d/include/stc/clist.h > $d/../stcsingle/stc/clist.h
-python singleheader.py $d/include/stc/cmap.h > $d/../stcsingle/stc/cmap.h
-python singleheader.py $d/include/stc/coption.h > $d/../stcsingle/stc/coption.h
-python singleheader.py $d/include/stc/cpque.h > $d/../stcsingle/stc/cpque.h
-python singleheader.py $d/include/stc/cqueue.h > $d/../stcsingle/stc/cqueue.h
-python singleheader.py $d/include/stc/crand.h > $d/../stcsingle/stc/crand.h
-python singleheader.py $d/include/stc/cregex.h > $d/../stcsingle/stc/cregex.h
-python singleheader.py $d/include/stc/cset.h > $d/../stcsingle/stc/cset.h
-python singleheader.py $d/include/stc/csmap.h > $d/../stcsingle/stc/csmap.h
-python singleheader.py $d/include/stc/cspan.h > $d/../stcsingle/stc/cspan.h
-python singleheader.py $d/include/stc/csset.h > $d/../stcsingle/stc/csset.h
-python singleheader.py $d/include/stc/cstack.h > $d/../stcsingle/stc/cstack.h
-python singleheader.py $d/include/stc/cstr.h > $d/../stcsingle/stc/cstr.h
-python singleheader.py $d/include/stc/csview.h > $d/../stcsingle/stc/csview.h
-python singleheader.py $d/include/stc/cvec.h > $d/../stcsingle/stc/cvec.h
-python singleheader.py $d/include/stc/extend.h > $d/../stcsingle/stc/extend.h
-python singleheader.py $d/include/stc/forward.h > $d/../stcsingle/stc/forward.h
-echo "stcsingle headers updated" \ No newline at end of file
+d=$(git rev-parse --show-toplevel)
+mkdir -p $d/../stcsingle/c11 $d/../stcsingle/stc/algo
+python singleheader.py $d/include/c11/fmt.h $d/../stcsingle/c11/fmt.h
+python singleheader.py $d/include/stc/algorithm.h $d/../stcsingle/stc/algorithm.h
+python singleheader.py $d/include/stc/coroutine.h $d/../stcsingle/stc/coroutine.h
+python singleheader.py $d/include/stc/algo/sort.h $d/../stcsingle/stc/algo/sort.h
+python singleheader.py $d/include/stc/carc.h $d/../stcsingle/stc/carc.h
+python singleheader.py $d/include/stc/cbits.h $d/../stcsingle/stc/cbits.h
+python singleheader.py $d/include/stc/cbox.h $d/../stcsingle/stc/cbox.h
+python singleheader.py $d/include/stc/ccommon.h $d/../stcsingle/stc/ccommon.h
+python singleheader.py $d/include/stc/cdeq.h $d/../stcsingle/stc/cdeq.h
+python singleheader.py $d/include/stc/clist.h $d/../stcsingle/stc/clist.h
+python singleheader.py $d/include/stc/cmap.h $d/../stcsingle/stc/cmap.h
+python singleheader.py $d/include/stc/coption.h $d/../stcsingle/stc/coption.h
+python singleheader.py $d/include/stc/cpque.h $d/../stcsingle/stc/cpque.h
+python singleheader.py $d/include/stc/cqueue.h $d/../stcsingle/stc/cqueue.h
+python singleheader.py $d/include/stc/crand.h $d/../stcsingle/stc/crand.h
+python singleheader.py $d/include/stc/cregex.h $d/../stcsingle/stc/cregex.h
+python singleheader.py $d/include/stc/cset.h $d/../stcsingle/stc/cset.h
+python singleheader.py $d/include/stc/csmap.h $d/../stcsingle/stc/csmap.h
+python singleheader.py $d/include/stc/cspan.h $d/../stcsingle/stc/cspan.h
+python singleheader.py $d/include/stc/csset.h $d/../stcsingle/stc/csset.h
+python singleheader.py $d/include/stc/cstack.h $d/../stcsingle/stc/cstack.h
+python singleheader.py $d/include/stc/cstr.h $d/../stcsingle/stc/cstr.h
+python singleheader.py $d/include/stc/csview.h $d/../stcsingle/stc/csview.h
+python singleheader.py $d/include/stc/crawstr.h $d/../stcsingle/stc/crawstr.h
+python singleheader.py $d/include/stc/cvec.h $d/../stcsingle/stc/cvec.h
+python singleheader.py $d/include/stc/extend.h $d/../stcsingle/stc/extend.h
+python singleheader.py $d/include/stc/forward.h $d/../stcsingle/stc/forward.h
+echo "$d/../stcsingle headers updated"
diff --git a/src/utf8code.c b/src/utf8code.c
index 496f5eef..e326e6b9 100644
--- a/src/utf8code.c
+++ b/src/utf8code.c
@@ -1,6 +1,9 @@
#ifndef UTF8_C_INCLUDED
#define UTF8_C_INCLUDED
-#include <stc/utf8.h> // header only
+
+#ifndef UTF8_H_INCLUDED
+#include "../include/stc/utf8.h" /* header only */
+#endif
#include "utf8tabs.inc"
const uint8_t utf8_dtab[] = {
@@ -102,10 +105,10 @@ int utf8_icmp_sv(const csview s1, const csview s2) {
utf8_decode_t d1 = {.state=0}, d2 = {.state=0};
intptr_t j1 = 0, j2 = 0;
while ((j1 < s1.size) & (j2 < s2.size)) {
- do { utf8_decode(&d1, (uint8_t)s1.str[j1++]); } while (d1.state);
- do { utf8_decode(&d2, (uint8_t)s2.str[j2++]); } while (d2.state);
+ do { utf8_decode(&d1, (uint8_t)s1.buf[j1++]); } while (d1.state);
+ do { utf8_decode(&d2, (uint8_t)s2.buf[j2++]); } while (d2.state);
int32_t c = (int32_t)utf8_casefold(d1.codep) - (int32_t)utf8_casefold(d2.codep);
- if (c || !s2.str[j2 - 1]) // OK if s1.size and s2.size are npos
+ if (c || !s2.buf[j2 - 1]) // OK if s1.size and s2.size are npos
return (int)c;
}
return (int)(s1.size - s2.size);
@@ -458,28 +461,31 @@ static const URange16 Latin_range16[] = {
#define UNI_ENTRY(Code) \
{ Code##_range16, sizeof(Code##_range16)/sizeof(URange16) }
-#ifndef __cplusplus
+#ifdef __cplusplus
+#define _e_arg(k, v) v
+#else
+#define _e_arg(k, v) [k] = v
static
#endif
const UGroup _utf8_unicode_groups[U8G_SIZE] = {
- [U8G_Cc] = UNI_ENTRY(Cc),
- [U8G_Lt] = UNI_ENTRY(Lt),
- [U8G_Nd] = UNI_ENTRY(Nd),
- [U8G_Nl] = UNI_ENTRY(Nl),
- [U8G_Pc] = UNI_ENTRY(Pc),
- [U8G_Pd] = UNI_ENTRY(Pd),
- [U8G_Pf] = UNI_ENTRY(Pf),
- [U8G_Pi] = UNI_ENTRY(Pi),
- [U8G_Sc] = UNI_ENTRY(Sc),
- [U8G_Zl] = UNI_ENTRY(Zl),
- [U8G_Zp] = UNI_ENTRY(Zp),
- [U8G_Zs] = UNI_ENTRY(Zs),
- [U8G_Arabic] = UNI_ENTRY(Arabic),
- [U8G_Cyrillic] = UNI_ENTRY(Cyrillic),
- [U8G_Devanagari] = UNI_ENTRY(Devanagari),
- [U8G_Greek] = UNI_ENTRY(Greek),
- [U8G_Han] = UNI_ENTRY(Han),
- [U8G_Latin] = UNI_ENTRY(Latin),
+ _e_arg(U8G_Cc, UNI_ENTRY(Cc)),
+ _e_arg(U8G_Lt, UNI_ENTRY(Lt)),
+ _e_arg(U8G_Nd, UNI_ENTRY(Nd)),
+ _e_arg(U8G_Nl, UNI_ENTRY(Nl)),
+ _e_arg(U8G_Pc, UNI_ENTRY(Pc)),
+ _e_arg(U8G_Pd, UNI_ENTRY(Pd)),
+ _e_arg(U8G_Pf, UNI_ENTRY(Pf)),
+ _e_arg(U8G_Pi, UNI_ENTRY(Pi)),
+ _e_arg(U8G_Sc, UNI_ENTRY(Sc)),
+ _e_arg(U8G_Zl, UNI_ENTRY(Zl)),
+ _e_arg(U8G_Zp, UNI_ENTRY(Zp)),
+ _e_arg(U8G_Zs, UNI_ENTRY(Zs)),
+ _e_arg(U8G_Arabic, UNI_ENTRY(Arabic)),
+ _e_arg(U8G_Cyrillic, UNI_ENTRY(Cyrillic)),
+ _e_arg(U8G_Devanagari, UNI_ENTRY(Devanagari)),
+ _e_arg(U8G_Greek, UNI_ENTRY(Greek)),
+ _e_arg(U8G_Han, UNI_ENTRY(Han)),
+ _e_arg(U8G_Latin, UNI_ENTRY(Latin)),
};
#endif