keydown 0.7.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. data/.gitignore +2 -0
  2. data/.travis.yml +3 -0
  3. data/LICENSE +1 -1
  4. data/README.md +16 -15
  5. data/VERSION +1 -1
  6. data/keydown.gemspec +9 -6
  7. data/lib/keydown.rb +9 -22
  8. data/lib/keydown/html_helpers.rb +12 -0
  9. data/lib/keydown/{lib/slide.rb → slide.rb} +16 -19
  10. data/lib/keydown/{lib/slidedeck.rb → slidedeck.rb} +20 -5
  11. data/lib/keydown/tasks.rb +5 -0
  12. data/lib/keydown/tasks/base.rb +15 -0
  13. data/lib/keydown/tasks/generate.rb +5 -1
  14. data/lib/keydown/tasks/slides.rb +1 -1
  15. data/lib/version.rb +1 -1
  16. data/spec/lib/html_helpers_spec.rb +26 -0
  17. data/spec/lib/slide_spec.rb +29 -17
  18. data/spec/lib/slidedeck_spec.rb +41 -13
  19. data/spec/spec_helper.rb +2 -6
  20. data/spec/tasks/generate_spec.rb +41 -20
  21. data/spec/tasks/slides_spec.rb +83 -44
  22. data/templates/deck.js/code.html.haml +1 -0
  23. data/templates/deck.js/index.html.haml +54 -0
  24. data/templates/deck.js/slide.html.haml +6 -0
  25. data/templates/generate/css/%presentation_name%.css +12 -1
  26. data/templates/generate/deck.js/core/deck.core.css +394 -0
  27. data/templates/generate/deck.js/core/deck.core.js +461 -0
  28. data/templates/generate/deck.js/core/deck.core.scss +432 -0
  29. data/templates/generate/deck.js/extensions/codemirror/CONTRIBUTORS.txt +2 -0
  30. data/templates/generate/deck.js/extensions/codemirror/MIT-LICENSE.txt +21 -0
  31. data/templates/generate/deck.js/extensions/codemirror/README.md +120 -0
  32. data/templates/generate/deck.js/extensions/codemirror/VERSION.txt +1 -0
  33. data/templates/generate/deck.js/extensions/codemirror/codemirror.js +21 -0
  34. data/templates/generate/deck.js/extensions/codemirror/deck.codemirror.css +89 -0
  35. data/templates/generate/deck.js/extensions/codemirror/deck.codemirror.js +213 -0
  36. data/templates/generate/deck.js/extensions/codemirror/deck.codemirror.scss +107 -0
  37. data/templates/generate/deck.js/extensions/codemirror/mode/clike/clike.js +247 -0
  38. data/templates/generate/deck.js/extensions/codemirror/mode/clike/index.html +102 -0
  39. data/templates/generate/deck.js/extensions/codemirror/mode/clojure/clojure.js +207 -0
  40. data/templates/generate/deck.js/extensions/codemirror/mode/clojure/index.html +85 -0
  41. data/templates/generate/deck.js/extensions/codemirror/mode/coffeescript/LICENSE +22 -0
  42. data/templates/generate/deck.js/extensions/codemirror/mode/coffeescript/coffeescript.js +325 -0
  43. data/templates/generate/deck.js/extensions/codemirror/mode/coffeescript/index.html +722 -0
  44. data/templates/generate/deck.js/extensions/codemirror/mode/css/css.js +124 -0
  45. data/templates/generate/deck.js/extensions/codemirror/mode/css/index.html +56 -0
  46. data/templates/generate/deck.js/extensions/codemirror/mode/diff/diff.css +3 -0
  47. data/templates/generate/deck.js/extensions/codemirror/mode/diff/diff.js +13 -0
  48. data/templates/generate/deck.js/extensions/codemirror/mode/diff/index.html +99 -0
  49. data/templates/generate/deck.js/extensions/codemirror/mode/haskell/haskell.js +242 -0
  50. data/templates/generate/deck.js/extensions/codemirror/mode/haskell/index.html +60 -0
  51. data/templates/generate/deck.js/extensions/codemirror/mode/htmlmixed/htmlmixed.js +79 -0
  52. data/templates/generate/deck.js/extensions/codemirror/mode/htmlmixed/index.html +52 -0
  53. data/templates/generate/deck.js/extensions/codemirror/mode/javascript/index.html +78 -0
  54. data/templates/generate/deck.js/extensions/codemirror/mode/javascript/javascript.js +348 -0
  55. data/templates/generate/deck.js/extensions/codemirror/mode/lua/index.html +72 -0
  56. data/templates/generate/deck.js/extensions/codemirror/mode/lua/lua.js +138 -0
  57. data/templates/generate/deck.js/extensions/codemirror/mode/php/index.html +49 -0
  58. data/templates/generate/deck.js/extensions/codemirror/mode/php/php.js +115 -0
  59. data/templates/generate/deck.js/extensions/codemirror/mode/plsql/index.html +63 -0
  60. data/templates/generate/deck.js/extensions/codemirror/mode/plsql/plsql.js +217 -0
  61. data/templates/generate/deck.js/extensions/codemirror/mode/python/LICENSE.txt +21 -0
  62. data/templates/generate/deck.js/extensions/codemirror/mode/python/index.html +123 -0
  63. data/templates/generate/deck.js/extensions/codemirror/mode/python/python.js +321 -0
  64. data/templates/generate/deck.js/extensions/codemirror/mode/r/LICENSE +24 -0
  65. data/templates/generate/deck.js/extensions/codemirror/mode/r/index.html +74 -0
  66. data/templates/generate/deck.js/extensions/codemirror/mode/r/r.js +141 -0
  67. data/templates/generate/deck.js/extensions/codemirror/mode/rst/index.html +526 -0
  68. data/templates/generate/deck.js/extensions/codemirror/mode/rst/rst.css +75 -0
  69. data/templates/generate/deck.js/extensions/codemirror/mode/rst/rst.js +333 -0
  70. data/templates/generate/deck.js/extensions/codemirror/mode/ruby/LICENSE +24 -0
  71. data/templates/generate/deck.js/extensions/codemirror/mode/ruby/index.html +172 -0
  72. data/templates/generate/deck.js/extensions/codemirror/mode/ruby/ruby.js +195 -0
  73. data/templates/generate/deck.js/extensions/codemirror/mode/scheme/index.html +65 -0
  74. data/templates/generate/deck.js/extensions/codemirror/mode/scheme/scheme.js +202 -0
  75. data/templates/generate/deck.js/extensions/codemirror/mode/smalltalk/index.html +56 -0
  76. data/templates/generate/deck.js/extensions/codemirror/mode/smalltalk/smalltalk.js +122 -0
  77. data/templates/generate/deck.js/extensions/codemirror/mode/sparql/index.html +41 -0
  78. data/templates/generate/deck.js/extensions/codemirror/mode/sparql/sparql.js +143 -0
  79. data/templates/generate/deck.js/extensions/codemirror/mode/stex/index.html +96 -0
  80. data/templates/generate/deck.js/extensions/codemirror/mode/stex/stex.js +167 -0
  81. data/templates/generate/deck.js/extensions/codemirror/mode/velocity/index.html +103 -0
  82. data/templates/generate/deck.js/extensions/codemirror/mode/velocity/velocity.js +146 -0
  83. data/templates/generate/deck.js/extensions/codemirror/mode/xml/index.html +42 -0
  84. data/templates/generate/deck.js/extensions/codemirror/mode/xml/xml.js +231 -0
  85. data/templates/generate/deck.js/extensions/codemirror/mode/xmlpure/index.html +60 -0
  86. data/templates/generate/deck.js/extensions/codemirror/mode/xmlpure/xmlpure.js +481 -0
  87. data/templates/generate/deck.js/extensions/codemirror/mode/yaml/index.html +68 -0
  88. data/templates/generate/deck.js/extensions/codemirror/mode/yaml/yaml.js +95 -0
  89. data/templates/generate/deck.js/extensions/codemirror/themes/cobalt.css +17 -0
  90. data/templates/generate/deck.js/extensions/codemirror/themes/default.css +19 -0
  91. data/templates/generate/deck.js/extensions/codemirror/themes/elegant.css +9 -0
  92. data/templates/generate/deck.js/extensions/codemirror/themes/neat.css +8 -0
  93. data/templates/generate/deck.js/extensions/codemirror/themes/night.css +20 -0
  94. data/templates/generate/deck.js/extensions/goto/deck.goto.css +41 -0
  95. data/templates/generate/deck.js/extensions/goto/deck.goto.html +6 -0
  96. data/templates/generate/deck.js/extensions/goto/deck.goto.js +118 -0
  97. data/templates/generate/deck.js/extensions/goto/deck.goto.scss +46 -0
  98. data/templates/generate/deck.js/extensions/hash/deck.hash.css +13 -0
  99. data/templates/generate/deck.js/extensions/hash/deck.hash.html +2 -0
  100. data/templates/generate/deck.js/extensions/hash/deck.hash.js +125 -0
  101. data/templates/generate/deck.js/extensions/hash/deck.hash.scss +15 -0
  102. data/templates/generate/deck.js/extensions/menu/deck.menu.css +24 -0
  103. data/templates/generate/deck.js/extensions/menu/deck.menu.js +127 -0
  104. data/templates/generate/deck.js/extensions/menu/deck.menu.scss +29 -0
  105. data/templates/generate/deck.js/extensions/navigation/deck.navigation.css +43 -0
  106. data/templates/generate/deck.js/extensions/navigation/deck.navigation.html +3 -0
  107. data/templates/generate/deck.js/extensions/navigation/deck.navigation.js +83 -0
  108. data/templates/generate/deck.js/extensions/navigation/deck.navigation.scss +56 -0
  109. data/templates/generate/deck.js/extensions/scale/deck.scale.css +16 -0
  110. data/templates/generate/deck.js/extensions/scale/deck.scale.js +155 -0
  111. data/templates/generate/deck.js/extensions/scale/deck.scale.scss +17 -0
  112. data/templates/generate/deck.js/extensions/status/deck.status.css +14 -0
  113. data/templates/generate/deck.js/extensions/status/deck.status.html +6 -0
  114. data/templates/generate/deck.js/extensions/status/deck.status.js +42 -0
  115. data/templates/generate/deck.js/extensions/status/deck.status.scss +16 -0
  116. data/templates/generate/deck.js/support/jquery.1.6.4.min.js +4 -0
  117. data/templates/generate/deck.js/support/modernizr.custom.js +4 -0
  118. data/templates/generate/deck.js/themes/style/neon.css +114 -0
  119. data/templates/generate/deck.js/themes/style/neon.scss +139 -0
  120. data/templates/generate/deck.js/themes/style/swiss.css +75 -0
  121. data/templates/generate/deck.js/themes/style/swiss.scss +91 -0
  122. data/templates/generate/deck.js/themes/style/web-2.0.css +187 -0
  123. data/templates/generate/deck.js/themes/style/web-2.0.scss +214 -0
  124. data/templates/generate/deck.js/themes/transition/fade.css +44 -0
  125. data/templates/generate/deck.js/themes/transition/fade.scss +70 -0
  126. data/templates/generate/deck.js/themes/transition/horizontal-slide.css +79 -0
  127. data/templates/generate/deck.js/themes/transition/horizontal-slide.scss +94 -0
  128. data/templates/generate/deck.js/themes/transition/vertical-slide.css +97 -0
  129. data/templates/generate/deck.js/themes/transition/vertical-slide.scss +116 -0
  130. data/templates/keydown.css.erb +27 -23
  131. metadata +171 -32
  132. data/Gemfile.lock +0 -41
  133. data/templates/generate/css/rocks.css +0 -392
  134. data/templates/generate/css/syntax_highlighting.css +0 -135
  135. data/templates/generate/js/rocks.js +0 -419
  136. data/templates/rocks/index.rhtml +0 -132
  137. data/templates/rocks/slide.rhtml +0 -10
