aboutsummaryrefslogtreecommitdiff
path: root/src/base/utf
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/utf')
-rw-r--r--src/base/utf/find.c2
-rw-r--r--src/base/utf/findlast.c2
-rw-r--r--src/base/utf/rules.mk2
-rw-r--r--src/base/utf/vendor/common.c30
-rw-r--r--src/base/utf/vendor/common.h6
-rw-r--r--src/base/utf/vendor/mkrunetype.c18
-rw-r--r--src/base/utf/vendor/mkrunewidth.c21
7 files changed, 50 insertions, 31 deletions
diff --git a/src/base/utf/find.c b/src/base/utf/find.c
index d75feb8..b9c0ed8 100644
--- a/src/base/utf/find.c
+++ b/src/base/utf/find.c
@@ -8,7 +8,7 @@ utf8·find(byte* s, rune c)
int n;
if(c < Tx)
- return strchr(s, c);
+ return str·findc(s, c);
for(;;){
c1 = *(ubyte*)s;
diff --git a/src/base/utf/findlast.c b/src/base/utf/findlast.c
index ab25ab2..ccdb461 100644
--- a/src/base/utf/findlast.c
+++ b/src/base/utf/findlast.c
@@ -8,7 +8,7 @@ utf8·findlast(byte* s, rune c)
byte *l;
if(c < Tx)
- return strrchr(s, c);
+ return str·rfindc(s, c);
l = nil;
for(;;){
diff --git a/src/base/utf/rules.mk b/src/base/utf/rules.mk
index 554ba6a..0ed2f8b 100644
--- a/src/base/utf/rules.mk
+++ b/src/base/utf/rules.mk
@@ -19,7 +19,6 @@ SRCS_$(d)+=\
NEED_OBJS=\
$(OBJ_DIR)/base/arg.o\
$(OBJ_DIR)/base/utf/decode.o\
- $(OBJ_DIR)/base/error/panicf.o\
$(OBJ_DIR)/base/io/readline.o\
$(OBJ_DIR)/base/io/readuntil.o\
$(OBJ_DIR)/base/io/open.o\
@@ -28,6 +27,7 @@ NEED_OBJS=\
$(OBJ_DIR)/base/io/init.o\
$(OBJ_DIR)/base/mem/move.o\
$(OBJ_DIR)/base/mem/findc.o\
+ $(OBJ_DIR)/base/io/readline.o\
$(d)/utf/vendor/common.o
$(d)/utf/vendor/common.o: $(d)/utf/vendor/common.c
diff --git a/src/base/utf/vendor/common.c b/src/base/utf/vendor/common.c
index c35d022..37ccca3 100644
--- a/src/base/utf/vendor/common.c
+++ b/src/base/utf/vendor/common.c
@@ -1,5 +1,19 @@
#include "common.h"
+int
+fatal(char *fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+
+ fprintf(stderr,"panic: ");
+ vfprintf(stderr, fmt, args);
+ fprintf(stderr,"\n");
+
+ va_end(args);
+ rt·exit(1);
+}
+
// -----------------------------------------------------------------------
// input functions
@@ -29,7 +43,7 @@ parse(io·Buffer *io, int nfield, char field[][FieldLen])
strcpy(field[n++], b);
if(n != nfield)
- panicf("expected %d number of fields, got %d: %s", nfield, n, b);
+ fatal("expected %d number of fields, got %d: %s", nfield, n, b);
return ParseOK;
}
@@ -47,7 +61,7 @@ codepoint(char *s)
else if(b >= 'A' && b <= 'F')
c += b - 'A' + 10;
else
- panicf("bad codepoint char '%c'", b);
+ fatal("bad codepoint char '%c'", b);
}
return c;
@@ -64,23 +78,23 @@ codepointrange(io·Buffer *utf8, char field[NumFields][FieldLen], int *start, i
c = codepoint(field[Fcode]);
if(c >= NumRunes)
- panicf("unexpected large codepoint %x", c);
+ fatal("unexpected large codepoint %x", c);
if(c <= e)
- panicf("bad code sequence: %x then %x", e, c);
+ fatal("bad code sequence: %x then %x", e, c);
e = c;
if(strstr(field[Fname], ", First>") != nil){
if(!parse(utf8, arrlen(other), other))
- panicf("range start at end of file");
+ fatal("range start at end of file");
if(strstr(other[Fname], ", Last>") == nil)
- panicf("range start not followed by range end");
+ fatal("range start not followed by range end");
e = codepoint(other[Fcode]);
if(e <= c)
- panicf("bad code sequence: %x then %x", c, e);
+ fatal("bad code sequence: %x then %x", c, e);
if(strcmp(field[Fcategory], other[Fcategory]) != 0)
- panicf("range with mismatched category");
+ fatal("range with mismatched category");
}
*start = c;
diff --git a/src/base/utf/vendor/common.h b/src/base/utf/vendor/common.h
index 95d7eaf..566fe68 100644
--- a/src/base/utf/vendor/common.h
+++ b/src/base/utf/vendor/common.h
@@ -3,6 +3,10 @@
#include <u.h>
#include <base.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+
enum
{
// Fields inside UnicodeData.txt
@@ -44,3 +48,5 @@ void putsearch(void);
int putrange(char *ident, char *prop, int force);
int putpair(char *ident, char *prop);
int putsingle(char *ident, char *prop);
+
+int fatal(char *fmt, ...);
diff --git a/src/base/utf/vendor/mkrunetype.c b/src/base/utf/vendor/mkrunetype.c
index 3d75ce8..dd6e2c7 100644
--- a/src/base/utf/vendor/mkrunetype.c
+++ b/src/base/utf/vendor/mkrunetype.c
@@ -39,7 +39,7 @@ isrange(char *label, char *prop, int force)
{
char ident[128];
if(snprintf(ident, arrlen(ident), "is%s_range", label) == arrlen(ident))
- panicf("out of identifier space\n");
+ fatal("out of identifier space\n");
return putrange(ident, prop, force);
}
@@ -49,7 +49,7 @@ ispair(char *label, char *prop)
{
char ident[128];
if(snprintf(ident, arrlen(ident), "is%s_pair", label) == arrlen(ident))
- panicf("out of identifier space\n");
+ fatal("out of identifier space\n");
return putpair(ident, prop);
}
@@ -59,7 +59,7 @@ issingle(char *label, char *prop)
{
char ident[128];
if(snprintf(ident, arrlen(ident), "is%s_single", label) == arrlen(ident))
- panicf("out of identifier space\n");
+ fatal("out of identifier space\n");
return putsingle(ident, prop);
}
@@ -125,7 +125,7 @@ torange(char *label, int *index, int force)
d = DELTA(index[l], l);
if(d != (rune)d)
- panicf("bad map delta %d", d);
+ fatal("bad map delta %d", d);
for(r = l+1; r < NumRunes; r++){
if(DELTA(index[r], r) != d)
@@ -162,7 +162,7 @@ topair(char *label, int *index)
d = DELTA(index[l], l);
if(d != (rune)d)
- panicf("bad delta %d", d);
+ fatal("bad delta %d", d);
for(r = l+2; r < NumRunes; r += 2){
if(DELTA(index[r], r) != d)
@@ -198,7 +198,7 @@ tosingle(char *label, int *index)
d = DELTA(index[i], i);
if(d != (rune)d)
- panicf("bad map delta %d", d);
+ fatal("bad map delta %d", d);
if(!start){
printf("static rune to%s_single[] = {\n", label);
@@ -268,7 +268,7 @@ static void
usage(void)
{
fprintf(stderr, "usage: mkrunetype <UnicodeData.txt>\n");
- exit(1);
+ rt·exit(1);
}
int
@@ -285,7 +285,7 @@ main(int argc, char *argv[])
usage();
if((err=io·open(argv[0], sys·ORead, &utf8)))
- panicf("can't open %s: %d: %s\n", argv[0], err, strerror(err));
+ fatal("can't open %s: %d: %s\n", argv[0], err, strerror(err));
/* by default each character maps to itself */
for(i = 0; i < NumRunes; i++) {
@@ -350,7 +350,7 @@ main(int argc, char *argv[])
break;
default: badproperty:
- panicf("unrecognized category '%s'", prop);
+ fatal("unrecognized category '%s'", prop);
}
/* grab transformations */
if(*field[Fupper])
diff --git a/src/base/utf/vendor/mkrunewidth.c b/src/base/utf/vendor/mkrunewidth.c
index c911b66..7025744 100644
--- a/src/base/utf/vendor/mkrunewidth.c
+++ b/src/base/utf/vendor/mkrunewidth.c
@@ -38,7 +38,7 @@ parse_category(char *path)
char *prop, field[NumFields][FieldLen];
if(io·open(path, sys·ORead, &utf8))
- panicf("can't open %s\n", path);
+ fatal("can't open %s\n", path);
// NOTE: we don't check for comments here
ec = -1;
@@ -111,7 +111,7 @@ parse_eawidths(char *path)
char field[2][FieldLen];
if(io·open(path, sys·ORead, &utf8))
- panicf("can't open %s\n", path);
+ fatal("can't open %s\n", path);
while((at=parse(&utf8, arrlen(field), field)) != ParseEOF){
if(at == ParseSkip)
@@ -129,7 +129,7 @@ parse_eawidths(char *path)
case 'F': w = 2; break;
default:
- panicf("malformed east asian width class: %s\n", field[1]);
+ fatal("malformed east asian width class: %s\n", field[1]);
}
coderange(field[0], &l, &r);
@@ -153,7 +153,7 @@ parse_emoji(char *path)
char *s, field[2][FieldLen];
if(io·open(path, sys·ORead, &utf8))
- panicf("can't open %s\n", path);
+ fatal("can't open %s\n", path);
while((at=parse(&utf8, arrlen(field), field)) != ParseEOF){
if(at == ParseSkip)
@@ -198,17 +198,17 @@ maketable(char *label, char *table, int pairs, int onlyranges)
/* ranges */
if(snprintf(ident[Irange], arrlen(ident[Irange]), "%s_range", label) == arrlen(ident[Irange]))
- panicf("out of identifier space\n");
+ fatal("out of identifier space\n");
r = putrange(ident[Irange], table, onlyranges);
if(!onlyranges && pairs){
if(snprintf(ident[Ipair], arrlen(ident[Ipair]), "%s_pair", label) == arrlen(ident[Ipair]))
- panicf("out of identifier space\n");
+ fatal("out of identifier space\n");
p = putpair(ident[Ipair], table);
}
if(!onlyranges){
if(snprintf(ident[Isingle], arrlen(ident[Isingle]), "%s_single", label) == arrlen(ident[Isingle]))
- panicf("out of identifier space\n");
+ fatal("out of identifier space\n");
s = putsingle(ident[Isingle], table);
}
@@ -253,12 +253,11 @@ maketable(char *label, char *table, int pairs, int onlyranges)
// -----------------------------------------------------------------------
// main point of entry
-static
-void
+static void
usage(void)
{
fprintf(stderr, "usage: mkrunewidth <UnicodeData.txt> <EastAsianWidth.txt> <EmojiData.txt>\n");
- exit(1);
+ rt·exit(1);
}
#define SETW0(c) \
@@ -301,7 +300,7 @@ main(int argc, char *argv[])
/* simple checking */
for(c=0; c<NumRunes; c++){
if(table.width[0][c] + table.width[1][c] + table.width[2][c] > 1)
- panicf("improper table state");
+ fatal("improper table state");
}
putsearch();