source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: Escape blanks at the end of markdown lines such that they don't
@ 2017-03-07 15:31 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2017-03-07 15:31 UTC (permalink / raw)
  To: source

Log Message:
-----------
Escape blanks at the end of markdown lines
such that they don't look like output line breaks.

Modified Files:
--------------
    mdocml:
        mdoc_markdown.c
    mdocml/regress/mdoc/Bl:
        Makefile

Revision Data
-------------
Index: mdoc_markdown.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mdoc_markdown.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -Lmdoc_markdown.c -Lmdoc_markdown.c -u -p -r1.7 -r1.8
--- mdoc_markdown.c
+++ mdoc_markdown.c
@@ -247,6 +247,7 @@ static	int	 escflags; /* Escape in gener
 #define	ESC_PAR	 (1 << 3)  /* ")" when "(" is open. */
 #define	ESC_SQU	 (1 << 4)  /* "]" when "[" is open. */
 #define	ESC_FON	 (1 << 5)  /* "*" immediately after unrelated "*". */
+#define	ESC_EOL	 (1 << 6)  /* " " at the and of a line. */
 
 static	int	 code_blocks, quote_blocks, list_blocks;
 static	int	 outcount;
@@ -380,25 +381,25 @@ md_preword(void)
 	 * they terminate the list.  Work around this markdown issue
 	 * by using mere line breaks instead.
 	 */
+
 	if (list_blocks && outflags & MD_sp) {
 		outflags &= ~MD_sp;
 		outflags |= MD_br;
 	}
 
-	/* End the old line if requested. */
+	/*
+	 * End the old line if requested.
+	 * Escape whitespace at the end of the markdown line
+	 * such that it won't look like an output line break.
+	 */
 
 	if (outflags & MD_sp)
 		putchar('\n');
 	else if (outflags & MD_br) {
 		putchar(' ');
 		putchar(' ');
-#ifdef DEBUG
-		putchar(':');
-		putchar(':');
-		putchar(' ');
-		putchar(' ');
-#endif
-	}
+	} else if (outflags & MD_nl && escflags & ESC_EOL)
+		md_named("zwnj");
 
 	/* Start a new line if necessary. */
 
@@ -437,7 +438,7 @@ md_rawword(const char *s)
 {
 	md_preword();
 
-	if (*s == 0)
+	if (*s == '\0')
 		return;
 
 	if (escflags & ESC_FON) {
@@ -470,6 +471,10 @@ md_rawword(const char *s)
 		}
 		md_char(*s++);
 	}
+	if (s[-1] == ' ')
+		escflags |= ESC_EOL;
+	else
+		escflags &= ~ESC_EOL;
 }
 
 /*
@@ -490,6 +495,9 @@ md_word(const char *s)
 
 	md_preword();
 
+	if (*s == '\0')
+		return;
+
 	/* No spacing after opening delimiters. */
 	if ((s[0] == '(' || s[0] == '[') && s[1] == '\0')
 		outflags &= ~MD_spc;
@@ -630,7 +638,10 @@ md_word(const char *s)
 	if (*currfont != '\0') {
 		outflags &= ~MD_spc;
 		md_rawword(currfont);
-	}
+	} else if (s[-2] == ' ')
+		escflags |= ESC_EOL;
+	else
+		escflags &= ~ESC_EOL;
 }
 
 /*
@@ -640,7 +651,7 @@ static void
 md_named(const char *s)
 {
 	printf("&%s;", s);
-	escflags &= ~ESC_FON;
+	escflags &= ~(ESC_FON | ESC_EOL);
 	outcount++;
 }
 
Index: Makefile
===================================================================
RCS file: /home/cvs/mdocml/mdocml/regress/mdoc/Bl/Makefile,v
retrieving revision 1.3
retrieving revision 1.4
diff -Lregress/mdoc/Bl/Makefile -Lregress/mdoc/Bl/Makefile -u -p -r1.3 -r1.4
--- regress/mdoc/Bl/Makefile
+++ regress/mdoc/Bl/Makefile
@@ -13,7 +13,7 @@ LINT_TARGETS	 = column notype badargs ta
 LINT_TARGETS	+= empty noIt emptyhead emptytag emptyitem
 LINT_TARGETS	+= bareIt bareTa break breakingIt broken
 
-MARKDOWN_TARGETS  = item diag ohang bullet dash enum
+MARKDOWN_TARGETS  = item inset diag ohang bullet dash enum
 MARKDOWN_TARGETS += notype multitype
 MARKDOWN_TARGETS += empty emptyitem
 MARKDOWN_TARGETS += bareIt bareTa unclosed breakingTa
--
 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:[~2017-03-07 15:31 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-07 15:31 mdocml: Escape blanks at the end of markdown lines such that they don't 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).