8#define unless(C) if(!(C))
57 if (b >= 0xC0 || b < 0x80)
96 if (b0 < 0xC0 || c == l)
102 if (b0 < 0xE0 || c == l)
104 *slot = (b0 & 0x1F) << 6 | (b1 & 0x3F);
107 *slot = (b0 & 0xF) << 12 | (b1 & 0x3F) << 6 | (p[c] & 0x3F);
118 if (b0 < 0x80 || c == lb)
124 if (b1 >= 0xC0 || c == lb)
126 *slot = (b1 & 0x1F) << 6 | (b0 & 0x3F);
129 *slot = (p[c] & 0xF) << 12 | (b1 & 0x3F) << 6 | (b0 & 0x3F);
142 if (ch > max || (ch -= min) < 0
143 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)
160 if (ch > max || (ch -= min) < 0
161 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)
178 unless (ch > max || (ch -= min) < 0
179 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)
return w;
195 unless (ch > max || (ch -= min) < 0
196 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)
return w;
215 if (ch > max || (ch -= min) < 0
216 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)
234 if (ch > max || (ch -= min) < 0
235 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)
253 unless (ch > max || (ch -= min) < 0
254 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)
return 1;
271 unless (ch > max || (ch -= min) < 0
272 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)
return 1;
282 if (z->
l - z->
c < s_size
283 || memcmp (z->
p + z->
c, s, s_size * sizeof (
symbol)) != 0)
292 if (z->
c - z->
lb < s_size
293 || memcmp (z->
p + z->
c - s_size, s, s_size * sizeof (
symbol)) != 0)
322 const struct among *w;
327 int first_key_inspected = 0;
331 int k = i + ((j - i) >> 1);
333 int common = common_i < common_j ? common_i : common_j;
337 for (i2 = common; i2 < w->
s_size; i2++)
344 diff = q[common] - w->
s[i2];
371 if (first_key_inspected)
373 first_key_inspected = 1;
379 if (common_i >= w->
s_size)
410 const struct among *w;
415 int first_key_inspected = 0;
419 int k = i + ((j - i) >> 1);
421 int common = common_i < common_j ? common_i : common_j;
425 for (i2 = w->
s_size - 1 - common; i2 >= 0; i2--)
427 if (c - common == lb)
432 diff = q[-common] - w->
s[i2];
454 if (first_key_inspected)
456 first_key_inspected = 1;
462 if (common_i >= w->
s_size)
488 int new_size = n + 20;
489 void *mem = realloc ((
char *) p -
HEAD,
518 adjustment =
s_size - (c_ket - c_bra);
528 memmove (z->
p + c_ket + adjustment,
529 z->
p + c_ket, (len - c_ket) * sizeof (
symbol));
534 else if (z->
c > c_bra)
539 *adjptr = adjustment;
550 fprintf (stderr,
"faulty slice operation:\n");
585 z->
bra += adjustment;
587 z->
ket += adjustment;
598 z->
bra += adjustment;
600 z->
ket += adjustment;
613 int len = z->
ket - z->
bra;
620 memmove (p, z->
p + z->
bra, len * sizeof (
symbol));
636 memmove (p, z->
p, len * sizeof (
symbol));
643debug (
struct SN_env *z,
int number,
int line_count)
646 int limit =
SIZE (z->
p);
649 printf (
"%3d (line %4d): [%d]'", number, line_count, limit);
650 for (i = 0; i <= limit; i++)
int(* function)(struct SN_env *)
int insert_v(struct SN_env *z, int bra, int ket, const symbol *p)
int find_among_b(struct SN_env *z, const struct among *v, int v_size)
int out_grouping_U(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
int insert_s(struct SN_env *z, int bra, int ket, int s_size, const symbol *s)
static int slice_check(struct SN_env *z)
int slice_del(struct SN_env *z)
int in_grouping_U(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
int eq_v_b(struct SN_env *z, const symbol *p)
int in_grouping(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
int eq_s(struct SN_env *z, int s_size, const symbol *s)
int replace_s(struct SN_env *z, int c_bra, int c_ket, int s_size, const symbol *s, int *adjptr)
int eq_v(struct SN_env *z, const symbol *p)
static int get_utf8(const symbol *p, int c, int l, int *slot)
int out_grouping_b(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
int skip_utf8(const symbol *p, int c, int lb, int l, int n)
int in_grouping_b_U(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
int eq_s_b(struct SN_env *z, int s_size, const symbol *s)
int out_grouping(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
int out_grouping_b_U(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
symbol * slice_to(struct SN_env *z, symbol *p)
int slice_from_v(struct SN_env *z, const symbol *p)
int find_among(struct SN_env *z, const struct among *v, int v_size)
int slice_from_s(struct SN_env *z, int s_size, const symbol *s)
int in_grouping_b(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
symbol * assign_to(struct SN_env *z, symbol *p)
static int get_b_utf8(const symbol *p, int c, int lb, int *slot)
static symbol * increase_size(symbol *p, int n)