shithub: neatmkfn

Download patch

ref: 9c922c6d20518ad8485f3d21b12a9a0e1c8f9426
parent: 80d889ac641f0c0793c8b8f3335ab68cb6e85c94
author: Ali Gholami Rudi <ali@rudi.ir>
date: Sat Apr 26 15:42:41 EDT 2014

trfn: add more glyphlist exceptions

--- a/trfn.c
+++ b/trfn.c
@@ -251,9 +251,12 @@
 		*s = '\0';
 		if (agl_map(ch)) {
 			strcpy(d, agl_map(ch));
-			for (i = 0; i < LEN(agl_exceptions); i++)
-				if (!strcmp(agl_exceptions[i][0], d))
+			for (i = 0; i < LEN(agl_exceptions); i++) {
+				if (!strcmp(agl_exceptions[i][0], d)) {
 					strcpy(d, agl_exceptions[i][1]);
+					break;
+				}
+			}
 			d = strchr(d, '\0');
 		} else if (ch[0] == 'u' && ch[1] == 'n' && ch[2] == 'i') {
 			for (i = 0; strlen(ch + 3 + 4 * i) >= 4; i++)
@@ -273,13 +276,17 @@
 static void trfn_lig(char *c)
 {
 	int i;
+	for (i = 0; i < LEN(ligs_exceptions); i++)
+		if (!strcmp(ligs_exceptions[i], c))
+			return;
 	if (c[0] && c[1] && strlen(c) > utf8len((unsigned char) c[0])) {
 		sprintf(strchr(trfn_ligs, '\0'), "%s ", c);
-		return;
+	} else {
+		for (i = 0; i < LEN(ligs_utf8); i++)
+			if (!strcmp(ligs_utf8[i][0], c))
+				sprintf(strchr(trfn_ligs, '\0'),
+					"%s ", ligs_utf8[i][1]);
 	}
-	for (i = 0; i < LEN(ligs); i++)
-		if (!strcmp(ligs[i], c))
-			sprintf(strchr(trfn_ligs, '\0'), "%s ", c);
 }
 
 static int trfn_type(char *s, int lly, int ury)
--- a/trfn_ch.h
+++ b/trfn_ch.h
@@ -1,10 +1,5 @@
-/* ligatures */
-static char *ligs[] = {
-	"fh", "fi", "fj", "fk", "fl", "ff", "ffi", "ffj", "ffl", "fft", "ft", "Th"
-};
-
-/* AGL exceptions; expanding ligatures */
-static char *agl_exceptions[][2] = {
+/* ligatures with unicode aliases */
+static char *ligs_utf8[][2] = {
 	{"ff", "ff"},
 	{"fi", "fi"},
 	{"fl", "fl"},
@@ -12,12 +7,33 @@
 	{"ffl", "ffl"},
 	{"st", "st"},
 };
+/* these are not ligatures */
+static char *ligs_exceptions[] = {
+	"ga", "aq", "ti", "ha",
+};
 
+/* AGL exceptions */
+static char *agl_exceptions[][2] = {
+	{"∆", "Δ"},	/* Delta -> Delatagreek */
+	{"Ω", "Ω"},	/* Omega -> Omegagreek */
+	{"‘", "`"},	/* quoteleft */
+	{"`", "ga"},	/* grave */
+	{"’", "'"},	/* quoteright */
+	{"'", "aq"},	/* quotesingle */
+	{"~", "ti"},	/* asciitilde; using tilde for ~ */
+	{"^", "ha"},	/* asciicircum; using circumflex for ^ */
+};
+
 /* troff aliases */
 static char *alts[][8] = {
 	{"\\", "bs", "rs"},
-	{"`", "ga"},
-	{"¡", "!!"},
+	{"`", "oq"},
+	{"'", "cq"},
+	{"ga", "\\`"},
+	{"aq"},
+	{"‚", "bq"},
+	{"¡", "!!", "r!"},
+	{"\"", "dq"},
 	{"¢", "c|", "ct"},
 	{"£", "L-", "ps"},
 	{"¤", "xo", "cr"},
@@ -27,15 +43,16 @@
 	{"¨", "\"\"", ":a"},
 	{"©", "co"},
 	{"ª", "a_"},
-	{"«", "<<"},
+	{"«", "<<", "Fo"},
+	{"‹", "fo"},
 	{"¬", "-,", "no"},
 	{"-", "hy"},
 	{"®", "ro", "rg"},
-	{"¯", "a^", "-a"},
+	{"¯", "-a"},
 	{"°", "0^"},
 	{"²", "2^"},
 	{"³", "3^"},
-	{"´", "\\'", "aa"},
+	{"´", "aa", "\\'"},
 	{"µ", "/u"},
 	{"¶", "P!", "pg"},
 	{"·", ".^"},
@@ -42,11 +59,14 @@
 	{"¸", ",,", ",a"},
 	{"¹", "1^"},
 	{"º", "o_"},
-	{"»", ">>"},
+	{"»", ">>", "Fc"},
+	{"›", "fc"},
 	{"¼", "14"},
 	{"½", "12"},
 	{"¾", "34"},
-	{"¿", "??"},
+	{"¿", "??", "r?"},
+	{"ˆ", "^", "^a"},
+	{"˜", "~"},
 	{"À", "A`"},
 	{"Á", "A'"},
 	{"Â", "A^"},
@@ -59,11 +79,11 @@
 	{"È", "E`"},
 	{"É", "E'"},
 	{"Ê", "E^"},
-	{"Ë", "E:", "E\""},
+	{"Ë", "E:"},
 	{"Ì", "I`"},
 	{"Í", "I'"},
 	{"Î", "I^"},
-	{"Ï", "I:", "I\""},
+	{"Ï", "I:"},
 	{"Ð", "D-"},
 	{"Ď", "D<"},
 	{"Ñ", "N~"},
@@ -83,9 +103,9 @@
 	{"Û", "U^"},
 	{"Ü", "U:"},
 	{"Ű", "U\""},
-	{"Ů", "U0"},
+	{"Ů", "U*"},
 	{"Ý", "Y'"},
-	{"Ÿ", "Y:", "Y\""},
+	{"Ÿ", "Y:"},
 	{"Ž", "Z<"},
 	{"Þ", "TH"},
 	{"ß", "ss"},
@@ -93,7 +113,7 @@
 	{"á", "a'"},
 	{"â", "a^"},
 	{"ã", "a~"},
-	{"ä", "a:", "a\""},
+	{"ä", "a:"},
 	{"å", "a*"},
 	{"æ", "ae"},
 	{"ç", "c,"},
@@ -102,12 +122,12 @@
 	{"è", "e`"},
 	{"é", "e'"},
 	{"ê", "e^"},
-	{"ë", "e:", "e\""},
+	{"ë", "e:"},
 	{"ě", "e<"},
 	{"ì", "i`"},
 	{"í", "i'"},
 	{"î", "i^"},
-	{"ï", "i\""},
+	{"ï", "i:"},
 	{"ð", "d-"},
 	{"ñ", "n~"},
 	{"ň", "n<"},
@@ -127,11 +147,11 @@
 	{"û", "u^"},
 	{"ü", "u:"},
 	{"ű", "u\""},
-	{"ů", "u0"},
+	{"ů", "u*"},
 	{"ý", "y'"},
 	{"ž", "z<"},
 	{"þ", "th"},
-	{"ÿ", "y:", "y\""},
+	{"ÿ", "y:"},
 	{"˘", "Ua"},
 	{"˙", ".a"},
 	{"˚", "oa"},
@@ -224,6 +244,7 @@
 	{"≡", "=="},
 	{"≈", "~~"},
 	{"…", "el"},
+	{"‰", "%0"},
 	{"", "av"},
 	{"", "ah"},
 	{"↵", "CR"},
@@ -281,8 +302,8 @@
 	{"", "rk"},
 	{"", "rb"},
 	{"_", "ru", "ul"},
-	{"”", "''"},
-	{"“", "``"},
+	{"”", "''", "rq"},
+	{"“", "``", "lq"},
 	{"⟨", "la"},
 	{"⟩", "ra"},
 	{"†", "dg"},
@@ -289,12 +310,12 @@
 	{"‡", "dd"},
 	{"–", "en", "\\-"},
 	{"—", "em", "--"},
-	{"ff", "ff"},
-	{"fi", "fi"},
-	{"fl", "fl"},
-	{"ffi", "ffi"},
-	{"ffl", "ffl"},
-	{"st", "st"},
+	{"ff", "ff"},
+	{"fi", "fi"},
+	{"fl", "fl"},
+	{"ffi", "ffi", "Fi"},
+	{"ffl", "ffl", "Fl"},
+	{"st", "st"},
 };
 
 /* different shapes of arabic and farsi characters */