@@ -0,0 +1,167 @@
1
+ /*
2
+ * Author: Constantin Jucovschi (c.jucovschi@jacobs-university.de)
3
+ * Licence: MIT
4
+ */
5
+
6
+ CodeMirror.defineMode("stex", function(cmCfg, modeCfg)
7
+ {
8
+ function pushCommand(state, command) {
9
+ state.cmdState.push(command);
10
+ }
11
+
12
+ function peekCommand(state) {
13
+ if (state.cmdState.length>0)
14
+ return state.cmdState[state.cmdState.length-1];
15
+ else
16
+ return null;
17
+ }
18
+
19
+ function popCommand(state) {
20
+ if (state.cmdState.length>0) {
21
+ var plug = state.cmdState.pop();
22
+ plug.closeBracket();
23
+ }
24
+ }
25
+
26
+ function applyMostPowerful(state) {
27
+ var context = state.cmdState;
28
+ for (var i = context.length - 1; i >= 0; i--) {
29
+ var plug = context[i];
30
+ if (plug.name=="DEFAULT")
31
+ continue;
32
+ return plug.styleIdentifier();
33
+ }
34
+ return null;
35
+ }
36
+
37
+ function addPluginPattern(pluginName, cmdStyle, brackets, styles) {
38
+ return function () {
39
+ this.name=pluginName;
40
+ this.bracketNo = 0;
41
+ this.style=cmdStyle;
42
+ this.styles = styles;
43
+ this.brackets = brackets;
44
+
45
+ this.styleIdentifier = function(content) {
46
+ if (this.bracketNo<=this.styles.length)
47
+ return this.styles[this.bracketNo-1];
48
+ else
49
+ return null;
50
+ };
51
+ this.openBracket = function(content) {
52
+ this.bracketNo++;
53
+ return "bracket";
54
+ };
55
+ this.closeBracket = function(content) {
56
+ };
57
+ }
58
+ }
59
+
60
+ var plugins = new Array();
61
+
62
+ plugins["importmodule"] = addPluginPattern("importmodule", "tag", "{[", ["string", "builtin"]);
63
+ plugins["documentclass"] = addPluginPattern("documentclass", "tag", "{[", ["", "atom"]);
64
+ plugins["usepackage"] = addPluginPattern("documentclass", "tag", "[", ["atom"]);
65
+ plugins["begin"] = addPluginPattern("documentclass", "tag", "[", ["atom"]);
66
+ plugins["end"] = addPluginPattern("documentclass", "tag", "[", ["atom"]);
67
+
68
+ plugins["DEFAULT"] = function () {
69
+ this.name="DEFAULT";
70
+ this.style="tag";
71
+
72
+ this.styleIdentifier = function(content) {
73
+ };
74
+ this.openBracket = function(content) {
75
+ };
76
+ this.closeBracket = function(content) {
77
+ };
78
+ };
79
+
80
+ function setState(state, f) {
81
+ state.f = f;
82
+ }
83
+
84
+ function normal(source, state) {
85
+ if (source.match(/^\\[a-z]+/)) {
86
+ var cmdName = source.current();
87
+ cmdName = cmdName.substr(1, cmdName.length-1);
88
+ var plug = plugins[cmdName];
89
+ if (typeof(plug) == 'undefined') {
90
+ plug = plugins["DEFAULT"];
91
+ }
92
+ plug = new plug();
93
+ pushCommand(state, plug);
94
+ setState(state, beginParams);
95
+ return plug.style;
96
+ }
97
+
98
+ var ch = source.next();
99
+ if (ch == "%") {
100
+ setState(state, inCComment);
101
+ return "comment";
102
+ }
103
+ else if (ch=='}' || ch==']') {
104
+ plug = peekCommand(state);
105
+ if (plug) {
106
+ plug.closeBracket(ch);
107
+ setState(state, beginParams);
108
+ } else
109
+ return "error";
110
+ return "bracket";
111
+ } else if (ch=='{' || ch=='[') {
112
+ plug = plugins["DEFAULT"];
113
+ plug = new plug();
114
+ pushCommand(state, plug);
115
+ return "bracket";
116
+ }
117
+ else if (/\d/.test(ch)) {
118
+ source.eatWhile(/[\w.%]/);
119
+ return "atom";
120
+ }
121
+ else {
122
+ source.eatWhile(/[\w-_]/);
123
+ return applyMostPowerful(state);
124
+ }
125
+ }
126
+
127
+ function inCComment(source, state) {
128
+ source.skipToEnd();
129
+ setState(state, normal);
130
+ return "comment";
131
+ }
132
+
133
+ function beginParams(source, state) {
134
+ var ch = source.peek();
135
+ if (ch == '{' || ch == '[') {
136
+ var lastPlug = peekCommand(state);
137
+ var style = lastPlug.openBracket(ch);
138
+ source.eat(ch);
139
+ setState(state, normal);
140
+ return "bracket";
141
+ }
142
+ if (/[ \t\r]/.test(ch)) {
143
+ source.eat(ch);
144
+ return null;
145
+ }
146
+ setState(state, normal);
147
+ lastPlug = peekCommand(state);
148
+ if (lastPlug) {
149
+ popCommand(state);
150
+ }
151
+ return normal(source, state);
152
+ }
153
+
154
+ return {
155
+ startState: function() { return { f:normal, cmdState:[] }; },
156
+ copyState: function(s) { return { f: s.f, cmdState: s.cmdState.slice(0, s.cmdState.length) }; },
157
+
158
+ token: function(stream, state) {
159
+ var t = state.f(stream, state);
160
+ var w = stream.current();
161
+ return t;
162
+ }
163
+ };
164
+ });
165
+
166
+
167
+ CodeMirror.defineMIME("text/x-stex", "stex");
@@ -0,0 +1,103 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>CodeMirror 2: Velocity mode</title>
5
+ <link rel="stylesheet" href="../../lib/codemirror.css">
6
+ <script src="../../lib/codemirror.js"></script>
7
+ <script src="velocity.js"></script>
8
+ <link rel="stylesheet" href="../../theme/night.css">
9
+ <style>.CodeMirror {border: 1px solid black;}</style>
10
+ <link rel="stylesheet" href="../../css/docs.css">
11
+ </head>
12
+ <body>
13
+ <h1>CodeMirror 2: Velocity mode</h1>
14
+ <form><textarea id="code" name="code">
15
+ ## Velocity Code Demo
16
+ #*
17
+ based on PL/SQL mode by Peter Raganitsch, adapted to Velocity by Steve O'Hara ( http://www.pivotal-solutions.co.uk )
18
+ August 2011
19
+ *#
20
+
21
+ #*
22
+ This is a multiline comment.
23
+ This is the second line
24
+ *#
25
+
26
+ #[[ hello steve
27
+ This has invalid syntax that would normally need "poor man's escaping" like:
28
+
29
+ #define()
30
+
31
+ ${blah
32
+ ]]#
33
+
34
+ #include( "disclaimer.txt" "opinion.txt" )
35
+ #include( $foo $bar )
36
+
37
+ #parse( "lecorbusier.vm" )
38
+ #parse( $foo )
39
+
40
+ #evaluate( 'string with VTL #if(true)will be displayed#end' )
41
+
42
+ #define( $hello ) Hello $who #end #set( $who = "World!") $hello ## displays Hello World!
43
+
44
+ #foreach( $customer in $customerList )
45
+
46
+ $foreach.count $customer.Name
47
+
48
+ #if( $foo == ${bar})
49
+ it's true!
50
+ #break
51
+ #{else}
52
+ it's not!
53
+ #stop
54
+ #end
55
+
56
+ #if ($foreach.parent.hasNext)
57
+ $velocityCount
58
+ #end
59
+ #end
60
+
61
+ $someObject.getValues("this is a string split
62
+ across lines")
63
+
64
+ #macro( tablerows $color $somelist )
65
+ #foreach( $something in $somelist )
66
+ <tr><td bgcolor=$color>$something</td></tr>
67
+ #end
68
+ #end
69
+
70
+ #tablerows("red" ["dadsdf","dsa"])
71
+
72
+ Variable reference: #set( $monkey = $bill )
73
+ String literal: #set( $monkey.Friend = 'monica' )
74
+ Property reference: #set( $monkey.Blame = $whitehouse.Leak )
75
+ Method reference: #set( $monkey.Plan = $spindoctor.weave($web) )
76
+ Number literal: #set( $monkey.Number = 123 )
77
+ Range operator: #set( $monkey.Numbers = [1..3] )
78
+ Object list: #set( $monkey.Say = ["Not", $my, "fault"] )
79
+ Object map: #set( $monkey.Map = {"banana" : "good", "roast beef" : "bad"})
80
+
81
+ The RHS can also be a simple arithmetic expression, such as:
82
+ Addition: #set( $value = $foo + 1 )
83
+ Subtraction: #set( $value = $bar - 1 )
84
+ Multiplication: #set( $value = $foo * $bar )
85
+ Division: #set( $value = $foo / $bar )
86
+ Remainder: #set( $value = $foo % $bar )
87
+
88
+ </textarea></form>
89
+ <script>
90
+ var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
91
+ tabMode: "indent",
92
+ matchBrackets: true,
93
+ theme: "night",
94
+ lineNumbers: true,
95
+ indentUnit: 4,
96
+ mode: "text/velocity"
97
+ });
98
+ </script>
99
+
100
+ <p><strong>MIME types defined:</strong> <code>text/velocity</code>.</p>
101
+
102
+ </body>
103
+ </html>
@@ -0,0 +1,146 @@
1
+ CodeMirror.defineMode("velocity", function(config) {
2
+ function parseWords(str) {
3
+ var obj = {}, words = str.split(" ");
4
+ for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
5
+ return obj;
6
+ }
7
+
8
+ var indentUnit = config.indentUnit
9
+ var keywords = parseWords("#end #else #break #stop #[[ #]] " +
10
+ "#{end} #{else} #{break} #{stop}");
11
+ var functions = parseWords("#if #elseif #foreach #set #include #parse #macro #define #evaluate " +
12
+ "#{if} #{elseif} #{foreach} #{set} #{include} #{parse} #{macro} #{define} #{evaluate}");
13
+ var specials = parseWords("$foreach.count $foreach.hasNext $foreach.first $foreach.last $foreach.topmost $foreach.parent $velocityCount");
14
+ var isOperatorChar = /[+\-*&%=<>!?:\/|]/;
15
+ var multiLineStrings =true;
16
+
17
+ function chain(stream, state, f) {
18
+ state.tokenize = f;
19
+ return f(stream, state);
20
+ }
21
+ function tokenBase(stream, state) {
22
+ var beforeParams = state.beforeParams;
23
+ state.beforeParams = false;
24
+ var ch = stream.next();
25
+ // start of string?
26
+ if ((ch == '"' || ch == "'") && state.inParams)
27
+ return chain(stream, state, tokenString(ch));
28
+ // is it one of the special signs []{}().,;? Seperator?
29
+ else if (/[\[\]{}\(\),;\.]/.test(ch)) {
30
+ if (ch == "(" && beforeParams) state.inParams = true;
31
+ else if (ch == ")") state.inParams = false;
32
+ return null;
33
+ }
34
+ // start of a number value?
35
+ else if (/\d/.test(ch)) {
36
+ stream.eatWhile(/[\w\.]/);
37
+ return "number";
38
+ }
39
+ // multi line comment?
40
+ else if (ch == "#" && stream.eat("*")) {
41
+ return chain(stream, state, tokenComment);
42
+ }
43
+ // unparsed content?
44
+ else if (ch == "#" && stream.match(/ *\[ *\[/)) {
45
+ return chain(stream, state, tokenUnparsed);
46
+ }
47
+ // single line comment?
48
+ else if (ch == "#" && stream.eat("#")) {
49
+ stream.skipToEnd();
50
+ return "comment";
51
+ }
52
+ // variable?
53
+ else if (ch == "$") {
54
+ stream.eatWhile(/[\w\d\$_\.{}]/);
55
+ // is it one of the specials?
56
+ if (specials && specials.propertyIsEnumerable(stream.current().toLowerCase())) {
57
+ return "keyword";
58
+ }
59
+ else {
60
+ state.beforeParams = true;
61
+ return "builtin";
62
+ }
63
+ }
64
+ // is it a operator?
65
+ else if (isOperatorChar.test(ch)) {
66
+ stream.eatWhile(isOperatorChar);
67
+ return "operator";
68
+ }
69
+ else {
70
+ // get the whole word
71
+ stream.eatWhile(/[\w\$_{}]/);
72
+ var word = stream.current().toLowerCase();
73
+ // is it one of the listed keywords?
74
+ if (keywords && keywords.propertyIsEnumerable(word))
75
+ return "keyword";
76
+ // is it one of the listed functions?
77
+ if (functions && functions.propertyIsEnumerable(word) ||
78
+ stream.current().match(/^#[a-z0-9_]+ *$/i) && stream.peek()=="(") {
79
+ state.beforeParams = true;
80
+ return "keyword";
81
+ }
82
+ // default: just a "word"
83
+ return null;
84
+ }
85
+ }
86
+
87
+ function tokenString(quote) {
88
+ return function(stream, state) {
89
+ var escaped = false, next, end = false;
90
+ while ((next = stream.next()) != null) {
91
+ if (next == quote && !escaped) {
92
+ end = true;
93
+ break;
94
+ }
95
+ escaped = !escaped && next == "\\";
96
+ }
97
+ if (end) state.tokenize = tokenBase;
98
+ return "string";
99
+ };
100
+ }
101
+
102
+ function tokenComment(stream, state) {
103
+ var maybeEnd = false, ch;
104
+ while (ch = stream.next()) {
105
+ if (ch == "#" && maybeEnd) {
106
+ state.tokenize = tokenBase;
107
+ break;
108
+ }
109
+ maybeEnd = (ch == "*");
110
+ }
111
+ return "comment";
112
+ }
113
+
114
+ function tokenUnparsed(stream, state) {
115
+ var maybeEnd = 0, ch;
116
+ while (ch = stream.next()) {
117
+ if (ch == "#" && maybeEnd == 2) {
118
+ state.tokenize = tokenBase;
119
+ break;
120
+ }
121
+ if (ch == "]")
122
+ maybeEnd++;
123
+ else if (ch != " ")
124
+ maybeEnd = 0;
125
+ }
126
+ return "meta";
127
+ }
128
+ // Interface
129
+
130
+ return {
131
+ startState: function(basecolumn) {
132
+ return {
133
+ tokenize: tokenBase,
134
+ beforeParams: false,
135
+ inParams: false
136
+ };
137
+ },
138
+
139
+ token: function(stream, state) {
140
+ if (stream.eatSpace()) return null;
141
+ return state.tokenize(stream, state);
142
+ }
143
+ };
144
+ });
145
+
146
+ CodeMirror.defineMIME("text/velocity", "velocity");
@@ -0,0 +1,42 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>CodeMirror 2: XML mode</title>
5
+ <link rel="stylesheet" href="../../lib/codemirror.css">
6
+ <script src="../../lib/codemirror.js"></script>
7
+ <script src="xml.js"></script>
8
+ <link rel="stylesheet" href="../../theme/default.css">
9
+ <style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
10
+ <link rel="stylesheet" href="../../css/docs.css">
11
+ </head>
12
+ <body>
13
+ <h1>CodeMirror 2: XML mode</h1>
14
+ <form><textarea id="code" name="code">
15
+ &lt;html style="color: green"&gt;
16
+ &lt;!-- this is a comment --&gt;
17
+ &lt;head&gt;
18
+ &lt;title&gt;HTML Example&lt;/title&gt;
19
+ &lt;/head&gt;
20
+ &lt;body&gt;
21
+ The indentation tries to be &lt;em&gt;somewhat &amp;quot;do what
22
+ I mean&amp;quot;&lt;/em&gt;... but might not match your style.
23
+ &lt;/body&gt;
24
+ &lt;/html&gt;
25
+ </textarea></form>
26
+ <script>
27
+ var editor = CodeMirror.fromTextArea(document.getElementById("code"), {mode: {name: "xml", htmlMode: true}});
28
+ </script>
29
+ <p>The XML mode supports two configuration parameters:</p>
30
+ <dl>
31
+ <dt><code>htmlMode (boolean)</code></dt>
32
+ <dd>This switches the mode to parse HTML instead of XML. This
33
+ means attributes do not have to be quoted, and some elements
34
+ (such as <code>br</code>) do not require a closing tag.</dd>
35
+ <dt><code>alignCDATA (boolean)</code></dt>
36
+ <dd>Setting this to true will force the opening tag of CDATA
37
+ blocks to not be indented.</dd>
38
+ </dl>
39
+
40
+ <p><strong>MIME types defined:</strong> <code>application/xml</code>, <code>text/html</code>.</p>
41
+ </body>
42
+ </html>