mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-06-04 08:49:59 -04:00
First commit, version 0.2.7
This commit is contained in:
parent
61eb11d23c
commit
4b0ca55eb7
1379 changed files with 173000 additions and 0 deletions
159
public/vendor/codemirror/mode/haml/haml.js
vendored
Executable file
159
public/vendor/codemirror/mode/haml/haml.js
vendored
Executable file
|
@ -0,0 +1,159 @@
|
|||
// 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("../htmlmixed/htmlmixed"), require("../ruby/ruby"));
|
||||
else if (typeof define == "function" && define.amd) // AMD
|
||||
define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../ruby/ruby"], mod);
|
||||
else // Plain browser env
|
||||
mod(CodeMirror);
|
||||
})(function(CodeMirror) {
|
||||
"use strict";
|
||||
|
||||
// full haml mode. This handled embeded ruby and html fragments too
|
||||
CodeMirror.defineMode("haml", function(config) {
|
||||
var htmlMode = CodeMirror.getMode(config, {name: "htmlmixed"});
|
||||
var rubyMode = CodeMirror.getMode(config, "ruby");
|
||||
|
||||
function rubyInQuote(endQuote) {
|
||||
return function(stream, state) {
|
||||
var ch = stream.peek();
|
||||
if (ch == endQuote && state.rubyState.tokenize.length == 1) {
|
||||
// step out of ruby context as it seems to complete processing all the braces
|
||||
stream.next();
|
||||
state.tokenize = html;
|
||||
return "closeAttributeTag";
|
||||
} else {
|
||||
return ruby(stream, state);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function ruby(stream, state) {
|
||||
if (stream.match("-#")) {
|
||||
stream.skipToEnd();
|
||||
return "comment";
|
||||
}
|
||||
return rubyMode.token(stream, state.rubyState);
|
||||
}
|
||||
|
||||
function html(stream, state) {
|
||||
var ch = stream.peek();
|
||||
|
||||
// handle haml declarations. All declarations that cant be handled here
|
||||
// will be passed to html mode
|
||||
if (state.previousToken.style == "comment" ) {
|
||||
if (state.indented > state.previousToken.indented) {
|
||||
stream.skipToEnd();
|
||||
return "commentLine";
|
||||
}
|
||||
}
|
||||
|
||||
if (state.startOfLine) {
|
||||
if (ch == "!" && stream.match("!!")) {
|
||||
stream.skipToEnd();
|
||||
return "tag";
|
||||
} else if (stream.match(/^%[\w:#\.]+=/)) {
|
||||
state.tokenize = ruby;
|
||||
return "hamlTag";
|
||||
} else if (stream.match(/^%[\w:]+/)) {
|
||||
return "hamlTag";
|
||||
} else if (ch == "/" ) {
|
||||
stream.skipToEnd();
|
||||
return "comment";
|
||||
}
|
||||
}
|
||||
|
||||
if (state.startOfLine || state.previousToken.style == "hamlTag") {
|
||||
if ( ch == "#" || ch == ".") {
|
||||
stream.match(/[\w-#\.]*/);
|
||||
return "hamlAttribute";
|
||||
}
|
||||
}
|
||||
|
||||
// donot handle --> as valid ruby, make it HTML close comment instead
|
||||
if (state.startOfLine && !stream.match("-->", false) && (ch == "=" || ch == "-" )) {
|
||||
state.tokenize = ruby;
|
||||
return state.tokenize(stream, state);
|
||||
}
|
||||
|
||||
if (state.previousToken.style == "hamlTag" ||
|
||||
state.previousToken.style == "closeAttributeTag" ||
|
||||
state.previousToken.style == "hamlAttribute") {
|
||||
if (ch == "(") {
|
||||
state.tokenize = rubyInQuote(")");
|
||||
return state.tokenize(stream, state);
|
||||
} else if (ch == "{") {
|
||||
state.tokenize = rubyInQuote("}");
|
||||
return state.tokenize(stream, state);
|
||||
}
|
||||
}
|
||||
|
||||
return htmlMode.token(stream, state.htmlState);
|
||||
}
|
||||
|
||||
return {
|
||||
// default to html mode
|
||||
startState: function() {
|
||||
var htmlState = htmlMode.startState();
|
||||
var rubyState = rubyMode.startState();
|
||||
return {
|
||||
htmlState: htmlState,
|
||||
rubyState: rubyState,
|
||||
indented: 0,
|
||||
previousToken: { style: null, indented: 0},
|
||||
tokenize: html
|
||||
};
|
||||
},
|
||||
|
||||
copyState: function(state) {
|
||||
return {
|
||||
htmlState : CodeMirror.copyState(htmlMode, state.htmlState),
|
||||
rubyState: CodeMirror.copyState(rubyMode, state.rubyState),
|
||||
indented: state.indented,
|
||||
previousToken: state.previousToken,
|
||||
tokenize: state.tokenize
|
||||
};
|
||||
},
|
||||
|
||||
token: function(stream, state) {
|
||||
if (stream.sol()) {
|
||||
state.indented = stream.indentation();
|
||||
state.startOfLine = true;
|
||||
}
|
||||
if (stream.eatSpace()) return null;
|
||||
var style = state.tokenize(stream, state);
|
||||
state.startOfLine = false;
|
||||
// dont record comment line as we only want to measure comment line with
|
||||
// the opening comment block
|
||||
if (style && style != "commentLine") {
|
||||
state.previousToken = { style: style, indented: state.indented };
|
||||
}
|
||||
// if current state is ruby and the previous token is not `,` reset the
|
||||
// tokenize to html
|
||||
if (stream.eol() && state.tokenize == ruby) {
|
||||
stream.backUp(1);
|
||||
var ch = stream.peek();
|
||||
stream.next();
|
||||
if (ch && ch != ",") {
|
||||
state.tokenize = html;
|
||||
}
|
||||
}
|
||||
// reprocess some of the specific style tag when finish setting previousToken
|
||||
if (style == "hamlTag") {
|
||||
style = "tag";
|
||||
} else if (style == "commentLine") {
|
||||
style = "comment";
|
||||
} else if (style == "hamlAttribute") {
|
||||
style = "attribute";
|
||||
} else if (style == "closeAttributeTag") {
|
||||
style = null;
|
||||
}
|
||||
return style;
|
||||
}
|
||||
};
|
||||
}, "htmlmixed", "ruby");
|
||||
|
||||
CodeMirror.defineMIME("text/x-haml", "haml");
|
||||
});
|
79
public/vendor/codemirror/mode/haml/index.html
vendored
Executable file
79
public/vendor/codemirror/mode/haml/index.html
vendored
Executable file
|
@ -0,0 +1,79 @@
|
|||
<!doctype html>
|
||||
|
||||
<title>CodeMirror: HAML 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="../xml/xml.js"></script>
|
||||
<script src="../htmlmixed/htmlmixed.js"></script>
|
||||
<script src="../javascript/javascript.js"></script>
|
||||
<script src="../ruby/ruby.js"></script>
|
||||
<script src="haml.js"></script>
|
||||
<style>.CodeMirror {background: #f8f8f8;}</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="#">HAML</a>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<article>
|
||||
<h2>HAML mode</h2>
|
||||
<form><textarea id="code" name="code">
|
||||
!!!
|
||||
#content
|
||||
.left.column(title="title"){:href => "/hello", :test => "#{hello}_#{world}"}
|
||||
<!-- This is a comment -->
|
||||
%h2 Welcome to our site!
|
||||
%p= puts "HAML MODE"
|
||||
.right.column
|
||||
= render :partial => "sidebar"
|
||||
|
||||
.container
|
||||
.row
|
||||
.span8
|
||||
%h1.title= @page_title
|
||||
%p.title= @page_title
|
||||
%p
|
||||
/
|
||||
The same as HTML comment
|
||||
Hello multiline comment
|
||||
|
||||
-# haml comment
|
||||
This wont be displayed
|
||||
nor will this
|
||||
Date/Time:
|
||||
- now = DateTime.now
|
||||
%strong= now
|
||||
- if now > DateTime.parse("December 31, 2006")
|
||||
= "Happy new " + "year!"
|
||||
|
||||
%title
|
||||
= @title
|
||||
\= @title
|
||||
<h1>Title</h1>
|
||||
<h1 title="HELLO">
|
||||
Title
|
||||
</h1>
|
||||
</textarea></form>
|
||||
<script>
|
||||
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
|
||||
lineNumbers: true,
|
||||
mode: "text/x-haml"
|
||||
});
|
||||
</script>
|
||||
|
||||
<p><strong>MIME types defined:</strong> <code>text/x-haml</code>.</p>
|
||||
|
||||
<p><strong>Parsing/Highlighting Tests:</strong> <a href="../../test/index.html#haml_*">normal</a>, <a href="../../test/index.html#verbose,haml_*">verbose</a>.</p>
|
||||
|
||||
</article>
|
97
public/vendor/codemirror/mode/haml/test.js
vendored
Executable file
97
public/vendor/codemirror/mode/haml/test.js
vendored
Executable file
|
@ -0,0 +1,97 @@
|
|||
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
||||
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
||||
|
||||
(function() {
|
||||
var mode = CodeMirror.getMode({tabSize: 4, indentUnit: 2}, "haml");
|
||||
function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); }
|
||||
|
||||
// Requires at least one media query
|
||||
MT("elementName",
|
||||
"[tag %h1] Hey There");
|
||||
|
||||
MT("oneElementPerLine",
|
||||
"[tag %h1] Hey There %h2");
|
||||
|
||||
MT("idSelector",
|
||||
"[tag %h1][attribute #test] Hey There");
|
||||
|
||||
MT("classSelector",
|
||||
"[tag %h1][attribute .hello] Hey There");
|
||||
|
||||
MT("docType",
|
||||
"[tag !!! XML]");
|
||||
|
||||
MT("comment",
|
||||
"[comment / Hello WORLD]");
|
||||
|
||||
MT("notComment",
|
||||
"[tag %h1] This is not a / comment ");
|
||||
|
||||
MT("attributes",
|
||||
"[tag %a]([variable title][operator =][string \"test\"]){[atom :title] [operator =>] [string \"test\"]}");
|
||||
|
||||
MT("htmlCode",
|
||||
"[tag&bracket <][tag h1][tag&bracket >]Title[tag&bracket </][tag h1][tag&bracket >]");
|
||||
|
||||
MT("rubyBlock",
|
||||
"[operator =][variable-2 @item]");
|
||||
|
||||
MT("selectorRubyBlock",
|
||||
"[tag %a.selector=] [variable-2 @item]");
|
||||
|
||||
MT("nestedRubyBlock",
|
||||
"[tag %a]",
|
||||
" [operator =][variable puts] [string \"test\"]");
|
||||
|
||||
MT("multilinePlaintext",
|
||||
"[tag %p]",
|
||||
" Hello,",
|
||||
" World");
|
||||
|
||||
MT("multilineRuby",
|
||||
"[tag %p]",
|
||||
" [comment -# this is a comment]",
|
||||
" [comment and this is a comment too]",
|
||||
" Date/Time",
|
||||
" [operator -] [variable now] [operator =] [tag DateTime][operator .][property now]",
|
||||
" [tag %strong=] [variable now]",
|
||||
" [operator -] [keyword if] [variable now] [operator >] [tag DateTime][operator .][property parse]([string \"December 31, 2006\"])",
|
||||
" [operator =][string \"Happy\"]",
|
||||
" [operator =][string \"Belated\"]",
|
||||
" [operator =][string \"Birthday\"]");
|
||||
|
||||
MT("multilineComment",
|
||||
"[comment /]",
|
||||
" [comment Multiline]",
|
||||
" [comment Comment]");
|
||||
|
||||
MT("hamlComment",
|
||||
"[comment -# this is a comment]");
|
||||
|
||||
MT("multilineHamlComment",
|
||||
"[comment -# this is a comment]",
|
||||
" [comment and this is a comment too]");
|
||||
|
||||
MT("multilineHTMLComment",
|
||||
"[comment <!--]",
|
||||
" [comment what a comment]",
|
||||
" [comment -->]");
|
||||
|
||||
MT("hamlAfterRubyTag",
|
||||
"[attribute .block]",
|
||||
" [tag %strong=] [variable now]",
|
||||
" [attribute .test]",
|
||||
" [operator =][variable now]",
|
||||
" [attribute .right]");
|
||||
|
||||
MT("stretchedRuby",
|
||||
"[operator =] [variable puts] [string \"Hello\"],",
|
||||
" [string \"World\"]");
|
||||
|
||||
MT("interpolationInHashAttribute",
|
||||
//"[tag %div]{[atom :id] [operator =>] [string \"#{][variable test][string }_#{][variable ting][string }\"]} test");
|
||||
"[tag %div]{[atom :id] [operator =>] [string \"#{][variable test][string }_#{][variable ting][string }\"]} test");
|
||||
|
||||
MT("interpolationInHTMLAttribute",
|
||||
"[tag %div]([variable title][operator =][string \"#{][variable test][string }_#{][variable ting]()[string }\"]) Test");
|
||||
})();
|
Loading…
Add table
Add a link
Reference in a new issue