ref: 7d4b995df2c1de9fd13d81b6048b4e8da4ccd7df
parent: 01ab075930d390e24321c78cac95930d0a618dd5
author: Ali Gholami Rudi <ali@rudi.ir>
date: Sat Jul 5 14:50:43 EDT 2014
hyph: read hcode mappings from the third argument of .hpf The .hpf and .hpfa requests read the hyphenation character mappings from the address specified as their third arguments. Now the three arguments of these requests correspond to files whose names end with .pat.txt, .hyp.txt and .chr.txt in ftp://ftp.ctan.org/tex-archive/language/hyph-utf8/tex/generic/hyph-utf8/patterns/txt/
--- a/hyph.c
+++ b/hyph.c
@@ -172,22 +172,25 @@
d[di] = '\0';
}
+void hcode_add(char *c1, char *c2)
+{
+ int i = dict_get(&hcodedict, c1);
+ if (i >= 0) {
+ strcpy(hcodedst[i], c2);
+ } else if (hcode_n < NHCODES) {
+ strcpy(hcodesrc[hcode_n], c1);
+ strcpy(hcodedst[hcode_n], c2);
+ dict_put(&hcodedict, hcodesrc[hcode_n], hcode_n);
+ hcode_n++;
+ }
+}
+
void tr_hcode(char **args)
{
char c1[GNLEN], c2[GNLEN];
char *s = args[1];
- int i;
- while (s && charread(&s, c1) >= 0 && charread(&s, c2) >= 0) {
- i = dict_get(&hcodedict, c1);
- if (i >= 0) {
- strcpy(hcodedst[i], c2);
- } else if (hcode_n < NHCODES) {
- strcpy(hcodesrc[hcode_n], c1);
- strcpy(hcodedst[hcode_n], c2);
- dict_put(&hcodedict, hcodesrc[hcode_n], hcode_n);
- hcode_n++;
- }
- }
+ while (s && utf8read(&s, c1) && utf8read(&s, c2))
+ hcode_add(c1, c2);
}
static void hyph_readpatterns(char *s)
@@ -233,7 +236,7 @@
void tr_hpfa(char **args)
{
- char tok[ILNLEN];
+ char tok[ILNLEN], c1[ILNLEN], c2[ILNLEN];
FILE *filp;
hyinit = 1;
/* load english hyphenation patterns with no arguments */
@@ -242,8 +245,7 @@
hyph_readexceptions(en_exceptions);
}
/* reading patterns */
- if (args[1]) {
- filp = fopen(args[1], "r");
+ if (args[1] && (filp = fopen(args[1], "r"))) {
while (fscanf(filp, "%s", tok) == 1)
if (strlen(tok) < WORDLEN)
hy_add(tok);
@@ -250,13 +252,21 @@
fclose(filp);
}
/* reading exceptions */
- if (args[2]) {
- filp = fopen(args[2], "r");
+ if (args[2] && (filp = fopen(args[2], "r"))) {
while (fscanf(filp, "%s", tok) == 1)
if (strlen(tok) < WORDLEN)
hw_add(tok);
fclose(filp);
}
+ /* reading hcode mappings */
+ if (args[3] && (filp = fopen(args[3], "r"))) {
+ while (fscanf(filp, "%s", tok) == 1) {
+ char *s = tok;
+ if (utf8read(&s, c1) && utf8read(&s, c2))
+ hcode_add(c2, c1); /* inverting */
+ }
+ fclose(filp);
+ }
}
void hyph_init(void)
@@ -276,6 +286,9 @@
hwword_len = 0;
hw_n = 0;
dict_done(&hwdict);
+ /* reseting hcode mappings */
+ hcode_n = 0;
+ dict_done(&hcodedict);
/* reading */
hyph_init();
tr_hpfa(args);