source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: Clean-up in mdoc_argv.c args_checkpunct().
@ 2011-03-17 11:09 kristaps
  0 siblings, 0 replies; only message in thread
From: kristaps @ 2011-03-17 11:09 UTC (permalink / raw)
  To: source

Log Message:
-----------
Clean-up in mdoc_argv.c args_checkpunct().

Modified Files:
--------------
    mdocml:
        mdoc_argv.c

Revision Data
-------------
Index: mdoc_argv.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_argv.c,v
retrieving revision 1.68
retrieving revision 1.69
diff -Lmdoc_argv.c -Lmdoc_argv.c -u -p -r1.68 -r1.69
--- mdoc_argv.c
+++ mdoc_argv.c
@@ -35,7 +35,8 @@
 static	enum mdocargt	 argv_a2arg(enum mdoct, const char *);
 static	enum margserr	 args(struct mdoc *, int, int *, 
 				char *, int, char **);
-static	int		 args_checkpunct(const char *);
+static	int		 args_checkpunct(struct mdoc *,
+				const char *, int, int, int);
 static	int		 argv(struct mdoc *, int, 
 				struct mdoc_argv *, int *, char *);
 static	int		 argv_single(struct mdoc *, int, 
@@ -361,7 +362,6 @@ static enum margserr
 args(struct mdoc *m, int line, int *pos, 
 		char *buf, int fl, char **v)
 {
-	int		 i;
 	char		*p, *pp;
 	enum margserr	 rc;
 
@@ -399,15 +399,8 @@ args(struct mdoc *m, int line, int *pos,
 
 	*v = &buf[*pos];
 
-	if (ARGS_DELIM & fl && args_checkpunct(&buf[*pos])) {
-		i = strlen(&buf[*pos]) + *pos;
-		if (i && ' ' != buf[i - 1])
-			return(ARGS_PUNCT);
-		if (ARGS_NOWARN & fl)
-			return(ARGS_PUNCT);
-		mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE);
+	if (ARGS_DELIM & fl && args_checkpunct(m, buf, *pos, line, fl))
 		return(ARGS_PUNCT);
-	}
 
 	/*
 	 * First handle TABSEP items, restricted to `Bl -column'.  This
@@ -549,49 +542,50 @@ args(struct mdoc *m, int line, int *pos,
  * whitespace may separate these tokens.
  */
 static int
-args_checkpunct(const char *p)
+args_checkpunct(struct mdoc *m, const char *buf, int i, int ln, int fl)
 {
-	int		 i, j;
-	char		 buf[DELIMSZ];
+	int		 j;
+	char		 dbuf[DELIMSZ];
 	enum mdelim	 d;
 
-	i = 0;
-
 	/* First token must be a close-delimiter. */
 
-	for (j = 0; p[i] && ' ' != p[i] && j < DELIMSZ; j++, i++)
-		buf[j] = p[i];
+	for (j = 0; buf[i] && ' ' != buf[i] && j < DELIMSZ; j++, i++)
+		dbuf[j] = buf[i];
 
 	if (DELIMSZ == j)
 		return(0);
 
-	buf[j] = '\0';
-	if (DELIM_CLOSE != mandoc_isdelim(buf))
+	dbuf[j] = '\0';
+	if (DELIM_CLOSE != mandoc_isdelim(dbuf))
 		return(0);
 
-	while (' ' == p[i])
+	while (' ' == buf[i])
 		i++;
 
 	/* Remaining must NOT be open/none. */
 	
-	while (p[i]) {
+	while (buf[i]) {
 		j = 0;
-		while (p[i] && ' ' != p[i] && j < DELIMSZ)
-			buf[j++] = p[i++];
+		while (buf[i] && ' ' != buf[i] && j < DELIMSZ)
+			dbuf[j++] = buf[i++];
 
 		if (DELIMSZ == j)
 			return(0);
 
-		buf[j] = '\0';
-		d = mandoc_isdelim(buf);
+		dbuf[j] = '\0';
+		d = mandoc_isdelim(dbuf);
 		if (DELIM_NONE == d || DELIM_OPEN == d)
 			return(0);
 
-		while (' ' == p[i])
+		while (' ' == buf[i])
 			i++;
 	}
 
-	return('\0' == p[i]);
+	if ( ! (ARGS_NOWARN & fl) && i && ' ' == buf[i - 1])
+		mdoc_pmsg(m, ln, i - 1, MANDOCERR_EOLNSPACE);
+
+	return('\0' == buf[i]);
 }
 
 /*
--
 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-03-17 11:09 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-03-17 11:09 mdocml: Clean-up in mdoc_argv.c args_checkpunct() 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).