diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | README.md | 30 | ||||
-rwxr-xr-x | js/stmd.js | 2 | ||||
-rwxr-xr-x | js/test.js | 19 | ||||
-rw-r--r-- | man/man1/stmd.1 | 2 | ||||
-rw-r--r-- | man/stmd.1.md | 4 | ||||
-rw-r--r-- | narrative.md | 4 | ||||
-rw-r--r-- | spec.txt | 16 | ||||
-rw-r--r-- | src/main.c | 2 |
9 files changed, 44 insertions, 37 deletions
@@ -66,7 +66,7 @@ update-site: spec.html narrative.html cp spec.html _site/ cp narrative.html _site/index.html cp -r js/* _site/js/ - (cd _site ; git commit -a -m "Updated site for latest spec, narrative, js" ; git push; cd ..) + (cd _site ; git pull ; git commit -a -m "Updated site for latest spec, narrative, js" ; git push; cd ..) clean: -rm test $(SRCDIR)/*.o $(SRCDIR)/scanners.c @@ -1,14 +1,14 @@ -Standard markdown -================= +CommonMark +========== -Standard markdown is a [specification of markdown syntax][the spec], +CommonMark is a [specification of Markdown syntax][the spec], together with BSD3-licensed implementations (`stmd`) in C and javascript. The implementations ------------------- The C implementation provides both a library and a standalone program -`stmd` that converts markdown to HTML. It is written in standard C99 +`stmd` that converts Markdown to HTML. It is written in standard C99 and has no library dependencies. (However, if you check it out from the repository, you'll need [`re2c`](http://re2c.org) to generate `scanners.c` from `scanners.re`. This is only a build dependency for @@ -30,7 +30,7 @@ this.) [The spec] contains over 400 embedded examples which serve as conformance tests. To run the tests for `stmd`, do `make test`. To run them for -another markdown program, say `myprog`, do `make test PROG=myprog`. To +another Markdown program, say `myprog`, do `make test PROG=myprog`. To run the tests for `stmd.js`, do `make testjs`. [The spec]: http://jgm.github.io/stmd/spec.html @@ -38,11 +38,11 @@ run the tests for `stmd.js`, do `make testjs`. The spec -------- -The source of [the spec] is `spec.txt`. This is basically a markdown +The source of [the spec] is `spec.txt`. This is basically a Markdown file, with code examples written in a shorthand form: . - markdown source + Markdown source . expected HTML output . @@ -55,7 +55,7 @@ The spec is written from the point of view of the human writer, not the computer reader. It is not an algorithm---an English translation of a computer program---but a declarative description of what counts as a block quote, a code block, and each of the other structural elements that can -make up a markdown document. +make up a Markdown document. Because John Gruber's [canonical syntax description](http://daringfireball.net/projects/markdown/syntax) leaves @@ -64,13 +64,13 @@ making a large number of decisions, many of them somewhat arbitrary. In making them, I have appealed to existing conventions and considerations of simplicity, readability, expressive power, and consistency. I have tried to ensure that "normal" documents in the many -incompatible existing implementations of markdown will render, as far as +incompatible existing implementations of Markdown will render, as far as possible, as their authors intended. And I have tried to make the rules for different elements work together harmoniously. In places where different decisions could have been made (for example, the rules governing list indentation), I have explained the rationale for my choices. In a few cases, I have departed slightly from the canonical -syntax description, in ways that I think further the goals of markdown +syntax description, in ways that I think further the goals of Markdown as stated in that description. For the most part, I have limited myself to the basic elements @@ -80,17 +80,17 @@ right before considering such things. However, I have included a visible syntax for line breaks and fenced code blocks. In all of this, I have been guided by eight years experience writing -markdown implementations in several languages, including the first -markdown parser not based on regular expression substitutions +Markdown implementations in several languages, including the first +Markdown parser not based on regular expression substitutions ([pandoc](http://github.com/jgm/pandoc)) and the first markdown parsers based on PEG grammars ([peg-markdown](http://github.com/jgm/peg-markdown), [lunamark](http://github.com/jgm/lunamark)). Maintaining these projects and responding to years of user feedback have given me a good sense of -the complexities involved in parsing markdown, and of the various design +the complexities involved in parsing Markdown, and of the various design decisions that can be made. I have also explored differences between -markdown implementations extensively using [babelmark +Markdown implementations extensively using [babelmark 2](http://johnmacfarlane.net/babelmark2/). In the early phases of working out the spec, I benefited greatly from collaboration with David -Greenspan, and from feedback from several industrial users of markdown, +Greenspan, and from feedback from several industrial users of Markdown, including Jeff Atwood, Vincent Marti, and Neil Williams. @@ -1,4 +1,4 @@ -// stmd.js - "standard markdown" in javascript +// stmd.js - CommomMark in javascript // Copyright (C) 2014 John MacFarlane // License: BSD3. @@ -1,9 +1,8 @@ #!/usr/bin/env node var fs = require('fs'); -var util = require('util'); var stmd = require('./stmd'); -var ansi = require('./ansi/ansi') +var ansi = require('./ansi/ansi'); var cursor = ansi(process.stdout); var writer = new stmd.HtmlRenderer(); @@ -15,19 +14,23 @@ var failed = 0; var showSpaces = function(s) { var t = s; return t.replace(/\t/g,'→') - .replace(/ /g,'␣'); -} + .replace(/ /g,'␣'); +}; fs.readFile('spec.txt', 'utf8', function(err, data) { if (err) { return console.log(err); } + var i; var examples = []; var current_section = ""; var example_number = 0; - tests = data.replace(/^<!-- END TESTS -->(.|[\n])*/m,''); + var tests = data + .replace(/\r\n?/g, "\n") // Normalize newlines for platform independence + .replace(/^<!-- END TESTS -->(.|[\n])*/m, ''); + tests.replace(/^\.\n([\s\S]*?)^\.\n([\s\S]*?)^\.$|^#{1,6} *(.*)$/gm, - function(_,x,y,z,w){ + function(_,x,y,z){ if (z) { current_section = z; } else { @@ -45,7 +48,7 @@ fs.readFile('spec.txt', 'utf8', function(err, data) { for (i = 0; i < examples.length; i++) { var example = examples[i]; - if (example.section != current_section) { + if (example.section !== current_section) { if (current_section !== '') { cursor.write('\n'); } @@ -53,7 +56,7 @@ fs.readFile('spec.txt', 'utf8', function(err, data) { cursor.reset().write(current_section).reset().write(' '); } var actual = writer.renderBlock(reader.parse(example.markdown.replace(/→/g, '\t'))); - if (actual == example.html) { + if (actual === example.html) { passed++; cursor.green().write('✓').reset(); } else { diff --git a/man/man1/stmd.1 b/man/man1/stmd.1 index 913d5a7..6bfdd80 100644 --- a/man/man1/stmd.1 +++ b/man/man1/stmd.1 @@ -10,7 +10,7 @@ stmd [\f[I]options\f[]] [file*] \f[C]stmd\f[] acts as a pipe, reading from stdin or from the specified files and writing to stdout. It converts markdown formatted plain text to HTML, using the conventions -described in the standard markdown spec. +described in the CommonMark spec. .SH OPTIONS .TP .B \f[C]\-\-ast\f[] diff --git a/man/stmd.1.md b/man/stmd.1.md index 6e38afc..3947a79 100644 --- a/man/stmd.1.md +++ b/man/stmd.1.md @@ -17,8 +17,8 @@ stmd [*options*] [file\*] `stmd` acts as a pipe, reading from stdin or from the specified files and writing to stdout. It converts markdown formatted plain -text to HTML, using the conventions described in the standard -markdown spec. +text to HTML, using the conventions described in the CommonMark +spec. # OPTIONS diff --git a/narrative.md b/narrative.md index 12bf780..315c47b 100644 --- a/narrative.md +++ b/narrative.md @@ -1,8 +1,8 @@ --- -title: Standard markdown +title: CommonMark ... -Standard markdown is a [specification of markdown +CommonMark is a [specification of markdown syntax](http://jgm.github.io/stmd/spec.html), together with BSD3-licensed implementations (`stmd`) in C and javascript. The source for the spec and the two implementations can be found in [this @@ -1,9 +1,9 @@ --- -title: Standard Markdown Spec +title: CommonMark Spec author: - John MacFarlane version: 1 -date: 2014-07-21 +date: 2014-09-06 ... # Introduction @@ -203,15 +203,19 @@ to a certain encoding. Tabs in lines are expanded to spaces, with a tab stop of 4 characters: . -foo→baz→→bim +→foo→baz→→bim . -<p>foo baz bim</p> +<pre><code>foo baz bim +</code></pre> . . -οὐ→χρῆν + a→a + ὐ→a . -<p>οὐ χρῆν</p> +<pre><code>a a +ὐ a +</code></pre> . Line endings are replaced by newline characters (LF). @@ -22,7 +22,7 @@ int main(int argc, char *argv[]) { for (i=1; i < argc; i++) { if (strcmp(argv[i], "--version") == 0) { printf("stmd %s", VERSION); - printf(" - standard markdown converter (c) 2014 John MacFarlane\n"); + printf(" - CommonMark converter (c) 2014 John MacFarlane\n"); exit(0); } else if ((strcmp(argv[i], "--help") == 0) || (strcmp(argv[i], "-h") == 0)) { |