ref: 63eb975ed2b11a64eef00161984643bb3271548d
parent: fad7630769d6732aaae116114a17084e8f4d6d52
author: Ali Gholami Rudi <ali@rudi.ir>
date: Thu Jul 3 10:38:26 EDT 2014
hyph: move the .hcode mapping to hcode_strcpy()
--- a/hyph.c
+++ b/hyph.c
@@ -7,7 +7,7 @@
#define HYPATLEN (NHYPHS * 16) /* hyphenation pattern length */
-static int hcode_mapchar(char *s);
+static void hcode_strcpy(char *d, char *s, int *map, int dots);
/* the hyphenation dictionary (.hw) */
@@ -15,12 +15,9 @@
static char hwhyph[HYPATLEN]; /* buffer for .hw hyphenations */
static int hwword_len; /* used hwword[] length */
static struct dict hwdict; /* map words to their index in hwoff[] */
-static int hwoff[NHYPHS]; /* the offset of this word in hwword[] */
-static int hwlen[NHYPHS]; /* the length of the word */
-static int hw_n; /* number of words in hw_*[] lists */
+static int hwoff[NHYPHS]; /* the offset of words in hwword[] */
+static int hw_n; /* the number of dictionary words */
-/* functions for the hyphenation dictionary */
-
static void hw_add(char *word)
{
char *s = word;
@@ -38,24 +35,9 @@
*d++ = '\0';
hwoff[i] = hwword_len;
hwword_len = d - hwword;
- hwlen[i] = hwword_len - hwoff[i] - 1;
dict_put(&hwdict, hwword + hwoff[i], i);
}
-/* copy s to d after .hcode mappings; s[map[j]] corresponds to d[j] */
-static void hw_strcpy(char *d, char *s, int *map)
-{
- int di = 0, si = 0, len;
- while (s[si]) {
- len = utf8len((unsigned char) s[si]);
- map[di] = si;
- memcpy(d + di, s + si, len);
- si += len;
- di += hcode_mapchar(d + di);
- }
- d[di] = '\0';
-}
-
static int hw_lookup(char *word, char *hyph)
{
char word2[WORDLEN] = {0};
@@ -62,7 +44,7 @@
char *hyph2;
int map[WORDLEN] = {0};
int i, j, idx = -1;
- hw_strcpy(word2, word, map);
+ hcode_strcpy(word2, word, map, 0);
i = dict_prefix(&hwdict, word2, &idx);
if (i < 0)
return 1;
@@ -83,29 +65,13 @@
/* the tex hyphenation algorithm */
static int hyinit; /* hyphenation data initialized */
-static char hypats[HYPATLEN]; /* the patterns */
-static char hynums[HYPATLEN]; /* numbers in the patterns */
-static int hypats_len;
+static char hypats[HYPATLEN]; /* hyphenation patterns */
+static char hynums[HYPATLEN]; /* hyphenation pattern numbers */
+static int hypats_len; /* used hypats[] and hynums[] length */
static struct dict hydict; /* map patterns to their index in hyoff[] */
static int hyoff[NHYPHS]; /* the offset of this pattern in hypats[] */
-static int hy_n; /* number of words in hy_*[] lists */
+static int hy_n; /* the number of patterns */
-/* copy s to d after .hcode mappings; s[map[j]] corresponds to d[j] */
-static void hy_strcpy(char *d, char *s, int *map)
-{
- int di = 0, si = 0, len;
- d[di++] = '.';
- while (s[si]) {
- len = utf8len((unsigned char) s[si]);
- map[di] = si;
- memcpy(d + di, s + si, len);
- si += len;
- di += hcode_mapchar(d + di);
- }
- d[di++] = '.';
- d[di] = '\0';
-}
-
/* find the patterns matching s and update hyphenation values in n */
static void hy_find(char *s, char *n)
{
@@ -132,7 +98,7 @@
int wmap[WORDLEN] = {0}; /* word[wmap[i]] is w[i] */
int nc = 0;
int i, wlen;
- hy_strcpy(w, word, wmap);
+ hcode_strcpy(w, word, wmap, 1);
wlen = strlen(w);
for (i = 0; i < wlen - 1; i += utf8len((unsigned int) w[i]))
c[nc++] = i;
@@ -181,6 +147,24 @@
else if (isalpha((unsigned char) *s))
*s = tolower(*s);
return strlen(s);
+}
+
+/* copy s to d after .hcode mappings; s[map[j]] corresponds to d[j] */
+static void hcode_strcpy(char *d, char *s, int *map, int dots)
+{
+ int di = 0, si = 0, len;
+ if (dots)
+ d[di++] = '.';
+ while (s[si]) {
+ len = utf8len((unsigned char) s[si]);
+ map[di] = si;
+ memcpy(d + di, s + si, len);
+ si += len;
+ di += hcode_mapchar(d + di);
+ }
+ if (dots)
+ d[di++] = '.';
+ d[di] = '\0';
}
void tr_hcode(char **args)