diff options
Diffstat (limited to 'doc/rfc/rfc7764.txt')
-rw-r--r-- | doc/rfc/rfc7764.txt | 1571 |
1 files changed, 1571 insertions, 0 deletions
diff --git a/doc/rfc/rfc7764.txt b/doc/rfc/rfc7764.txt new file mode 100644 index 0000000..e9f8a69 --- /dev/null +++ b/doc/rfc/rfc7764.txt @@ -0,0 +1,1571 @@ + + + + + + +Internet Engineering Task Force (IETF) S. Leonard +Request for Comments: 7764 Penango, Inc. +Category: Informational March 2016 +ISSN: 2070-1721 + + + Guidance on Markdown: + Design Philosophies, Stability Strategies, and Select Registrations + +Abstract + + This document elaborates upon the text/markdown media type for use + with Markdown, a family of plain-text formatting syntaxes that + optionally can be converted to formal markup languages such as HTML. + Background information, local storage strategies, and additional + syntax registrations are supplied. + +Status of This Memo + + This document is not an Internet Standards Track specification; it is + published for informational purposes. + + This document is a product of the Internet Engineering Task Force + (IETF). It represents the consensus of the IETF community. It has + received public review and has been approved for publication by the + Internet Engineering Steering Group (IESG). Not all documents + approved by the IESG are a candidate for any level of Internet + Standard; see Section 2 of RFC 5741. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + http://www.rfc-editor.org/info/rfc7764. + +Copyright Notice + + Copyright (c) 2016 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (http://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Simplified BSD License text as described in Section 4.e of + the Trust Legal Provisions and are provided without warranty as + described in the Simplified BSD License. + + + + +Leonard Informational [Page 1] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +Table of Contents + + 1. Dive into Markdown . . . . . . . . . . . . . . . . . . . . . . 3 + 1.1. On Formats . . . . . . . . . . . . . . . . . . . . . . . . 3 + 1.2. Markdown Design Philosophy . . . . . . . . . . . . . . . . 4 + 1.3. Uses of Markdown . . . . . . . . . . . . . . . . . . . . . 5 + 1.4. Uses of Labeling Markdown Content as text/markdown . . . . 6 + 1.5. Definitions . . . . . . . . . . . . . . . . . . . . . . . . 6 + 2. Strategies for Preserving Media Type and Parameters . . . . . 7 + 2.1. Map to Filename and Attributes . . . . . . . . . . . . . . 7 + 2.2. Store Headers in Adjacent File . . . . . . . . . . . . . . 8 + 2.3. "Arm" Content with MIME Headers . . . . . . . . . . . . . . 8 + 2.4. Create a Local Batch Script . . . . . . . . . . . . . . . . 9 + 2.5. Process the Markdown in Advance . . . . . . . . . . . . . . 9 + 2.6. Rely on Context . . . . . . . . . . . . . . . . . . . . . . 9 + 2.7. Specific Strategies . . . . . . . . . . . . . . . . . . . . 9 + 2.7.1. Subversion . . . . . . . . . . . . . . . . . . . . . . 9 + 2.7.2. Git . . . . . . . . . . . . . . . . . . . . . . . . . . 10 + 3. Registration Templates for Common Markdown Syntaxes . . . . . 10 + 3.1. MultiMarkdown . . . . . . . . . . . . . . . . . . . . . . . 10 + 3.2. GitHub-Flavored Markdown . . . . . . . . . . . . . . . . . 11 + 3.3. Pandoc . . . . . . . . . . . . . . . . . . . . . . . . . . 12 + 3.4. Fountain (Fountain.io) . . . . . . . . . . . . . . . . . . 14 + 3.5. CommonMark . . . . . . . . . . . . . . . . . . . . . . . . 14 + 3.6. kramdown-rfc2629 (Markdown for RFCs) . . . . . . . . . . . 15 + 3.7. rfc7328 (Pandoc2rfc) . . . . . . . . . . . . . . . . . . . 16 + 3.8. PHP Markdown Extra . . . . . . . . . . . . . . . . . . . . 16 + 4. Examples for Common Markdown Syntaxes . . . . . . . . . . . . 17 + 4.1. MultiMarkdown . . . . . . . . . . . . . . . . . . . . . . . 17 + 4.2. GitHub Flavored Markdown . . . . . . . . . . . . . . . . . 18 + 4.3. Pandoc . . . . . . . . . . . . . . . . . . . . . . . . . . 19 + 4.4. Fountain (Fountain.io) . . . . . . . . . . . . . . . . . . 20 + 4.5. CommonMark . . . . . . . . . . . . . . . . . . . . . . . . 21 + 4.6. kramdown-rfc2629 (Markdown for RFCs) . . . . . . . . . . . 22 + 4.7. rfc7328 (Pandoc2rfc) . . . . . . . . . . . . . . . . . . . 25 + 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 + 6. Security Considerations . . . . . . . . . . . . . . . . . . . . 26 + 7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 26 + 7.1. Normative References . . . . . . . . . . . . . . . . . . . 26 + 7.2. Informative References . . . . . . . . . . . . . . . . . . 26 + Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 28 + + + + + + + + + + +Leonard Informational [Page 2] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +1. Dive into Markdown + + This document serves as an informational companion to [RFC7763], the + text/markdown media type registration. It should be considered + jointly with [RFC7763]. + + "Sometimes the truth of a thing is not so much in the think of + it, but in the feel of it." -- Stanley Kubrick + +1.1. On Formats + + In computer systems, textual data is stored and processed using a + continuum of techniques. On the one end is plain text: computer- + encoded text that consists only of a sequence of code points from a + given standard, with no other formatting or structural information + [UNICODE]. Plain text provides /some/ fixed facilities for + formatting instructions (namely, codes in the character set that have + meanings other than "represent this character graphically on the + output medium"); however, these facilities are not particularly + extensible. Compare with Section 4.2.1 of [RFC6838]. Applications + may neuter the effects of these special characters by prohibiting + them or by ignoring their dictated meanings, as is the case with how + modern applications treat most control characters in US-ASCII. On + this end, any text reader or editor that interprets the character set + can be used to see or manipulate the text. If some characters are + corrupted, the corruption is unlikely to affect the ability of a + computer system to process the text (even if the human meaning is + changed). + + On the other end is binary data: a sequence of bits intended for some + computer application to interpret and act upon. Binary formats are + flexible in that they can store non-textual data efficiently (perhaps + storing no text at all, or only storing certain kinds of text for + very specialized purposes). Binary formats require an application to + be coded specifically to handle the format; no partial + interoperability is possible. Furthermore, if even one bit is + corrupted in a binary format, it may prevent an application from + processing any of the data correctly. + + Between these two extremes lies formatted text, i.e., text that + includes non-textual information coded in a particular way, that + affects the interpretation of the text by computer programs. + Formatted text is distinct from plain text and binary data in that + the non-textual information is encoded into textual characters that + are assigned specialized meanings not defined by the character set. + With a regular text editor and a standard keyboard (or other standard + input mechanism), a user can enter these textual characters to + express the non-textual meanings. For example, a character like "<" + + + +Leonard Informational [Page 3] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + + no longer means "LESS-THAN SIGN"; it means the start of a tag or + element that affects the document in some way. + + On the formal end of the formatted text spectrum is markup, a family + of languages for annotating a document in such a way that the + annotations are syntactically distinguishable from the text. Markup + languages are (reasonably) well-specified and tend to follow (mostly) + standardized syntax rules. Examples of markup languages include + Standard Generalized Markup Language (SGML), HTML, XML, and LaTeX. + Standardized rules lead to interoperability between markup + processors, but a skill requirement for new (human) users of the + language that they learn these rules in order to do useful work. + This imposition makes markup less accessible for non-technical users + (i.e., users who are unwilling or unable to invest in the requisite + skill development). + + informal /---------formatted text----------\ formal + <------v-------------v-------------v-----------------------v----> + plain text informal markup formal markup binary format + (Markdown) (HTML, XML, etc.) + + Figure 1: Degrees of Formality in Data-Storage Formats for Text + + On the informal end of the spectrum are lightweight markup languages. + In comparison with formal markup like XML, lightweight markup uses + simple syntax, and is designed to be easy for humans to enter with + basic text editors. Markdown, the subject of this document, is an + /informal/ plain-text formatting syntax that is intentionally + targeted at non-technical users (i.e., users upon whom little to no + skill development is imposed) using unspecialized tools (i.e., text + boxes). Jeff Atwood once described these informal markup languages + as "humane" [HUMANE]. + +1.2. Markdown Design Philosophy + + Markdown specifically is a family of syntaxes that are based on the + original work of John Gruber with substantial contributions from + Aaron Swartz, released in 2004 [MARKDOWN]. Since its release, a + number of web or web-facing applications have incorporated Markdown + into their text-entry systems, frequently with custom extensions. + Fed up with the complexity and security pitfalls of formal markup + languages (e.g., HTML5) and proprietary binary formats (e.g., + commercial word-processing software), yet unwilling to be confined to + the restrictions of plain text, many users have turned to Markdown + for document processing. Whole toolchains now exist to support + Markdown for online and offline projects. + + + + + +Leonard Informational [Page 4] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + + Informality is a bedrock premise of Gruber's design. Gruber created + Markdown after disastrous experiences with strict XML and XHTML + processing of syndicated feeds. In Mark Pilgrim's "thought + experiment", several websites went down because one site included + invalid XHTML in a blog post, which was automatically copied via + trackbacks across other sites [DIN2MD]. These scenarios led Gruber + to believe that clients (e.g., web browsers) SHOULD try to make sense + of data that they receive, rather than rejecting data simply because + it fails to adhere to strict, unforgiving standards. (In [DIN2MD], + Gruber compared Postel's Law [RFC793] with the XML standard, which + says: "Once a fatal error is detected [...] the processor MUST NOT + continue normal processing" [XML1.0-5].) As a result, there is no + such thing as "invalid" Markdown, there is no standard demanding + adherence to the Markdown syntax, and there is no governing body that + guides or impedes its development. If the Markdown syntax does not + result in the "right" output (defined as output that the author + wants, not output that adheres to some dictated system of rules), + Gruber's view is that the author either should keep on experimenting + or should change the processor to address the author's particular + needs (see [MARKDOWN] Readme and [MD102b8] perldoc; see also + [CATPICS]). + +1.3. Uses of Markdown + + Since its introduction in 2004, Markdown has enjoyed remarkable + success. Markdown works for users for three key reasons. First, the + markup instructions (in text) look similar to the markup that they + represent; therefore, the cognitive burden to learn the syntax is + low. Second, the primary arbiter of the syntax's success is *running + code*. The tool that converts the Markdown to a presentable format, + and not a series of formal pronouncements by a standards body, is the + basis for whether syntactic elements matter. Third, Markdown has + become something of an Internet meme [INETMEME], in that Markdown + gets received, reinterpreted, and reworked as additional communities + encounter it. There are communities that are using Markdown for + scholarly writing [OCCASION], for screenplays [FOUNTAIN], and even + for mathematical formulae [MATHDOWN]. Clearly, a screenwriter has no + use for specialized Markdown syntax for mathematicians; likewise, + mathematicians do not need to identify characters or props in common + ways. The overall gist is that all of these communities can take the + common elements of Markdown (which are rooted in the common elements + of HTML circa 2004) and build on them in ways that best fit their + needs. + + + + + + + + +Leonard Informational [Page 5] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +1.4. Uses of Labeling Markdown Content as text/markdown + + The primary purpose of an Internet media type is to label "content" + on the Internet, as distinct from "files". Content is any computer- + readable format that can be represented as a primary sequence of + octets, along with type-specific metadata (parameters) and type- + agnostic metadata (protocol dependent). From this description, it is + apparent that appending ".markdown" to the end of a filename is not a + sufficient means to identify Markdown. Filenames are properties of + files in file systems, but Markdown frequently exists in databases or + content management systems (CMSes) where the file metaphor does not + apply. One CMS [RAILFROG] uses media types to select appropriate + processing, so a media type is necessary for the safe and + interoperable use of Markdown. + + Unlike complete HTML documents, [MDSYNTAX] provides no means to + include metadata in the content stream. Several derivative flavors + have invented metadata incorporation schemes (e.g., [MULTIMD]), but + these schemes only address specific use cases. In general, the + metadata must be supplied via supplementary means in an encapsulating + protocol, format, or convention. The relationship between the + content and the metadata is not directly addressed here or in + [RFC7763]; however, by identifying Markdown with a media type, + Markdown content can participate as a first-class citizen with a wide + spectrum of metadata schemes. + + Finally, registering a media type through the IETF process is not + trivial. Markdown can no longer be considered a "vendor"-specific + innovation, but the registration requirements even in the vendor tree + have proven to be overly burdensome for most Markdown implementers. + Moreover, registering hundreds of Markdown variants with distinct + media types would impede interoperability: virtually all Markdown + content can be processed by virtually any Markdown processor, with + varying degrees of success. The goal of [RFC7763] is to reduce all + of these burdens by having one media type that accommodates diversity + and eases registration. + +1.5. Definitions + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this + document are to be interpreted as described in [RFC2119]. + + Since Markdown signifies a family of related formats with varying + degrees of formal documentation and implementation, this + specification uses the term "variant" to identify such formats. + + + + + +Leonard Informational [Page 6] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +2. Strategies for Preserving Media Type and Parameters + + The purpose of this document and [RFC7763] is to promote + interoperability between different Markdown-related systems, + preserving the author's intent. While [MARKDOWN] was designed by + Gruber in 2004 as a simple way to write blog posts and comments, as + of 2014 Markdown and its derivatives are rapidly becoming the formats + of record for many communities and use cases. While an individual + member of (or software tool for) a community can probably look at + some "Markdown" and declare its meaning intuitively obvious, software + systems in different communities (or different times) need help. + [MDSYNTAX] does not have a signaling mechanism like <!DOCTYPE>, so + tagging Markdown internally is simply out of the question. Once tags + or metadata are introduced, the content is no longer "just" Markdown. + + Some commentators have suggested that an in-band signaling mechanism, + such as in Markdown link definitions at the top of the content, could + be used to signal the variant. Unfortunately, this signaling + mechanism is incompatible with other Markdown variants (e.g., + [PANDOC]) that expect their own kinds of metadata at the top of the + file. Markdown content is just a stream of text; the semantics of + that text can only be furnished by context. + + The media type and variant parameter in [RFC7763] furnish this + missing context, while allowing for additional extensibility. This + section covers strategies for how an application might preserve + metadata when it leaves the domain of IETF protocols. + + [RFC7763] only defines two parameters: the charset parameter + (required for all text/* media types) and the variant parameter. + [RFC6657] provides guidance on character-set parameter handling. The + variant parameter provides a simple identifier -- nothing less or + more. Variants are allowed to define additional parameters when sent + with the text/markdown media type; the variant can also introduce + control information into the textual content stream (such as via a + metadata block). Neither [RFC7763] nor this specification recommend + any particular approach. However, the philosophy behind [RFC7763] is + to preserve formats rather than create new ones, since supporting + existing toolchains is more realistic than creating novel ones that + lack traction in the Markdown community. + +2.1. Map to Filename and Attributes + + This strategy is to map the media type, variant, and parameters to + "attributes" or "forks" in the local convention. Firstly, Markdown + content saved to a file should have an appropriate file extension + ending in .md or .markdown, which serves to disambiguate it from + other kinds of files. The character repertoire of variant + + + +Leonard Informational [Page 7] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + + identifiers in [RFC7763] is designed to be compatible with most + filename conventions. Therefore, a recommended strategy is to record + the variant identifier as the prefix to the file extension. For + example, for [PANDOC] content, a file could be named + "example.pandoc.markdown". + + Many filesystems are case-sensitive or case-preserving; however, file + extensions tend to be all lowercase. This document takes no position + on whether variant identifiers should be case-preserved or all + lowercase when Markdown content is written to a file. However, when + the variant identifier is read to influence operational behavior, it + needs to be compared case-insensitively. + + Many modern filesystems support "extended attributes", "alternate + data streams", or "resource forks". Some version control systems + support named properties. If the variant defines additional + parameters, these parameters should be stored in these resources, + where the parameter name includes the name of the resource, and the + parameter value is the value of the resource (data in the resource), + preferably UTF-8 encoded (unless the parameter definition explicitly + defines a different encoding or repertoire). The variant identifier + itself should be stored in a resource with a name including the term + "variant" (possibly including other decorations to avoid namespace + collisions). + +2.2. Store Headers in Adjacent File + + This strategy is to save the Markdown content in a first file and to + save the metadata (specifically the Content-Type header) in a second + file with a filename that is rationally related to the first + filename. For example, if the first file is named "readme.markdown", + the second file could be named "readme.markdown.headers". (If stored + in a database, the analogy would be to store the metadata in a second + table with a field that is a key to the first table.) This header + file has the media type message/global-headers [RFC6533] (".u8hdr" + suggestion notwithstanding). + +2.3. "Arm" Content with MIME Headers + + This strategy is to save the Markdown content along with its headers + in a file, "arming" the content by prepending the MIME headers + (specifically the Content-Type header). It should be appreciated + that the file is no longer a "Markdown file"; rather, it is an + Internet Message Format file (e.g., [RFC5322]) with a Markdown + content part. Therefore, the file should have an Internet message + extension (e.g., ".eml", ".msg", or ".u8msg"), not a Markdown + extension (e.g., ".md" or ".markdown"). + + + + +Leonard Informational [Page 8] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +2.4. Create a Local Batch Script + + This strategy is to translate the processing instructions inferred + from the Content-Type and other parameters (e.g., Content- + Disposition) into a sequence of commands in the local convention, + storing those commands in a batch script. For example, when a MIME- + aware client stores some Markdown to disk, the client can save a + Makefile in the same directory with commands that are appropriate + (and safe) for the local system. + +2.5. Process the Markdown in Advance + + This strategy is to process the Markdown into the formal markup, + before a recipient receives it; this eliminates ambiguities. Once + the Markdown is processed into (for example) valid XHTML, an + application can save a file as "doc.xhtml" or can send MIME content + as application/xhtml+xml with no further loss of metadata. While + unambiguous, this process may not be reversible. + +2.6. Rely on Context + + This last strategy is to use or create context to determine how to + interpret the Markdown. For example, Markdown content that is of the + Fountain.io type [FOUNTAIN] could be saved with the filename + "script.fountain" instead of "script.markdown". Alternatively, + scripts could be stored in a "/screenplays" directory while other + kinds of Markdown could be stored elsewhere. For reasons that should + be intuitively obvious, this method is the most error-prone. + "Context" can be easily lost over time, and the trend of passing + Markdown between systems -- taking them *out* of context -- is + increasing. + +2.7. Specific Strategies + +2.7.1. Subversion + + This subsection covers a preservation strategy in Subversion [SVN], a + common client-server version control system. + + Subversion supports named properties. The "svn:mime-type" property + duplicates the entire Content-Type header, so parameters SHOULD be + stored there (Section 2.1). The filename SHOULD be consistent with + this Content-Type header, i.e., the extension SHOULD be the variant + identifier plus ".markdown" (Section 2.1). + + + + + + + +Leonard Informational [Page 9] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +2.7.2. Git + + This subsection covers a preservation strategy in Git [GIT], a common + distributed version control system. + + Versions of Git as of the time of this writing do not support + arbitrary metadata storage; however, third-party projects add this + support. + + If Git is used without a metadata storage service, then a reasonable + strategy is to include the variant identifier in the filename + (Section 2.1). The default text encoding SHOULD be UTF-8. For other + or different properties, a header file SHOULD be recorded alongside + the Markdown file (Section 2.2). + + If a metadata storage service is used with Git, then use a convention + that is most analogous to the service. For example, the "metastore" + project emulates extended attributes (xattrs) of a POSIX-like system, + so whatever "xattr" methodology is developed would be usable with + metastore and Git. + +3. Registration Templates for Common Markdown Syntaxes + + The purpose of this section is to register certain syntaxes in the + "Markdown Variants" registry [RFC7763] because they illustrate + particularly interesting use cases or are broadly applicable to the + Internet community; thus, these syntaxes would benefit from the level + of review associated with publication as IETF documents. + +3.1. MultiMarkdown + + Identifier: MultiMarkdown + + Name: MultiMarkdown + + Description: + MultiMarkdown (MMD) is a superset of "Original". It adds multiple + syntax features (tables, footnotes, and citations, to name a few) + and is intended to output to various formats. Additionally, it + builds in "smart" typography for various languages (proper left- + and right-sided quotes, for example). + + + + + + + + + + +Leonard Informational [Page 10] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + + Additional Parameters: + options: String with zero or more of the following tokens + delimited by whitespace (WSP): + + "memoir" / "beamer" + "full" / "snippet" + "process-html" + "random-footnote-identifiers" + "accept" + "reject" + "nosmart" + "nonotes" + "nolabels" + "nomask" + + The meanings of these tokens are defined in the + MultiMarkdown documentation. + + References: + <http://fletcher.github.io/MultiMarkdown-4/syntax> + + Contact Information: + (individual) Fletcher T. Penney <fletcher@fletcherpenney.net> + <http://fletcherpenney.net/multimarkdown/> + +3.2. GitHub Flavored Markdown + + Identifier: GFM + + Name: GitHub Flavored Markdown + + Description: + "Original" with the following differences: + 1. Multiple underscores in words + 2. URL (URI) autolinking + 3. Strikethrough + 4. Fenced code blocks + 5. Syntax highlighting + 6. Tables (- for rows; | for columns; : for alignment) + 7. Only some HTML allowed; sanitization is integral to the format + + References: + <https://help.github.com/articles/github-flavored-markdown/> + <https://github.com/github/markup/tree/master#html-sanitization> + + Contact Information: + (corporate) GitHub, Inc. <https://github.com/contact> + + + + +Leonard Informational [Page 11] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +3.3. Pandoc + + Identifier: pandoc + + Name: Pandoc + + Description: + Markdown is designed to be easy to write and to read: the content + should be publishable as-is, as plain text, without looking like + it has been marked up with tags or formatting instructions. Yet + whereas "Original" has HTML generation in mind, pandoc is designed + for multiple output formats. Thus, while pandoc allows the + embedding of raw HTML, it discourages it, and provides other, non- + HTMLish ways of representing important document elements like + definition lists, tables, mathematics, and footnotes. + + Additional Parameters: + extensions: String with an optional starting syntax token, + followed by a "+" and "-" delimited list of extension + tokens. "+" preceding an extension token turns the + extension on; "-" turns the extension off. The + starting syntax tokens are "markdown", + "markdown_strict", "markdown_phpextra", and + "markdown_github". If no starting syntax token is + given, "markdown" is assumed. The extension tokens + include: + + Extensions to turn off (on by default): + + escaped_line_breaks + blank_before_header + header_attributes + auto_identifiers + implicit_header_references + blank_before_blockquote + fenced_code_blocks + fenced_code_attributes + line_blocks + fancy_lists + startnum + definition_lists + example_lists + table_captions + simple_tables + multiline_tables + grid_tables + pipe_tables + pandoc_title_block + + + +Leonard Informational [Page 12] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + + yaml_metadata_block + all_symbols_escapable + intraword_underscores + strikeout + superscript + subscript + inline_code_attributes + tex_math_dollars + raw_html + markdown_in_html_blocks + native_divs + native_spans + raw_tex + latex_macros + implicit_figures + footnotes + inline_notes + citations + + Extensions to turn on (off by default): + + lists_without_preceding_blankline + hard_line_breaks + ignore_line_breaks + tex_math_single_backslash + tex_match_double_backslash + markdown_attribute + mmd_title_block + abbreviations + autolink_bare_uris + ascii_identifiers + link_attributes + mmd_header_identifiers + compact_definition_lists + + Fragment Identifiers: + Pandoc defines fragment identifiers using the <id> in the + {#<id> .class ...} production (PHP Markdown Extra attribute + block). This syntax works for Header Identifiers and Code Block + Identifiers. + + References: + <http://johnmacfarlane.net/pandoc/README.html#pandocs-markdown> + + Contact Information: + (individual) Prof. John MacFarlane <jgm@berkeley.edu> + <http://johnmacfarlane.net/> + + + + +Leonard Informational [Page 13] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +3.4. Fountain (Fountain.io) + + Identifier: Fountain + + Name: Fountain + + Description: + Fountain is a simple markup syntax for writing, editing, and + sharing screenplays in plain, human-readable text. Fountain + allows you to work on your screenplay anywhere, on any computer or + tablet, using any software that edits text files. + + Fragment Identifiers: + See <http://fountain.io/syntax#section-titlepage> and + <http://fountain.io/syntax#section-sections>. In the following + fragment identifiers, the <key> and <sec*> productions MUST have + "/" characters percent-encoded. + + #/ Title Page (acts as metadata). + #/<key> Title Page; <key> is the key string. + #<sec1> *("/" <secn>) + Section or subsection. The <sec1>..<secn> productions are + the text of the Section line, with whitespace trimmed from + both ends. Subsections (sections with multiple # characters + at the beginning of the line in the source) are addressed + hierarchically by preceding the subsection with higher-order + sections. If the section hierarchy "skips", e.g., # to ###, + use a blank section name, e.g., + #Section/ACT%20I//PATIO%20SCENE. + + References: + <http://fountain.io/syntax> + + Contact Information: + (individual) Stu Maschwitz <http://prolost.com/> + (individual) John August <http://johnaugust.com/> + +3.5. CommonMark + + Identifier: CommonMark + + Name: CommonMark + + Description: + CommonMark is a standard, unambiguous syntax specification for + Markdown, along with a suite of comprehensive tests to validate + + + + + +Leonard Informational [Page 14] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + + Markdown implementations against this specification. The + maintainers believe that CommonMark is necessary, even essential, + for the future of Markdown. + + Compared to "Original", CommonMark is much longer and in a few + instances contradicts "Original" based on seasoned experience. + Although CommonMark specifically does not mandate any particular + encoding for the input content, CommonMark draws in more of + Unicode, UTF-8, and HTML (including HTML5) than "Original". + + This registration always refers to the latest version or an + unspecified version (receiver's choice). Version 0.13 of the + CommonMark specification was released 2014-12-10. + + References: + <http://spec.commonmark.org/> + + Contact Information: + (individual) John MacFarlane <jgm@berkeley.edu> + (individual) David Greenspan <david@meteor.com> + (individual) Vicent Marti <vicent@github.com> + (individual) Neil Williams <neil@reddit.com> + (individual) Benjamin Dumke-von der Ehe <ben@stackexchange.com> + (individual) Jeff Atwood <jatwood@codinghorror.com> + +3.6. kramdown-rfc2629 (Markdown for RFCs) + + Identifier: kramdown-rfc2629 + + Name: Markdown for RFCs + + Description: + kramdown is a markdown parser by Thomas Leitner; it has a number + of backends for generating HTML, LaTeX, and Markdown again. + kramdown-rfc2629 is an additional backend to that: It allows the + generation of XML2RFC XML markup (originally known as markup that + is RFC 2629 compliant, now documented in RFC 7749). + + References: + <https://github.com/cabo/kramdown-rfc2629> + + Contact Information: + (individual) Carsten Bormann <cabo@tzi.org> + + + + + + + + +Leonard Informational [Page 15] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +3.7. rfc7328 (Pandoc2rfc) + + Identifier: rfc7328 + + Name: Pandoc2rfc + + Description: + Pandoc2rfc allows authors to write in "pandoc" that is then + transformed to XML and given to xml2rfc. The conversions are, in + a way, amusing, as we start off with (almost) plain text, use + elaborate XML, and end up with plain text again. + + References: + RFC 7328 + <https://github.com/miekg/pandoc2rfc> + + Contact Information: + (individual) R. (Miek) Gieben <miek@google.com> + +3.8. PHP Markdown Extra + + Identifier: Extra + + Name: Markdown Extra + + Description: + Markdown Extra is an extension to PHP Markdown implementing some + features currently not available with the plain Markdown syntax. + Markdown Extra is available as a separate parser class in PHP + Markdown Lib. Other implementations include Maruku (Ruby) and Python + Markdown. Markdown Extra is supported in several content management + systems, including Drupal, TYPO3, and MediaWiki. + + Fragment Identifiers: + Markdown Extra defines fragment identifiers using the <id> in the + {#<id> .class ...} production (attribute block). This syntax works + for headers, fenced code blocks, links, and images. + + References: + <https://michelf.ca/projects/php-markdown/extra/> + + Contact Information: + (individual) Michel Fortin <michel.fortin@michelf.ca> + + + + + + + + +Leonard Informational [Page 16] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +4. Examples for Common Markdown Syntaxes + + This section provides examples of the variants in Section 3. + +4.1. MultiMarkdown + +Title: Example of MultiMarkdown +Keywords: IETF, example, footnotes + +# MultiMarkdown Example # + +MultiMarkdown supports several cool features, as well as +several output formats: +* HTML +* PDF +* OpenDocument +* OPML +* LaTeX + +## Footnotes ## + +Footnotes are described in the +MultiMarkdown Syntax Guide.[^somesamplefootnote] + +[^somesamplefootnote]: Here is the text of the footnote itself. + + Figure 1: MultiMarkdown Example + + + + + + + + + + + + + + + + + + + + + + + + +Leonard Informational [Page 17] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +4.2. GitHub-Flavored Markdown + +# Start Out # + +GFM is like regular Markdown with a few extra features. For example, +http://www.example.com/ will get auto-linked. ~~This is strike-through +text, demarked by the double tildes.~~ + +``` +function test() { + return "notice this feature?"); +} +``` + +# Table Alignments # + +| Left | Center | Right | +|:--------- |:-------:| ------:| +| cats | Paxton | $1600 | +| dogs | Ruff | $30 | +| zebras | Stripes | $20900 | + + Figure 2: GitHub Flavored Markdown Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Leonard Informational [Page 18] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +4.3. Pandoc + +% Pandoc User's Guide +% John MacFarlane +% August 30, 2014 + +Synopsis {#syn} +======== + +pandoc [*options*] [*input-file*]... + +Description {#desc} +=========== + +Pandoc is a [Haskell] library for converting from one markup format to +another, and a command-line tool that uses this library. + +#### Extension: `header_attributes` #### {#ext-header-attributes} + +Headers can be assigned attributes using this syntax at the end of the +line containing the header text: + + {#identifier .class .class key=value key=value} + +Thus, for example, the following headers will all be assigned the +identifier `foo`: + + # My header {#foo} + + ## My header ## {#foo} + + My other header {#foo} + --------------- + + Figure 3: Pandoc Example + + + + + + + + + + + + + + + + +Leonard Informational [Page 19] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +4.4. Fountain (Fountain.io) + +INT. BOXCAR - MOVING - DAY +?AGENT MORTIMER lies bleeding in the corner. The car ROCKS gently. +Mortimer pulls out his cell phone and dials. + +MORTIMER? +Come on. Pick up. + +CUT TO:? +ext. hotel bar - day? +A fiercely gorgeous brunette sips the last of something from a +rocks glass. This is REBECCA. + +Behind her, a dark FIGURE approaches. She seems not to notice. + +REBECCA?(to Bartender) +Rittenhouse, neat. + +FIGURE (O.S.) ^ +Ritenhouse, neat. + +She turns to find the source of the voice. + +FIGURE +Excellent choice. + +Before she can reply, her phone RINGS.? + +> INTERCUT WITH:? + +.THE BOXCAR + +Where MORTIMER is just barely holding on to life. + + Figure 4: Fountain Example + + + + + + + + + + + + + + + +Leonard Informational [Page 20] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +4.5. CommonMark + + CommonMark is like Markdown. + + Here are some entity names that you can use with CommonMark: ` + & © Æ Ď ¾ ℋ ⅆ + ∲` + + You can see more at [the CommonMark website](http://commonmark.org/ + "CommonMark"). + + - foo + *** + - bar + + Tildes can be used for fenced code blocks: + + ~~~ + < + > + ~~~ + + Figure 5: CommonMark Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Leonard Informational [Page 21] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +4.6. kramdown-rfc2629 (Markdown for RFCs) + +--- +title: STUN/TURN using PHP in Despair +abbrev: STuPiD-excerpt +docname: draft-hartke-xmpp-stupid-excerpt-00 +date: 2009-07-05 +category: info + +ipr: trust200902 +area: General +workgroup: XMPP Working Group +keyword: Internet-Draft + +stand_alone: yes +pi: [toc, sortrefs, symrefs] + +author: + - + ins: K. Hartke + name: Klaus Hartke + email: example@tzi.org + +normative: + RFC2119: + +informative: + RFC5389: + STUNT: + target: http://www.example.com/oob + title: STUNT & out-of-band channels + author: + name: Robbie Hanson + ins: R. Hanson + date: 2007-09-17 + +--- abstract + +NAT (Network Address Translator) Traversal may require TURN +(Traversal Using Relays around NAT) functionality in certain +cases that are not unlikely to occur. There is little +incentive to deploy TURN servers, except by those who need +them—who may not be in a position to deploy a new protocol +on an Internet-connected node, in particular not one with +deployment requirements as high as those of TURN. + +--- middle + + + + +Leonard Informational [Page 22] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +Introduction {#problems} +============ + +"STUN/TURN using PHP in Despair" is a highly deployable protocol for +obtaining TURN-like functionality, while also providing the most +important function of STUN {{RFC5389}}. + +The Need for Standardization {#need} +---------------------------- + +Having one standard form of STuPiD service instead of one specific to +each kind of client also creates an incentive for optimized +implementations. + +~~~~~~~~~~ + + + STuPiD ```````````````````````````````, + Script <----------------------------. , + | , + ^ , | , + | , | , + (1) | , | , (3) + POST | , | , GET + | , | , + | v | v + + Peer A -----------------------> Peer B + (2) + out-of-band + Notification +~~~~~~~~~~ +{: #figops title="STuPiD Protocol Operation"} + +Terminology {#Terminology} +----------- +In this document, the key words "MUST", "MUST NOT", "REQUIRED", +"SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", +and "OPTIONAL" are to be interpreted as described in BCP 14, RFC 2119 +{{RFC2119}} and indicate requirement levels for compliant STuPiD +implementations. + +--- back + +Sample Implementation {#impl} +===================== + +~~~~~~~~~~ + + + +Leonard Informational [Page 23] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +<?php +header("Cache-Control: no-cache, must-revalidate"); +header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); +header("Content-Type: application/octet-stream"); + +?> +~~~~~~~~~~ +{: #figimpl title="STuPiD Sample Implementation"} + + Figure 6: Markdown for RFCs Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Leonard Informational [Page 24] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +4.7. rfc7328 (Pandoc2rfc) + + Pandoc2rfc expects multiple files as input. The following figure is + example of "middle.mkd". + +# Introduction + +<?rfc toc="yes"?> +<?rfc symrefs="yes"?> +<?rfc sortrefs="yes"?> +<?rfc subcompact="no"?> +<?rfc compact="yes"?> +<?rfc comments="yes"?> + +This document presents a technique for using Pandoc syntax as a source +format for documents in the Internet-Drafts (I-Ds) and Request +for Comments (RFC) series. + +This version is adapted to work with `xml2rfc` version 2.x. + +Pandoc is an "almost plain text" format and therefore particularly +well suited for editing RFC-like documents. + +> Note: this document is typeset in Pandoc. + +> NB: this is mostly text to test Pandoc2rfc, the canonical +> documentation is [RFC 7328][p2r]. + +[p2r]: http://www.rfc-editor.org/info/rfc7328 + +# Pandoc to RFC + +> Pandoc2rfc -- designed to do the right thing, until it doesn't. + +When writing [](#RFC4641) we directly wrote the +XML. Needless to say it was tedious even though the XML of +[xml2rfc](http://xml2rfc.ietf.org/) is very "light". +The [latest version of xml2rfc version 2 can be found +here](http://pypi.python.org/pypi/xml2rfc/). + + Figure 7: Pandoc2rfc Example (middle.mkd) + +5. IANA Considerations + + IANA has registered the syntaxes specified in Section 3 in the + "Markdown Variants" registry. + + + + + +Leonard Informational [Page 25] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + +6. Security Considerations + + See the respective syntax descriptions and output media type + registrations for their respective security considerations. + +7. References + +7.1. Normative References + + [MARKDOWN] Gruber, J., "Daring Fireball: Markdown", December 2004, + <http://daringfireball.net/projects/markdown/>. + + [MDSYNTAX] Gruber, J., "Daring Fireball: Markdown Syntax + Documentation", + <http://daringfireball.net/projects/markdown/syntax>. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + <http://www.rfc-editor.org/info/rfc2119>. + + [RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322, + DOI 10.17487/RFC5322, October 2008, + <http://www.rfc-editor.org/info/rfc5322>. + + [RFC6657] Melnikov, A. and J. Reschke, "Update to MIME regarding + "charset" Parameter Handling in Textual Media Types", + RFC 6657, DOI 10.17487/RFC6657, July 2012, + <http://www.rfc-editor.org/info/rfc6657>. + + [RFC7763] Leonard, S., "The text/markdown Media Type", RFC 7763, + DOI 10.17487/RFC7763, March 2016, + <http://www.rfc-editor.org/info/rfc7763>. + +7.2. Informative References + + [UNICODE] The Unicode Consortium, "The Unicode Standard, Version + 8.0", (Mountain View, CA: The Unicode Consortium, 2015. + ISBN 978-1-936213-10-8), + <http://www.unicode.org/versions/Unicode8.0.0/>. + + [HUMANE] Atwood, J., "Is HTML a Humane Markup Language?", May 2008, + <http://blog.codinghorror.com/ + is-html-a-humane-markup-language/>. + + [DIN2MD] Gruber, J., "Dive Into Markdown", March 2004, + <http://daringfireball.net/2004/03/dive_into_markdown>. + + + + +Leonard Informational [Page 26] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + + [MD102b8] Gruber, J., "Subject: [ANN] Markdown.pl 1.0.2b8", message + to the markdown-discuss mailing list, 9 May 2007, + <http://six.pairlist.net/pipermail/markdown-discuss/ + 2007-May/000615.html>, + <http://daringfireball.net/projects/downloads/ + Markdown_1.0.2b8.tbz>. + + [CATPICS] Gruber, J. and M. Arment, "The Talk Show: Ep. 88: 'Cat + Pictures' (Side 1)", July 2014, + <http://daringfireball.net/thetalkshow/2014/07/19/ep-088>. + + [INETMEME] Solon, O., "Richard Dawkins on the internet's hijacking of + the word 'meme'", June 2013, + <http://www.wired.co.uk/news/archive/2013-06/20/ + richard-dawkins-memes>, + <http://www.webcitation.org/6HzDGE9Go>. + + [MULTIMD] Penney, F., "MultiMarkdown", + <http://fletcherpenney.net/multimarkdown/>. + + [PANDOC] MacFarlane, J., "Pandoc", + <http://johnmacfarlane.net/pandoc/>. + + [RAILFROG] Railfrog Team, "Railfrog", April 2009, + <http://railfrog.com/>. + + [RFC793] Postel, J., "Transmission Control Protocol", STD 7, + RFC 793, DOI 10.17487/RFC0793, September 1981, + <http://www.rfc-editor.org/info/rfc793>. + + [RFC6533] Hansen, T., Ed., Newman, C., and A. Melnikov, + "Internationalized Delivery Status and Disposition + Notifications", RFC 6533, DOI 10.17487/RFC6533, February + 2012, <http://www.rfc-editor.org/info/rfc6533>. + + [RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type + Specifications and Registration Procedures", BCP 13, + RFC 6838, DOI 10.17487/RFC6838, January 2013, + <http://www.rfc-editor.org/info/rfc6838>. + + [XML1.0-5] Bray, T., Paoli, J., Sperberg-McQueen, M., Maler, E., and + F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fifth + Edition)", W3C Recommendation REC-xml-20081126, November + 2008, <http://www.w3.org/TR/2008/REC-xml-20081126>. + + + + + + + +Leonard Informational [Page 27] + +RFC 7764 Guidance on Markdown and text/markdown March 2016 + + + [OCCASION] Shieber, S., "Switching to Markdown for scholarly article + production", August 2014, + <http://blogs.law.harvard.edu/pamphlet/2014/08/29/ + switching-to-markdown-for-scholarly-article-production/>. + + [FOUNTAIN] Maschwitz, S. and J. August, "Fountain | A markup language + for screenwriting.", <http://fountain.io/>. + + [MATHDOWN] Cherniavsky-Paskin, B., "math in markdown", + <https://github.com/cben/mathdown/wiki/math-in-markdown>. + + [SVN] Apache Subversion, December 2015, + <https://subversion.apache.org/>. + + [GIT] Git, <http://git-scm.com/>. + +Author's Address + + Sean Leonard + Penango, Inc. + 5900 Wilshire Boulevard + 21st Floor + Los Angeles, CA 90036 + United States + + EMail: dev+ietf@seantek.com + URI: http://www.penango.com/ + + + + + + + + + + + + + + + + + + + + + + + + +Leonard Informational [Page 28] + |