]> granicus.if.org Git - multimarkdown/commitdiff
ADDED: LaTeX nearly finished
authorFletcher T. Penney <fletcher@fletcherpenney.net>
Mon, 13 Feb 2017 21:28:36 +0000 (16:28 -0500)
committerFletcher T. Penney <fletcher@fletcherpenney.net>
Mon, 13 Feb 2017 21:28:36 +0000 (16:28 -0500)
src/latex.c
tests/MMD6Tests/Citations.tex
tests/MMD6Tests/Figure Images.tex
tests/MMD6Tests/Inline Links.tex [new file with mode: 0644]
tests/MMD6Tests/Integrated.tex
tests/MMD6Tests/Link Attributes.tex [new file with mode: 0644]
tests/MMD6Tests/Markdown Syntax.tex [new file with mode: 0644]
tests/MMD6Tests/Reference Images.tex [new file with mode: 0644]
tests/MMD6Tests/Reference Links.tex [new file with mode: 0644]

index 39e27d72c74a3babfdafd3c5e873a941290a7a62..1371edb42dbacd1256e6556e14b75656e60939c6 100644 (file)
 
 */
 
+#include <ctype.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <string.h>    
+#include <string.h>
 
 #include "char.h"
 #include "i18n.h"
@@ -269,8 +270,29 @@ void mmd_export_link_latex(DString * out, const char * source, token * text, lin
 }
 
 
