diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/cregex.c | 126 | ||||
| -rw-r--r-- | src/libstc.c | 9 | ||||
| -rw-r--r-- | src/singleheader.py | 18 | ||||
| -rw-r--r-- | src/singleupdate.sh | 57 | ||||
| -rw-r--r-- | src/utf8code.c | 52 |
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 |
