aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/russross
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/russross')
-rw-r--r--vendor/github.com/russross/blackfriday/.gitignore8
-rw-r--r--vendor/github.com/russross/blackfriday/.travis.yml18
-rw-r--r--vendor/github.com/russross/blackfriday/LICENSE.txt29
-rw-r--r--vendor/github.com/russross/blackfriday/README.md283
-rw-r--r--vendor/github.com/russross/blackfriday/block.go787
-rw-r--r--vendor/github.com/russross/blackfriday/block_test.go1691
-rw-r--r--vendor/github.com/russross/blackfriday/doc.go40
-rw-r--r--vendor/github.com/russross/blackfriday/esc.go34
-rw-r--r--vendor/github.com/russross/blackfriday/esc_test.go48
-rw-r--r--vendor/github.com/russross/blackfriday/helpers_test.go186
-rw-r--r--vendor/github.com/russross/blackfriday/html.go1519
-rw-r--r--vendor/github.com/russross/blackfriday/inline.go548
-rw-r--r--vendor/github.com/russross/blackfriday/inline_test.go1176
-rw-r--r--vendor/github.com/russross/blackfriday/latex.go332
-rw-r--r--vendor/github.com/russross/blackfriday/markdown.go756
-rw-r--r--vendor/github.com/russross/blackfriday/markdown_test.go38
-rw-r--r--vendor/github.com/russross/blackfriday/node.go354
-rw-r--r--vendor/github.com/russross/blackfriday/ref_test.go124
-rw-r--r--vendor/github.com/russross/blackfriday/smartypants.go157
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Amps and angle encoding.html17
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Amps and angle encoding.text21
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Auto links.html18
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Auto links.text13
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Backslash escapes.html123
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Backslash escapes.text126
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Blockquotes with code blocks.html15
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Blockquotes with code blocks.text11
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Code Blocks.html18
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Code Blocks.text14
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Code Spans.html5
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Code Spans.text6
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Hard-wrapped paragraphs with list-like lines no empty line before block.html14
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Hard-wrapped paragraphs with list-like lines no empty line before block.text8
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Hard-wrapped paragraphs with list-like lines.html8
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Hard-wrapped paragraphs with list-like lines.text8
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Horizontal rules.html71
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Horizontal rules.text67
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Inline HTML (Advanced).html15
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Inline HTML (Advanced).text15
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Inline HTML (Simple).html72
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Inline HTML (Simple).text69
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Inline HTML comments.html13
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Inline HTML comments.text13
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Links, inline style.html11
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Links, inline style.text12
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Links, reference style.html52
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Links, reference style.text71
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Links, shortcut references.html9
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Links, shortcut references.text20
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Literal quotes in titles.html3
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Literal quotes in titles.text7
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Markdown Documentation - Basics.html314
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Markdown Documentation - Basics.text306
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Markdown Documentation - Syntax.html946
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Markdown Documentation - Syntax.text888
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Nested blockquotes.html9
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Nested blockquotes.text5
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Ordered and unordered lists.html166
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Ordered and unordered lists.text131
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Strong and em together.html7
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Strong and em together.text7
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Tabs.html26
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Tabs.text21
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Tidyness.html9
-rw-r--r--vendor/github.com/russross/blackfriday/testdata/Tidyness.text5
65 files changed, 9783 insertions, 2130 deletions
diff --git a/vendor/github.com/russross/blackfriday/.gitignore b/vendor/github.com/russross/blackfriday/.gitignore
new file mode 100644
index 0000000..75623dc
--- /dev/null
+++ b/vendor/github.com/russross/blackfriday/.gitignore
@@ -0,0 +1,8 @@
+*.out
+*.swp
+*.8
+*.6
+_obj
+_test*
+markdown
+tags
diff --git a/vendor/github.com/russross/blackfriday/.travis.yml b/vendor/github.com/russross/blackfriday/.travis.yml
new file mode 100644
index 0000000..a4eb257
--- /dev/null
+++ b/vendor/github.com/russross/blackfriday/.travis.yml
@@ -0,0 +1,18 @@
+# Travis CI (http://travis-ci.org/) is a continuous integration service for
+# open source projects. This file configures it to run unit tests for
+# blackfriday.
+
+language: go
+
+go:
+ - 1.5
+ - 1.6
+ - 1.7
+
+install:
+ - go get -d -t -v ./...
+ - go build -v ./...
+
+script:
+ - go test -v ./...
+ - go test -run=^$ -bench=BenchmarkReference -benchmem
diff --git a/vendor/github.com/russross/blackfriday/LICENSE.txt b/vendor/github.com/russross/blackfriday/LICENSE.txt
new file mode 100644
index 0000000..2885af3
--- /dev/null
+++ b/vendor/github.com/russross/blackfriday/LICENSE.txt
@@ -0,0 +1,29 @@
+Blackfriday is distributed under the Simplified BSD License:
+
+> Copyright © 2011 Russ Ross
+> All rights reserved.
+>
+> Redistribution and use in source and binary forms, with or without
+> modification, are permitted provided that the following conditions
+> are met:
+>
+> 1. Redistributions of source code must retain the above copyright
+> notice, this list of conditions and the following disclaimer.
+>
+> 2. Redistributions in binary form must reproduce the above
+> copyright notice, this list of conditions and the following
+> disclaimer in the documentation and/or other materials provided with
+> the distribution.
+>
+> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+> "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+> LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+> FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+> COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+> INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+> BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+> LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+> ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+> POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/github.com/russross/blackfriday/README.md b/vendor/github.com/russross/blackfriday/README.md
new file mode 100644
index 0000000..2e0db35
--- /dev/null
+++ b/vendor/github.com/russross/blackfriday/README.md
@@ -0,0 +1,283 @@
+Blackfriday [![Build Status](https://travis-ci.org/russross/blackfriday.svg?branch=master)](https://travis-ci.org/russross/blackfriday)
+===========
+
+Blackfriday is a [Markdown][1] processor implemented in [Go][2]. It
+is paranoid about its input (so you can safely feed it user-supplied
+data), it is fast, it supports common extensions (tables, smart
+punctuation substitutions, etc.), and it is safe for all utf-8
+(unicode) input.
+
+HTML output is currently supported, along with Smartypants
+extensions.
+
+It started as a translation from C of [Sundown][3].
+
+
+Installation
+------------
+
+Blackfriday is compatible with any modern Go release. With Go 1.7 and git
+installed:
+
+ go get gopkg.in/russross/blackfriday.v2
+
+will download, compile, and install the package into your `$GOPATH`
+directory hierarchy. Alternatively, you can achieve the same if you
+import it into a project:
+
+ import "gopkg.in/russross/blackfriday.v2"
+
+and `go get` without parameters.
+
+
+Versions
+--------
+
+Currently maintained and recommended version of Blackfriday is `v2`. It's being
+developed on its own branch: https://github.com/russross/blackfriday/v2. You
+should install and import it via [gopkg.in][6] at
+`gopkg.in/russross/blackfriday.v2`.
+
+Version 2 offers a number of improvements over v1:
+
+* Cleaned up API
+* A separate call to [`Parse`][4], which produces an abstract syntax tree for
+ the document
+* Latest bug fixes
+* Flexibility to easily add your own rendering extensions
+
+Potential drawbacks:
+
+* Our benchmarks show v2 to be slightly slower than v1. Currently in the
+ ballpark of around 15%.
+* API breakage. If you can't afford modifying your code to adhere to the new API
+ and don't care too much about the new features, v2 is probably not for you.
+* Several bug fixes are trailing behind and still need to be forward-ported to
+ v2. See issue [#348](https://github.com/russross/blackfriday/issues/348) for
+ tracking.
+
+Usage
+-----
+
+For the most sensible markdown processing, it is as simple as getting your input
+into a byte slice and calling:
+
+```go
+output := blackfriday.Run(input)
+```
+
+Your input will be parsed and the output rendered with a set of most popular
+extensions enabled. If you want the most basic feature set, corresponding with
+the bare Markdown specification, use:
+
+```go
+output := blackfriday.Run(input, blackfriday.WithNoExtensions())
+```
+
+### Sanitize untrusted content
+
+Blackfriday itself does nothing to protect against malicious content. If you are
+dealing with user-supplied markdown, we recommend running Blackfriday's output
+through HTML sanitizer such as [Bluemonday][5].
+
+Here's an example of simple usage of Blackfriday together with Bluemonday:
+
+```go
+import (
+ "github.com/microcosm-cc/bluemonday"
+ "github.com/russross/blackfriday"
+)
+
+// ...
+unsafe := blackfriday.Run(input)
+html := bluemonday.UGCPolicy().SanitizeBytes(unsafe)
+```
+
+### Custom options
+
+If you want to customize the set of options, use `blackfriday.WithExtensions`,
+`blackfriday.WithRenderer` and `blackfriday.WithRefOverride`.
+
+You can also check out `blackfriday-tool` for a more complete example
+of how to use it. Download and install it using:
+
+ go get github.com/russross/blackfriday-tool
+
+This is a simple command-line tool that allows you to process a
+markdown file using a standalone program. You can also browse the
+source directly on github if you are just looking for some example
+code:
+
+* <http://github.com/russross/blackfriday-tool>
+
+Note that if you have not already done so, installing
+`blackfriday-tool` will be sufficient to download and install
+blackfriday in addition to the tool itself. The tool binary will be
+installed in `$GOPATH/bin`. This is a statically-linked binary that
+can be copied to wherever you need it without worrying about
+dependencies and library versions.
+
+
+Features
+--------
+
+All features of Sundown are supported, including:
+
+* **Compatibility**. The Markdown v1.0.3 test suite passes with
+ the `--tidy` option. Without `--tidy`, the differences are
+ mostly in whitespace and entity escaping, where blackfriday is
+ more consistent and cleaner.
+
+* **Common extensions**, including table support, fenced code
+ blocks, autolinks, strikethroughs, non-strict emphasis, etc.
+
+* **Safety**. Blackfriday is paranoid when parsing, making it safe
+ to feed untrusted user input without fear of bad things
+ happening. The test suite stress tests this and there are no
+ known inputs that make it crash. If you find one, please let me
+ know and send me the input that does it.
+
+ NOTE: "safety" in this context means *runtime safety only*. In order to
+ protect yourself against JavaScript injection in untrusted content, see
+ [this example](https://github.com/russross/blackfriday#sanitize-untrusted-content).
+
+* **Fast processing**. It is fast enough to render on-demand in
+ most web applications without having to cache the output.
+
+* **Thread safety**. You can run multiple parsers in different
+ goroutines without ill effect. There is no dependence on global
+ shared state.
+
+* **Minimal dependencies**. Blackfriday only depends on standard
+ library packages in Go. The source code is pretty
+ self-contained, so it is easy to add to any project, including
+ Google App Engine projects.
+
+* **Standards compliant**. Output successfully validates using the
+ W3C validation tool for HTML 4.01 and XHTML 1.0 Transitional.
+
+
+Extensions
+----------
+
+In addition to the standard markdown syntax, this package
+implements the following extensions:
+
+* **Intra-word emphasis supression**. The `_` character is
+ commonly used inside words when discussing code, so having
+ markdown interpret it as an emphasis command is usually the
+ wrong thing. Blackfriday lets you treat all emphasis markers as
+ normal characters when they occur inside a word.
+
+* **Tables**. Tables can be created by drawing them in the input
+ using a simple syntax:
+
+ ```
+ Name | Age
+ --------|------
+ Bob | 27
+ Alice | 23
+ ```
+
+* **Fenced code blocks**. In addition to the normal 4-space
+ indentation to mark code blocks, you can explicitly mark them
+ and supply a language (to make syntax highlighting simple). Just
+ mark it like this:
+
+ ```go
+ func getTrue() bool {
+ return true
+ }
+ ```
+
+ You can use 3 or more backticks to mark the beginning of the
+ block, and the same number to mark the end of the block.
+
+* **Definition lists**. A simple definition list is made of a single-line
+ term followed by a colon and the definition for that term.
+
+ Cat
+ : Fluffy animal everyone likes
+
+ Internet
+ : Vector of transmission for pictures of cats
+
+ Terms must be separated from the previous definition by a blank line.
+
+* **Footnotes**. A marker in the text that will become a superscript number;
+ a footnote definition that will be placed in a list of footnotes at the
+ end of the document. A footnote looks like this:
+
+ This is a footnote.[^1]
+
+ [^1]: the footnote text.
+
+* **Autolinking**. Blackfriday can find URLs that have not been
+ explicitly marked as links and turn them into links.
+
+* **Strikethrough**. Use two tildes (`~~`) to mark text that
+ should be crossed out.
+
+* **Hard line breaks**. With this extension enabled newlines in the input
+ translate into line breaks in the output. This extension is off by default.
+
+* **Smart quotes**. Smartypants-style punctuation substitution is
+ supported, turning normal double- and single-quote marks into
+ curly quotes, etc.
+
+* **LaTeX-style dash parsing** is an additional option, where `--`
+ is translated into `&ndash;`, and `---` is translated into
+ `&mdash;`. This differs from most smartypants processors, which
+ turn a single hyphen into an ndash and a double hyphen into an
+ mdash.
+
+* **Smart fractions**, where anything that looks like a fraction
+ is translated into suitable HTML (instead of just a few special
+ cases like most smartypant processors). For example, `4/5`
+ becomes `<sup>4</sup>&frasl;<sub>5</sub>`, which renders as
+ <sup>4</sup>&frasl;<sub>5</sub>.
+
+
+Other renderers
+---------------
+
+Blackfriday is structured to allow alternative rendering engines. Here
+are a few of note:
+
+* [github_flavored_markdown](https://godoc.org/github.com/shurcooL/github_flavored_markdown):
+ provides a GitHub Flavored Markdown renderer with fenced code block
+ highlighting, clickable heading anchor links.
+
+ It's not customizable, and its goal is to produce HTML output
+ equivalent to the [GitHub Markdown API endpoint](https://developer.github.com/v3/markdown/#render-a-markdown-document-in-raw-mode),
+ except the rendering is performed locally.
+
+* [markdownfmt](https://github.com/shurcooL/markdownfmt): like gofmt,
+ but for markdown.
+
+* [LaTeX output](https://bitbucket.org/ambrevar/blackfriday-latex):
+ renders output as LaTeX.
+
+
+Todo
+----
+
+* More unit testing
+* Improve unicode support. It does not understand all unicode
+ rules (about what constitutes a letter, a punctuation symbol,
+ etc.), so it may fail to detect word boundaries correctly in
+ some instances. It is safe on all utf-8 input.
+
+
+License
+-------
+
+[Blackfriday is distributed under the Simplified BSD License](LICENSE.txt)
+
+
+ [1]: https://daringfireball.net/projects/markdown/ "Markdown"
+ [2]: https://golang.org/ "Go Language"
+ [3]: https://github.com/vmg/sundown "Sundown"
+ [4]: https://godoc.org/gopkg.in/russross/blackfriday.v2#Parse "Parse func"
+ [5]: https://github.com/microcosm-cc/bluemonday "Bluemonday"
+ [6]: https://labix.org/gopkg.in "gopkg.in"
diff --git a/vendor/github.com/russross/blackfriday/block.go b/vendor/github.com/russross/blackfriday/block.go
index 7fc731d..d7da33f 100644
--- a/vendor/github.com/russross/blackfriday/block.go
+++ b/vendor/github.com/russross/blackfriday/block.go
@@ -15,17 +15,26 @@ package blackfriday
import (
"bytes"
- "unicode"
+ "html"
+ "regexp"
+
+ "github.com/shurcooL/sanitized_anchor_name"
+)
+
+const (
+ charEntity = "&(?:#x[a-f0-9]{1,8}|#[0-9]{1,8}|[a-z][a-z0-9]{1,31});"
+ escapable = "[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]"
+)
+
+var (
+ reBackslashOrAmp = regexp.MustCompile("[\\&]")
+ reEntityOrEscapedChar = regexp.MustCompile("(?i)\\\\" + escapable + "|" + charEntity)
)
// Parse block-level data.
// Note: this function and many that it calls assume that
// the input buffer ends with a newline.
-func (p *parser) block(out *bytes.Buffer, data []byte) {
- if len(data) == 0 || data[len(data)-1] != '\n' {
- panic("block input is missing terminating newline")
- }
-
+func (p *Markdown) block(data []byte) {
// this is called recursively: enforce a maximum depth
if p.nesting >= p.maxNesting {
return
@@ -34,14 +43,14 @@ func (p *parser) block(out *bytes.Buffer, data []byte) {
// parse out one block-level construct at a time
for len(data) > 0 {
- // prefixed header:
+ // prefixed heading:
//
- // # Header 1
- // ## Header 2
+ // # Heading 1
+ // ## Heading 2
// ...
- // ###### Header 6
- if p.isPrefixHeader(data) {
- data = data[p.prefixHeader(out, data):]
+ // ###### Heading 6
+ if p.isPrefixHeading(data) {
+ data = data[p.prefixHeading(data):]
continue
}
@@ -51,7 +60,7 @@ func (p *parser) block(out *bytes.Buffer, data []byte) {
// ...
// </div>
if data[0] == '<' {
- if i := p.html(out, data, true); i > 0 {
+ if i := p.html(data, true); i > 0 {
data = data[i:]
continue
}
@@ -62,9 +71,9 @@ func (p *parser) block(out *bytes.Buffer, data []byte) {
// % stuff
// % more stuff
// % even more stuff
- if p.flags&EXTENSION_TITLEBLOCK != 0 {
+ if p.extensions&Titleblock != 0 {
if data[0] == '%' {
- if i := p.titleBlock(out, data, true); i > 0 {
+ if i := p.titleBlock(data, true); i > 0 {
data = data[i:]
continue
}
@@ -86,7 +95,7 @@ func (p *parser) block(out *bytes.Buffer, data []byte) {
// return b
// }
if p.codePrefix(data) > 0 {
- data = data[p.code(out, data):]
+ data = data[p.code(data):]
continue
}
@@ -100,8 +109,8 @@ func (p *parser) block(out *bytes.Buffer, data []byte) {
// return n * fact(n-1)
// }
// ```
- if p.flags&EXTENSION_FENCED_CODE != 0 {
- if i := p.fencedCodeBlock(out, data, true); i > 0 {
+ if p.extensions&FencedCode != 0 {
+ if i := p.fencedCodeBlock(data, true); i > 0 {
data = data[i:]
continue
}
@@ -115,9 +124,9 @@ func (p *parser) block(out *bytes.Buffer, data []byte) {
// or
// ______
if p.isHRule(data) {
- p.r.HRule(out)