[Reproducible-commits] [discount] 17/121: Imported Upstream version 2.0.8

Jérémy Bobbio lunar at moszumanska.debian.org
Tue Sep 23 20:56:12 UTC 2014


This is an automated email from the git hooks/post-receive script.

lunar pushed a commit to branch pu/reproducible_builds
in repository discount.

commit dcf2a3b11f1c752f549e0fc66b2cbbc7dbf4fc58
Author: Alessandro Ghedini <al3xbio at gmail.com>
Date:   Wed Mar 16 19:04:22 2011 +0100

    Imported Upstream version 2.0.8
---
 VERSION                |   2 +-
 configure.sh           |   5 +++
 generate.c             |  58 ++++++++++++++++++++++---
 main.c                 | 114 ++++++++++++++++++++++++++++++++++++-------------
 markdown.1             |   9 +++-
 markdown.3             |   3 +-
 markdown.c             |  37 ++++++++++------
 markdown.h             |  10 ++++-
 mkd-extensions.7       |  19 ++++++++-
 mkd-functions.3        |  14 +++---
 mkdio.c                |  21 +++++++--
 mkdio.h.in             |   4 +-
 tests/extrafootnotes.t |  10 +++++
 tests/functions.sh     |  11 +++--
 tests/tables.t         |  50 ++++++++++++++++++++--
 tests/toc.t            |  52 +++++++++++++++++++---
 tools/echo.c           |   1 +
 version.c.in           |   7 ++-
 18 files changed, 346 insertions(+), 81 deletions(-)

diff --git a/VERSION b/VERSION
index 157e54f..815e68d 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.0.6
+2.0.8
diff --git a/configure.sh b/configure.sh
index 870181d..b067865 100755
--- a/configure.sh
+++ b/configure.sh
@@ -10,6 +10,8 @@
 ac_help='--enable-amalloc	Enable memory allocation debugging
 --with-tabstops=N	Set tabstops to N characters (default is 4)
 --with-dl=X		Use Discount, Extra, or Both types of definition list
+--with-id-anchor	Use id= anchors for table-of-contents links
+--with-github-tags	Allow `_` and `-` in <> tags
 --enable-all-features	Turn on all stable optional features
 --shared		Build shared libraries (default is static)'
 
@@ -51,6 +53,9 @@ BOTH)          AC_DEFINE 'USE_EXTRA_DL' 1
 *)             AC_FAIL "Unknown value <$WITH_DL> for --with-dl (want 'discount', 'extra', or 'both')" ;;
 esac
 
+test "$WITH_ID_ANCHOR" && AC_DEFINE 'WITH_ID_ANCHOR' 1
+test "$WITH_GITHUB_TAGS" && AC_DEFINE 'WITH_GITHUB_TAGS' 1
+
 AC_PROG_CC
 
 test "$TRY_SHARED" && AC_COMPILER_PIC && AC_CC_SHLIBS
diff --git a/generate.c b/generate.c
index 1c18bc6..7f0f764 100644
--- a/generate.c
+++ b/generate.c
@@ -191,6 +191,7 @@ ___mkd_reparse(char *bfr, int size, int flags, MMIOT *f)
     
     sub.flags = f->flags | flags;
     sub.cb = f->cb;
+    sub.ref_prefix = f->ref_prefix;
 
     push(bfr, size, &sub);
     EXPAND(sub.in) = 0;
@@ -564,6 +565,17 @@ printlinkyref(MMIOT *f, linkytype *tag, char *link, int size)
 } /* printlinkyref */
 
 
+/* helper function for php markdown extra footnotes; allow the user to
+ * define a prefix tag instead of just `fn`
+ */
+static char *
+p_or_nothing(p)
+MMIOT *p;
+{
+    return p->ref_prefix ? p->ref_prefix : "fn";
+}
+
+
 /* php markdown extra/daring fireball style print footnotes
  */
 static int
@@ -577,8 +589,9 @@ extra_linky(MMIOT *f, Cstring text, Footnote *ref)
     else {
 	ref->flags |= REFERENCED;
 	ref->refnumber = ++ f->reference;
-	Qprintf(f, "<sup id=\"fnref:%d\"><a href=\"#fn:%d\" rel=\"footnote\">%d</a></sup>",
-		ref->refnumber, ref->refnumber, ref->refnumber);
+	Qprintf(f, "<sup id=\"%sref:%d\"><a href=\"#%s:%d\" rel=\"footnote\">%d</a></sup>",
+		p_or_nothing(f), ref->refnumber,
+		p_or_nothing(f), ref->refnumber, ref->refnumber);
     }
     return 1;
 } /* extra_linky */
