From: Fletcher T. Penney Date: Mon, 13 Feb 2017 21:28:36 +0000 (-0500) Subject: ADDED: LaTeX nearly finished X-Git-Tag: 0.3.0a^2~3 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1db22036c9308335d5972345fecf1384ae804044;p=multimarkdown ADDED: LaTeX nearly finished --- diff --git a/src/latex.c b/src/latex.c index 39e27d7..1371edb 100644 --- a/src/latex.c +++ b/src/latex.c @@ -52,9 +52,10 @@ */ +#include #include #include -#include +#include #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); diff --git a/tests/MMD6Tests/Citations.tex b/tests/MMD6Tests/Citations.tex index 273c925..e461eff 100644 --- a/tests/MMD6Tests/Citations.tex +++ b/tests/MMD6Tests/Citations.tex @@ -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. diff --git a/tests/MMD6Tests/Figure Images.tex b/tests/MMD6Tests/Figure Images.tex index 497b7c2..993bcaf 100644 --- a/tests/MMD6Tests/Figure Images.tex +++ b/tests/MMD6Tests/Figure Images.tex @@ -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 index 0000000..976bb19 --- /dev/null +++ b/tests/MMD6Tests/Inline Links.tex @@ -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}}. diff --git a/tests/MMD6Tests/Integrated.tex b/tests/MMD6Tests/Integrated.tex index d8dc108..073e2d6 100644 --- a/tests/MMD6Tests/Integrated.tex +++ b/tests/MMD6Tests/Integrated.tex @@ -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 index 0000000..1fcc549 --- /dev/null +++ b/tests/MMD6Tests/Link Attributes.tex @@ -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 index 0000000..e88faa4 --- /dev/null +++ b/tests/MMD6Tests/Markdown Syntax.tex @@ -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. + + + + + +
Foo
+ +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{\<}, 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&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} +© +\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&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 < 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} +
    +
  1. Bird
  2. +
  3. McHale
  4. +
  5. Parish
  6. +
+\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} +
    +
  • Bird
  • +
  • Magic
  • +
+\end{verbatim} + +But this: + +\begin{verbatim} +* Bird + +* Magic +\end{verbatim} + +will turn into: + +\begin{verbatim} +
    +
  • Bird

  • +
  • Magic

  • +
+\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: + + +\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} +

This is a normal paragraph:

+ +
This is a code block.
+
+\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} +

Here is an example of AppleScript:

+ +
tell application "Foo"
+    beep
+end tell
+
+\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} + +\end{verbatim} + +will turn into: + +\begin{verbatim} +
<div class="footer">
+    &copy; 2004 Foo Corporation
+</div>
+
+\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} +

This is +an example inline link.

+ +

This link has no +title attribute.

+\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]: "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} +

I get 10 times more traffic from Google than from +Yahoo +or MSN.

+\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} +single asterisks + +single underscores + +double asterisks + +double underscores +\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} +

Use the printf() function.

+\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} +

There is a literal backtick (`) here.

+\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} +

A single backtick in a code span: `

+ +

A backtick-delimited string in a code span: `foo`

+\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 `` tags. +\end{verbatim} + +into: + +\begin{verbatim} +

Please don't use any <blink> tags.

+\end{verbatim} + +You can write this: + +\begin{verbatim} +`—` is the decimal-encoded equivalent of `—`. +\end{verbatim} + +to produce: + +\begin{verbatim} +

&#8212; is the decimal-encoded +equivalent of &mdash;.

+\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} + +\end{verbatim} + +Markdown will turn this into: + +\begin{verbatim} +http://example.com/ +\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} + +\end{verbatim} + +into something like this: + +\begin{verbatim} +address@exa +mple.com +\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 index 0000000..ffe579f --- /dev/null +++ b/tests/MMD6Tests/Reference Images.tex @@ -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 index 0000000..9493662 --- /dev/null +++ b/tests/MMD6Tests/Reference Links.tex @@ -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}}