source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: Move mandoc_hyph() into roff_parsetext() as a single
@ 2011-07-27  7:32 kristaps
  0 siblings, 0 replies; only message in thread
From: kristaps @ 2011-07-27  7:32 UTC (permalink / raw)
  To: source

Log Message:
-----------
Move mandoc_hyph() into roff_parsetext() as a single conditional.  While
here, do some function renames for clarity and make all function
prototypes be in one place.

Modified Files:
--------------
    mdocml:
        libmandoc.h
        mandoc.c
        roff.c

Revision Data
-------------
Index: mandoc.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandoc.c,v
retrieving revision 1.57
retrieving revision 1.58
diff -Lmandoc.c -Lmandoc.c -u -p -r1.57 -r1.58
--- mandoc.c
+++ mandoc.c
@@ -654,44 +654,6 @@ mandoc_eos(const char *p, size_t sz, int
 }
 
 /*
- * Choose whether to break at a hyphenated character (identified by the
- * ASCII_HYPH value in the input string).
- */
-int
-mandoc_hyph(const char *start, const char *c)
-{
-	char		l, r;
-
-	l = *(c - 1);
-	r = *(c + 1);
-
-	/* Skip first/last character of buffer. */
-	if (c == start || '\0' == r)
-		return(0);
-
-	/* Skip a number on either side of the hyphen. */
-	if (isdigit((unsigned char)r) || isdigit((unsigned char)l))
-		return(0);
-
-	/* Skip first/last character of word. */
-	if ('\t' == r || '\t' == l)
-		return(0);
-
-	if (' ' == r || ' ' == l)
-		return(0);
-
-	/* Skip double invocations. */
-	if ('-' == r || '-' == l)
-		return(0);
-
-	/* Skip escapes. */
-	if ('\\' == l)
-		return(0);
-
-	return(1);
-}
-
-/*
  * Find out whether a line is a macro line or not.  If it is, adjust the
  * current position and return one; if it isn't, return zero and don't
  * change the current position.
Index: roff.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/roff.c,v
retrieving revision 1.154
retrieving revision 1.155
diff -Lroff.c -Lroff.c -u -p -r1.154 -r1.155
--- roff.c
+++ roff.c
@@ -143,6 +143,12 @@ struct	predef {
 #define	PREDEF(__name, __str) \
 	{ (__name), (__str) },
 
+static	enum rofft	 roffhash_find(const char *, size_t);
+static	void		 roffhash_init(void);
+static	void		 roffnode_cleanscope(struct roff *);
+static	void		 roffnode_pop(struct roff *);
+static	void		 roffnode_push(struct roff *, enum rofft,
+				const char *, int, int);
 static	enum rofferr	 roff_block(ROFF_ARGS);
 static	enum rofferr	 roff_block_text(ROFF_ARGS);
 static	enum rofferr	 roff_block_sub(ROFF_ARGS);
@@ -153,12 +159,15 @@ static	enum rofferr	 roff_cond_text(ROFF
 static	enum rofferr	 roff_cond_sub(ROFF_ARGS);
 static	enum rofferr	 roff_ds(ROFF_ARGS);
 static	enum roffrule	 roff_evalcond(const char *, int *);
+static	void		 roff_free1(struct roff *);
 static	void		 roff_freestr(struct roff *);
 static	char		*roff_getname(struct roff *, char **, int, int);
 static	const char	*roff_getstrn(const struct roff *, 
 				const char *, size_t);
 static	enum rofferr	 roff_line_ignore(ROFF_ARGS);
 static	enum rofferr	 roff_nr(ROFF_ARGS);
+static	enum rofft	 roff_parse(struct roff *, const char *, int *);
+static	enum rofferr	 roff_parsetext(char *);
 static	void		 roff_res(struct roff *, 
 				char **, size_t *, int, int);
 static	enum rofferr	 roff_rm(ROFF_ARGS);
@@ -172,7 +181,7 @@ static	enum rofferr	 roff_EN(ROFF_ARGS);
 static	enum rofferr	 roff_T_(ROFF_ARGS);
 static	enum rofferr	 roff_userdef(ROFF_ARGS);
 
-/* See roff_hash_find() */
+/* See roffhash_find() */
 
 #define	ASCII_HI	 126
 #define	ASCII_LO	 33
