ref: c7335fa3839ccd92314cfbcba7aee40af1583987
parent: 60bde0ada44a1542b487ff98711c8d19a8c2a880
author: Tor Andersson <tor@ccxvii.net>
date: Tue Feb 11 11:54:17 EST 2014
Prune unused UTF-8 and rune string functions.
--- a/utf.c
+++ b/utf.c
@@ -46,7 +46,7 @@
chartorune(Rune *rune, const char *str)
{
int c, c1, c2;
- long l;
+ int l;
/*
* one character sequence
@@ -101,7 +101,7 @@
int
runetochar(char *str, const Rune *rune)
{
- long c;
+ int c;
/*
* one character sequence
@@ -134,7 +134,7 @@
}
int
-runelen(long c)
+runelen(int c)
{
Rune rune;
char str[10];
@@ -144,243 +144,10 @@
}
int
-runenlen(const Rune *r, int nrune)
-{
- int nb, c;
-
- nb = 0;
- while(nrune--) {
- c = *r++;
- if(c <= Rune1)
- nb++;
- else
- if(c <= Rune2)
- nb += 2;
- else
- nb += 3;
- }
- return nb;
-}
-
-int
-fullrune(const char *str, int n)
-{
- int c;
-
- if(n > 0) {
- c = *(uchar*)str;
- if(c < Tx)
- return 1;
- if(n > 1)
- if(c < T3 || n > 2)
- return 1;
- }
- return 0;
-}
-
-Rune*
-runestrcat(Rune *s1, const Rune *s2)
-{
- runestrcpy(runestrchr(s1, 0), s2);
- return s1;
-}
-
-Rune*
-runestrchr(const Rune *s, Rune c)
-{
- Rune c0 = c;
- Rune c1;
-
- if(c == 0) {
- while(*s++)
- ;
- return (Rune*) s-1;
- }
-
- while((c1 = *s++))
- if(c1 == c0)
- return (Rune*) s-1;
- return 0;
-}
-
-int
-runestrcmp(const Rune *s1, const Rune *s2)
-{
- Rune c1, c2;
-
- for(;;) {
- c1 = *s1++;
- c2 = *s2++;
- if(c1 != c2) {
- if(c1 > c2)
- return 1;
- return -1;
- }
- if(c1 == 0)
- return 0;
- }
-}
-
-Rune*
-runestrcpy(Rune *s1, const Rune *s2)
-{
- Rune *os1;
-
- os1 = s1;
- while((*s1++ = *s2++))
- ;
- return os1;
-}
-
-Rune*
-runestrdup(const Rune *s)
-{
- Rune *ns;
-
- ns = malloc(sizeof(Rune)*(runestrlen(s) + 1));
- if(ns == 0)
- return 0;
-
- return runestrcpy(ns, s);
-}
-
-Rune*
-runestrecpy(Rune *s1, Rune *es1, const Rune *s2)
-{
- if(s1 >= es1)
- return s1;
-
- while((*s1++ = *s2++)){
- if(s1 == es1){
- *--s1 = '\0';
- break;
- }
- }
- return s1;
-}
-
-long
-runestrlen(const Rune *s)
-{
-
- return runestrchr(s, 0) - s;
-}
-
-Rune*
-runestrncat(Rune *s1, const Rune *s2, long n)
-{
- Rune *os1;
-
- os1 = s1;
- s1 = runestrchr(s1, 0);
- while((*s1++ = *s2++))
- if(--n < 0) {
- s1[-1] = 0;
- break;
- }
- return os1;
-}
-
-int
-runestrncmp(const Rune *s1, const Rune *s2, long n)
-{
- Rune c1, c2;
-
- while(n > 0) {
- c1 = *s1++;
- c2 = *s2++;
- n--;
- if(c1 != c2) {
- if(c1 > c2)
- return 1;
- return -1;
- }
- if(c1 == 0)
- break;
- }
- return 0;
-}
-
-Rune*
-runestrncpy(Rune *s1, const Rune *s2, long n)
-{
- int i;
- Rune *os1;
-
- os1 = s1;
- for(i = 0; i < n; i++)
- if((*s1++ = *s2++) == 0) {
- while(++i < n)
- *s1++ = 0;
- return os1;
- }
- return os1;
-}
-
-Rune*
-runestrrchr(const Rune *s, Rune c)
-{
- Rune *r;
-
- if(c == 0)
- return runestrchr(s, 0);
- r = 0;
- while((s = runestrchr(s, c)))
- r = (Rune*) s++;
- return r;
-}
-
-/*
- * Return pointer to first occurrence of s2 in s1,
- * 0 if none
- */
-Rune*
-runestrstr(const Rune *s1, const Rune *s2)
-{
- const Rune *p, *pa, *pb;
- int c0, c;
-
- c0 = *s2;
- if(c0 == 0)
- return (Rune*) s1;
- s2++;
- for(p=runestrchr(s1, c0); p; p=runestrchr(p+1, c0)) {
- pa = p;
- for(pb=s2;; pb++) {
- c = *pb;
- if(c == 0)
- return (Rune*) p;
- if(c != *++pa)
- break;
- }
- }
- return 0;
-}
-
-char*
-utfecpy(char *to, char *e, const char *from)
-{
- char *end;
-
- if(to >= e)
- return to;
- end = memccpy(to, from, '\0', e - to);
- if(end == 0){
- end = e-1;
- while(end>to && (*--end&0xC0)==0x80)
- ;
- *end = '\0';
- }else{
- end--;
- }
- return end;
-}
-
-int
utflen(const char *s)
{
int c;
- long n;
+ int n;
Rune rune;
n = 0;
@@ -394,106 +161,4 @@
s += chartorune(&rune, s);
n++;
}
-}
-
-int
-utfnlen(const char *s, long m)
-{
- int c;
- long n;
- Rune rune;
- const char *es;
-
- es = s + m;
- for(n = 0; s < es; n++) {
- c = *(uchar*)s;
- if(c < Runeself){
- if(c == '\0')
- break;
- s++;
- continue;
- }
- if(!fullrune(s, es-s))
- break;
- s += chartorune(&rune, s);
- }
- return n;
-}
-
-char*
-utfrrune(const char *s, long c)
-{
- long c1;
- Rune r;
- const char *s1;
-
- if(c < Runesync) /* not part of utf sequence */
- return strrchr(s, c);
-
- s1 = 0;
- for(;;) {
- c1 = *(uchar*)s;
- if(c1 < Runeself) { /* one byte rune */
- if(c1 == 0)
- return (char*) s1;
- if(c1 == c)
- s1 = s;
- s++;
- continue;
- }
- c1 = chartorune(&r, s);
- if(r == c)
- s1 = s;
- s += c1;
- }
-}
-
-char*
-utfrune(const char *s, long c)
-{
- long c1;
- Rune r;
- int n;
-
- if(c < Runesync) /* not part of utf sequence */
- return strchr(s, c);
-
- for(;;) {
- c1 = *(uchar*)s;
- if(c1 < Runeself) { /* one byte rune */
- if(c1 == 0)
- return 0;
- if(c1 == c)
- return (char*) s;
- s++;
- continue;
- }
- n = chartorune(&r, s);
- if(r == c)
- return (char*) s;
- s += n;
- }
-}
-
-/*
- * Return pointer to first occurrence of s2 in s1,
- * 0 if none
- */
-char*
-utfutf(const char *s1, const char *s2)
-{
- const char *p;
- long f, n1, n2;
- Rune r;
-
- n1 = chartorune(&r, s2);
- f = r;
- if(f <= Runesync) /* represents self */
- return strstr(s1, s2);
-
- n2 = strlen(s2);
- for(p=s1; (p=utfrune(p, f)); p+=n1)
- if(strncmp(p, s2, n2) == 0)
- return (char*) p;
- return 0;
}
--- a/utf.h
+++ b/utf.h
@@ -4,36 +4,18 @@
typedef unsigned short Rune; /* 16 bits */
#define chartorune jsU_chartorune
-#define fullrune jsU_fullrune
+#define runetochar jsU_runetochar
+#define runelen jsU_runelen
+#define utflen jsU_utflen
+
#define isalpharune jsU_isalpharune
#define islowerrune jsU_islowerrune
#define isspacerune jsU_isspacerune
#define istitlerune jsU_istitlerune
#define isupperrune jsU_isupperrune
-#define runelen jsU_runelen
-#define runenlen jsU_runenlen
-#define runestrcat jsU_runestrcat
-#define runestrchr jsU_runestrchr
-#define runestrcmp jsU_runestrcmp
-#define runestrcpy jsU_runestrcpy
-#define runestrdup jsU_runestrdup
-#define runestrecpy jsU_runestrecpy
-#define runestrlen jsU_runestrlen
-#define runestrncat jsU_runestrncat
-#define runestrncmp jsU_runestrncmp
-#define runestrncpy jsU_runestrncpy
-#define runestrrchr jsU_runestrrchr
-#define runestrstr jsU_runestrstr
-#define runetochar jsU_runetochar
#define tolowerrune jsU_tolowerrune
#define totitlerune jsU_totitlerune
#define toupperrune jsU_toupperrune
-#define utfecpy jsU_utfecpy
-#define utflen jsU_utflen
-#define utfnlen jsU_utfnlen
-#define utfrrune jsU_utfrrune
-#define utfrune jsU_utfrune
-#define utfutf jsU_utfutf
enum
{
@@ -44,35 +26,17 @@
};
int chartorune(Rune *rune, const char *str);
-int fullrune(const char *str, int n);
+int runetochar(char *str, const Rune *rune);
+int runelen(int c);
+int utflen(const char *s);
+
int isalpharune(Rune c);
int islowerrune(Rune c);
int isspacerune(Rune c);
int istitlerune(Rune c);
int isupperrune(Rune c);
-int runelen(long c);
-int runenlen(const Rune *r, int nrune);
-Rune* runestrcat(Rune *s1, const Rune *s2);
-Rune* runestrchr(const Rune *s, Rune c);
-int runestrcmp(const Rune *s1, const Rune *s2);
-Rune* runestrcpy(Rune *s1, const Rune *s2);
-Rune* runestrdup(const Rune *s) ;
-Rune* runestrecpy(Rune *s1, Rune *es1, const Rune *s2);
-long runestrlen(const Rune *s);
-Rune* runestrncat(Rune *s1, const Rune *s2, long n);
-int runestrncmp(const Rune *s1, const Rune *s2, long n);
-Rune* runestrncpy(Rune *s1, const Rune *s2, long n);
-Rune* runestrrchr(const Rune *s, Rune c);
-Rune* runestrstr(const Rune *s1, const Rune *s2);
-int runetochar(char *str, const Rune *rune);
Rune tolowerrune(Rune c);
Rune totitlerune(Rune c);
Rune toupperrune(Rune c);
-char* utfecpy(char *to, char *e, const char *from);
-int utflen(const char *s);
-int utfnlen(const char *s, long m);
-char* utfrrune(const char *s, long c);
-char* utfrune(const char *s, long c);
-char* utfutf(const char *s1, const char *s2);
#endif