From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from krisdoz.my.domain (kristaps@localhost [127.0.0.1]) by krisdoz.my.domain (8.14.3/8.14.3) with ESMTP id p6R7WQod029660 for ; Wed, 27 Jul 2011 03:32:27 -0400 (EDT) Received: (from kristaps@localhost) by krisdoz.my.domain (8.14.3/8.14.3/Submit) id p6R7WQcT018592; Wed, 27 Jul 2011 03:32:26 -0400 (EDT) Date: Wed, 27 Jul 2011 03:32:26 -0400 (EDT) Message-Id: <201107270732.p6R7WQcT018592@krisdoz.my.domain> X-Mailinglist: mdocml-source Reply-To: source@mdocml.bsd.lv MIME-Version: 1.0 From: kristaps@mdocml.bsd.lv To: source@mdocml.bsd.lv Subject: mdocml: Move mandoc_hyph() into roff_parsetext() as a single X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 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