X-Git-Url: https://git.cameronkatri.com/mandoc.git/blobdiff_plain/99b6d231087bb65d6fea658b392474aa49d7ffc1..3234ace1ba2fef84ad009e6822dd76699a34e344:/chars.c?ds=inline

diff --git a/chars.c b/chars.c
index 1e3072cf..126274c0 100644
--- a/chars.c
+++ b/chars.c
@@ -1,6 +1,6 @@
-/*	$Id: chars.c,v 1.7 2009/09/23 01:04:11 kristaps Exp $ */
+/*	$Id: chars.c,v 1.20 2010/06/19 20:46:27 kristaps Exp $ */
 /*
- * Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
+ * Copyright (c) 2009 Kristaps Dzonsons <kristaps@bsd.lv>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -14,11 +14,16 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <assert.h>
-#include <err.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
+#include "mandoc.h"
 #include "chars.h"
 
 #define	PRINT_HI	 126
@@ -35,10 +40,10 @@ struct	ln {
 	int		  type;
 #define	CHARS_CHAR	 (1 << 0)
 #define	CHARS_STRING	 (1 << 1)
-#define CHARS_BOTH	 (0x03)
+#define CHARS_BOTH	 (CHARS_CHAR | CHARS_STRING)
 };
 
-#define	LINES_MAX	  333
+#define	LINES_MAX	  370
 
 #define CHAR(w, x, y, z, a, b) \
 	{ NULL, (w), (y), (a), (x), (z), (b), CHARS_CHAR },
@@ -47,9 +52,10 @@ struct	ln {
 #define BOTH(w, x, y, z, a, b) \
 	{ NULL, (w), (y), (a), (x), (z), (b), CHARS_BOTH },
 
-static	struct ln lines[LINES_MAX] = {
+#define	CHAR_TBL_START	  static struct ln lines[LINES_MAX] = {
+#define	CHAR_TBL_END	  };
+
 #include "chars.in"
-};
 
 struct	tbl {
 	enum chars	  type;
@@ -89,13 +95,17 @@ chars_init(enum chars type)
 	 * (they're in-line re-ordered during lookup).
 	 */
 
-	if (NULL == (tab = malloc(sizeof(struct tbl))))
-		err(1, "malloc");
-	tab->type = type;
+	tab = malloc(sizeof(struct tbl));
+	if (NULL == tab) {
+		perror(NULL);
+		exit(EXIT_FAILURE);
+	}
 
 	htab = calloc(PRINT_HI - PRINT_LO + 1, sizeof(struct ln **));
-	if (NULL == htab)
-		err(1, "malloc");
+	if (NULL == htab) {
+		perror(NULL);
+		exit(EXIT_FAILURE);
+	}
 
 	for (i = 0; i < LINES_MAX; i++) {
 		hash = (int)lines[i].code[0] - PRINT_LO;
@@ -111,6 +121,7 @@ chars_init(enum chars type)
 	}
 
 	tab->htab = htab;
+	tab->type = type;
 	return(tab);
 }
 
@@ -156,18 +167,6 @@ find(struct tbl *tab, const char *p, size_t sz, size_t *rsz, int type)
 	if (NULL == (pp = htab[hash]))
 		return(NULL);
 
-	if (NULL == pp->next) {
-		if ( ! match(pp, p, sz, type)) 
-			return(NULL);
-
-		if (CHARS_HTML == tab->type) {
-			*rsz = pp->htmlsz;
-			return(pp->html);
-		}
-		*rsz = pp->asciisz;
-		return(pp->ascii);
-	}
-
 	for (prev = NULL; pp; pp = pp->next) {
 		if ( ! match(pp, p, sz, type)) {
 			prev = pp;