]> granicus.if.org Git - multimarkdown/commitdiff
FIXED: Prevent line breaks in HTML/ODF attributes
authorFletcher T. Penney <fletcher@fletcherpenney.net>
Mon, 8 Oct 2018 19:38:12 +0000 (15:38 -0400)
committerFletcher T. Penney <fletcher@fletcherpenney.net>
Mon, 8 Oct 2018 19:38:12 +0000 (15:38 -0400)
14 files changed:
Sources/libMultiMarkdown/epub.c
Sources/libMultiMarkdown/html.c
Sources/libMultiMarkdown/html.h
Sources/libMultiMarkdown/opendocument-content.c
Sources/libMultiMarkdown/opendocument-content.h
Sources/libMultiMarkdown/opendocument.c
tests/MMD6Tests/Metadata.fodt
tests/MMD6Tests/Metadata.html
tests/MMD6Tests/Reference Links.fodt
tests/MMD6Tests/Reference Links.html
tests/MMD6Tests/Reference Links.htmlc
tests/MMD6Tests/Reference Links.opml
tests/MMD6Tests/Reference Links.tex
tests/MMD6Tests/Reference Links.text

index 9d80324c851712f991427dd6ba3913a5a2b13e81..45392202bb88fda3ee5406feb21d5733eceada13 100644 (file)
@@ -133,7 +133,7 @@ char * epub_package_document(scratch_pad * scratch) {
 
        if (m) {
                print_const("<dc:identifier id=\"pub-id\">urn:uuid:");
-               mmd_print_string_html(out, m->value, false);
+               mmd_print_string_html(out, m->value, false, false);
                print_const("</dc:identifier>\n");
        } else {
                print_const("<dc:identifier id=\"pub-id\">urn:uuid:");
@@ -149,7 +149,7 @@ char * epub_package_document(scratch_pad * scratch) {
 
        if (m) {
                print_const("<dc:title>");
-               mmd_print_string_html(out, m->value, false);
+               mmd_print_string_html(out, m->value, false, false);
                print_const("</dc:title>\n");
        } else {
                print_const("<dc:title>Untitled</dc:title>\n");
@@ -160,7 +160,7 @@ char * epub_package_document(scratch_pad * scratch) {
 
        if (m) {
                print_const("<dc:creator>");
-               mmd_print_string_html(out, m->value, false);
+               mmd_print_string_html(out, m->value, false, false);
                print_const("</dc:creator>\n");
        }
 
@@ -170,7 +170,7 @@ char * epub_package_document(scratch_pad * scratch) {
 
        if (m) {
                print_const("<dc:language>");
-               mmd_print_string_html(out, m->value, false);
+               mmd_print_string_html(out, m->value, false, false);
                print_const("</dc:language>\n");
        } else {
                switch (scratch->language) {
@@ -204,7 +204,7 @@ char * epub_package_document(scratch_pad * scratch) {
 
        if (m) {
                print_const("<meta property=\"dcterms:modified\">");
-               mmd_print_string_html(out, m->value, false);
+               mmd_print_string_html(out, m->value, false, false);
                print_const("</meta>\n");
        } else {
                time_t t = time(NULL);
@@ -303,7 +303,7 @@ char * epub_nav(mmd_engine * e, scratch_pad * scratch) {
        HASH_FIND_STR(scratch->meta_hash, "title", temp);
 
        if (temp) {
-               mmd_print_string_html(out, temp->value, false);
+               mmd_print_string_html(out, temp->value, false, false);
        } else {
                print_const("Untitled");
        }
index 877cd4ad0ce56c79f8b25b070811a9b9e4f30aae..de33c01e708970efc0adc1b801fd00755c7bdbf9 100644 (file)
@@ -95,7 +95,7 @@ static char * my_strdup(const char * source) {
 // Use Knuth's pseudo random generator to obfuscate email addresses predictably
 long ran_num_next(void);
 
-void mmd_print_char_html(DString * out, char c, bool obfuscate) {
+void mmd_print_char_html(DString * out, char c, bool obfuscate, bool line_breaks) {
        switch (c) {
                case '"':
                        print_const("&quot;");
@@ -115,7 +115,11 @@ void mmd_print_char_html(DString * out, char c, bool obfuscate) {
 
                case '\n':
                case '\r':
-                       print_const("<br/>\n");
+                       if (line_breaks) {
+                               print_const("<br/>\n");
+                       } else {
+                               print_char(c);
+                       }
                        break;
 
                default:
@@ -134,10 +138,10 @@ void mmd_print_char_html(DString * out, char c, bool obfuscate) {
 }
 
 
-void mmd_print_string_html(DString * out, const char * str, bool obfuscate) {
+void mmd_print_string_html(DString * out, const char * str, bool obfuscate, bool line_breaks) {
        if (str) {
                while (*str != '\0') {
-                       mmd_print_char_html(out, *str, obfuscate);
+                       mmd_print_char_html(out, *str, obfuscate, line_breaks);
                        str++;
                }
        }
@@ -281,7 +285,7 @@ void mmd_export_link_html(DString * out, const char * source, token * text, link
 
        if (link->url) {
                print_const("<a href=\"");
-               mmd_print_string_html(out, link->url, false);
+               mmd_print_string_html(out, link->url, false, false);
                print_const("\"");
        } else {
                print_const("<a href=\"\"");
@@ -289,7 +293,7 @@ void mmd_export_link_html(DString * out, const char * source, token * text, link
 
        if (link->title && link->title[0] != '\0') {
                print_const(" title=\"");
-               mmd_print_string_html(out, link->title, false);
+               mmd_print_string_html(out, link->title, false, false);
                print_const("\"");
        }
 
@@ -1145,7 +1149,7 @@ void mmd_export_token_html(DString * out, const char * source, token * t, scratc
                                        (source[t->start + 1] == ' ')) {
                                print_const("&nbsp;");
                        } else {
-                               mmd_print_char_html(out, source[t->start + 1], false);
+                               mmd_print_char_html(out, source[t->start + 1], false, false);
                        }
 
                        break;
@@ -1334,15 +1338,15 @@ void mmd_export_token_html(DString * out, const char * source, token * t, scratc
                                        temp_bool = true;
 
                                        if (strncmp("mailto:", temp_char, 7) != 0) {
-                                               mmd_print_string_html(out, "mailto:", true);
+                                               mmd_print_string_html(out, "mailto:", true, false);
                                        }
                                } else {
                                        temp_bool = false;
                                }
 
-                               mmd_print_string_html(out, temp_char, temp_bool);
+                               mmd_print_string_html(out, temp_char, temp_bool, false);
                                print_const("\">");
-                               mmd_print_string_html(out, temp_char, temp_bool);
+                               mmd_print_string_html(out, temp_char, temp_bool, false);
                                print_const("</a>");
                        } else if (scan_html(&source[t->start])) {
                                print_token(t);
@@ -1443,7 +1447,7 @@ void mmd_export_token_html(DString * out, const char * source, token * t, scratc
                                        if (temp_short2 == scratch->used_abbreviations->size) {
                                                // This is a re-use of a previously used note
                                                print_const("<abbr title=\"");
-                                               mmd_print_string_html(out, temp_note->clean_text, false);
+                                               mmd_print_string_html(out, temp_note->clean_text, false, false);
                                                print_const("\">");
 
                                                if (t->child) {
@@ -1455,9 +1459,9 @@ void mmd_export_token_html(DString * out, const char * source, token * t, scratc
                                                print_const("</abbr>");
                                        } else {
                                                // This is the first time this note was used
-                                               mmd_print_string_html(out, temp_note->clean_text, false);
+                                               mmd_print_string_html(out, temp_note->clean_text, false, false);
                                                print_const(" (<abbr title=\"");
-                                               mmd_print_string_html(out, temp_note->clean_text, false);
+                                               mmd_print_string_html(out, temp_note->clean_text, false, false);
                                                print_const("\">");
 
                                                if (t->child) {
@@ -1470,11 +1474,11 @@ void mmd_export_token_html(DString * out, const char * source, token * t, scratc
                                        }
                                } else {
                                        // This is an inline definition (and therefore the first use)
-                                       mmd_print_string_html(out, temp_note->clean_text, false);
+                                       mmd_print_string_html(out, temp_note->clean_text, false, false);
                                        print_const(" (<abbr title=\"");
-                                       mmd_print_string_html(out, temp_note->clean_text, false);
+                                       mmd_print_string_html(out, temp_note->clean_text, false, false);
                                        print_const("\">");
-                                       mmd_print_string_html(out, temp_note->label_text, false);
+                                       mmd_print_string_html(out, temp_note->label_text, false, false);
                                        print_const("</abbr>)");
                                }
                        } else {
@@ -1652,7 +1656,7 @@ parse_citation:
 
                                        printf("<a href=\"#gn:%d\" title=\"%s\" class=\"glossary\">",
                                                   temp_short, LC("see glossary"));
-                                       mmd_print_string_html(out, temp_note->clean_text, false);
+                                       mmd_print_string_html(out, temp_note->clean_text, false, true);
                                        print_const("</a>");
                                } else {
                                        // This is the first time this note was used
@@ -1660,7 +1664,7 @@ parse_citation:
 
                                        printf("<a href=\"#gn:%d\" id=\"gnref:%d\" title=\"%s\" class=\"glossary\">",
                                                   temp_short, temp_short, LC("see glossary"));
-                                       mmd_print_string_html(out, temp_note->clean_text, false);
+                                       mmd_print_string_html(out, temp_note->clean_text, false, true);
                                        print_const("</a>");
                                }
                        } else {
@@ -1675,7 +1679,7 @@ parse_citation:
                        temp_char2 = extract_metadata(scratch, temp_char);
 
                        if (temp_char2) {
-                               mmd_print_string_html(out, temp_char2, false);
+                               mmd_print_string_html(out, temp_char2, false, true);
                        } else {
                                mmd_export_token_tree_html(out, source, t->child, scratch);
                        }
@@ -2109,7 +2113,7 @@ void mmd_export_token_html_raw(DString * out, const char * source, token * t, sc
 
                        if (t->next && t->next->type == TEXT_EMPTY && source[t->start + 1] == ' ') {
                        } else {
-                               mmd_print_char_html(out, source[t->start + 1], false);
+                               mmd_print_char_html(out, source[t->start + 1], false, false);
                        }
 
                        break;
@@ -2313,10 +2317,10 @@ void mmd_start_complete_html(DString * out, const char * source, scratch_pad * s
                                store_asset(scratch, m->value);
                                asset * a = extract_asset(scratch, m->value);
 
-                               mmd_print_string_html(out, "assets/", false);
-                               mmd_print_string_html(out, a->asset_path, false);
+                               mmd_print_string_html(out, "assets/", false, false);
+                               mmd_print_string_html(out, a->asset_path, false, false);
                        } else {
-                               mmd_print_string_html(out, m->value, false);
+                               mmd_print_string_html(out, m->value, false, false);
                        }
 
                        print_const("\"/>\n");
@@ -2340,7 +2344,7 @@ void mmd_start_complete_html(DString * out, const char * source, scratch_pad * s
                } else if (strcmp(m->key, "quoteslanguage") == 0) {
                } else if (strcmp(m->key, "title") == 0) {
                        print_const("\t<title>");
-                       mmd_print_string_html(out, m->value, false);
+                       mmd_print_string_html(out, m->value, false, true);
                        print_const("</title>\n");
                } else if (strcmp(m->key, "transcludebase") == 0) {
                } else if (strcmp(m->key, "xhtmlheader") == 0) {
@@ -2349,9 +2353,9 @@ void mmd_start_complete_html(DString * out, const char * source, scratch_pad * s
                } else if (strcmp(m->key, "xhtmlheaderlevel") == 0) {
                } else {
                        print_const("\t<meta name=\"");
-                       mmd_print_string_html(out, m->key, false);
+                       mmd_print_string_html(out, m->key, false, false);
                        print_const("\" content=\"");
-                       mmd_print_string_html(out, m->value, false);
+                       mmd_print_string_html(out, m->value, false, false);
                        print_const("\"/>\n");
                }
        }
@@ -2470,7 +2474,7 @@ void mmd_export_glossary_list_html(DString * out, const char * source, scratch_p
                        content = note->content;
 
                        // Print term
-                       mmd_print_string_html(out, note->clean_text, false);
+                       mmd_print_string_html(out, note->clean_text, false, true);
                        print_const(": ");
 
                        // Print contents
index 26386bf71ed16ca6929d40826666a9c589838785..3a0bc84dd08144a74a7bb138e01e3c12fe5aa7c0 100644 (file)
@@ -75,7 +75,7 @@ void mmd_export_glossary_list_html(DString * out, const char * source, scratch_p
 void mmd_start_complete_html(DString * out, const char * source, scratch_pad * scratch);
 void mmd_end_complete_html(DString * out, const char * source, scratch_pad * scratch);
 
-void mmd_print_string_html(DString * out, const char * str, bool obfuscate);
+void mmd_print_string_html(DString * out, const char * str, bool obfuscate, bool line_breaks);
 
 
 #endif
index 37bafd1f90f15d927e592f925db0e3800867e7e5..69d0be22b6ddcbdfb8a4107b5b2275037e3378db 100644 (file)
@@ -136,7 +136,7 @@ static char * my_strdup(const char * source) {
 }
 
 
-void mmd_print_char_opendocument(DString * out, char c) {
+void mmd_print_char_opendocument(DString * out, char c, bool line_breaks) {
        switch (c) {
                case '"':
                        print_const("&quot;");
@@ -156,7 +156,11 @@ void mmd_print_char_opendocument(DString * out, char c) {
 
                case '\n':
                case '\r':
-                       print_const("<text:line-break/>\n");
+                       if (line_breaks) {
+                               print_const("<text:line-break/>\n");
+                       } else {
+                               print_char(c);
+                       }
                        break;
 
                case '\t':
@@ -169,13 +173,13 @@ void mmd_print_char_opendocument(DString * out, char c) {
 }
 
 
-void mmd_print_string_opendocument(DString * out, const char * str) {
+void mmd_print_string_opendocument(DString * out, const char * str, bool line_breaks) {
        if (str == NULL) {
                return;
        }
 
        while (*str != '\0') {
-               mmd_print_char_opendocument(out, *str);
+               mmd_print_char_opendocument(out, *str, line_breaks);
                str++;
        }
 }
@@ -321,7 +325,7 @@ void mmd_export_token_opendocument_raw(DString * out, const char * source, token
 
                        if (t->next && t->next->type == TEXT_EMPTY && source[t->start + 1] == ' ') {
                        } else {
-                               mmd_print_char_opendocument(out, source[t->start + 1]);
+                               mmd_print_char_opendocument(out, source[t->start + 1], false);
                        }
 
                        break;
@@ -513,7 +517,7 @@ void mmd_export_token_opendocument_math(DString * out, const char * source, toke
 void mmd_export_link_opendocument(DString * out, const char * source, token * text, link * link, scratch_pad * scratch) {
        if (link->url) {
                print_const("<text:a xlink:type=\"simple\" xlink:href=\"");
-               mmd_print_string_opendocument(out, link->url);
+               mmd_print_string_opendocument(out, link->url, false);
                print_const("\"");
        } else {
                print_const("<a xlink:type=\"simple\" xlink:href=\"\"");
@@ -521,7 +525,7 @@ void mmd_export_link_opendocument(DString * out, const char * source, token * te
 
        if (link->title && link->title[0] != '\0') {
                print_const(" office:name=\"");
-               mmd_print_string_opendocument(out, link->title);
+               mmd_print_string_opendocument(out, link->title, false);
                print_const("\"");
        }
 
@@ -1244,7 +1248,7 @@ void mmd_export_token_opendocument(DString * out, const char * source, token * t
                                        (source[t->start + 1] == ' ')) {
                                print_const(" ");              // This is a non-breaking space character
                        } else {
-                               mmd_print_char_opendocument(out, source[t->start + 1]);
+                               mmd_print_char_opendocument(out, source[t->start + 1], false);
                        }
 
                        break;
@@ -1383,9 +1387,9 @@ void mmd_export_token_opendocument(DString * out, const char * source, token * t
                                        temp_bool = false;
                                }
 
-                               mmd_print_string_opendocument(out, temp_char);
+                               mmd_print_string_opendocument(out, temp_char, false);
                                print_const("\">");
-                               mmd_print_string_opendocument(out, temp_char);
+                               mmd_print_string_opendocument(out, temp_char, false);
                                print_const("</text:a>");
                        } else if (scan_html(&source[t->start])) {
                                // We ignore HTML blocks
@@ -1700,11 +1704,11 @@ parse_citation:
 
                                        if (temp_short3 == scratch->inline_abbreviations_to_free->size) {
                                                // This is a reference definition
-                                               mmd_print_string_opendocument(out, temp_note->label_text);
+                                               mmd_print_string_opendocument(out, temp_note->label_text, true);
 //                                             mmd_export_token_tree_opendocument(out, source, t->child, scratch);
                                        } else {
                                                // This is an inline definition
-                                               mmd_print_string_opendocument(out, temp_note->label_text);
+                                               mmd_print_string_opendocument(out, temp_note->label_text, true);
 //                                             mmd_export_token_tree_opendocument(out, source, t->child, scratch);
                                        }
                                } else {
@@ -1714,15 +1718,15 @@ parse_citation:
 
                                        if (temp_short3 == scratch->inline_abbreviations_to_free->size) {
                                                // This is a reference definition
-                                               mmd_print_string_opendocument(out, temp_note->clean_text);
+                                               mmd_print_string_opendocument(out, temp_note->clean_text, true);
                                                print_const(" (");
-                                               mmd_print_string_opendocument(out, temp_note->label_text);
+                                               mmd_print_string_opendocument(out, temp_note->label_text, true);
                                                print_const(")");
                                        } else {
                                                // This is an inline definition
-                                               mmd_print_string_opendocument(out, temp_note->clean_text);
+                                               mmd_print_string_opendocument(out, temp_note->clean_text, true);
                                                print_const(" (");
-                                               mmd_print_string_opendocument(out, temp_note->label_text);
+                                               mmd_print_string_opendocument(out, temp_note->label_text, true);
                                                print_const(")");
                                        }
 
@@ -1762,11 +1766,11 @@ parse_citation:
                                if (temp_short2 == scratch->used_glossaries->size) {
                                        // This is a re-use of a previously used note
 
-                                       mmd_print_string_opendocument(out, temp_note->clean_text);
+                                       mmd_print_string_opendocument(out, temp_note->clean_text, true);
                                } else {
                                        // This is the first time this note was used
 
-                                       mmd_print_string_opendocument(out, temp_note->clean_text);
+                                       mmd_print_string_opendocument(out, temp_note->clean_text, true);
 
                                        printf("<text:note text:id=\"gn%d\" text:note-class=\"glossary\"><text:note-body>", temp_short);
                                        mmd_export_token_tree_opendocument(out, source, temp_note->content, scratch);
@@ -1786,7 +1790,7 @@ parse_citation:
                        temp_char2 = extract_metadata(scratch, temp_char);
 
                        if (temp_char2) {
-                               mmd_print_string_opendocument(out, temp_char2);
+                               mmd_print_string_opendocument(out, temp_char2, true);
                        } else {
                                mmd_export_token_tree_opendocument(out, source, t->child, scratch);
                        }
index b795cb9058cf427890523f4daac3ce5005387038..cd486ba3282d7c50b0ed48bdea58ba3f657e16f7 100644 (file)
 
 #include "writer.h"
 
-void mmd_print_char_opendocument(DString * out, char c);
-void mmd_print_string_opendocument(DString * out, const char * str);
+void mmd_print_char_opendocument(DString * out, char c, bool line_breaks);
+void mmd_print_string_opendocument(DString * out, const char * str, bool line_breaks);
 void mmd_print_localized_char_opendocument(DString * out, unsigned short type, scratch_pad * scratch);
 
 void mmd_export_token_opendocument_raw(DString * out, const char * source, token * t, scratch_pad * scratch);
index a59ff04b38511e8452a3947283f3dfecdef979f7..ba0239c716d019ffad3a6beb62d338140b22f058 100644 (file)
@@ -176,7 +176,7 @@ char * opendocument_metadata(mmd_engine * e, scratch_pad * scratch) {
        for (m = scratch->meta_hash; m != NULL; m = m->hh.next) {
                if (strcmp(m->key, "author") == 0) {
                        print_const("\t<dc:creator>");
-                       mmd_print_string_opendocument(out, m->value);
+                       mmd_print_string_opendocument(out, m->value, false);
                        print_const("</dc:creator>\n");
                } else if (strcmp(m->key, "baseheaderlevel") == 0) {
                } else if (strcmp(m->key, "bibliostyle") == 0) {
@@ -197,20 +197,20 @@ char * opendocument_metadata(mmd_engine * e, scratch_pad * scratch) {
                } else if (strcmp(m->key, "mmdfooter") == 0) {
                } else if (strcmp(m->key, "mmdheader") == 0) {
                } else if (strcmp(m->key, "odfheader") == 0) {
-                       mmd_print_string_opendocument(out, m->value);
+                       mmd_print_string_opendocument(out, m->value, false);
                } else if (strcmp(m->key, "quoteslanguage") == 0) {
                } else if (strcmp(m->key, "title") == 0) {
                        print_const("\t<dc:title>");
-                       mmd_print_string_opendocument(out, m->value);
+                       mmd_print_string_opendocument(out, m->value, false);
                        print_const("</dc:title>\n");
                } else if (strcmp(m->key, "transcludebase") == 0) {
                } else if (strcmp(m->key, "xhtmlheader") == 0) {
                } else if (strcmp(m->key, "xhtmlheaderlevel") == 0) {
                } else {
                        print_const("\t<meta:user-defined meta:name=\"");
-                       mmd_print_string_opendocument(out, m->key);
+                       mmd_print_string_opendocument(out, m->key, false);
                        print_const("\">");
-                       mmd_print_string_opendocument(out, m->value);
+                       mmd_print_string_opendocument(out, m->value, false);
                        print_const("</meta:user-defined>\n");
                }
        }
index d0a51ec6b7483e5332bee1f28972d124f879ee1b..5d9cc9aacca393b96bb1a931a8a1efcf819c0a6c 100644 (file)
@@ -277,7 +277,7 @@ office:mimetype="application/vnd.oasis.opendocument.text">
        <dc:title>*foo* &quot;bar&quot;</dc:title>
        <meta:user-defined meta:name="empty"></meta:user-defined>
        <meta:user-defined meta:name="foo">bar foo bar foo bar</meta:user-defined>
-       <meta:user-defined meta:name="multiline">first line<text:line-break/>
+       <meta:user-defined meta:name="multiline">first line
 second line</meta:user-defined>
 </office:meta>
 <office:body>
index d57906e0bf91ee60ec0b407c778ea22008534935..fa971d7e3d0ade5dfd165235310b695ca5a8a070 100644 (file)
@@ -7,7 +7,7 @@
        <link type="text/css" rel="stylesheet" href="http://foo.com/bar.css"/>
 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"> </script>
        <meta name="foo" content="bar foo bar foo bar"/>
-       <meta name="multiline" content="first line<br/>
+       <meta name="multiline" content="first line
 second line"/>
 </head>
 <body>
index 7ad598fda4da42fd280fa47cc0b8c64bc73ddced..4fe5a9d678534a988f7d22ec4251da2287e7f18f 100644 (file)
@@ -310,6 +310,9 @@ office:mimetype="application/vnd.oasis.opendocument.text">
 
 <text:p text:style-name="Standard"><text:a xlink:type="simple" xlink:href="http://test.0/">foo</text:a>
 <text:a xlink:type="simple" xlink:href="http://test.1/file.txt">bar</text:a></text:p>
+
+<text:p text:style-name="Standard"><text:a xlink:type="simple" xlink:href="http://daringfireball.net/projects/markdown/" office:name="Daring Fireball:
+Markdown">Markdown</text:a></text:p>
 </office:text>
 </office:body>
 </office:document>
index 2735271d123b03f15c52ff5e5d14c711e9f91900..cd08867171957f7f810052fae0b3317a35630ec0 100644 (file)
@@ -39,6 +39,9 @@
 <p><a href="http://test.0/">foo</a>
 <a href="http://test.1/file.txt">bar</a></p>
 
+<p><a href="http://daringfireball.net/projects/markdown/" title="Daring Fireball:
+Markdown">Markdown</a></p>
+
 </body>
 </html>
 
index 40b7728a879155279edee2c50dfc4158ee1201f8..59d32aec96015ca9cad1dd8b4378dfa10d990ed8 100644 (file)
@@ -33,3 +33,5 @@ latexconfig:  article</p>
 
 <p><a href="http://test.0/">foo</a>
 <a href="http://test.1/file.txt">bar</a></p>
+
+<p>[Markdown]</p>
index e56e1c848795b63565ef925ce97c781d8d29ea13..80951a44ee751124635bf4eef8ea2463200d1104 100644 (file)
@@ -2,7 +2,7 @@
 <opml version="1.0">
 <head><title>Reference Links</title></head>
 <body>
-<outline text="&gt;&gt;Preamble&lt;&lt;" _note="&#10;[*foo*][bar].&#10;&#10;[*foo*][BAR].&#10;&#10;[*foo*][foobar].&#10;&#10;[*foo*][foo bar].&#10;&#10;[*foo*][foo  bar].&#10;&#10;5&#10;&#10;[*foo*][long].&#10;&#10;[foo][].&#10;&#10;[foo].&#10;&#10;[[foo]][bar]&#10;&#10;[[foo]][]&#10;&#10;10&#10;&#10;[[foo][bar]][]&#10;&#10;[foo][bar]&#10;&#10;[foo] [bar]&#10;&#10;[foo]&#10;[bar]&#10;&#10;&#10;[foo]: http://test.0/&#10;[bar]:&#9;http://test.1/file.txt&#10;[BAR]:      http://test.2/&#10;[foobar]: http://test.3/file.txt&#9;&quot;title&quot;&#10;[foo bar]: http://test.4/&#10;[foo  bar]: http://test.5/&#9;&quot;&quot;&#10;[long]: http://test.6/&#10;&quot;title&quot;&#10;"></outline>
+<outline text="&gt;&gt;Preamble&lt;&lt;" _note="&#10;[*foo*][bar].&#10;&#10;[*foo*][BAR].&#10;&#10;[*foo*][foobar].&#10;&#10;[*foo*][foo bar].&#10;&#10;[*foo*][foo  bar].&#10;&#10;5&#10;&#10;[*foo*][long].&#10;&#10;[foo][].&#10;&#10;[foo].&#10;&#10;[[foo]][bar]&#10;&#10;[[foo]][]&#10;&#10;10&#10;&#10;[[foo][bar]][]&#10;&#10;[foo][bar]&#10;&#10;[foo] [bar]&#10;&#10;[foo]&#10;[bar]&#10;&#10;[Markdown]&#10;&#10;&#10;[foo]: http://test.0/&#10;[bar]:&#9;http://test.1/file.txt&#10;[BAR]:      http://test.2/&#10;[foobar]: http://test.3/file.txt&#9;&quot;title&quot;&#10;[foo bar]: http://test.4/&#10;[foo  bar]: http://test.5/&#9;&quot;&quot;&#10;[long]: http://test.6/&#10;&quot;title&quot;&#10;[Markdown]:&#9;http://daringfireball.net/projects/markdown/  &quot;Daring Fireball:&#10;Markdown&quot;&#10;"></outline>
 <outline text="&gt;&gt;Metadata&lt;&lt;">
 <outline text="title" _note="Reference Links"/>
 <outline text="latexconfig" _note="article"/>
index 1003d039b1009de90a598f44a5d02b40c9841de4..491a996ab2a4ecffa723866d2e77a9e81108b0f4 100644 (file)
@@ -35,5 +35,7 @@
 \href{http://test.0/}{foo}\footnote{\href{http://test.0/}{http:\slash \slash test.0\slash }}
 \href{http://test.1/file.txt}{bar}\footnote{\href{http://test.1/file.txt}{http:\slash \slash test.1\slash file.txt}}
 
+\href{http://daringfireball.net/projects/markdown/}{Markdown}\footnote{\href{http://daringfireball.net/projects/markdown/}{http:\slash \slash daringfireball.net\slash projects\slash markdown\slash }}
+
 \input{mmd6-article-footer}
 \end{document}
index 63342fc19d471accaf1e6b7ea91fdf8399fc4adb..014a48237eed9769acbce3bf582f6ca3a539f65b 100644 (file)
@@ -34,6 +34,8 @@ latexconfig:  article
 [foo]
 [bar]
 
+[Markdown]
+
 
 [foo]: http://test.0/
 [bar]: http://test.1/file.txt
@@ -43,3 +45,5 @@ latexconfig:  article
 [foo  bar]: http://test.5/     ""
 [long]: http://test.6/
 "title"
+[Markdown]:    http://daringfireball.net/projects/markdown/  "Daring Fireball:
+Markdown"