@@ -950,7 +963,11 @@ maybe_tag_or_link(MMIOT *f)
 	}
 	else if ( isspace(c) )
 	    break;
+#if WITH_GITHUB_TAGS
+	else if ( ! (c == '/' || c == '-' || c == '_' || isalnum(c) ) )
+#else
 	else if ( ! (c == '/' || isalnum(c) ) )
+#endif
 	    maybetag=0;
     }
 
@@ -1298,6 +1315,15 @@ text(MMIOT *f)
 				Qchar(c, f);
 				break;
 				
+		    case ':': case '|':
+				if ( f->flags & MKD_NOTABLES ) {
+				    Qchar('\\', f);
+				    shift(f,-1);
+				    break;
+				}
+				Qchar(c, f);
+				break;
+				
 		    case '>': case '#': case '.': case '-':
 		    case '+': case '{': case '}': case ']':
 		    case '!': case '[': case '*': case '_':
@@ -1340,6 +1366,17 @@ text(MMIOT *f)
 static void
 printheader(Paragraph *pp, MMIOT *f)
 {
+#if WITH_ID_ANCHOR
+    Qprintf(f, "<h%d", pp->hnumber);
+    if ( f->flags & MKD_TOC ) {
+	Qstring(" id=\"", f);
+	mkd_string_to_anchor(T(pp->text->text),
+			     S(pp->text->text),
+			     (mkd_sta_function_t)Qchar, f, 1);
+	Qchar('"', f);
+    }
+    Qchar('>', f);
+#else
     if ( f->flags & MKD_TOC ) {
 	Qstring("<a name=\"", f);
 	mkd_string_to_anchor(T(pp->text->text),
@@ -1348,6 +1385,7 @@ printheader(Paragraph *pp, MMIOT *f)
 	Qstring("\"></a>\n", f);
     }
     Qprintf(f, "<h%d>", pp->hnumber);
+#endif
     push(T(pp->text->text), S(pp->text->text), f);
     text(f);
     Qprintf(f, "</h%d>", pp->hnumber);
@@ -1374,8 +1412,11 @@ splat(Line *p, char *block, Istring align, int force, MMIOT *f)
 	if ( force && (colno >= S(align)-1) )
 	    idx = S(p->text);
 	else
-	    while ( (idx < S(p->text)) && (T(p->text)[idx] != '|') )
+	    while ( (idx < S(p->text)) && (T(p->text)[idx] != '|') ) {
+		if ( T(p->text)[idx] == '\\' )
+		    ++idx;
 		++idx;
+	    }
 
 	Qprintf(f, "<%s%s>",
 		   block,
@@ -1423,7 +1464,9 @@ printtable(Paragraph *pp, MMIOT *f)
 	
 	last=first=0;
 	for (end=start ; (end < S(dash->text)) && p[end] != '|'; ++ end ) {
-	    if ( !isspace(p[end]) ) {
+	    if ( p[end] == '\\' )
+		++ end;
+	    else if ( !isspace(p[end]) ) {
 		if ( !first) first = p[end];
 		last = p[end];
 	    }
@@ -1662,10 +1705,11 @@ mkd_extra_footnotes(MMIOT *m)
 	for ( j=0; j < S(*m->footnotes); j++ ) {
 	    t = &T(*m->footnotes)[j];
 	    if ( (t->refnumber == i) && (t->flags & REFERENCED) ) {
-		Csprintf(&m->out, "<li id=\"fn:%d\">\n<p>", t->refnumber);
+		Csprintf(&m->out, "<li id=\"%s:%d\">\n<p>",
+			    p_or_nothing(m), t->refnumber);
 		Csreparse(&m->out, T(t->title), S(t->title), 0);
-		Csprintf(&m->out, "<a href=\"#fnref:%d\" rev=\"footnote\">↩</a>",
-			    t->refnumber);
+		Csprintf(&m->out, "<a href=\"#%sref:%d\" rev=\"footnote\">↩</a>",
+			    p_or_nothing(m), t->refnumber);
 		Csprintf(&m->out, "</p></li>\n");
 	    }
 	}
diff --git a/main.c b/main.c
index 049515c..0a02482 100644
--- a/main.c
+++ b/main.c
@@ -36,39 +36,79 @@ basename(char *p)
 
 char *pgm = "markdown";
 
-static struct {
+static struct _opt {
     char *name;
+    char *desc;
     int off;
+    int skip;
     mkd_flag_t flag;
 } opts[] = {
-    { "tabstop",       0, MKD_TABSTOP  },
-    { "image",         1, MKD_NOIMAGE  },
-    { "links",         1, MKD_NOLINKS  },
-    { "relax",         1, MKD_STRICT   },
-    { "strict",        0, MKD_STRICT   },
-    { "tables",        1, MKD_NOTABLES },
-    { "header",        1, MKD_NOHEADER },
-    { "html",          1, MKD_NOHTML   },
-    { "ext",           1, MKD_NO_EXT   },
-    { "cdata",         0, MKD_CDATA    },
-    { "pants",         1, MKD_NOPANTS  },
-    { "smarty",        1, MKD_NOPANTS  },
-    { "toc",           0, MKD_TOC      },
-    { "autolink",      0, MKD_AUTOLINK },
-    { "safelink",      0, MKD_SAFELINK },
-    { "del",           1, MKD_NOSTRIKETHROUGH },
-    { "strikethrough", 1, MKD_NOSTRIKETHROUGH },
-    { "superscript",   1, MKD_NOSUPERSCRIPT },
-    { "emphasis",      0, MKD_NORELAXED },
-    { "divquote",      1, MKD_NODIVQUOTE },
-    { "alphalist",     1, MKD_NOALPHALIST },
-    { "definitionlist",1, MKD_NODLIST },
-    { "1.0",           0, MKD_1_COMPAT },
-    { "footnotes",     0, MKD_EXTRA_FOOTNOTE },
-    { "footnote",      0, MKD_EXTRA_FOOTNOTE },
+    { "tabstop",       "default (4-space) tabstops", 0, 0, MKD_TABSTOP  },
+    { "image",         "images",                     1, 0, MKD_NOIMAGE  },
+    { "links",         "links",                      1, 0, MKD_NOLINKS  },
+    { "relax",         "emphasis inside words",      1, 1, MKD_STRICT   },
+    { "strict",        "emphasis inside words",      0, 0, MKD_STRICT   },
+    { "tables",        "tables",                     1, 0, MKD_NOTABLES },
+    { "header",        "pandoc-style headers",       1, 0, MKD_NOHEADER },
+    { "html",          "html",                       1, 0, MKD_NOHTML   },
+    { "ext",           "extended protocols",         1, 0, MKD_NO_EXT   },
+    { "cdata",         "generate cdata",             0, 0, MKD_CDATA    },
+    { "smarty",        "smartypants",                1, 0, MKD_NOPANTS  },
+    { "pants",         "smartypants",                1, 1, MKD_NOPANTS  },
+    { "toc",           "tables of contents",         0, 0, MKD_TOC      },
+    { "autolink",      "autolinking",                0, 0, MKD_AUTOLINK },
+    { "safelink",      "safe links",                 0, 0, MKD_SAFELINK },
+    { "strikethrough", "strikethrough",              1, 0, MKD_NOSTRIKETHROUGH },
+    { "del",           "strikethrough",              1, 1, MKD_NOSTRIKETHROUGH },
+    { "superscript",   "superscript",                1, 0, MKD_NOSUPERSCRIPT },
+    { "emphasis",      "emphasis inside words",      0, 0, MKD_NORELAXED },
+    { "divquote",      ">%class% blockquotes",       1, 0, MKD_NODIVQUOTE },
+    { "alphalist",     "alpha lists",                1, 0, MKD_NOALPHALIST },
+    { "definitionlist","definition lists",           1, 0, MKD_NODLIST },
+    { "1.0",           "markdown 1.0 compatability", 0, 0, MKD_1_COMPAT },
+    { "footnotes",     "markdown extra footnotes",   0, 0, MKD_EXTRA_FOOTNOTE },
+    { "footnote",      "markdown extra footnotes",   0, 1, MKD_EXTRA_FOOTNOTE },
 } ;
 
 #define NR(x)	(sizeof x / sizeof x[0])
+
+
+int
+sort_by_name(struct _opt *a, struct _opt *b)
+{
+    return strcmp(a->name,b->name);
+}
+
+int
+sort_by_flag(struct _opt *a, struct _opt *b)
+{
+    return a->flag - b->flag;
+}
+
+
+void
+show_flags(int byname)
+{
+    int i;
+
+    if ( byname ) {
+	qsort(opts, NR(opts), sizeof(opts[0]), sort_by_name);
+    
+	for (i=0; i < NR(opts); i++)
+	    if ( ! opts[i].skip )
+		fprintf(stderr, "%16s : %s\n", opts[i].name, opts[i].desc);
+    }
+    else {
+	qsort(opts, NR(opts), sizeof(opts[0]), sort_by_flag);
+	
+	for (i=0; i < NR(opts); i++)
+	    if ( ! opts[i].skip ) {
+		fprintf(stderr, "%08lx : ", (long)opts[i].flag);
+		fprintf(stderr, opts[i].off ? "disable " : "enable ");
+		fprintf(stderr, "%s\n", opts[i].desc);
+	    }
+    }
+}
     
 
 void
@@ -125,6 +165,7 @@ main(int argc, char **argv)
     int version = 0;
     int with_html5 = 0;
     int use_mkd_line = 0;
+    char *extra_footnote_prefix = 0;
     char *urlflags = 0;
     char *text = 0;
     char *ofile = 0;
@@ -138,7 +179,7 @@ main(int argc, char **argv)
     pgm = basename(argv[0]);
     opterr = 1;
 
-    while ( (opt=getopt(argc, argv, "5b:df:E:F:o:s:t:TV")) != EOF ) {
+    while ( (opt=getopt(argc, argv, "5b:C:df:E:F:o:s:t:TV")) != EOF ) {
 	switch (opt) {
 	case '5':   with_html5 = 1;
 		    break;
@@ -150,9 +191,19 @@ main(int argc, char **argv)
 		    break;
 	case 'E':   urlflags = optarg;
 		    break;
-	case 'F':   flags = strtol(optarg, 0, 0);
+	case 'F':   if ( strcmp(optarg, "?") == 0 ) {
+			show_flags(0);
+			exit(0);
+		    }
+		    else
+			flags = strtol(optarg, 0, 0);
 		    break;
-	case 'f':   set(&flags, optarg);
+	case 'f':   if ( strcmp(optarg, "?") == 0 ) {
+			show_flags(1);
+			exit(0);
+		    }
+		    else
+			set(&flags, optarg);
 		    break;
 	case 't':   text = optarg;
 		    use_mkd_line = 1;
@@ -161,6 +212,8 @@ main(int argc, char **argv)
 		    break;
 	case 's':   text = optarg;
 		    break;
+	case 'C':   extra_footnote_prefix = optarg;
+		    break;
 	case 'o':   if ( ofile ) {
 			fprintf(stderr, "Too many -o options\n");
 			exit(1);
@@ -218,6 +271,8 @@ main(int argc, char **argv)
 	    mkd_e_data(doc, urlflags);
 	    mkd_e_flags(doc, e_flags);
 	}
+	if ( extra_footnote_prefix )
+	    mkd_ref_prefix(doc, extra_footnote_prefix);
 
 	if ( debug )
 	    rc = mkd_dump(doc, stdout, 0, argc ? basename(argv[0]) : "stdin");
@@ -232,6 +287,7 @@ main(int argc, char **argv)
 	    }
 	}
     }
+    mkd_deallocate_tags();
     adump();
     exit( (rc == 0) ? 0 : errno );
 }
diff --git a/markdown.1 b/markdown.1
index f5e3949..c99e57f 100644
--- a/markdown.1
+++ b/markdown.1
@@ -12,6 +12,7 @@
 .Op Fl T
 .Op Fl V
 .Op Fl b Ar url-base
+.Op Fl C Ar prefix
 .Op Fl F Pa bitmap
 .Op Fl f Ar flags
 .Op Fl o Pa file
@@ -31,9 +32,13 @@ to stdout.
 The options are as follows:
 .Bl -tag -width "-o file"
 .It Fl b Ar url-base
-Links in source begining with / will be prefixed with
+Links in source beginning with / will be prefixed with
 .Ar url-base
 in the output.
+.It Fl C
+When processing markdown extra-style footnotes, use the
+given prefix instead of the default of
+.Ar fn .
 .It Fl d
 Instead of writing the html file, dump a parse
 tree to stdout.
@@ -100,6 +105,8 @@ blocks.
 Allow alphabetic lists.
 .It Ar definitionlist
 Allow definition lists.
+.It Ar footnote
+Allow markdown extra-style footnotes.
 .El
 .Pp
 As an example, the option
diff --git a/markdown.3 b/markdown.3
index 4a23ac8..497b4e7 100644
--- a/markdown.3
+++ b/markdown.3
@@ -104,6 +104,8 @@ blocks.
 Forbid alphabetic lists.
 .It Ar MKD_NODLIST
 Forbid definition lists.
+.It Ar MKD_EXTRA_FOOTNOTE
+Enable markdown extra-style footnotes.
 .El
 .Sh RETURN VALUES
 .Fn markdown
@@ -133,4 +135,3 @@ created by
 is deleted by the
 .Nm
 function.
-
diff --git a/markdown.c b/markdown.c
index 3a7acff..4005b98 100644
--- a/markdown.c
+++ b/markdown.c
@@ -270,25 +270,35 @@ static int
 istable(Line *t)
 {
     char *p;
-    Line *dashes = t->next;
-    int contains = 0;	/* found character bits; 0x01 is |, 0x02 is - */
+    Line *dashes, *body;
+    int l;
+    int dashed = 0;
     
-    /* two lines, first must contain | */
-    if ( !(dashes && memchr(T(t->text), '|', S(t->text))) )
+    /* three lines, first must contain |,
+		    second must be ---|---,
+		    third must contain |
+     */
+    if ( !(t->flags & PIPECHAR) )
+	return 0;
+	
+    dashes = t->next;
+    if ( !(dashes && (dashes->flags & PIPECHAR)) )
+	return 0;
+
+    body = dashes->next;
+    if ( !(body && (body->flags & PIPECHAR)) )
 	return 0;
 
     /* second line must contain - or | and nothing
      * else except for whitespace or :
      */
-    for ( p = T(dashes->text)+S(dashes->text)-1; p >= T(dashes->text); --p)
-	if ( *p == '|' )
-	    contains |= 0x01;
-	else if ( *p == '-' )
-	    contains |= 0x02;
-	else if ( ! ((*p == ':') || isspace(*p)) )
+    for ( p = T(dashes->text), l = S(dashes->text); l > 0; ++p, --l)
+	if ( *p == '-' )
+	    dashed = 1;
+	else if ( ! ((*p == '|') || (*p == ':') || isspace(*p)) )
 	    return 0;
 
-    return (contains & 0x03);
+    return dashed;
 }
 
 
@@ -770,7 +780,7 @@ tableblock(Paragraph *p)
     Line *t, *q;
 
     for ( t = p->text; t && (q = t->next); t = t->next ) {
-	if ( !memchr(T(q->text), '|', S(q->text)) ) {
+	if ( !(t->flags & PIPECHAR) ) {
 	    t->next = 0;
 	    return q;
 	}
@@ -957,7 +967,7 @@ addfootnote(Line *p, MMIOT* f)
     CREATE(foot->tag);
     CREATE(foot->link);
     CREATE(foot->title);
-    foot->height = foot->width = 0;
+    foot->flags = foot->height = foot->width = 0;
 
     for (j=i=p->dle+1; T(p->text)[j] != ']'; j++)
 	EXPAND(foot->tag) = T(p->text)[j];
@@ -1208,6 +1218,7 @@ mkd_compile(Document *doc, DWORD flags)
 
     doc->compiled = 1;
     memset(doc->ctx, 0, sizeof(MMIOT) );
+    doc->ctx->ref_prefix= doc->ref_prefix;
     doc->ctx->cb        = &(doc->cb);
     doc->ctx->flags     = flags & USER_FLAGS;
     CREATE(doc->ctx->in);
diff --git a/markdown.h b/markdown.h
index 7e3ca0b..f6b05fc 100644
--- a/markdown.h
+++ b/markdown.h
@@ -26,7 +26,9 @@ typedef struct footnote {
 typedef struct line {
     Cstring text;
     struct line *next;
-    int dle;
+    int dle;			/* leading indent on the line */
+    int flags;			/* special attributes for this line */
+#define PIPECHAR	0x01		/* line contains a | */
 } Line;
 
 
@@ -80,6 +82,7 @@ typedef struct mmiot {
     Qblock Q;
     int isp;
     int reference;
+    char *ref_prefix;
     STRING(Footnote) *footnotes;
     DWORD flags;
 #define MKD_NOLINKS	0x00000001
@@ -130,6 +133,7 @@ typedef struct document {
     int compiled;		/* set after mkd_compile() */
     int html;			/* set after (internal) htmlify() */
     int tabstop;		/* for properly expanding tabs (ick) */
+    char *ref_prefix;
     MMIOT *ctx;			/* backend buffers, flags, and structures */
     Callback_data cb;		/* callback functions & private data */
 } Document;
@@ -154,11 +158,13 @@ typedef int (*mkd_sta_function_t)(const int,const void*);
 extern void mkd_string_to_anchor(char*,int, mkd_sta_function_t, void*, int);
 
 extern Document *mkd_in(FILE *, DWORD);
-extern Document *mkd_string(char*,int, DWORD);
+extern Document *mkd_string(const char*,int, DWORD);
 
 extern void mkd_initialize();
 extern void mkd_shlib_destructor();
 
+extern void mkd_ref_prefix(Document*, char*);
+
 /* internal resource handling functions.
  */
 extern void ___mkd_freeLine(Line *);
diff --git a/mkd-extensions.7 b/mkd-extensions.7
index d1d2600..e7d1048 100644
--- a/mkd-extensions.7
+++ b/mkd-extensions.7
@@ -87,6 +87,15 @@ followed by text, another
 .Ar = ,
 a newline, 4 spaces of intent, and then more text.)
 .Pp
+Alternatively, definition list items are defined as
+.nf
+tag
+: description
+.fi
+(This is the format that
+.Ar "PHP Markdown Extra"
+uses.)
+.Pp
 .Ss embedded stylesheets
 Stylesheets may be defined and modified in a
 .Em <style>
@@ -174,6 +183,13 @@ Like code sections, you may use as many
 .Ar ~
 as you want, but there must be as many starting tildes as closing
 tildes.
+.Ss markdown extra-style footnotes
+.Ar "PHP Markdown Extra"
+footnotes are supported.   If a footnote link begins with a 
+.Ar ^ ,
+the first use of that footnote will generate a link down to the 
+bottom of the rendered document, which will contain a numbered footnote
+with a link back to where the footnote was called.
 .Sh AUTHOR
 David Parsons
 .%T http://www.pell.portland.or.us/~orc/
@@ -182,8 +198,7 @@ David Parsons
 .Xr markdown 3 ,
 .Xr mkd-callbacks 3 ,
 .Xr mkd-functions 3 ,
-.Xr mkd-line 3 ,
-.Xr mkd-extensions 7 .
+.Xr mkd-line 3 .
 .Pp
 .%T http://daringfireball.net/projects/markdown
 .Pp
diff --git a/mkd-functions.3 b/mkd-functions.3
index 19dee7c..d4bc9eb 100644
--- a/mkd-functions.3
+++ b/mkd-functions.3
@@ -163,12 +163,16 @@ first line of code blocks and disable implicit reference links.
 Disable strikethrough support.
 .El
 .Sh RETURN VALUES
-The functions
-.Fn mkd_compile ,
-.Fn mkd_style ,
-and
+The function
+.Fn mkd_compile
+returns 1 in the case of success, or 0 if the document is already compiled.
+The function
+.Fn mkd_generatecss
+returns the number of bytes written in the case of success, or EOF if an error
+occurred.  
+The function
 .Fn mkd_generatehtml
-return 0 on success, -1 on failure.
+returns 0 on success, \-1 on failure.
 .Sh SEE ALSO
 .Xr markdown 1 ,
 .Xr markdown 3 ,
diff --git a/mkdio.c b/mkdio.c
index 0af514e..89e2194 100644
--- a/mkdio.c
+++ b/mkdio.c
@@ -34,7 +34,8 @@ new_Document()
 }
 
 
-/* add a line to the markdown input chain
+/* add a line to the markdown input chain, expanding tabs and
+ * noting the presence of special characters as we go.
  */
 static void
 queue(Document* a, Cstring *line)
@@ -60,6 +61,8 @@ queue(Document* a, Cstring *line)
 	    } while ( ++xp % a->tabstop );
 	}
 	else if ( c >= ' ' ) {
+	    if ( c == '|' )
+		p->flags |= PIPECHAR;
 	    EXPAND(p->text) = c;
 	    ++xp;
 	}
@@ -148,7 +151,7 @@ mkd_in(FILE *f, DWORD flags)
 /* return a single character out of a buffer
  */
 struct string_ctx {
-    char *data;		/* the unread data */
+    const char *data;	/* the unread data */
     int   size;		/* and how much is there? */
 } ;
 
@@ -167,7 +170,7 @@ strget(struct string_ctx *in)
 /* convert a block of text into a linked list
  */
 Document *
-mkd_string(char *buf, int len, DWORD flags)
+mkd_string(const char *buf, int len, DWORD flags)
 {
     struct string_ctx about;
 
@@ -233,7 +236,7 @@ mkd_string_to_anchor(char *s, int len, mkd_sta_function_t outchar,
 	    if ( isalnum(c) || (c == '_') || (c == ':') || (c == '-') || (c == '.' ) )
 		(*outchar)(c, out);
 	    else
-		(*outchar)('.',out);
+		(*outchar)('.', out);
 	}
 	else
 	    (*outchar)(c,out);
@@ -342,3 +345,13 @@ mkd_e_data(Document *f, void *data)
     if ( f )
 	f->cb.e_data = data;
 }
+
+
+/* set the href prefix for markdown extra style footnotes
+ */
+void
+mkd_ref_prefix(Document *f, char *data)
+{
+    if ( f )
+	f->ref_prefix = data;
+}
diff --git a/mkdio.h.in b/mkdio.h.in
index 5cf6696..36c0d8f 100644
--- a/mkdio.h.in
+++ b/mkdio.h.in
@@ -10,7 +10,7 @@ typedef @DWORD@ mkd_flag_t;
 /* line builder for markdown()
  */
 MMIOT *mkd_in(FILE*,mkd_flag_t);		/* assemble input from a file */
-MMIOT *mkd_string(char*,int,mkd_flag_t);	/* assemble input from a buffer */
+MMIOT *mkd_string(const char*,int,mkd_flag_t);	/* assemble input from a buffer */
 
 void mkd_basename(MMIOT*,char*);
 
@@ -71,6 +71,8 @@ extern char markdown_version[];
 void mkd_mmiot_flags(FILE *, MMIOT *, int);
 void mkd_flags_are(FILE*, mkd_flag_t, int);
 
+void mkd_ref_prefix(MMIOT*, char*);
+
 
 /* special flags for markdown() and mkd_text()
  */
diff --git a/tests/extrafootnotes.t b/tests/extrafootnotes.t
index 2dfaef4..e40f7ee 100644
--- a/tests/extrafootnotes.t
+++ b/tests/extrafootnotes.t
@@ -18,6 +18,16 @@ try -ffootnote 'footnotes (-ffootnote)' "$FOOTIE" \
 </ol>
 </div>'
 
+try -ffootnote -Cfoot 'footnotes (-ffootnote -Cfoot)' "$FOOTIE" \
+'<p>I haz a footnote<sup id="footref:1"><a href="#foot:1" rel="footnote">1</a></sup></p>
+<div class="footnotes">
+<hr/>
+<ol>
+<li id="foot:1">
+<p>yes?<a href="#footref:1" rev="footnote">↩</a></p></li>
+</ol>
+</div>'
+
 try -fnofootnote 'footnotes (-fnofootnote)' "$FOOTIE" \
 '<p>I haz a footnote<a href="yes?">^1</a></p>'
 
diff --git a/tests/functions.sh b/tests/functions.sh
index d280d65..ae0b2a3 100644
--- a/tests/functions.sh
+++ b/tests/functions.sh
@@ -29,10 +29,13 @@ summary() {
 
 try() {
     unset FLAGS
-    case "$1" in
-    -*) FLAGS=$1
-	shift ;;
-    esac
+    while [ "$1" ]; do
+	case "$1" in
+	-*) FLAGS="$FLAGS $1"
+	    shift ;;
+	*) break ;;
+	esac
+    done
 
     testcase=`./echo -n "  $1" '........................................................' | ./cols 50`
     __tests=`expr $__tests + 1`
diff --git a/tests/tables.t b/tests/tables.t
index f1fe24d..97e55ea 100644
--- a/tests/tables.t
+++ b/tests/tables.t
@@ -151,17 +151,61 @@ text' \
 try 'table headers only' \
     'a|b|c
 -|-|-' \
+    '<p>a|b|c
+–|–|–</p>'
+
+try 'escaped title line' \
+    'A\|B
+--|-
+C |D' \
     '<table>
 <thead>
 <tr>
-<th>a</th>
-<th>b</th>
-<th>c</th>
+<th>A|B</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>C |D</td>
+</tr>
+</tbody>
+</table>'
+
+
+try 'escaped dashes line' \
+    'A |B
+-\|-
+C |D' \
+    '<p>A |B
+–|–
+C |D</p>'
+
+try 'escaped content line' \
+    'A |B
+--|-
+C\|D' \
+    '<table>
+<thead>
+<tr>
+<th>A </th>
+<th>B</th>
 </tr>
 </thead>
 <tbody>
+<tr>
+<td>C|D</td>
+<td></td>
+</tr>
 </tbody>
 </table>'
 
+try 'content line w/o dashes' \
+    'A |B
+--|-
+CD' \
+    '<p>A |B
+—|–
+CD</p>'
+
 summary $0
 exit $rc
diff --git a/tests/toc.t b/tests/toc.t
index 7ba98f0..5b02548 100644
--- a/tests/toc.t
+++ b/tests/toc.t
@@ -1,12 +1,49 @@
 . tests/functions.sh
 
-title "table-of-contents support"
 
 rc=0
 MARKDOWN_FLAGS=
 
-try '-T -ftoc' 'table of contents' \
-'#H1
+if ./markdown -V | grep ID-ANCHOR >/dev/null; then
+    # old-style; uses id= tag (and collides
+    # with #-style css)
+
+    title "(old) table-of-contents support"
+    
+    try '-T -ftoc' 'table of contents' \
+    '#H1
+hi' \
+'<ul>
+ <li><a href="#H1">H1</a></li>
+</ul>
+<h1 id="H1">H1</h1>
+
+<p>hi</p>'
+
+    try '-T -ftoc' 'toc item with link' \
+    '##[H2](H2) here' \
+'<ul>
+ <li><ul>
+  <li><a href="#H2.here">H2 here</a></li>
+ </ul></li>
+</ul>
+<h2 id="H2.here"><a href="H2">H2</a> here</h2>'  
+
+    try '-T -ftoc' 'toc item with non-alpha start' \
+    '#1 header' \
+'<ul>
+ <li><a href="#L1.header">1 header</a></li>
+</ul>
+<h1 id="L1.header">1 header</h1>'
+
+else
+    # new-style; uses a (depreciated) name=
+    # inside a null <a> tag
+    
+    title "(new) table-of-contents support"
+    
+    try '-T -ftoc' 'table of contents' \
+    '#H1
 hi' \
 '<ul>
  <li><a href="#H1">H1</a></li>
@@ -16,8 +53,8 @@ hi' \
 
 <p>hi</p>'
 
-try '-T -ftoc' 'toc item with link' \
-'##[H2](H2) here' \
+    try '-T -ftoc' 'toc item with link' \
+    '##[H2](H2) here' \
 '<ul>
  <li><ul>
   <li><a href="#H2.here">H2 here</a></li>
@@ -26,13 +63,14 @@ try '-T -ftoc' 'toc item with link' \
 <a name="H2.here"></a>
 <h2><a href="H2">H2</a> here</h2>'  
 
-try '-T -ftoc' 'toc item with non-alpha start' \
-'#1 header' \
+    try '-T -ftoc' 'toc item with non-alpha start' \
+    '#1 header' \
 '<ul>
  <li><a href="#L1.header">1 header</a></li>
 </ul>
 <a name="L1.header"></a>
 <h1>1 header</h1>'
+fi
 
 summary $0
 exit $rc
diff --git a/tools/echo.c b/tools/echo.c
index 6ed30bd..c7aa8ff 100644
--- a/tools/echo.c
+++ b/tools/echo.c
@@ -1,5 +1,6 @@
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 
 
 main(argc, argv)
diff --git a/version.c.in b/version.c.in
index 219b935..07ec94d 100644
--- a/version.c.in
+++ b/version.c.in
@@ -18,5 +18,10 @@ char markdown_version[] = VERSION
 #else
 		" DL=NONE"
 #endif
-
+#if WITH_ID_ANCHOR
+		" ID-ANCHOR"
+#endif
+#if WITH_GITHUB_TAGS
+		" GITHUB-TAGS"
+#endif
 		;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/discount.git



More information about the Reproducible-commits mailing list