@@ -220,20 +229,11 @@ static	const struct predef predefs[PREDE
 #include "predefs.in"
 };
 
-static	void		 roff_free1(struct roff *);
-static	enum rofft	 roff_hash_find(const char *, size_t);
-static	void		 roff_hash_init(void);
-static	void		 roffnode_cleanscope(struct roff *);
-static	void		 roffnode_push(struct roff *, enum rofft,
-				const char *, int, int);
-static	void		 roffnode_pop(struct roff *);
-static	enum rofft	 roff_parse(struct roff *, const char *, int *);
-
-/* See roff_hash_find() */
+/* See roffhash_find() */
 #define	ROFF_HASH(p)	(p[0] - ASCII_LO)
 
 static void
-roff_hash_init(void)
+roffhash_init(void)
 {
 	struct roffmac	 *n;
 	int		  buc, i;
@@ -258,7 +258,7 @@ roff_hash_init(void)
  * the nil-terminated string name could be found.
  */
 static enum rofft
-roff_hash_find(const char *p, size_t s)
+roffhash_find(const char *p, size_t s)
 {
 	int		 buc;
 	struct roffmac	*n;
@@ -387,7 +387,7 @@ roff_alloc(struct mparse *parse)
 	r->parse = parse;
 	r->rstackpos = -1;
 	
-	roff_hash_init();
+	roffhash_init();
 
 	for (i = 0; i < PREDEFS_MAX; i++) 
 		roff_setstr(r, predefs[i].name, predefs[i].str, 0);
@@ -517,6 +517,7 @@ again:
 static enum rofferr
 roff_parsetext(char *p)
 {
+	char		 l, r;
 	size_t		 sz;
 	const char	*start;
 	enum mandoc_esc	 esc;
@@ -534,11 +535,21 @@ roff_parsetext(char *p)
 				((const char **)&p, NULL, NULL);
 			if (ESCAPE_ERROR == esc)
 				break;
-		} else if ('-' == *p) {
-			if (mandoc_hyph(start, p))
-				*p = ASCII_HYPH;
-			p++;
-		}
+			continue;
+		} else if ('-' != *p || p == start)
+			continue;
+
+		l = *(p - 1);
+		r = *(p + 1);
+
+		if ('\\' != l &&
+				'\t' != r && '\t' != l &&
+				' ' != r && ' ' != l &&
+				'-' != r && '-' != l &&
+				! isdigit((unsigned char)l) &&
+			       	! isdigit((unsigned char)r))
+			*p = ASCII_HYPH;
+		p++;
 	}
 
 	return(ROFF_CONT);
@@ -668,7 +679,7 @@ roff_parse(struct roff *r, const char *b
 	maclen = strcspn(mac + 1, " \\\t\0") + 1;
 
 	t = (r->current_string = roff_getstrn(r, mac, maclen))
-	    ? ROFF_USERDEF : roff_hash_find(mac, maclen);
+	    ? ROFF_USERDEF : roffhash_find(mac, maclen);
 
 	*pos += (int)maclen;
 
Index: libmandoc.h
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/libmandoc.h,v
retrieving revision 1.25
retrieving revision 1.26
diff -Llibmandoc.h -Llibmandoc.h -u -p -r1.25 -r1.26
--- libmandoc.h
+++ libmandoc.h
@@ -47,7 +47,6 @@ void		 mandoc_vmsg(enum mandocerr, struc
 char		*mandoc_getarg(struct mparse *, char **, int, int *);
 char		*mandoc_normdate(struct mparse *, char *, int, int);
 int		 mandoc_eos(const char *, size_t, int);
-int		 mandoc_hyph(const char *, const char *);
 int		 mandoc_getcontrol(const char *, int *);
 int		 mandoc_strntoi(const char *, size_t, int);
 
--
 To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2011-07-27  7:32 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-07-27  7:32 mdocml: Move mandoc_hyph() into roff_parsetext() as a single kristaps

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).