+char * correct_dimension_units(char *original) {
+       char *result;
+       int i;
+       
+       result = strdup(original);
+       
+       for (i = 0; result[i]; i++)
+               result[i] = tolower(result[i]);
+       
+       if (strstr(&result[strlen(result)-2],"px")) {
+               result[strlen(result)-2] = '\0';
+               strcat(result, "pt");
+       }
+       
+       return result;
+}
+
+
 void mmd_export_image_latex(DString * out, const char * source, token * text, link * link, scratch_pad * scratch, bool is_figure) {
        attr * a = link->attributes;
+       char * height = NULL;
+       char * width = NULL;
+       float temp_float;
 
        // Compatibility mode doesn't allow figures
        if (scratch->extensions & EXT_COMPATIBILITY)
@@ -281,26 +303,64 @@ void mmd_export_image_latex(DString * out, const char * source, token * text, li
                scratch->close_para = false;
        }
 
-       print("\\includegraphics[keepaspectratio");
+       // Check attributes for dimensions
+       while (a) {
+               if (strcmp("height", a->key) == 0) {
+                       height = correct_dimension_units(a->value);
+               } else if (strcmp("width", a->key) == 0) {
+                       width = correct_dimension_units(a->value);
+               }
 
-//     if (text) {
-//             print(" alt=\"");
-//             print_token_tree_raw(out, source, text->child);
-//             print("\"");
-//     }
-//
-//     if (link->title && link->title[0] != '\0')
-//             printf(" title=\"%s\"", link->title);
-//
-//     while (a) {
-//             print(" ");
-//             print(a->key);
-//             print("=\"");
-//             print(a->value);
-//             print("\"");
-//             a = a->next;
-//     }
+               a = a->next;
+       }
+
+       print("\\includegraphics[");
+
+       if (height || width) {
+               if (!height || !width) {
+                       // One not specified, preserve aspect
+                       print("keepaspectratio,");
+               }
+
+               if (width) {
+                       // Width specified
+                       if (width[strlen(width) - 1] == '%') {
+                               // specified as percent
+                               width[strlen(width) - 1] = '\0';
+                               temp_float = strtod(width, NULL);
+                               temp_float = temp_float/100.0f;
+                               printf("width=%.4f\\textwidth,", temp_float);
+                       } else {
+                               printf("width=%s,", width);
+                       }
 
+                       free(width);
+               } else {
+                       // Default width
+                       print("width=\\textwidth,");
+               }
+
+               if (height) {
+                       // Height specified
+                       if (height[strlen(height) - 1] == '%') {
+                               // specified as percent
+                               height[strlen(height) - 1] = '\0';
+                               temp_float = strtod(height, NULL);
+                               temp_float = temp_float/100.0f;
+                               printf("height=%.4f\\textheight", temp_float);
+                       } else {
+                               printf("height=%s", height);
+                       }
+
+                       free(height);
+               } else {
+                       // Default height
+                       print("height=0.75\\textheight");
+               }
+       } else {
+               // no dimensions specified, use sensible defaults
+               print("keepaspectratio,width=\\textwidth,height=0.75\\textheight");
+       }
 
        if (link->url)
                printf("]{%s}", link->url);
@@ -1335,8 +1395,14 @@ void mmd_export_token_latex_tt(DString * out, const char * source, token * t, sc
                        print("\\}\\}");
                        break;
         case TEXT_BRACE_LEFT:
+                       print("\\{");
+                       break;
         case TEXT_BRACE_RIGHT:
-               print("\\");
+                       print("\\}");
+                       break;
+        case UL:
+               print("\\_");
+               break;
                default:
                        if (t->child)
                                mmd_export_token_tree_latex_tt(out, source, t->child, scratch);
index 273c925a9a53f1b1b4d19154abcc683b0dd5f752..e461eff73bdb86b24b501300e43b7854da77b008 100644 (file)
@@ -35,6 +35,7 @@
 \bibitem{foo1}
 John Doe. \emph{A Totally Fake Book}. Vanity Press, 2006.
 
+
 \bibitem{foo2}
 John Doe. \emph{A Totally Fake Book}. Vanity Press, 2006.
 
index 497b7c2a1663f81a262411b4bcd6237454c96212..993bcaf9a66a12d6ec2ec500e3157a4fe5f07d7e 100644 (file)
@@ -16,6 +16,6 @@
 
 \begin{figure}[htbp]
 \centering
-\includegraphics[keepaspectratio,width=\textwidth,height=0.75\textheight]{http://foo.bar/}
+\includegraphics[keepaspectratio,width=40pt,height=0.75\textheight]{http://foo.bar/}
 \caption{\emph{foo}}
 \end{figure}
diff --git a/tests/MMD6Tests/Inline Links.tex b/tests/MMD6Tests/Inline Links.tex
new file mode 100644 (file)
index 0000000..976bb19
--- /dev/null
@@ -0,0 +1,44 @@
+Just a \href{http://url/file.txt}{URL}\footnote{\href{http://url/file.txt}{http:\slash \slash url\slash file.txt}}.
+
+\href{/url/file.txt}{URL and title}\footnote{\href{/url/file.txt}{\slash url\slash file.txt}}.
+
+\href{/url/file.txt}{URL and title}\footnote{\href{/url/file.txt}{\slash url\slash file.txt}}.
+
+\href{/url/file.txt}{URL and title}\footnote{\href{/url/file.txt}{\slash url\slash file.txt}}.
+
+\href{/url/file.txt}{URL and title}\footnote{\href{/url/file.txt}{\slash url\slash file.txt}}.
+
+5
+
+\href{}{Empty}\footnote{\href{}{}}.
+
+\href{/url/file.txt}{\textbf{URL} and \emph{title}}\footnote{\href{/url/file.txt}{\slash url\slash file.txt}}.
+
+\href{/url/file.txt}{URL and title}\footnote{\href{/url/file.txt}{\slash url\slash file.txt}}.
+
+\href{/url/file.txt}{URL and title}\footnote{\href{/url/file.txt}{\slash url\slash file.txt}}.
+
+\href{/url/file.txt}{URL and title}\footnote{\href{/url/file.txt}{\slash url\slash file.txt}}.
+
+10
+
+\href{/url/file.txt}{URL and title}\footnote{\href{/url/file.txt}{\slash url\slash file.txt}}.
+
+\href{/url/file.txt}{URL and title}\footnote{\href{/url/file.txt}{\slash url\slash file.txt}}.
+
+[URL and title] (\slash url\slash file.txt ``\emph{title}'').
+
+[URL and title]
+(\slash url\slash file.txt ``\emph{title}'').
+
+\href{/url/file.txt}{URL and title}\footnote{\href{/url/file.txt}{\slash url\slash file.txt}}.
+
+15
+
+\href{/url/file.txt}{URL and title}\footnote{\href{/url/file.txt}{\slash url\slash file.txt}}.
+
+\href{/url/file.txt}{URL and title}\footnote{\href{/url/file.txt}{\slash url\slash file.txt}}.
+
+\href{/url/file.txt}{URL and title}\footnote{\href{/url/file.txt}{\slash url\slash file.txt}}.
+
+\href{/url/file.txt}{URL and title}\footnote{\href{/url/file.txt}{\slash url\slash file.txt}}.
index d8dc10852c303c34fda4fabc37f42d77c56304bf..073e2d609c0b113a59a5930591fefbefc853e8a5 100644 (file)
@@ -65,7 +65,7 @@ Cite.~\citep{foo}
 
 \begin{figure}[htbp]
 \centering
-\includegraphics[keepaspectratio]{http://foo.bar/}
+\includegraphics[width=40pt,height=400pt]{http://foo.bar/}
 \caption{test}
 \end{figure}
 
@@ -134,4 +134,5 @@ Inline Citation
 \bibitem{foo}
 bar
 
+
 \end{thebibliography}
diff --git a/tests/MMD6Tests/Link Attributes.tex b/tests/MMD6Tests/Link Attributes.tex
new file mode 100644 (file)
index 0000000..1fcc549
--- /dev/null
@@ -0,0 +1,15 @@
+foo \includegraphics[width=40pt,height=400pt]{http://foo.bar/}
+
+foo \href{http://foo.bar/1}{link}\footnote{\href{http://foo.bar/1}{http:\slash \slash foo.bar\slash 1}}
+
+foo \href{http://foo.bar/2}{link2}\footnote{\href{http://foo.bar/2}{http:\slash \slash foo.bar\slash 2}}
+
+foo \href{http://foo.bar/3}{link3}\footnote{\href{http://foo.bar/3}{http:\slash \slash foo.bar\slash 3}}
+
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=40pt,height=400pt]{http://foo.bar/}
+\caption{test}
+\end{figure}
+
+5
diff --git a/tests/MMD6Tests/Markdown Syntax.tex b/tests/MMD6Tests/Markdown Syntax.tex
new file mode 100644 (file)
index 0000000..e88faa4
--- /dev/null
@@ -0,0 +1,1020 @@
+\part{Markdown: Syntax }
+\label{markdown:syntax}
+
+\begin{itemize}
+\item \autoref{overview}
+
+\begin{itemize}
+\item \autoref{philosophy}
+
+\item Inline HTML (\autoref{html})
+
+\item Automatic Escaping for Special Characters (\autoref{autoescape})
+
+\end{itemize}
+
+\item Block Elements (\autoref{block})
+
+\begin{itemize}
+\item Paragraphs and Line Breaks (\autoref{p})
+
+\item Headers (\autoref{header})
+
+\item Blockquotes (\autoref{blockquote})
+
+\item Lists (\autoref{list})
+
+\item Code Blocks (\autoref{precode})
+
+\item Horizontal Rules (\autoref{hr})
+
+\end{itemize}
+
+\item Span Elements (\autoref{span})
+
+\begin{itemize}
+\item Links (\autoref{link})
+
+\item Emphasis (\autoref{em})
+
+\item \autoref{code}
+
+\item Images (\autoref{img})
+
+\end{itemize}
+
+\item Miscellaneous (\autoref{misc})
+
+\begin{itemize}
+\item Backslash Escapes (\autoref{backslash})
+
+\item Automatic Links (\autoref{autolink})
+
+\end{itemize}
+
+\end{itemize}
+
+\textbf{Note:} This document is itself written using Markdown; you
+can \href{/projects/markdown/syntax.text}{see the source for it by adding `.text' to the URL}\footnote{\href{/projects/markdown/syntax.text}{\slash projects\slash markdown\slash syntax.text}}.
+
+\begin{center}\rule{3in}{0.4pt}\end{center}
+
+Markdown is intended to be as easy-to-read and easy-to-write as is feasible.
+
+Readability, however, is emphasized above all else. A Markdown-formatted
+document should be publishable as-is, as plain text, without looking
+like it's been marked up with tags or formatting instructions. While
+Markdown's syntax has been influenced by several existing text-to-HTML
+filters -- including \href{http://docutils.sourceforge.net/mirror/setext.html}{Setext}\footnote{\href{http://docutils.sourceforge.net/mirror/setext.html}{http:\slash \slash docutils.sourceforge.net\slash mirror\slash setext.html}}, \href{http://www.aaronsw.com/2002/atx/}{atx}\footnote{\href{http://www.aaronsw.com/2002/atx/}{http:\slash \slash www.aaronsw.com\slash 2002\slash atx\slash }}, \href{http://textism.com/tools/textile/}{Textile}\footnote{\href{http://textism.com/tools/textile/}{http:\slash \slash textism.com\slash tools\slash textile\slash }}, \href{http://docutils.sourceforge.net/rst.html}{reStructuredText}\footnote{\href{http://docutils.sourceforge.net/rst.html}{http:\slash \slash docutils.sourceforge.net\slash rst.html}},
+\href{http://www.triptico.com/software/grutatxt.html}{Grutatext}\footnote{\href{http://www.triptico.com/software/grutatxt.html}{http:\slash \slash www.triptico.com\slash software\slash grutatxt.html}}, and \href{http://ettext.taint.org/doc/}{EtText}\footnote{\href{http://ettext.taint.org/doc/}{http:\slash \slash ettext.taint.org\slash doc\slash }} -- the single biggest source of
+inspiration for Markdown's syntax is the format of plain text email.
+
+To this end, Markdown's syntax is comprised entirely of punctuation
+characters, which punctuation characters have been carefully chosen so
+as to look like what they mean. E.g., asterisks around a word actually
+look like *emphasis*. Markdown lists look like, well, lists. Even
+blockquotes look like quoted passages of text, assuming you've ever
+used email.
+
+Markdown's syntax is intended for one purpose: to be used as a
+format for \emph{writing} for the web.
+
+Markdown is not a replacement for HTML, or even close to it. Its
+syntax is very small, corresponding only to a very small subset of
+HTML tags. The idea is \emph{not} to create a syntax that makes it easier
+to insert HTML tags. In my opinion, HTML tags are already easy to
+insert. The idea for Markdown is to make it easy to read, write, and
+edit prose. HTML is a \emph{publishing} format; Markdown is a \emph{writing}
+format. Thus, Markdown's formatting syntax only addresses issues that
+can be conveyed in plain text.
+
+For any markup that is not covered by Markdown's syntax, you simply
+use HTML itself. There's no need to preface it or delimit it to
+indicate that you're switching from Markdown to HTML; you just use
+the tags.
+
+The only restrictions are that block-level HTML elements -- e.g. \texttt{$<$div$>$},
+\texttt{$<$table$>$}, \texttt{$<$pre$>$}, \texttt{$<$p$>$}, etc. -- must be separated from surrounding
+content by blank lines, and the start and end tags of the block should
+not be indented with tabs or spaces. Markdown is smart enough not
+to add extra (unwanted) \texttt{$<$p$>$} tags around HTML block-level tags.
+
+For example, to add an HTML table to a Markdown article:
+
+\begin{verbatim}
+This is a regular paragraph.
+
+<table>
+    <tr>
+        <td>Foo</td>
+    </tr>
+</table>
+
+This is another regular paragraph.
+\end{verbatim}
+
+Note that Markdown formatting syntax is not processed within block-level
+HTML tags. E.g., you can't use Markdown-style \texttt{*emphasis*} inside an
+HTML block.
+
+Span-level HTML tags -- e.g. \texttt{$<$span$>$}, \texttt{$<$cite$>$}, or \texttt{$<$del$>$} -- can be
+used anywhere in a Markdown paragraph, list item, or header. If you
+want, you can even use HTML tags instead of Markdown formatting; e.g. if
+you'd prefer to use HTML \texttt{$<$a$>$} or \texttt{$<$img$>$} tags instead of Markdown's
+link or image syntax, go right ahead.
+
+Unlike block-level HTML tags, Markdown syntax \emph{is} processed within
+span-level tags.
+
+In HTML, there are two characters that demand special treatment: \texttt{$<$}
+and \texttt{\&}. Left angle brackets are used to start tags; ampersands are
+used to denote HTML entities. If you want to use them as literal
+characters, you must escape them as entities, e.g. \texttt{\&lt;}, and
+\texttt{\&}.
+
+Ampersands in particular are bedeviling for web writers. If you want to
+write about `AT\&T', you need to write `\texttt{AT\&T}'. You even need to
+escape ampersands within URLs. Thus, if you want to link to:
+
+\begin{verbatim}
+http://images.google.com/images?num=30&q=larry+bird
+\end{verbatim}
+
+you need to encode the URL as:
+
+\begin{verbatim}
+http://images.google.com/images?num=30&amp;q=larry+bird
+\end{verbatim}
+
+in your anchor tag \texttt{href} attribute. Needless to say, this is easy to
+forget, and is probably the single most common source of HTML validation
+errors in otherwise well-marked-up web sites.
+
+Markdown allows you to use these characters naturally, taking care of
+all the necessary escaping for you. If you use an ampersand as part of
+an HTML entity, it remains unchanged; otherwise it will be translated
+into \texttt{\&}.
+
+So, if you want to include a copyright symbol in your article, you can write:
+
+\begin{verbatim}
+&copy;
+\end{verbatim}
+
+and Markdown will leave it alone. But if you write:
+
+\begin{verbatim}
+AT&T
+\end{verbatim}
+
+Markdown will translate it to:
+
+\begin{verbatim}
+AT&amp;T
+\end{verbatim}
+
+Similarly, because Markdown supports inline HTML (\autoref{html}), if you use
+angle brackets as delimiters for HTML tags, Markdown will treat them as
+such. But if you write:
+
+\begin{verbatim}
+4 < 5
+\end{verbatim}
+
+Markdown will translate it to:
+
+\begin{verbatim}
+4 &lt; 5
+\end{verbatim}
+
+However, inside Markdown code spans and blocks, angle brackets and
+ampersands are \emph{always} encoded automatically. This makes it easy to use
+Markdown to write about HTML code. (As opposed to raw HTML, which is a
+terrible format for writing about HTML syntax, because every single \texttt{$<$}
+and \texttt{\&} in your example code needs to be escaped.)
+
+\begin{center}\rule{3in}{0.4pt}\end{center}
+
+A paragraph is simply one or more consecutive lines of text, separated
+by one or more blank lines. (A blank line is any line that looks like a
+blank line -- a line containing nothing but spaces or tabs is considered
+blank.) Normal paragraphs should not be indented with spaces or tabs.
+
+The implication of the ``one or more consecutive lines of text'' rule is
+that Markdown supports ``hard-wrapped'' text paragraphs. This differs
+significantly from most other text-to-HTML formatters (including Movable
+Type's ``Convert Line Breaks'' option) which translate every line break
+character in a paragraph into a \texttt{$<$br \slash $>$} tag.
+
+When you \emph{do} want to insert a \texttt{$<$br \slash $>$} break tag using Markdown, you
+end a line with two or more spaces, then type return.
+
+Yes, this takes a tad more effort to create a \texttt{$<$br \slash $>$}, but a simplistic
+``every line break is a \texttt{$<$br \slash $>$}'' rule wouldn't work for Markdown.
+Markdown's email-style blockquoting (\autoref{blockquote}) and multi-paragraph list items (\autoref{list})
+work best -- and look better -- when you format them with hard breaks.
+
+Markdown supports two styles of headers, \href{http://docutils.sourceforge.net/mirror/setext.html}{Setext}\footnote{\href{http://docutils.sourceforge.net/mirror/setext.html}{http:\slash \slash docutils.sourceforge.net\slash mirror\slash setext.html}} and \href{http://www.aaronsw.com/2002/atx/}{atx}\footnote{\href{http://www.aaronsw.com/2002/atx/}{http:\slash \slash www.aaronsw.com\slash 2002\slash atx\slash }}.
+
+Setext-style headers are ``underlined'' using equal signs (for first-level
+headers) and dashes (for second-level headers). For example:
+
+\begin{verbatim}
+This is an H1
+=============
+
+This is an H2
+-------------
+\end{verbatim}
+
+Any number of underlining \texttt{=}'s or \texttt{-}'s will work.
+
+Atx-style headers use 1--6 hash characters at the start of the line,
+corresponding to header levels 1--6. For example:
+
+\begin{verbatim}
+# This is an H1
+
+## This is an H2
+
+###### This is an H6
+\end{verbatim}
+
+Optionally, you may ``close'' atx-style headers. This is purely
+cosmetic -- you can use this if you think it looks better. The
+closing hashes don't even need to match the number of hashes
+used to open the header. (The number of opening hashes
+determines the header level.) :
+
+\begin{verbatim}
+# This is an H1 #
+
+## This is an H2 ##
+
+### This is an H3 ######
+\end{verbatim}
+
+Markdown uses email-style \texttt{$>$} characters for blockquoting. If you're
+familiar with quoting passages of text in an email message, then you
+know how to create a blockquote in Markdown. It looks best if you hard
+wrap the text and put a \texttt{$>$} before every line:
+
+\begin{verbatim}
+> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+> 
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+> id sem consectetuer libero luctus adipiscing.
+\end{verbatim}
+
+Markdown allows you to be lazy and only put the \texttt{$>$} before the first
+line of a hard-wrapped paragraph:
+
+\begin{verbatim}
+> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.
+\end{verbatim}
+
+Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by
+adding additional levels of \texttt{$>$}:
+
+\begin{verbatim}
+> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+\end{verbatim}
+
+Blockquotes can contain other Markdown elements, including headers, lists,
+and code blocks:
+
+\begin{verbatim}
+> ## This is a header.
+> 
+> 1.   This is the first list item.
+> 2.   This is the second list item.
+> 
+> Here's some example code:
+> 
+>     return shell_exec("echo $input | $markdown_script");
+\end{verbatim}
+
+Any decent text editor should make email-style quoting easy. For
+example, with BBEdit, you can make a selection and choose Increase
+Quote Level from the Text menu.
+
+Markdown supports ordered (numbered) and unordered (bulleted) lists.
+
+Unordered lists use asterisks, pluses, and hyphens -- interchangably
+-- as list markers:
+
+\begin{verbatim}
+*   Red
+*   Green
+*   Blue
+\end{verbatim}
+
+is equivalent to:
+
+\begin{verbatim}
++   Red
++   Green
++   Blue
+\end{verbatim}
+
+and:
+
+\begin{verbatim}
+-   Red
+-   Green
+-   Blue
+\end{verbatim}
+
+Ordered lists use numbers followed by periods:
+
+\begin{verbatim}
+1.  Bird
+2.  McHale
+3.  Parish
+\end{verbatim}
+
+It's important to note that the actual numbers you use to mark the
+list have no effect on the HTML output Markdown produces. The HTML
+Markdown produces from the above list is:
+
+\begin{verbatim}
+<ol>
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
+\end{verbatim}
+
+If you instead wrote the list in Markdown like this:
+
+\begin{verbatim}
+1.  Bird
+1.  McHale
+1.  Parish
+\end{verbatim}
+
+or even:
+
+\begin{verbatim}
+3. Bird
+1. McHale
+8. Parish
+\end{verbatim}
+
+you'd get the exact same HTML output. The point is, if you want to,
+you can use ordinal numbers in your ordered Markdown lists, so that
+the numbers in your source match the numbers in your published HTML.
+But if you want to be lazy, you don't have to.
+
+If you do use lazy list numbering, however, you should still start the
+list with the number 1. At some point in the future, Markdown may support
+starting ordered lists at an arbitrary number.
+
+List markers typically start at the left margin, but may be indented by
+up to three spaces. List markers must be followed by one or more spaces
+or a tab.
+
+To make lists look nice, you can wrap items with hanging indents:
+
+\begin{verbatim}
+*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+    Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+    viverra nec, fringilla in, laoreet vitae, risus.
+*   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+    Suspendisse id sem consectetuer libero luctus adipiscing.
+\end{verbatim}
+
+But if you want to be lazy, you don't have to:
+
+\begin{verbatim}
+*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+viverra nec, fringilla in, laoreet vitae, risus.
+*   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+Suspendisse id sem consectetuer libero luctus adipiscing.
+\end{verbatim}
+
+If list items are separated by blank lines, Markdown will wrap the
+items in \texttt{$<$p$>$} tags in the HTML output. For example, this input:
+
+\begin{verbatim}
+*   Bird
+*   Magic
+\end{verbatim}
+
+will turn into:
+
+\begin{verbatim}
+<ul>
+<li>Bird</li>
+<li>Magic</li>
+</ul>
+\end{verbatim}
+
+But this:
+
+\begin{verbatim}
+*   Bird
+
+*   Magic
+\end{verbatim}
+
+will turn into:
+
+\begin{verbatim}
+<ul>
+<li><p>Bird</p></li>
+<li><p>Magic</p></li>
+</ul>
+\end{verbatim}
+
+List items may consist of multiple paragraphs. Each subsequent
+paragraph in a list item must be indented by either 4 spaces
+or one tab:
+
+\begin{verbatim}
+1.  This is a list item with two paragraphs. Lorem ipsum dolor
+    sit amet, consectetuer adipiscing elit. Aliquam hendrerit
+    mi posuere lectus.
+
+    Vestibulum enim wisi, viverra nec, fringilla in, laoreet
+    vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
+    sit amet velit.
+
+2.  Suspendisse id sem consectetuer libero luctus adipiscing.
+\end{verbatim}
+
+It looks nice if you indent every line of the subsequent
+paragraphs, but here again, Markdown will allow you to be
+lazy:
+
+\begin{verbatim}
+*   This is a list item with two paragraphs.
+
+    This is the second paragraph in the list item. You're
+only required to indent the first line. Lorem ipsum dolor
+sit amet, consectetuer adipiscing elit.
+
+*   Another item in the same list.
+\end{verbatim}
+
+To put a blockquote within a list item, the blockquote's \texttt{$>$}
+delimiters need to be indented:
+
+\begin{verbatim}
+*   A list item with a blockquote:
+
+    > This is a blockquote
+    > inside a list item.
+\end{verbatim}
+
+To put a code block within a list item, the code block needs
+to be indented \emph{twice} -- 8 spaces or two tabs:
+
+\begin{verbatim}
+*   A list item with a code block:
+
+        <code goes here>
+\end{verbatim}
+
+It's worth noting that it's possible to trigger an ordered list by
+accident, by writing something like this:
+
+\begin{verbatim}
+1986. What a great season.
+\end{verbatim}
+
+In other words, a \emph{number-period-space} sequence at the beginning of a
+line. To avoid this, you can backslash-escape the period:
+
+\begin{verbatim}
+1986\. What a great season.
+\end{verbatim}
+
+Pre-formatted code blocks are used for writing about programming or
+markup source code. Rather than forming normal paragraphs, the lines
+of a code block are interpreted literally. Markdown wraps a code block
+in both \texttt{$<$pre$>$} and \texttt{$<$code$>$} tags.
+
+To produce a code block in Markdown, simply indent every line of the
+block by at least 4 spaces or 1 tab. For example, given this input:
+
+\begin{verbatim}
+This is a normal paragraph:
+
+    This is a code block.
+\end{verbatim}
+
+Markdown will generate:
+
+\begin{verbatim}
+<p>This is a normal paragraph:</p>
+
+<pre><code>This is a code block.
+</code></pre>
+\end{verbatim}
+
+One level of indentation -- 4 spaces or 1 tab -- is removed from each
+line of the code block. For example, this:
+
+\begin{verbatim}
+Here is an example of AppleScript:
+
+    tell application "Foo"
+        beep
+    end tell
+\end{verbatim}
+
+will turn into:
+
+\begin{verbatim}
+<p>Here is an example of AppleScript:</p>
+
+<pre><code>tell application "Foo"
+    beep
+end tell
+</code></pre>
+\end{verbatim}
+
+A code block continues until it reaches a line that is not indented
+(or the end of the article).
+
+Within a code block, ampersands (\texttt{\&}) and angle brackets (\texttt{$<$} and \texttt{$>$})
+are automatically converted into HTML entities. This makes it very
+easy to include example HTML source code using Markdown -- just paste
+it and indent it, and Markdown will handle the hassle of encoding the
+ampersands and angle brackets. For example, this:
+
+\begin{verbatim}
+    <div class="footer">
+        &copy; 2004 Foo Corporation
+    </div>
+\end{verbatim}
+
+will turn into:
+
+\begin{verbatim}
+<pre><code>&lt;div class="footer"&gt;
+    &amp;copy; 2004 Foo Corporation
+&lt;/div&gt;
+</code></pre>
+\end{verbatim}
+
+Regular Markdown syntax is not processed within code blocks. E.g.,
+asterisks are just literal asterisks within a code block. This means
+it's also easy to use Markdown to write about Markdown's own syntax.
+
+You can produce a horizontal rule tag (\texttt{$<$hr \slash $>$}) by placing three or
+more hyphens, asterisks, or underscores on a line by themselves. If you
+wish, you may use spaces between the hyphens or asterisks. Each of the
+following lines will produce a horizontal rule:
+
+\begin{verbatim}
+* * *
+
+***
+
+*****
+
+- - -
+
+---------------------------------------
+\end{verbatim}
+
+\begin{center}\rule{3in}{0.4pt}\end{center}
+
+Markdown supports two style of links: \emph{inline} and \emph{reference}.
+
+In both styles, the link text is delimited by [square brackets].
+
+To create an inline link, use a set of regular parentheses immediately
+after the link text's closing square bracket. Inside the parentheses,
+put the URL where you want the link to point, along with an \emph{optional}
+title for the link, surrounded in quotes. For example:
+
+\begin{verbatim}
+This is [an example](http://example.com/ "Title") inline link.
+
+[This link](http://example.net/) has no title attribute.
+\end{verbatim}
+
+Will produce:
+
+\begin{verbatim}
+<p>This is <a href="http://example.com/" title="Title">
+an example</a> inline link.</p>
+
+<p><a href="http://example.net/">This link</a> has no
+title attribute.</p>
+\end{verbatim}
+
+If you're referring to a local resource on the same server, you can
+use relative paths:
+
+\begin{verbatim}
+See my [About](/about/) page for details.   
+\end{verbatim}
+
+Reference-style links use a second set of square brackets, inside
+which you place a label of your choosing to identify the link:
+
+\begin{verbatim}
+This is [an example][id] reference-style link.
+\end{verbatim}
+
+You can optionally use a space to separate the sets of brackets:
+
+\begin{verbatim}
+This is [an example] [id] reference-style link.
+\end{verbatim}
+
+Then, anywhere in the document, you define your link label like this,
+on a line by itself:
+
+\begin{verbatim}
+[id]: http://example.com/  "Optional Title Here"
+\end{verbatim}
+
+That is:
+
+\begin{itemize}
+\item Square brackets containing the link identifier (optionally
+indented from the left margin using up to three spaces);
+
+\item followed by a colon;
+
+\item followed by one or more spaces (or tabs);
+
+\item followed by the URL for the link;
+
+\item optionally followed by a title attribute for the link, enclosed
+in double or single quotes, or enclosed in parentheses.
+
+\end{itemize}
+
+The following three link definitions are equivalent:
+
+\begin{verbatim}
+[foo]: http://example.com/  "Optional Title Here"
+[foo]: http://example.com/  'Optional Title Here'
+[foo]: http://example.com/  (Optional Title Here)
+\end{verbatim}
+
+\textbf{Note:} There is a known bug in Markdown.pl 1.0.1 which prevents
+single quotes from being used to delimit link titles.
+
+The link URL may, optionally, be surrounded by angle brackets:
+
+\begin{verbatim}
+[id]: <http://example.com/>  "Optional Title Here"
+\end{verbatim}
+
+You can put the title attribute on the next line and use extra spaces
+or tabs for padding, which tends to look better with longer URLs:
+
+\begin{verbatim}
+[id]: http://example.com/longish/path/to/resource/here
+    "Optional Title Here"
+\end{verbatim}
+
+Link definitions are only used for creating links during Markdown
+processing, and are stripped from your document in the HTML output.
+
+Link definition names may consist of letters, numbers, spaces, and
+punctuation -- but they are \emph{not} case sensitive. E.g. these two
+links:
+
+\begin{verbatim}
+[link text][a]
+[link text][A]
+\end{verbatim}
+
+are equivalent.
+
+The \emph{implicit link name} shortcut allows you to omit the name of the
+link, in which case the link text itself is used as the name.
+Just use an empty set of square brackets -- e.g., to link the word
+``Google'' to the google.com web site, you could simply write:
+
+\begin{verbatim}
+[Google][]
+\end{verbatim}
+
+And then define the link:
+
+\begin{verbatim}
+[Google]: http://google.com/
+\end{verbatim}
+
+Because link names may contain spaces, this shortcut even works for
+multiple words in the link text:
+
+\begin{verbatim}
+Visit [Daring Fireball][] for more information.
+\end{verbatim}
+
+And then define the link:
+
+\begin{verbatim}
+[Daring Fireball]: http://daringfireball.net/
+\end{verbatim}
+
+Link definitions can be placed anywhere in your Markdown document. I
+tend to put them immediately after each paragraph in which they're
+used, but if you want, you can put them all at the end of your
+document, sort of like footnotes.
+
+Here's an example of reference links in action:
+
+\begin{verbatim}
+I get 10 times more traffic from [Google] [1] than from
+[Yahoo] [2] or [MSN] [3].
+
+  [1]: http://google.com/        "Google"
+  [2]: http://search.yahoo.com/  "Yahoo Search"
+  [3]: http://search.msn.com/    "MSN Search"
+\end{verbatim}
+
+Using the implicit link name shortcut, you could instead write:
+
+\begin{verbatim}
+I get 10 times more traffic from [Google][] than from
+[Yahoo][] or [MSN][].
+
+  [google]: http://google.com/        "Google"
+  [yahoo]:  http://search.yahoo.com/  "Yahoo Search"
+  [msn]:    http://search.msn.com/    "MSN Search"
+\end{verbatim}
+
+Both of the above examples will produce the following HTML output:
+
+\begin{verbatim}
+<p>I get 10 times more traffic from <a href="http://google.com/"
+title="Google">Google</a> than from
+<a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a>
+or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p>
+\end{verbatim}
+
+For comparison, here is the same paragraph written using
+Markdown's inline link style:
+
+\begin{verbatim}
+I get 10 times more traffic from [Google](http://google.com/ "Google")
+than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or
+[MSN](http://search.msn.com/ "MSN Search").
+\end{verbatim}
+
+The point of reference-style links is not that they're easier to
+write. The point is that with reference-style links, your document
+source is vastly more readable. Compare the above examples: using
+reference-style links, the paragraph itself is only 81 characters
+long; with inline-style links, it's 176 characters; and as raw HTML,
+it's 234 characters. In the raw HTML, there's more markup than there
+is text.
+
+With Markdown's reference-style links, a source document much more
+closely resembles the final output, as rendered in a browser. By
+allowing you to move the markup-related metadata out of the paragraph,
+you can add links without interrupting the narrative flow of your
+prose.
+
+Markdown treats asterisks (\texttt{*}) and underscores (\texttt{\_}) as indicators of
+emphasis. Text wrapped with one \texttt{*} or \texttt{\_} will be wrapped with an
+HTML \texttt{$<$em$>$} tag; double \texttt{*}'s or \texttt{\_}'s will be wrapped with an HTML
+\texttt{$<$strong$>$} tag. E.g., this input:
+
+\begin{verbatim}
+*single asterisks*
+
+_single underscores_
+
+**double asterisks**
+
+__double underscores__
+\end{verbatim}
+
+will produce:
+
+\begin{verbatim}
+<em>single asterisks</em>
+
+<em>single underscores</em>
+
+<strong>double asterisks</strong>
+
+<strong>double underscores</strong>
+\end{verbatim}
+
+You can use whichever style you prefer; the lone restriction is that
+the same character must be used to open and close an emphasis span.
+
+Emphasis can be used in the middle of a word:
+
+\begin{verbatim}
+un*frigging*believable
+\end{verbatim}
+
+But if you surround an \texttt{*} or \texttt{\_} with spaces, it'll be treated as a
+literal asterisk or underscore.
+
+To produce a literal asterisk or underscore at a position where it
+would otherwise be used as an emphasis delimiter, you can backslash
+escape it:
+
+\begin{verbatim}
+\*this text is surrounded by literal asterisks\*
+\end{verbatim}
+
+To indicate a span of code, wrap it with backtick quotes (\texttt{`}).
+Unlike a pre-formatted code block, a code span indicates code within a
+normal paragraph. For example:
+
+\begin{verbatim}
+Use the `printf()` function.
+\end{verbatim}
+
+will produce:
+
+\begin{verbatim}
+<p>Use the <code>printf()</code> function.</p>
+\end{verbatim}
+
+To include a literal backtick character within a code span, you can use
+multiple backticks as the opening and closing delimiters:
+
+\begin{verbatim}
+``There is a literal backtick (`) here.``
+\end{verbatim}
+
+which will produce this:
+
+\begin{verbatim}
+<p><code>There is a literal backtick (`) here.</code></p>
+\end{verbatim}
+
+The backtick delimiters surrounding a code span may include spaces --
+one after the opening, one before the closing. This allows you to place
+literal backtick characters at the beginning or end of a code span:
+
+\begin{verbatim}
+A single backtick in a code span: `` ` ``
+
+A backtick-delimited string in a code span: `` `foo` ``
+\end{verbatim}
+
+will produce:
+
+\begin{verbatim}
+<p>A single backtick in a code span: <code>`</code></p>
+
+<p>A backtick-delimited string in a code span: <code>`foo`</code></p>
+\end{verbatim}
+
+With a code span, ampersands and angle brackets are encoded as HTML
+entities automatically, which makes it easy to include example HTML
+tags. Markdown will turn this:
+
+\begin{verbatim}
+Please don't use any `<blink>` tags.
+\end{verbatim}
+
+into:
+
+\begin{verbatim}
+<p>Please don't use any <code>&lt;blink&gt;</code> tags.</p>
+\end{verbatim}
+
+You can write this:
+
+\begin{verbatim}
+`&#8212;` is the decimal-encoded equivalent of `&mdash;`.
+\end{verbatim}
+
+to produce:
+
+\begin{verbatim}
+<p><code>&amp;#8212;</code> is the decimal-encoded
+equivalent of <code>&amp;mdash;</code>.</p>
+\end{verbatim}
+
+Admittedly, it's fairly difficult to devise a ``natural'' syntax for
+placing images into a plain text document format.
+
+Markdown uses an image syntax that is intended to resemble the syntax
+for links, allowing for two styles: \emph{inline} and \emph{reference}.
+
+Inline image syntax looks like this:
+
+\begin{verbatim}
+![Alt text](/path/to/img.jpg)
+
+![Alt text](/path/to/img.jpg "Optional title")
+\end{verbatim}
+
+That is:
+
+\begin{itemize}
+\item An exclamation mark: \texttt{!};
+
+\item followed by a set of square brackets, containing the \texttt{alt}
+attribute text for the image;
+
+\item followed by a set of parentheses, containing the URL or path to
+the image, and an optional \texttt{title} attribute enclosed in double
+or single quotes.
+
+\end{itemize}
+
+Reference-style image syntax looks like this:
+
+\begin{verbatim}
+![Alt text][id]
+\end{verbatim}
+
+Where ``id'' is the name of a defined image reference. Image references
+are defined using syntax identical to link references:
+
+\begin{verbatim}
+[id]: url/to/image  "Optional title attribute"
+\end{verbatim}
+
+As of this writing, Markdown has no syntax for specifying the
+dimensions of an image; if this is important to you, you can simply
+use regular HTML \texttt{$<$img$>$} tags.
+
+\begin{center}\rule{3in}{0.4pt}\end{center}
+
+Markdown supports a shortcut style for creating ``automatic'' links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this:
+
+\begin{verbatim}
+<http://example.com/>
+\end{verbatim}
+
+Markdown will turn this into:
+
+\begin{verbatim}
+<a href="http://example.com/">http://example.com/</a>
+\end{verbatim}
+
+Automatic links for email addresses work similarly, except that
+Markdown will also perform a bit of randomized decimal and hex
+entity-encoding to help obscure your address from address-harvesting
+spambots. For example, Markdown will turn this:
+
+\begin{verbatim}
+<address@example.com>
+\end{verbatim}
+
+into something like this:
+
+\begin{verbatim}
+<a href="&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65;
+&#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;
+&#109;">&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;
+&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a>
+\end{verbatim}
+
+which will render in a browser as a clickable link to ``address@example.com''.
+
+(This sort of entity-encoding trick will indeed fool many, if not
+most, address-harvesting bots, but it definitely won't fool all of
+them. It's better than nothing, but an address published in this way
+will probably eventually start receiving spam.)
+
+Markdown allows you to use backslash escapes to generate literal
+characters which would otherwise have special meaning in Markdown's
+formatting syntax. For example, if you wanted to surround a word
+with literal asterisks (instead of an HTML \texttt{$<$em$>$} tag), you can use
+backslashes before the asterisks, like this:
+
+\begin{verbatim}
+\*literal asterisks\*
+\end{verbatim}
+
+Markdown provides backslash escapes for the following characters:
+
+\begin{verbatim}
+\   backslash
+`   backtick
+*   asterisk
+_   underscore
+{}  curly braces
+[]  square brackets
+()  parentheses
+#   hash mark
++   plus sign
+-   minus sign (hyphen)
+.   dot
+!   exclamation mark
+\end{verbatim}
diff --git a/tests/MMD6Tests/Reference Images.tex b/tests/MMD6Tests/Reference Images.tex
new file mode 100644 (file)
index 0000000..ffe579f
--- /dev/null
@@ -0,0 +1,17 @@
+Test \includegraphics[keepaspectratio,width=\textwidth,height=0.75\textheight]{http://test.1/}.
+
+Test \includegraphics[keepaspectratio,width=\textwidth,height=0.75\textheight]{http://test.1/}.
+
+Test \includegraphics[keepaspectratio,width=\textwidth,height=0.75\textheight]{http://test.3/}.
+
+Test \includegraphics[keepaspectratio,width=\textwidth,height=0.75\textheight]{http://test.4/}.
+
+Test \includegraphics[keepaspectratio,width=\textwidth,height=0.75\textheight]{http://test.4/}.
+
+5
+
+Test \includegraphics[keepaspectratio,width=\textwidth,height=0.75\textheight]{http://test.6/}.
+
+Test \includegraphics[keepaspectratio,width=\textwidth,height=0.75\textheight]{http://test.0/}.
+
+Test \includegraphics[keepaspectratio,width=\textwidth,height=0.75\textheight]{http://test.0/}.
diff --git a/tests/MMD6Tests/Reference Links.tex b/tests/MMD6Tests/Reference Links.tex
new file mode 100644 (file)
index 0000000..9493662
--- /dev/null
@@ -0,0 +1,32 @@
+\href{http://test.1/file.txt}{\emph{foo}}\footnote{\href{http://test.1/file.txt}{http:\slash \slash test.1\slash file.txt}}.
+
+\href{http://test.1/file.txt}{\emph{foo}}\footnote{\href{http://test.1/file.txt}{http:\slash \slash test.1\slash file.txt}}.
+
+\href{http://test.3/file.txt}{\emph{foo}}\footnote{\href{http://test.3/file.txt}{http:\slash \slash test.3\slash file.txt}}.
+
+\href{http://test.4/}{\emph{foo}}\footnote{\href{http://test.4/}{http:\slash \slash test.4\slash }}.
+
+\href{http://test.4/}{\emph{foo}}\footnote{\href{http://test.4/}{http:\slash \slash test.4\slash }}.
+
+5
+
+\href{http://test.6/}{\emph{foo}}\footnote{\href{http://test.6/}{http:\slash \slash test.6\slash }}.
+
+\href{http://test.0/}{foo}\footnote{\href{http://test.0/}{http:\slash \slash test.0\slash }}.
+
+\href{http://test.0/}{foo}\footnote{\href{http://test.0/}{http:\slash \slash test.0\slash }}.
+
+\href{http://test.1/file.txt}{\href{http://test.0/}{foo}\footnote{\href{http://test.0/}{http:\slash \slash test.0\slash }}}\footnote{\href{http://test.1/file.txt}{http:\slash \slash test.1\slash file.txt}}
+
+\href{http://test.0/}{\href{http://test.0/}{foo}\footnote{\href{http://test.0/}{http:\slash \slash test.0\slash }}}\footnote{\href{http://test.0/}{http:\slash \slash test.0\slash }}
+
+10
+
+\href{http://test.3/file.txt}{\href{http://test.1/file.txt}{foo}\footnote{\href{http://test.1/file.txt}{http:\slash \slash test.1\slash file.txt}}}\footnote{\href{http://test.3/file.txt}{http:\slash \slash test.3\slash file.txt}}
+
+\href{http://test.1/file.txt}{foo}\footnote{\href{http://test.1/file.txt}{http:\slash \slash test.1\slash file.txt}}
+
+\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://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}}