123885Sjaap #ifndef lint
2*23907Sjaap static char sccsid[] = "@(#)n8.c	2.1 (CWI) 85/07/18";
323885Sjaap #endif lint
423885Sjaap #include	<ctype.h>
523885Sjaap #include	"tdef.h"
6*23907Sjaap #include <sgtty.h>
7*23907Sjaap #include "ext.h"
823885Sjaap #define	HY_BIT	0200	/* stuff in here only works for ascii */
923885Sjaap 
1023885Sjaap /*
11*23907Sjaap  * troff8.c
12*23907Sjaap  *
13*23907Sjaap  * hyphenation
14*23907Sjaap  */
1523885Sjaap 
1623885Sjaap char	hbuf[NHEX];
1723885Sjaap char	*nexth = hbuf;
18*23907Sjaap tchar	*hyend;
1923885Sjaap 
hyphen(wp)2023885Sjaap hyphen(wp)
2123885Sjaap 	tchar *wp;
2223885Sjaap {
2323885Sjaap 	register j;
2423885Sjaap 	register tchar *i;
2523885Sjaap 
2623885Sjaap 	i = wp;
2723885Sjaap 	while (punct(cbits(*i++)))
2823885Sjaap 		;
2923885Sjaap 	if (!alph(cbits(*--i)))
3023885Sjaap 		return;
3123885Sjaap 	wdstart = i++;
3223885Sjaap 	while (alph(cbits(*i++)))
3323885Sjaap 		;
3423885Sjaap 	hyend = wdend = --i - 1;
3523885Sjaap 	while (punct(cbits(*i++)))
3623885Sjaap 		;
3723885Sjaap 	if (*--i)
3823885Sjaap 		return;
3923885Sjaap 	if ((wdend - wdstart - 4) < 0)
4023885Sjaap 		return;
4123885Sjaap 	hyp = hyptr;
4223885Sjaap 	*hyp = 0;
4323885Sjaap 	hyoff = 2;
4423885Sjaap /*
4523885Sjaap 	if (!exword() && !suffix())
4623885Sjaap 		digram();
4723885Sjaap */
4823885Sjaap 	if (!exword()) {
4923885Sjaap 		if (hyalg == ORIGINAL && !suffix())
5023885Sjaap 			digram();
5123885Sjaap 		if (hyalg == DUTCH)
5223885Sjaap 			split(wdstart, wdend);
5323885Sjaap 	}
5423885Sjaap 	*hyp++ = 0;
5523885Sjaap 	if (*hyptr)
5623885Sjaap 		for (j = 1; j; ) {
5723885Sjaap 			j = 0;
5823885Sjaap 			for (hyp = hyptr + 1; *hyp != 0; hyp++) {
5923885Sjaap 				if (*(hyp - 1) > *hyp) {
6023885Sjaap 					j++;
6123885Sjaap 					i = *hyp;
6223885Sjaap 					*hyp = *(hyp - 1);
6323885Sjaap 					*(hyp - 1) = i;
6423885Sjaap 				}
6523885Sjaap 			}
6623885Sjaap 		}
6723885Sjaap }
6823885Sjaap 
6923885Sjaap 
punct(i)7023885Sjaap punct(i)
7123885Sjaap {
7223885Sjaap 	if (!i || alph(i))
7323885Sjaap 		return(0);
7423885Sjaap 	else
7523885Sjaap 		return(1);
7623885Sjaap }
7723885Sjaap 
7823885Sjaap 
alph(i)7923885Sjaap alph(i)
8023885Sjaap {
8123885Sjaap 	if (i >= 'a' && i <= 'z' || i >= 'A' && i <= 'Z')
8223885Sjaap 		return(1);
8323885Sjaap 	else
8423885Sjaap 		return(0);
8523885Sjaap }
8623885Sjaap 
8723885Sjaap /*
8823885Sjaap  * set the hyphenation algorithm
8923885Sjaap  *
9023885Sjaap  * jna
9123885Sjaap  */
9223885Sjaap 
caseha()9323885Sjaap caseha()
9423885Sjaap {	register i;
9523885Sjaap 
9623885Sjaap 	if ( skip())
9723885Sjaap 		i = hyalg1;
9823885Sjaap 	else {
9923885Sjaap 		noscale++;
10023885Sjaap 		noscale = 0;
101*23907Sjaap 		i = max(atoi(), 0);
10223885Sjaap 		if (nonumb)
10323885Sjaap 			return;
10423885Sjaap 		if (i > MAXDIALECTS) {
105*23907Sjaap 			errprint("Unknown dialect %d", i);
10623885Sjaap 			return;
10723885Sjaap 		}
10823885Sjaap 	}
10923885Sjaap 	hyalg1 = hyalg;
11023885Sjaap 	hyalg = i;
11123885Sjaap 	if( hyalg == DUTCH)
11223885Sjaap 		thresh = DUTCH_THRESH;
11323885Sjaap }
11423885Sjaap 
caseht()11523885Sjaap caseht()
11623885Sjaap {
11723885Sjaap 	switch(hyalg) {
11823885Sjaap 		case ORIGINAL:
11923885Sjaap 			thresh = THRESH;
12023885Sjaap 			break;
12123885Sjaap 		case DUTCH:
12223885Sjaap 			thresh = DUTCH_THRESH;
12323885Sjaap 			break;
12423885Sjaap 	}
125*23907Sjaap 	if (skip())
12623885Sjaap 		return;
12723885Sjaap 	noscale++;
128*23907Sjaap 	if (hyalg == DUTCH)
129*23907Sjaap 		thresh = max(atoi(), 1);
13023885Sjaap 	else
13123885Sjaap 		thresh = atoi();
13223885Sjaap 	noscale = 0;
13323885Sjaap }
13423885Sjaap 
13523885Sjaap 
casehw()13623885Sjaap casehw()
13723885Sjaap {
13823885Sjaap 	register i, k;
13923885Sjaap 	register char	*j;
14023885Sjaap 	tchar t;
14123885Sjaap 
14223885Sjaap 	k = 0;
14323885Sjaap 	while (!skip()) {
14423885Sjaap 		if ((j = nexth) >= (hbuf + NHEX - 2))
14523885Sjaap 			goto full;
14623885Sjaap 		for (; ; ) {
14723885Sjaap 			if (ismot(t = getch()))
14823885Sjaap 				continue;
14923885Sjaap 			i = cbits(t);
15023885Sjaap 			if (i == ' ' || i == '\n') {
15123885Sjaap 				*j++ = 0;
15223885Sjaap 				nexth = j;
15323885Sjaap 				*j = 0;
15423885Sjaap 				if (i == ' ')
15523885Sjaap 					break;
15623885Sjaap 				else
15723885Sjaap 					return;
15823885Sjaap 			}
15923885Sjaap 			if (i == '-') {
16023885Sjaap 				k = HY_BIT;
16123885Sjaap 				continue;
16223885Sjaap 			}
16323885Sjaap 			*j++ = maplow(i) | k;
16423885Sjaap 			k = 0;
16523885Sjaap 			if (j >= (hbuf + NHEX - 2))
16623885Sjaap 				goto full;
16723885Sjaap 		}
16823885Sjaap 	}
16923885Sjaap 	return;
17023885Sjaap full:
171*23907Sjaap 	errprint("exception word list full.");
17223885Sjaap 	*nexth = 0;
17323885Sjaap }
17423885Sjaap 
17523885Sjaap 
exword()17623885Sjaap exword()
17723885Sjaap {
17823885Sjaap 	register tchar *w;
17923885Sjaap 	register char	*e;
18023885Sjaap 	char	*save;
18123885Sjaap 
18223885Sjaap 	e = hbuf;
18323885Sjaap 	while (1) {
18423885Sjaap 		save = e;
18523885Sjaap 		if (*e == 0)
18623885Sjaap 			return(0);
18723885Sjaap 		w = wdstart;
18823885Sjaap 		while (*e && w <= hyend && (*e & 0177) == maplow(cbits(*w))) {
18923885Sjaap 			e++;
19023885Sjaap 			w++;
19123885Sjaap 		};
19223885Sjaap 		if (!*e) {
19323885Sjaap 			if (w-1 == hyend ||
19423885Sjaap 			   (hyalg == ORIGINAL /* s-extension only in original */
195*23907Sjaap 				&& (w == wdend && maplow(cbits(*w)) == 's'))) {
19623885Sjaap 				w = wdstart;
19723885Sjaap 				for (e = save; *e; e++) {
19823885Sjaap 					if (*e & HY_BIT)
19923885Sjaap 						*hyp++ = w;
20023885Sjaap 					if (hyp > (hyptr + NHYP - 1))
20123885Sjaap 						hyp = hyptr + NHYP - 1;
20223885Sjaap 					w++;
20323885Sjaap 				}
20423885Sjaap 				return(1);
20523885Sjaap 			} else {
20623885Sjaap 				e++;
20723885Sjaap 				continue;
20823885Sjaap 			}
20923885Sjaap 		} else
21023885Sjaap 			while (*e++)
21123885Sjaap 				;
21223885Sjaap 	}
21323885Sjaap }
21423885Sjaap 
21523885Sjaap 
suffix()21623885Sjaap suffix()
21723885Sjaap {
21823885Sjaap 	register tchar *w;
21923885Sjaap 	register char	*s, *s0;
22023885Sjaap 	tchar i;
22123885Sjaap 	extern char	*suftab[];
22223885Sjaap 	extern tchar *chkvow();
22323885Sjaap 
22423885Sjaap again:
22523885Sjaap 	if (!alph(cbits(i = cbits(*hyend))))
22623885Sjaap 		return(0);
22723885Sjaap 	if (i < 'a')
22823885Sjaap 		i -= 'A' - 'a';
22923885Sjaap 	if ((s0 = suftab[i-'a']) == 0)
23023885Sjaap 		return(0);
23123885Sjaap 	for (; ; ) {
23223885Sjaap 		if ((i = *s0 & 017) == 0)
23323885Sjaap 			return(0);
23423885Sjaap 		s = s0 + i - 1;
23523885Sjaap 		w = hyend - 1;
23623885Sjaap 		while (s > s0 && w >= wdstart && (*s & 0177) == maplow(cbits(*w))) {
23723885Sjaap 			s--;
23823885Sjaap 			w--;
23923885Sjaap 		}
24023885Sjaap 		if (s == s0)
24123885Sjaap 			break;
24223885Sjaap 		s0 += i;
24323885Sjaap 	}
24423885Sjaap 	s = s0 + i - 1;
24523885Sjaap 	w = hyend;
24623885Sjaap 	if (*s0 & HY_BIT)
24723885Sjaap 		goto mark;
24823885Sjaap 	while (s > s0) {
24923885Sjaap 		w--;
25023885Sjaap 		if (*s-- & HY_BIT) {
25123885Sjaap mark:
25223885Sjaap 			hyend = w - 1;
25323885Sjaap 			if (*s0 & 0100)
25423885Sjaap 				continue;
25523885Sjaap 			if (!chkvow(w))
25623885Sjaap 				return(0);
25723885Sjaap 			*hyp++ = w;
25823885Sjaap 		}
25923885Sjaap 	}
26023885Sjaap 	if (*s0 & 040)
26123885Sjaap 		return(0);
26223885Sjaap 	if (exword())
26323885Sjaap 		return(1);
26423885Sjaap 	goto again;
26523885Sjaap }
26623885Sjaap 
26723885Sjaap 
maplow(i)26823885Sjaap maplow(i)
269*23907Sjaap register int	i;
27023885Sjaap {
27123885Sjaap 	if (isupper(i))
27223885Sjaap 		i = tolower(i);
27323885Sjaap 	return(i);
27423885Sjaap }
27523885Sjaap 
27623885Sjaap 
vowel(i)27723885Sjaap vowel(i)
27823885Sjaap int	i;
27923885Sjaap {
28023885Sjaap 	switch (maplow(i)) {
28123885Sjaap 	case 'a':
28223885Sjaap 	case 'e':
28323885Sjaap 	case 'i':
28423885Sjaap 	case 'o':
28523885Sjaap 	case 'u':
28623885Sjaap 	case 'y':
28723885Sjaap 		return(1);
28823885Sjaap 	default:
28923885Sjaap 		return(0);
29023885Sjaap 	}
29123885Sjaap }
29223885Sjaap 
29323885Sjaap 
chkvow(w)29423885Sjaap tchar *chkvow(w)
29523885Sjaap tchar *w;
29623885Sjaap {
29723885Sjaap 	while (--w >= wdstart)
29823885Sjaap 		if (vowel(cbits(*w)))
29923885Sjaap 			return(w);
30023885Sjaap 	return(0);
30123885Sjaap }
30223885Sjaap 
30323885Sjaap 
digram()30423885Sjaap digram()
30523885Sjaap {
30623885Sjaap 	register tchar *w;
30723885Sjaap 	register val;
30823885Sjaap 	tchar * nhyend, *maxw;
30923885Sjaap 	int	maxval;
31023885Sjaap 	extern char	bxh[26][13], bxxh[26][13], xxh[26][13], xhx[26][13], hxx[26][13];
31123885Sjaap 
31223885Sjaap again:
31323885Sjaap 	if (!(w = chkvow(hyend + 1)))
31423885Sjaap 		return;
31523885Sjaap 	hyend = w;
31623885Sjaap 	if (!(w = chkvow(hyend)))
31723885Sjaap 		return;
31823885Sjaap 	nhyend = w;
31923885Sjaap 	maxval = 0;
32023885Sjaap 	w--;
32123885Sjaap 	while ((++w < hyend) && (w < (wdend - 1))) {
32223885Sjaap 		val = 1;
32323885Sjaap 		if (w == wdstart)
32423885Sjaap 			val *= dilook('a', cbits(*w), bxh);
32523885Sjaap 		else if (w == wdstart + 1)
32623885Sjaap 			val *= dilook(cbits(*(w-1)), cbits(*w), bxxh);
32723885Sjaap 		else
32823885Sjaap 			val *= dilook(cbits(*(w-1)), cbits(*w), xxh);
32923885Sjaap 		val *= dilook(cbits(*w), cbits(*(w+1)), xhx);
33023885Sjaap 		val *= dilook(cbits(*(w+1)), cbits(*(w+2)), hxx);
33123885Sjaap 		if (val > maxval) {
33223885Sjaap 			maxval = val;
33323885Sjaap 			maxw = w + 1;
33423885Sjaap 		}
33523885Sjaap 	}
33623885Sjaap 	hyend = nhyend;
33723885Sjaap 	if (maxval > thresh)
33823885Sjaap 		*hyp++ = maxw;
33923885Sjaap 	goto again;
34023885Sjaap }
34123885Sjaap 
34223885Sjaap 
dilook(a,b,t)34323885Sjaap dilook(a, b, t)
34423885Sjaap int	a, b;
34523885Sjaap char	t[26][13];
34623885Sjaap {
34723885Sjaap 	register i, j;
34823885Sjaap 
34923885Sjaap 	i = t[maplow(a)-'a'][(j = maplow(b)-'a')/2];
35023885Sjaap 	if (!(j & 01))
35123885Sjaap 		i >>= 4;
35223885Sjaap 	return(i & 017);
35323885Sjaap }
35423885Sjaap 
35523885Sjaap 
35623885Sjaap /*
35723885Sjaap  * All these jazz is to have the dialect dutch being hyphenated
35823885Sjaap  * It first appeared in the dutch version of troff (nltroff), due to
35923885Sjaap  * teus hagen.
36023885Sjaap  * The original program has converted from Algol60 to C by, I think
36123885Sjaap  * bert ijsselstein.
36223885Sjaap  * It's a mess, anyway.
36323885Sjaap  *
36423885Sjaap  * Planted in this version of troff by jaap akkerhuis (jna).
36523885Sjaap  *
36623885Sjaap  * Note that this is licensed software!
36723885Sjaap  *
36823885Sjaap  */
36923885Sjaap 
37023885Sjaap #ifndef	NULL
37123885Sjaap #define NULL	0
37223885Sjaap #endif
37323885Sjaap #define MAXLETT 50  /* at most the first MAXLETT characters of a word
37423885Sjaap                        will be processed */
37523885Sjaap #define MAXSYLL 20  /* at most the first MAXSYLL syllables of a word
37623885Sjaap 		       will be processed */
37723885Sjaap 
37823885Sjaap #define LETTEREE 27
37923885Sjaap #define LETTERJ 41
38023885Sjaap #define LETTERV 55
38123885Sjaap #define LETTERX 57
38223885Sjaap #define LETTERZ 58
38323885Sjaap 
384*23907Sjaap /*
385*23907Sjaap  * split(..) needs to be cleaned up, could install hjt's version...
386*23907Sjaap  */
387*23907Sjaap 
split(aword,anend)38823885Sjaap split( aword, anend ) register tchar *aword, *anend;
38923885Sjaap {	register tchar *place;
39023885Sjaap 	extern tchar *bestsplit1();
39123885Sjaap 
39223885Sjaap 	place = bestsplit1( aword, anend );
39323885Sjaap 	if( place != (tchar *) NULL )
39423885Sjaap 	{	*hyp++ = place;
39523885Sjaap 		if( place - aword > thresh && anend - place > thresh )
39623885Sjaap 			split( aword, place+1 );
39723885Sjaap 		if( anend - place > thresh && place - aword > thresh )
39823885Sjaap 			split( place, anend );
39923885Sjaap 	}
40023885Sjaap }
40123885Sjaap 
40223885Sjaap tchar *
bestsplit1(tosplit,aend)40323885Sjaap bestsplit1( tosplit , aend )
40423885Sjaap tchar *tosplit, *aend;
40523885Sjaap {
40623885Sjaap /* This function determines the "best" place to split into two parts the
40723885Sjaap  * Dutch word contained in a string of <size> characters which starts at
40823885Sjaap  * the address <tosplit> .
40923885Sjaap  * The input characters should be in ASCII code .
41023885Sjaap  * The function returns as value the number of characters of the first
41123885Sjaap  * of the two parts .
41223885Sjaap  * If the returned value exceeds the character count of the line the
41323885Sjaap  * user may try to invoke bestsplit1 again but now with <size> equal to
41423885Sjaap  * the returned value plus one .
41523885Sjaap  * The algorithm is adapted from the Mathematical Centre report NR 28/72,
41623885Sjaap  * "BESTESPLITS1, EEN PROCEDURE VOOR HET AUTOMATISCH AFBREKEN VAN NEDER-
41723885Sjaap  * LANDSE WOORDEN" , which has been written by J.C. VAN VLIET.
41823885Sjaap  */
41923885Sjaap 	extern char translate[], comprimation[][14], consonant[][23],
42023885Sjaap 		prefix[][3] ;
421*23907Sjaap 	short woord[ MAXLETT +1], reference[ MAXLETT +1], vowel[ MAXSYLL ],
42223885Sjaap             turn[ MAXSYLL ] , letter, nextlett, vowel1, vowel2,
42323885Sjaap             l0, l1, l2 ;
42423885Sjaap         short numlett, numsyll, turnindex, differ, start1, start2, stop,
42523885Sjaap 	    level, bp ;
42623885Sjaap 	register int i, j, help ;
42723885Sjaap 	short size = aend - tosplit + 1;
42823885Sjaap 
42923885Sjaap 	/* translate into bestsplit code : */
430*23907Sjaap 	woord[0] = 0 ;
43123885Sjaap 	i = 1 ;
43223885Sjaap 	help = -1 ;
43323885Sjaap 	while ( (++help < size) && (i <  MAXLETT ) ) {
43423885Sjaap 		reference[i] = i;
435*23907Sjaap 		woord[i++] = translate[maplow(cbits(tosplit[help])) - 'a'] ;
43623885Sjaap 	}
43723885Sjaap 	/* end of translation : */
43823885Sjaap 
43923885Sjaap 	numlett = i ;
44023885Sjaap 	if ( numlett < 4 ) goto nosplit ;
44123885Sjaap 	i = j = 1 ;
44223885Sjaap 	help = 0 ;
44323885Sjaap 	while ( i < numlett ) {
444*23907Sjaap 		letter = woord[i] ;
44523885Sjaap  		/* comprimation of vowels : */
44623885Sjaap  		if ( (25 < letter) && (letter < 41) ) {
447*23907Sjaap  			nextlett = woord[i+1] ;
44823885Sjaap  			if ( (28 < nextlett) && (nextlett < 43) ) {
44923885Sjaap  				letter = comprimation[letter-26][nextlett-29] ;
45023885Sjaap  				if (letter > 0) {
45123885Sjaap  					i++ ;
45223885Sjaap  					help++ ;
453*23907Sjaap  					woord[i] = letter ;
45423885Sjaap 					continue ;
45523885Sjaap  				}
45623885Sjaap  			}
45723885Sjaap  		} /* end of comprimation */
45823885Sjaap 
459*23907Sjaap  		woord[j] = woord[i] ;
46023885Sjaap  		j++ ;
46123885Sjaap  		i++ ;
46223885Sjaap  		reference[j] += help ;
46323885Sjaap 	}
464*23907Sjaap 	woord[j] = woord[numlett] ;
46523885Sjaap 	numlett = j ;
46623885Sjaap 
46723885Sjaap 
46823885Sjaap 	/* determination of the number of syllables */
46923885Sjaap 	j = -1 ;
47023885Sjaap 	i = 0 ;
47123885Sjaap 	while ( ( ++i <= numlett ) && ( j < MAXSYLL ) ) {
472*23907Sjaap 		if (woord[i] < 39) {
47323885Sjaap 			j++ ;
47423885Sjaap 			vowel[j] = i ;
47523885Sjaap 		}
47623885Sjaap 	}
47723885Sjaap 	numsyll = j+1 ;
47823885Sjaap 
47923885Sjaap 	if ( numsyll < 2 ) goto nosplit ;
48023885Sjaap 	turnindex = 0 ;
48123885Sjaap 	differ = 1 ;
48223885Sjaap 	start1 = 0 ;
48323885Sjaap 	start2 = numsyll - 1 ;
48423885Sjaap 	stop = start2 ;
48523885Sjaap 
48623885Sjaap 	while ( turnindex < stop ) {
48723885Sjaap 		vowel1 = vowel[stop] ;
48823885Sjaap 		for ( i = stop - 1 ; i >= 0 ; i-- ) {
48923885Sjaap 			vowel2 = vowel[i] ;
49023885Sjaap 			if ( vowel1 - vowel2 == differ) {
49123885Sjaap 				turn[turnindex] = i ;
49223885Sjaap 				turnindex++ ;
49323885Sjaap 			}
49423885Sjaap 			vowel1 = vowel2 ;
49523885Sjaap 		}
49623885Sjaap 		if ( differ == 1 ) start1 = turnindex ;
49723885Sjaap 		else if ( differ == 2 ) start2 = turnindex ;
49823885Sjaap 		differ++ ;
49923885Sjaap 	}
50023885Sjaap 
50123885Sjaap 	turnindex = start2 - 1 ;
50223885Sjaap 	stop = numsyll - 1 ;
50323885Sjaap 	level = 1 ;
50423885Sjaap 
50523885Sjaap next :
50623885Sjaap 	turnindex++ ;
50723885Sjaap 	if ( turnindex >= stop ) {
50823885Sjaap 		if ( level == 1 ) turnindex = start2 ;
50923885Sjaap 		else if ( level == 2 ) {
51023885Sjaap 				turnindex = start1 ;
51123885Sjaap 				stop = start2 ;
51223885Sjaap 			}
51323885Sjaap 			else goto nosplit ;
51423885Sjaap 		level++ ;
51523885Sjaap 		if ( turnindex >= stop ) goto next ;
51623885Sjaap 	}
51723885Sjaap 	j = turn[turnindex] ;
51823885Sjaap 	vowel1 = vowel[j] ;
51923885Sjaap 	vowel2 = vowel[j+1] ;
52023885Sjaap 
52123885Sjaap 	switch ( level ) {
52223885Sjaap 	case 1 :
52323885Sjaap 		for ( j = vowel2-2 ; j >= vowel1+1 ; j-- ) {
524*23907Sjaap 			help = consonant[woord[j]-39][woord[j+1]-39] ;
52523885Sjaap 			if ( abs(help) == 1 ) goto splitafterj ;
52623885Sjaap 			if ( help < 0 ) goto next ;
52723885Sjaap 		}
52823885Sjaap 		break ;   /* end of first phase */
52923885Sjaap 
53023885Sjaap 	case 2 :
53123885Sjaap 		for ( i = vowel2-2 ; i >= vowel1+1 ; i-- ) {
532*23907Sjaap 			help = consonant[woord[i]-39][woord[i+1]-39] ;
53323885Sjaap 			if ( abs(help) == 2 ) {
53423885Sjaap 				j = i ;
53523885Sjaap 				goto splitafterj ;
53623885Sjaap 			}
53723885Sjaap 			if ( abs(help) == 3 ) {
53823885Sjaap 				if ( i == vowel1+1 ) {
53923885Sjaap 					j = vowel1 ;
54023885Sjaap 					goto splitafterj ;
54123885Sjaap 				}
542*23907Sjaap 				help = abs(consonant[woord[i-1]-39][woord[i]-39]) ;
54323885Sjaap 				if ( help == 2 ) {
54423885Sjaap 					j = i - 1 ;
54523885Sjaap 					goto splitafterj ;
54623885Sjaap 				}
54723885Sjaap 				if ( help == 3 ) {
54823885Sjaap 					j = i - 2 ;
54923885Sjaap 					goto splitafterj ;
55023885Sjaap 				}
55123885Sjaap 			}
55223885Sjaap 			else if ( ( abs(help) == 4 ) &&
55323885Sjaap 						( i == vowel2-2 ) ) {
55423885Sjaap 				j = i ;
55523885Sjaap 				goto splitafterj ;
55623885Sjaap 			}
55723885Sjaap 			if ( help < 0 ) goto next ;
55823885Sjaap 		}
55923885Sjaap 		break ;   /* end of second phase */
56023885Sjaap 
56123885Sjaap 	case 3 :
56223885Sjaap 		j = vowel1 ;
563*23907Sjaap 		help = woord[j+1] ;
56423885Sjaap 		if ( (help == LETTERJ) || (help == LETTERV) ||
56523885Sjaap 				  (help == LETTERZ) ) goto splitafterj ;
56623885Sjaap 		if ( help == LETTERX ) goto next ;
567*23907Sjaap 		l1 = woord[j] ;
56823885Sjaap 		if ( l1 == LETTEREE ) goto next ;
56923885Sjaap 		if ( ( l1 > 24 ) && ( l1 < 29 ) ) {
57023885Sjaap 			j++ ;
57123885Sjaap 			goto splitafterj ;
57223885Sjaap 		}
573*23907Sjaap 		l0 = woord[j-1] ;
574*23907Sjaap 		l2 = woord[j+1] ;
57523885Sjaap 		for ( i = 0 ; i < 7 ; i++ )
57623885Sjaap 			if ( ( l0 == prefix[i][0] ) &&
57723885Sjaap 			     ( l1 == prefix[i][1] ) &&
57823885Sjaap 			     ( l2 == prefix[i][2] ) ) goto next ;
57923885Sjaap 		goto splitafterj ;
58023885Sjaap 		break ;   /* end of third phase */
58123885Sjaap 
58223885Sjaap 	}
58323885Sjaap 
58423885Sjaap 
58523885Sjaap 	goto next ;
58623885Sjaap 
58723885Sjaap splitafterj :
58823885Sjaap 	bp = reference[j+1] - 1 ;
58923885Sjaap 	if((bp < size-1) && (bp > 0))
59023885Sjaap 		goto away;
59123885Sjaap 	else
59223885Sjaap 		goto next;
59323885Sjaap 
59423885Sjaap nosplit :
59523885Sjaap 	bp = 0 ;
59623885Sjaap 	level = 4 ;
59723885Sjaap away :
59823885Sjaap 	return(bp == 0? (tchar *) NULL : tosplit+bp) ;
59923885Sjaap }
600