source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mandoc: Consistently treat character escape sequences as operators, not
@ 2017-06-23 23:00 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2017-06-23 23:00 UTC (permalink / raw)
  To: source

Log Message:
-----------
Consistently treat character escape sequences as operators,
not as letters, even if their names contain letters.

This is certainly not perfect, but code to recognize that \(*a is
not an operator but a letter would need a huge table, or Unicode
character property support, which won't happen at this time.

Modified Files:
--------------
    mandoc:
        eqn_html.c

Revision Data
-------------
Index: eqn_html.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/eqn_html.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -Leqn_html.c -Leqn_html.c -u -p -r1.13 -r1.14
--- eqn_html.c
+++ eqn_html.c
@@ -34,7 +34,7 @@ eqn_box(struct html *p, const struct eqn
 {
 	struct tag	*post, *row, *cell, *t;
 	const struct eqn_box *child, *parent;
-	const unsigned char *cp;
+	const char	*cp;
 	size_t		 i, j, rows;
 	enum htmltag	 tag;
 	enum eqn_fontt	 font;
@@ -143,22 +143,28 @@ eqn_box(struct html *p, const struct eqn
 	if (bp->text != NULL) {
 		assert(post == NULL);
 		tag = TAG_MI;
-		cp = (unsigned char *)bp->text;
-		if (isdigit(cp[0]) || (cp[0] == '.' && isdigit(cp[1]))) {
+		cp = bp->text;
+		if (isdigit((unsigned char)cp[0]) ||
+		    (cp[0] == '.' && isdigit((unsigned char)cp[1]))) {
 			tag = TAG_MN;
 			while (*++cp != '\0') {
-				if (*cp != '.' && !isdigit(*cp)) {
+				if (*cp != '.' &&
+				    isdigit((unsigned char)*cp) == 0) {
 					tag = TAG_MI;
 					break;
 				}
 			}
-		} else if (*cp != '\0' && isalpha(*cp) == 0) {
+		} else if (*cp != '\0' && isalpha((unsigned char)*cp) == 0) {
 			tag = TAG_MO;
-			while (*++cp != '\0') {
-				if (isalnum(*cp)) {
+			while (*cp != '\0') {
+				if (cp[0] == '\\' && cp[1] != '\0') {
+					cp++;
+					mandoc_escape(&cp, NULL, NULL);
+				} else if (isalnum((unsigned char)*cp)) {
 					tag = TAG_MI;
 					break;
-				}
+				} else
+					cp++;
 			}
 		}
 		font = bp->font;
--
 To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv

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

only message in thread, other threads:[~2017-06-23 23:00 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-23 23:00 mandoc: Consistently treat character escape sequences as operators, not schwarze

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).