1 /* thanks to Caerwyn Jones <caerwyn@comcast.net> for this module */
15 Blockquote, /* Block quote */
17 Cd, /* ? coloquial data */
18 Col, /* ? Coloquial */
23 Pos, /* Part of Speach */
25 U, /* ? cross reference*/
27 Ntag /* end of tags */
30 /* Assoc tables must be sorted on first field */
32 static Assoc tagtab[] = {
34 {"blockquote", Blockquote},
48 /* Possible tag auxilliary info */
50 Cols, /* number of columns in a table */
51 Num, /* letter or number, for a sense */
52 St, /* status (e.g., obs) */
56 static Assoc auxtab[] = {
62 static Assoc spectab[] = {
72 {"Asg", L'Ʒ'}, /* Unicyle. Cf "Sake" */
78 {"Chirho", L'☧'}, /* Chi Rho U+2627 */
97 {"Naira", L'N'}, /* should have bar through */
98 {"Nplus", L'N'}, /* should have plus above */
123 {"Wyn", L'ƿ'}, /* wynn U+01BF */
125 {"Ygh", L'Ʒ'}, /* Yogh U+01B7 */
127 {"Zh", L'Ʒ'}, /* looks like Yogh. Cf "Sake" */
128 {"a", L'a'}, /* ante */
145 {"ankh", L'☥'}, /* ankh U+2625 */
146 {"ante", L'a'}, /* before (year) */
150 {"arDadfull", L'ض'}, /* Dad U+0636 */
151 {"arHa", L'ح'}, /* haa U+062D */
152 {"arTa", L'ت'}, /* taa U+062A */
153 {"arain", L'ع'}, /* ain U+0639 */
154 {"arainfull", L'ع'}, /* ain U+0639 */
155 {"aralif", L'ا'}, /* alef U+0627 */
156 {"arba", L'ب'}, /* baa U+0628 */
157 {"arha", L'ه'}, /* ha U+0647 */
159 {"arnun", L'ن'}, /* noon U+0646 */
160 {"arnunfull", L'ن'}, /* noon U+0646 */
161 {"arpa", L'ه'}, /* ha U+0647 */
162 {"arqoph", L'ق'}, /* qaf U+0642 */
163 {"arshinfull", L'ش'}, /* sheen U+0634 */
164 {"arta", L'ت'}, /* taa U+062A */
165 {"artafull", L'ت'}, /* taa U+062A */
166 {"artha", L'ث'}, /* thaa U+062B */
167 {"arwaw", L'و'}, /* waw U+0648 */
168 {"arya", L'ي'}, /* ya U+064A */
169 {"aryafull", L'ي'}, /* ya U+064A */
170 {"arzero", L'٠'}, /* indic zero U+0660 */
171 {"asg", L'ʒ'}, /* unicycle character. Cf "hallow" */
174 {"astm", L'⁂'}, /* asterism: should be upside down */
178 {"ayin", L'ع'}, /* arabic ain U+0639 */
179 {"b1", L'-'}, /* single bond */
180 {"b2", L'='}, /* double bond */
181 {"b3", L'≡'}, /* triple bond */
182 {"bbar", L'ƀ'}, /* b with bar U+0180 */
185 {"blC", L'C'}, /* should be black letter */
186 {"blJ", L'J'}, /* should be black letter */
187 {"blU", L'U'}, /* should be black letter */
188 {"blb", L'b'}, /* should be black letter */
189 {"blozenge", L'◊'}, /* U+25CA; should be black */
190 {"bly", L'y'}, /* should be black letter */
195 {"bsquare", L'■'}, /* black square U+25A0 */
196 {"btril", L'◀'}, /* U+25C0 */
197 {"btrir", L'▶'}, /* U+25B6 */
198 {"c", L'c'}, /* circa */
210 {"cdsb", L'〛'}, /* ]] U+301b */
215 {"circa", L'c'}, /* about (year) */
216 {"circbl", L'̥'}, /* ring below accent U+0325 */
217 {"circle", L'○'}, /* U+25CB */
226 {"cross", L'✠'}, /* maltese cross U+2720 */
229 {"ctilde", L'c'}, /* +tilde */
246 {"dced", L'd'}, /* +cedilla */
252 {"dele", L'd'}, /* should be dele */
254 {"descnode", L'☋'}, /* descending node U+260B */
259 {"dlessj1", L'j'}, /* should be dotless */
260 {"dlessj2", L'j'}, /* should be dotless */
261 {"dlessj3", L'j'}, /* should be dotless */
293 {"fatpara", L'¶'}, /* should have fatter, filled in bowl */
301 {"frE", L'E'}, /* should be curly */
302 {"frL", L'L'}, /* should be curly */
303 {"frR", L'R'}, /* should be curly */
304 {"frakB", L'B'}, /* should have fraktur style */
317 {"gAacute", L'Á'}, /* should be Α+acute */
318 {"gaacute", L'α'}, /* +acute */
319 {"gabreve", L'α'}, /* +breve */
320 {"gafrown", L'α'}, /* +frown */
321 {"gagrave", L'α'}, /* +grave */
322 {"gamacr", L'α'}, /* +macron */
324 {"gauml", L'α'}, /* +umlaut */
326 {"geacute", L'ε'}, /* +acute */
327 {"gegrave", L'ε'}, /* +grave */
328 {"ghacute", L'η'}, /* +acute */
329 {"ghfrown", L'η'}, /* +frown */
330 {"ghgrave", L'η'}, /* +grave */
331 {"ghmacr", L'η'}, /* +macron */
332 {"giacute", L'ι'}, /* +acute */
333 {"gibreve", L'ι'}, /* +breve */
334 {"gifrown", L'ι'}, /* +frown */
335 {"gigrave", L'ι'}, /* +grave */
336 {"gimacr", L'ι'}, /* +macron */
337 {"giuml", L'ι'}, /* +umlaut */
340 {"goacute", L'ο'}, /* +acute */
341 {"gobreve", L'ο'}, /* +breve */
344 {"guacute", L'υ'}, /* +acute */
345 {"gufrown", L'υ'}, /* +frown */
346 {"gugrave", L'υ'}, /* +grave */
347 {"gumacr", L'υ'}, /* +macron */
348 {"guuml", L'υ'}, /* +umlaut */
349 {"gwacute", L'ω'}, /* +acute */
350 {"gwfrown", L'ω'}, /* +frown */
351 {"gwgrave", L'ω'}, /* +grave */
356 {"hatpath", L'ֲ'}, /* hataf patah U+05B2 */
357 {"hatqam", L'ֳ'}, /* hataf qamats U+05B3 */
358 {"hatseg", L'ֱ'}, /* hataf segol U+05B1 */
361 {"hebaleph", L'א'}, /* aleph U+05D0 */
362 {"hebayin", L'ע'}, /* ayin U+05E2 */
363 {"hebbet", L'ב'}, /* bet U+05D1 */
364 {"hebbeth", L'ב'}, /* bet U+05D1 */
365 {"hebcheth", L'ח'}, /* bet U+05D7 */
366 {"hebdaleth", L'ד'}, /* dalet U+05D3 */
367 {"hebgimel", L'ג'}, /* gimel U+05D2 */
368 {"hebhe", L'ה'}, /* he U+05D4 */
369 {"hebkaph", L'כ'}, /* kaf U+05DB */
370 {"heblamed", L'ל'}, /* lamed U+05DC */
371 {"hebmem", L'מ'}, /* mem U+05DE */
372 {"hebnun", L'נ'}, /* nun U+05E0 */
373 {"hebnunfin", L'ן'}, /* final nun U+05DF */
374 {"hebpe", L'פ'}, /* pe U+05E4 */
375 {"hebpedag", L'ף'}, /* final pe? U+05E3 */
376 {"hebqoph", L'ק'}, /* qof U+05E7 */
377 {"hebresh", L'ר'}, /* resh U+05E8 */
378 {"hebshin", L'ש'}, /* shin U+05E9 */
379 {"hebtav", L'ת'}, /* tav U+05EA */
380 {"hebtsade", L'צ'}, /* tsadi U+05E6 */
381 {"hebwaw", L'ו'}, /* vav? U+05D5 */
382 {"hebyod", L'י'}, /* yod U+05D9 */
383 {"hebzayin", L'ז'}, /* zayin U+05D6 */
384 {"hgz", L'ʒ'}, /* ??? Cf "alet" */
385 {"hireq", L'ִ'}, /* U+05B4 */
388 {"horizE", L'E'}, /* should be on side */
389 {"horizP", L'P'}, /* should be on side */
392 {"horizb", L'{'}, /* should be underbrace */
421 {"isub", L'ϵ'}, /* iota below accent */
445 {"lumlbl", L'l'}, /* +umlaut below */
448 {"mc", L'c'}, /* should be raised */
449 {"merc", L'☿'}, /* mercury U+263F */
451 {"moonfq", L'☽'}, /* first quarter moon U+263D */
452 {"moonlq", L'☾'}, /* last quarter moon U+263E */
453 {"msylab", L'm'}, /* +sylab (ˌ) */
479 {"obigb", L'{'}, /* should be big */
481 {"obigsb", L'['}, /* should be big */
484 {"odsb", L'〚'}, /* [[ U+301A */
488 {"ohook", L'o'}, /* +hook */
501 {"ounce", L'℥'}, /* ounce U+2125 */
502 {"ovparen", L'⌢'}, /* should be sideways ( */
510 {"pbar", L'p'}, /* +bar */
511 {"per", L'℘'}, /* per U+2118 */
517 {"plantinJ", L'J'}, /* should be script */
525 {"q", L'?'}, /* should be raised */
526 {"qamets", L'ֳ'}, /* U+05B3 */
531 {"recipe", L'℞'}, /* U+211E */
533 {"revC", L'Ɔ'}, /* open O U+0186 */
538 {"revsc", L'˒'}, /* upside-down semicolon */
540 {"rfa", L'o'}, /* +hook (Cf "goal") */
546 {"rsylab", L'r'}, /* +sylab */
547 {"runash", L'F'}, /* should be runic 'ash' */
556 {"scrA", L'A'}, /* should be script */
572 {"scruple", L'℈'}, /* U+2108 */
579 {"sheva", L'ְ'}, /* U+05B0 */
586 {"slge", L'≥'}, /* should have slanted line under */
587 {"slle", L'≤'}, /* should have slanted line under */
592 {"square", L'□'}, /* U+25A1 */
593 {"ssChi", L'Χ'}, /* should be sans serif */
610 {"thbar", L'þ'}, /* +bar */
612 {"thinqm", L'?'}, /* should be thinner */
620 {"ubar", L'u'}, /* +bar */
634 {"undl", L'ˍ'}, /* underline accent */
638 {"vavpath", L'ו'}, /* vav U+05D5 (+patah) */
639 {"vavsheva", L'ו'}, /* vav U+05D5 (+sheva) */
642 {"versicle2", L'℣'}, /* U+2123 */
650 {"wyn", L'ƿ'}, /* wynn U+01BF */
655 {"ymacr", L'y'}, /* +macron */
657 {"zced", L'z'}, /* +cedilla */
663 The following special characters don't have close enough
664 equivalents in Unicode, so aren't in the above table.
665 22n 2^(2^n) Cf Fermat
668 Bantuo Bantu O. Cf Otshi-herero
669 Car C with circular arrow on top
670 albrtime cut-time: C with vertical line
672 bantuo Bantu o. Cf Otshi-herero
673 bbc1 single chem bond below
674 bbc2 double chem bond below
675 bbl1 chem bond like /
676 bbl2 chem bond like //
677 bbr1 chem bond like \
679 bcop1 copper symbol. Cf copper
680 bcop2 copper symbol. Cf copper
682 btc1 single chem bond above
683 btc2 double chem bond above
684 btl1 chem bond like \
685 btl2 chem bond like \\
686 btr1 chem bond like /
687 btr2 chem bond line //
689 devph sanskrit letter. Cf ph
690 devrfls sanskrit letter. Cf cerebral
691 duplong[12] musical note
692 egchi early form of chi
693 eggamma[12] early form of gamma
694 egiota early form of iota
695 egkappa early form of kappa
696 eglambda early form of lambda
697 egmu[12] early form of mu
698 egnu[12] early form of nu
699 egpi[123] early form of pi
700 egrho[12] early form of rho
701 egsampi early form of sampi
702 egsan early form of san
703 egsigma[12] early form of sigma
704 egxi[123] early form of xi
705 elatS early form of S
706 elatc[12] early form of C
707 elatg[12] early form of G
708 glagjeri Slavonic Glagolitic jeri
709 glagjeru Slavonic Glagolitic jeru
710 hypolem hypolemisk (line with underdot)
712 longmord long mordent
713 mbwvow backwards scretched C. Cf retract.
714 mord music symbol. Cf mordent
716 ohgcirc old form of circumflex
717 oldbeta old form of β. Cf perturbate
718 oldsemibr[12] old forms of semibreve. Cf prolation
719 ormg old form of g. Cf G
720 para[12345] form of ¶
721 pauseo musical pause sign
722 pauseu musical pause sign
724 ragr Black letter ragged r
725 repetn musical repeat. Cf retort
726 segno musical segno sign
727 semain[12] semitic ain
731 semlamed[12] semitic lamed
735 semqoph[123] semitic qoph
737 semtav[1234] semitic tav
739 semzayin[123] semitic zayin
740 shtlong[12] U with underbar. Cf glyconic
741 sigmatau σ,τ combination
742 squaver sixteenth note
743 sqbreve square musical breve note
745 uhrbr upper half of big }
746 versicle1 Cf versicle
750 static Rune normtab[128] = {
751 /*0*/ /*1*/ /*2*/ /*3*/ /*4*/ /*5*/ /*6*/ /*7*/
752 /*00*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
753 NONE, NONE, ' ', NONE, NONE, NONE, NONE, NONE,
754 /*10*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
755 NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
756 /*20*/ L' ', L'!', L'"', L'#', L'$', L'%', SPCS, L'\'',
757 L'(', L')', L'*', L'+', L',', L'-', L'.', L'/',
758 /*30*/ L'0', L'1', L'2', L'3', L'4', L'5', L'6', L'7',
759 L'8', L'9', L':', L';', TAGS, L'=', TAGE, L'?',
760 /*40*/ L'@', L'A', L'B', L'C', L'D', L'E', L'F', L'G',
761 L'H', L'I', L'J', L'K', L'L', L'M', L'N', L'O',
762 /*50*/ L'P', L'Q', L'R', L'S', L'T', L'U', L'V', L'W',
763 L'X', L'Y', L'Z', L'[', L'\\', L']', L'^', L'_',
764 /*60*/ L'`', L'a', L'b', L'c', L'd', L'e', L'f', L'g',
765 L'h', L'i', L'j', L'k', L'l', L'm', L'n', L'o',
766 /*70*/ L'p', L'q', L'r', L's', L't', L'u', L'v', L'w',
767 L'x', L'y', L'z', L'{', L'|', L'}', L'~', NONE,
769 static Rune phtab[128] = {
770 /*0*/ /*1*/ /*2*/ /*3*/ /*4*/ /*5*/ /*6*/ /*7*/
771 /*00*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
772 NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
773 /*10*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
774 NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
775 /*20*/ L' ', L'!', L'ˈ', L'#', L'$', L'ˌ', L'æ', L'\'',
776 L'(', L')', L'*', L'+', L',', L'-', L'.', L'/',
777 /*30*/ L'0', L'1', L'2', L'ɜ', L'4', L'5', L'6', L'7',
778 L'8', L'ø', L'ː', L';', TAGS, L'=', TAGE, L'?',
779 /*40*/ L'ə', L'ɑ', L'B', L'C', L'ð', L'ɛ', L'F', L'G',
780 L'H', L'ɪ', L'J', L'K', L'L', L'M', L'ŋ', L'ɔ',
781 /*50*/ L'P', L'ɒ', L'R', L'ʃ', L'θ', L'ʊ', L'ʌ', L'W',
782 L'X', L'Y', L'ʒ', L'[', L'\\', L']', L'^', L'_',
783 /*60*/ L'`', L'a', L'b', L'c', L'd', L'e', L'f', L'g',
784 L'h', L'i', L'j', L'k', L'l', L'm', L'n', L'o',
785 /*70*/ L'p', L'q', L'r', L's', L't', L'u', L'v', L'w',
786 L'x', L'y', L'z', L'{', L'|', L'}', L'~', NONE,
788 static Rune grtab[128] = {
789 /*0*/ /*1*/ /*2*/ /*3*/ /*4*/ /*5*/ /*6*/ /*7*/
790 /*00*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
791 NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
792 /*10*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
793 NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
794 /*20*/ L' ', L'!', L'"', L'#', L'$', L'%', SPCS, L'\'',
795 L'(', L')', L'*', L'+', L',', L'-', L'.', L'/',
796 /*30*/ L'0', L'1', L'2', L'3', L'4', L'5', L'6', L'7',
797 L'8', L'9', L':', L';', TAGS, L'=', TAGE, L'?',
798 /*40*/ L'@', L'Α', L'Β', L'Ξ', L'Δ', L'Ε', L'Φ', L'Γ',
799 L'Η', L'Ι', L'Ϛ', L'Κ', L'Λ', L'Μ', L'Ν', L'Ο',
800 /*50*/ L'Π', L'Θ', L'Ρ', L'Σ', L'Τ', L'Υ', L'V', L'Ω',
801 L'Χ', L'Ψ', L'Ζ', L'[', L'\\', L']', L'^', L'_',
802 /*60*/ L'`', L'α', L'β', L'ξ', L'δ', L'ε', L'φ', L'γ',
803 L'η', L'ι', L'ς', L'κ', L'λ', L'μ', L'ν', L'ο',
804 /*70*/ L'π', L'θ', L'ρ', L'σ', L'τ', L'υ', L'v', L'ω',
805 L'χ', L'ψ', L'ζ', L'{', L'|', L'}', L'~', NONE,
807 static Rune subtab[128] = {
808 /*0*/ /*1*/ /*2*/ /*3*/ /*4*/ /*5*/ /*6*/ /*7*/
809 /*00*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
810 NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
811 /*10*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
812 NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
813 /*20*/ L' ', L'!', L'"', L'#', L'$', L'%', SPCS, L'\'',
814 L'₍', L'₎', L'*', L'₊', L',', L'₋', L'.', L'/',
815 /*30*/ L'₀', L'₁', L'₂', L'₃', L'₄', L'₅', L'₆', L'₇',
816 L'₈', L'₉', L':', L';', TAGS, L'₌', TAGE, L'?',
817 /*40*/ L'@', L'A', L'B', L'C', L'D', L'E', L'F', L'G',
818 L'H', L'I', L'J', L'K', L'L', L'M', L'N', L'O',
819 /*50*/ L'P', L'Q', L'R', L'S', L'T', L'U', L'V', L'W',
820 L'X', L'Y', L'Z', L'[', L'\\', L']', L'^', L'_',
821 /*60*/ L'`', L'a', L'b', L'c', L'd', L'e', L'f', L'g',
822 L'h', L'i', L'j', L'k', L'l', L'm', L'n', L'o',
823 /*70*/ L'p', L'q', L'r', L's', L't', L'u', L'v', L'w',
824 L'x', L'y', L'z', L'{', L'|', L'}', L'~', NONE,
826 static Rune suptab[128] = {
827 /*0*/ /*1*/ /*2*/ /*3*/ /*4*/ /*5*/ /*6*/ /*7*/
828 /*00*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
829 NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
830 /*10*/ NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
831 NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
832 /*20*/ L' ', L'!', L'"', L'#', L'$', L'%', SPCS, L'\'',
833 L'⁽', L'⁾', L'*', L'⁺', L',', L'⁻', L'.', L'/',
834 /*30*/ L'⁰', L'¹', L'²', L'³', L'⁴', L'⁵', L'⁶', L'⁷',
835 L'⁸', L'⁹', L':', L';', TAGS, L'⁼', TAGE, L'?',
836 /*40*/ L'@', L'A', L'B', L'C', L'D', L'E', L'F', L'G',
837 L'H', L'I', L'J', L'K', L'L', L'M', L'N', L'O',
838 /*50*/ L'P', L'Q', L'R', L'S', L'T', L'U', L'V', L'W',
839 L'X', L'Y', L'Z', L'[', L'\\', L']', L'^', L'_',
840 /*60*/ L'`', L'a', L'b', L'c', L'd', L'e', L'f', L'g',
841 L'h', L'i', L'j', L'k', L'l', L'm', L'n', L'o',
842 /*70*/ L'p', L'q', L'r', L's', L't', L'u', L'v', L'w',
843 L'x', L'y', L'z', L'{', L'|', L'}', L'~', NONE,
846 static int tagstarts;
847 static char tag[Buflen];
848 static char spec[Buflen];
849 static Entry curentry;
850 #define cursize (curentry.end-curentry.start)
852 static char *getspec(char *, char *);
853 static char *gettag(char *, char *);
858 * 'h': just print headwords
862 pgwprintentry(Entry e, int cmd)
882 r = transtab[(*p++)&0x7F];
884 /* Emit the rune, but buffer in case of ligature */
888 } else if(r == SPCS) {
889 /* Start of special character name */
891 r = lookassoc(spectab, asize(spectab), spec);
894 err("spec %ld %d %s",
895 e.doff, cursize, spec);
898 if(r >= LIGS && r < LIGE) {
899 /* handle possible ligature */
900 rlig = liglookup(r, rprev);
902 rprev = rlig; /* overwrite rprev */
904 /* could print accent, but let's not */
905 if(rprev != NONE) outrune(rprev);
908 } else if(r >= MULTI && r < MULTIE) {
913 outrunes(multitab[r-MULTI]);
914 } else if(r == PAR) {
921 if(rprev != NONE) outrune(rprev);
924 } else if(r == TAGS) {
925 /* Start of tag name */
931 t = lookassoc(tagtab, asize(tagtab), tag);
935 e.doff, cursize, tag);
943 outinhibit = !tagstarts;
972 * Return offset into bdict where next webster entry after fromoff starts.
973 * Webster entries start with <p><hw>
976 pgwnextoff(long fromoff)
981 a = Bseek(bdict, fromoff, 0);
989 if(c == '<' && Bgetc(bdict) == 'p' && Bgetc(bdict) == '>') {
992 if (Bgetc(bdict) == 'h' && Bgetc(bdict) == 'w'
993 && Bgetc(bdict) == '>')
1001 return (Boffset(bdict)-n);
1004 static char *prkey =
1005 "KEY TO THE PRONUNCIATION\n"
1008 "b, d, f, k, l, m, n, p, t, v, z: usual English values\n"
1010 "g as in go (gəʊ)\n"
1012 "r ... run (rʌn), terrier (ˈtɛriə(r))\n"
1013 "(r)... her (hɜː(r))\n"
1014 "s ... see (siː), success (səkˈsɜs)\n"
1015 "w ... wear (wɛə(r))\n"
1016 "hw ... when (hwɛn)\n"
1018 "θ ... thin (θin), bath (bɑːθ)\n"
1019 "ð ... then (ðɛn), bathe (beɪð)\n"
1020 "ʃ ... shop (ʃɒp), dish (dɪʃ)\n"
1021 "tʃ ... chop (tʃɒp), ditch (dɪtʃ)\n"
1022 "ʒ ... vision (ˈvɪʒən), déjeuner (deʒøne)\n"
1023 "dʒ ... judge (dʒʌdʒ)\n"
1024 "ŋ ... singing (ˈsɪŋɪŋ), think (θiŋk)\n"
1025 "ŋg ... finger (ˈfiŋgə(r))\n"
1028 "ʎ as in It. seraglio (serˈraʎo)\n"
1029 "ɲ ... Fr. cognac (kɔɲak)\n"
1030 "x ... Ger. ach (ax), Sc. loch (lɒx)\n"
1031 "ç ... Ger. ich (ɪç), Sc. nicht (nɪçt)\n"
1032 "ɣ ... North Ger. sagen (ˈzaːɣən)\n"
1033 "c ... Afrikaans baardmannetjie (ˈbaːrtmanəci)\n"
1034 "ɥ ... Fr. cuisine (kɥizin)\n"
1036 "II. VOWELS AND DIPTHONGS\n"
1039 "ɪ as in pit (pɪt), -ness (-nɪs)\n"
1040 "ɛ ... pet (pɛt), Fr. sept (sɛt)\n"
1042 "ʌ ... putt (pʌt)\n"
1045 "ə ... another (əˈnʌðə(r))\n"
1046 "(ə)... beaten (ˈbiːt(ə)n)\n"
1047 "i ... Fr. si (si)\n"
1048 "e ... Fr. bébé (bebe)\n"
1049 "a ... Fr. mari (mari)\n"
1050 "ɑ ... Fr. bâtiment (bɑtimã)\n"
1051 "ɔ ... Fr. homme (ɔm)\n"
1052 "o ... Fr. eau (o)\n"
1053 "ø ... Fr. peu (pø)\n"
1054 "œ ... Fr. boeuf (bœf), coeur (kœr)\n"
1055 "u ... Fr. douce (dus)\n"
1056 "ʏ ... Ger. Müller (ˈmʏlər)\n"
1057 "y ... Fr. du (dy)\n"
1060 "iː as in bean (biːn)\n"
1061 "ɑː ... barn (bɑːn)\n"
1062 "ɔː ... born (bɔːn)\n"
1063 "uː ... boon (buːn)\n"
1064 "ɜː ... burn (bɜːn)\n"
1065 "eː ... Ger. Schnee (ʃneː)\n"
1066 "ɛː ... Ger. Fähre (ˈfɛːrə)\n"
1067 "aː ... Ger. Tag (taːk)\n"
1068 "oː ... Ger. Sohn (zoːn)\n"
1069 "øː ... Ger. Goethe (gøːtə)\n"
1070 "yː ... Ger. grün (gryːn)\n"
1073 "ɛ˜, æ˜ as in Fr. fin (fɛ˜, fæ˜)\n"
1074 "ã ... Fr. franc (frã)\n"
1075 "ɔ˜ ... Fr. bon (bɔ˜n)\n"
1076 "œ˜ ... Fr. un (œ˜)\n"
1079 "eɪ as in bay (beɪ)\n"
1080 "aɪ ... buy (baɪ)\n"
1081 "ɔɪ ... boy (bɔɪ)\n"
1083 "aʊ ... now (naʊ)\n"
1084 "ɪə ... peer (pɪə(r))\n"
1085 "ɛə ... pair (pɛə(r))\n"
1086 "ʊə ... tour (tʊə(r))\n"
1087 "ɔə ... boar (bɔə(r))\n"
1091 "Main stress: ˈ preceding stressed syllable\n"
1092 "Secondary stress: ˌ preceding stressed syllable\n"
1094 "E.g.: pronunciation (prəˌnʌnsɪˈeɪʃ(ə)n)\n";
1095 /* TODO: find transcriptions of foreign consonents, œ, ʏ, nasals */
1100 Bprint(bout, "%s", prkey);
1104 * f points just after a '&', fe points at end of entry.
1105 * Accumulate the special name, starting after the &
1106 * and continuing until the next ';', in spec[].
1107 * Return pointer to char after ';'.
1110 getspec(char *f, char *fe)
1119 if(c == ';' || f == fe)
1128 * f points just after '<'; fe points at end of entry.
1129 * Expect next characters from bin to match:
1130 * [/][^ >]+( [^>=]+=[^ >]+)*>
1131 * tag auxname auxval
1132 * Accumulate the tag and its auxilliary information in
1133 * tag[], auxname[][] and auxval[][].
1134 * Set tagstarts=1 if the tag is 'starting' (has no '/'), else 0.
1135 * Set naux to the number of aux pairs found.
1136 * Return pointer to after final '>'.
1139 gettag(char *f, char *fe)
1155 if(c == '>' || f == fe)