diff --git a/mode/yaml-markdown/index.html b/mode/yaml-markdown/index.html new file mode 100644 index 0000000000000000000000000000000000000000..ad610da8f9ef8c2f52f184a1fa85a5c51337dd8f --- /dev/null +++ b/mode/yaml-markdown/index.html @@ -0,0 +1,114 @@ +<!doctype html> + +<title>CodeMirror: GitHub Flavored Markdown with YAML front matter mode</title> +<meta charset="utf-8"/> +<link rel=stylesheet href="../../doc/docs.css"> + +<link rel="stylesheet" href="../../lib/codemirror.css"> +<script src="../../lib/codemirror.js"></script> +<script src="../../addon/mode/overlay.js"></script> +<script src="../markdown/markdown.js"></script> +<script src="../gfm/gfm.js"></script> +<script src="../yaml/yaml.js"></script> +<script src="yaml-markdown.js"></script> +<style>.CodeMirror { border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; }</style> +<div id=nav> + <a href="http://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"></a> + + <ul> + <li><a href="../../index.html">Home</a> + <li><a href="../../doc/manual.html">Manual</a> + <li><a href="https://github.com/codemirror/codemirror">Code</a> + </ul> + <ul> + <li><a href="../index.html">Language modes</a> + <li><a class=active href="#">YAML-Markdown</a> + </ul> +</div> + +<article> +<h2>GitHub Flavored Markdown with YAML front matter mode</h2> +<form><textarea id="code" name="code"> +--- +receipt: Oz-Ware Purchase Invoice +date: 2007-08-06 +customer: + given: Dorothy + family: Gale + +items: + - part_no: A4786 + descrip: Water Bucket (Filled) + price: 1.47 + quantity: 4 + + - part_no: E1628 + descrip: High Heeled "Ruby" Slippers + size: 8 + price: 100.27 + quantity: 1 + +bill-to: &id001 + street: | + 123 Tornado Alley + Suite 16 + city: East Centerville + state: KS + +ship-to: *id001 + +specialDelivery: > + Follow the Yellow Brick + Road to the Emerald City. + Pay no attention to the + man behind the curtain. +--- + +GitHub Flavored Markdown +======================== + +Everything from markdown plus GFM features: + +## URL autolinking + +Underscores_are_allowed_between_words. + +## Strikethrough text + +GFM adds syntax to strikethrough text, which is missing from standard Markdown. + +~~Mistaken text.~~ +~~**works with other fomatting**~~ + +~~spans across +lines~~ + +## Fenced code blocks (and syntax highlighting) + +```javascript +for (var i = 0; i < items.length; i++) { + console.log(items[i], i); // log them +} +``` + +## Task Lists + +- [ ] Incomplete task list item +- [x] **Completed** task list item + +## A bit of GitHub spice + +* SHA: be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2 +* User@SHA ref: mojombo@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2 +* User/Project@SHA: mojombo/god@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2 +* \#Num: #1 +* User/#Num: mojombo#1 +* User/Project#Num: mojombo/god#1 + +See http://github.github.com/github-flavored-markdown/. +</textarea></form> + <script> + var editor = CodeMirror.fromTextArea(document.getElementById("code"), {mode: 'yaml-markdown'}); + </script> + + </article> diff --git a/mode/yaml-markdown/yaml-markdown.js b/mode/yaml-markdown/yaml-markdown.js new file mode 100644 index 0000000000000000000000000000000000000000..a1af80f3ec7a630ef48a16e14d7fe2e5f799a48e --- /dev/null +++ b/mode/yaml-markdown/yaml-markdown.js @@ -0,0 +1,64 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function (mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../gfm/gfm"), require("../yaml/yaml")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../gfm/gfm", "../yaml/yaml"], mod); + else // Plain browser env + mod(CodeMirror); +})(function (CodeMirror) { + + // a mixed mode for Markdown text with an optional YAML front matter + CodeMirror.defineMode("yaml-markdown", function (config) { + var gfmMode = CodeMirror.getMode(config, {name: "gfm"}); + var yamlMode = CodeMirror.getMode(config, {name: "yaml"}); + + return { + startState: function () { + var gfmState = gfmMode.startState(); + var yamlState = yamlMode.startState(); + return { + firstLine: true, + mode: gfmMode, + gfmState: gfmState, + yamlState: yamlState + }; + }, + copyState: function (state) { + return { + mode: state.mode, + gfmState: gfmMode.copyState(state.gfmState), + yamlState: state.yamlState + }; + }, + token: function (stream, state) { + if (state.firstLine && stream.match(/---/, false)) { + state.firstLine = false; + state.mode = yamlMode; + return yamlMode.token(stream, state.yamlState); + } else if (state.mode == yamlMode && stream.match(/---/, false)) { + state.mode = gfmMode; + return yamlMode.token(stream, state.yamlState); + } else if (state.mode == yamlMode) { + return state.mode.token(stream, state.yamlState); + } else { + return state.mode.token(stream, state.gfmState); + } + }, + innerMode: function (state) { + if (state.mode == gfmMode) { + return gfmMode.innerMode(state.gfmState); + } else { + return {mode: yamlMode, state: state}; + } + }, + blankLine: function (state) { + if (state.mode == gfmMode) { + return gfmMode.blankLine(state.gfmState) + } + } + }; + }); +});