--- /dev/null
+<?php
+/**
+ * @copyright Copyright (c) 2014 Carsten Brandt
+ * @license https://github.com/cebe/markdown/blob/master/LICENSE
+ * @link https://github.com/cebe/markdown#readme
+ */
+
+namespace cebe\markdown;
+
+/**
+ * Markdown parser for github flavored markdown.
+ *
+ * @author Carsten Brandt <mail@cebe.cc>
+ */
+class GithubMarkdown extends Markdown
+{
+ // include block element parsing using traits
+ use block\TableTrait;
+ use block\FencedCodeTrait;
+
+ // include inline element parsing using traits
+ use inline\StrikeoutTrait;
+ use inline\UrlLinkTrait;
+
+ /**
+ * @var boolean whether to interpret newlines as `<br />`-tags.
+ * This feature is useful for comments where newlines are often meant to be real new lines.
+ */
+ public $enableNewlines = false;
+
+ /**
+ * @inheritDoc
+ */
+ protected $escapeCharacters = [
+ // from Markdown
+ '\\', // backslash
+ '`', // backtick
+ '*', // asterisk
+ '_', // underscore
+ '{', '}', // curly braces
+ '[', ']', // square brackets
+ '(', ')', // parentheses
+ '#', // hash mark
+ '+', // plus sign
+ '-', // minus sign (hyphen)
+ '.', // dot
+ '!', // exclamation mark
+ '<', '>',
+ // added by GithubMarkdown
+ ':', // colon
+ '|', // pipe
+ ];
+
+
+
+ /**
+ * Consume lines for a paragraph
+ *
+ * Allow headlines, lists and code to break paragraphs
+ */
+ protected function consumeParagraph($lines, $current)
+ {
+ // consume until newline
+ $content = [];
+ for ($i = $current, $count = count($lines); $i < $count; $i++) {
+ $line = $lines[$i];
+ if (!empty($line) && ltrim($line) !== '' &&
+ !($line[0] === "\t" || $line[0] === " " && strncmp($line, ' ', 4) === 0) &&
+ !$this->identifyHeadline($line, $lines, $i) &&
+ !$this->identifyUl($line, $lines, $i) &&
+ !$this->identifyOl($line, $lines, $i))
+ {
+ $content[] = $line;
+ } else {
+ break;
+ }
+ }
+ $block = [
+ 'paragraph',
+ 'content' => $this->parseInline(implode("\n", $content)),
+ ];
+ return [$block, --$i];
+ }
+
+ /**
+ * @inheritdocs
+ *
+ * Parses a newline indicated by two spaces on the end of a markdown line.
+ */
+ protected function renderText($text)
+ {
+ if ($this->enableNewlines) {
+ $br = $this->html5 ? "<br>\n" : "<br />\n";
+ return strtr($text[1], [" \n" => $br, "\n" => $br]);
+ } else {
+ return parent::renderText($text);
+ }
+ }
+}