liquid_cms 0.3.1.0 → 0.3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. data/CHANGELOG.rdoc +10 -0
  2. data/Gemfile +0 -3
  3. data/README.rdoc +16 -2
  4. data/TODO.rdoc +0 -2
  5. data/app/controllers/cms/assets_controller.rb +20 -6
  6. data/app/controllers/cms/components_controller.rb +11 -3
  7. data/app/controllers/cms/pages_controller.rb +15 -4
  8. data/app/helpers/cms/common_helper.rb +31 -32
  9. data/app/liquid/cms_paperclip_extension.rb +75 -3
  10. data/app/liquid/tags/{data_tag.rb → cms/data_tag.rb} +0 -0
  11. data/app/models/cms/asset.rb +1 -1
  12. data/app/models/cms/component.rb +3 -3
  13. data/app/views/cms/assets/_form.html.erb +1 -2
  14. data/app/views/cms/assets/update.js.rjs +1 -0
  15. data/app/views/cms/components/update.js.rjs +1 -0
  16. data/app/views/cms/pages/_form.html.erb +3 -3
  17. data/app/views/cms/pages/update.js.rjs +1 -0
  18. data/app/views/layouts/cms.html.erb +4 -3
  19. data/config/initializers/cms/simple_form.rb +70 -12
  20. data/config/initializers/cms/simple_form_updates.rb +9 -3
  21. data/config/locales/cms/en.yml +6 -0
  22. data/lib/generators/liquid_cms/install_generator.rb +5 -1
  23. data/lib/generators/liquid_cms/templates/migration_rev2.rb +13 -0
  24. data/lib/generators/liquid_cms/templates/public/cms/codemirror/LICENSE +16 -20
  25. data/lib/generators/liquid_cms/templates/public/cms/codemirror/lib/codemirror.css +68 -0
  26. data/lib/generators/liquid_cms/templates/public/cms/codemirror/lib/codemirror.js +2197 -0
  27. data/lib/generators/liquid_cms/templates/public/cms/codemirror/lib/overlay.js +51 -0
  28. data/lib/generators/liquid_cms/templates/public/cms/codemirror/lib/runmode.js +27 -0
  29. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/clike/clike.js +247 -0
  30. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/clike/index.html +102 -0
  31. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/clojure/clojure.js +207 -0
  32. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/clojure/index.html +85 -0
  33. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/coffeescript/LICENSE +22 -0
  34. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/coffeescript/coffeescript.js +325 -0
  35. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/coffeescript/index.html +722 -0
  36. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/css/css.js +124 -0
  37. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/css/index.html +56 -0
  38. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/diff/diff.css +3 -0
  39. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/diff/diff.js +13 -0
  40. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/diff/index.html +99 -0
  41. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/haskell/haskell.js +242 -0
  42. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/haskell/index.html +60 -0
  43. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/htmlmixed/htmlmixed.js +79 -0
  44. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/htmlmixed/index.html +52 -0
  45. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/javascript/index.html +78 -0
  46. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/javascript/javascript.js +352 -0
  47. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/jinja2/index.html +38 -0
  48. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/jinja2/jinja2.js +42 -0
  49. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/lua/index.html +72 -0
  50. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/lua/lua.js +140 -0
  51. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/markdown/index.html +340 -0
  52. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/markdown/markdown.css +10 -0
  53. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/markdown/markdown.js +230 -0
  54. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/ntriples/index.html +33 -0
  55. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/ntriples/ntriples.js +172 -0
  56. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/pascal/LICENSE +7 -0
  57. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/pascal/index.html +49 -0
  58. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/pascal/pascal.js +138 -0
  59. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/php/index.html +49 -0
  60. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/php/php.js +116 -0
  61. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/plsql/index.html +63 -0
  62. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/plsql/plsql.js +217 -0
  63. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/python/LICENSE.txt +21 -0
  64. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/python/index.html +123 -0
  65. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/python/python.js +320 -0
  66. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/r/LICENSE +24 -0
  67. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/r/index.html +74 -0
  68. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/r/r.js +141 -0
  69. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/rst/index.html +526 -0
  70. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/rst/rst.css +75 -0
  71. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/rst/rst.js +333 -0
  72. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/ruby/LICENSE +24 -0
  73. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/ruby/index.html +172 -0
  74. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/ruby/ruby.js +195 -0
  75. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/scheme/index.html +65 -0
  76. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/scheme/scheme.js +202 -0
  77. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/smalltalk/index.html +56 -0
  78. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/smalltalk/smalltalk.js +122 -0
  79. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/sparql/index.html +41 -0
  80. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/sparql/sparql.js +143 -0
  81. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/stex/index.html +96 -0
  82. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/stex/stex.js +167 -0
  83. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/velocity/index.html +103 -0
  84. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/velocity/velocity.js +146 -0
  85. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/xml/index.html +42 -0
  86. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/xml/xml.js +231 -0
  87. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/xmlpure/index.html +60 -0
  88. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/xmlpure/xmlpure.js +481 -0
  89. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/yaml/index.html +68 -0
  90. data/lib/generators/liquid_cms/templates/public/cms/codemirror/mode/yaml/yaml.js +95 -0
  91. data/lib/generators/liquid_cms/templates/public/cms/codemirror/theme/cobalt.css +17 -0
  92. data/lib/generators/liquid_cms/templates/public/cms/codemirror/theme/default.css +19 -0
  93. data/lib/generators/liquid_cms/templates/public/cms/codemirror/theme/eclipse.css +24 -0
  94. data/lib/generators/liquid_cms/templates/public/cms/codemirror/theme/elegant.css +9 -0
  95. data/lib/generators/liquid_cms/templates/public/cms/codemirror/theme/neat.css +8 -0
  96. data/lib/generators/liquid_cms/templates/public/cms/codemirror/theme/night.css +20 -0
  97. data/lib/generators/liquid_cms/templates/public/cms/javascripts/cms.js +1 -1
  98. data/lib/generators/liquid_cms/templates/public/cms/javascripts/codemirror_custom.js +96 -0
  99. data/lib/generators/liquid_cms/templates/public/cms/stylesheets/codemirror_changes.css +26 -0
  100. data/lib/generators/liquid_cms/templates/public/cms/stylesheets/liquid.css +7 -0
  101. data/lib/generators/liquid_cms/templates/public/cms/stylesheets/simple_form.css +0 -8
  102. data/lib/liquid_cms/version.rb +1 -1
  103. data/liquid_cms.gemspec +1 -1
  104. data/test/functional/assets_controller_test.rb +35 -20
  105. data/test/functional/components_controller_test.rb +15 -5
  106. data/test/functional/pages_controller_test.rb +19 -6
  107. data/test/rails_app/Gemfile +1 -2
  108. data/test/rails_app/config/locales/cms/en.yml +26 -4
  109. data/test/rails_app/db/migrate/20110511161859_create_liquid_cms_upgrade_rev2.rb +13 -0
  110. data/test/unit/asset_test.rb +1 -1
  111. data/test/unit/component_test.rb +1 -1
  112. metadata +89 -32
  113. data/generators/liquid_cms/templates/migration_rev1.rb +0 -38
  114. data/lib/generators/liquid_cms/templates/public/cms/codemirror/css/csscolors.css +0 -55
  115. data/lib/generators/liquid_cms/templates/public/cms/codemirror/css/docs.css +0 -158
  116. data/lib/generators/liquid_cms/templates/public/cms/codemirror/css/font.js +0 -15
  117. data/lib/generators/liquid_cms/templates/public/cms/codemirror/css/jscolors.css +0 -59
  118. data/lib/generators/liquid_cms/templates/public/cms/codemirror/css/sparqlcolors.css +0 -43
  119. data/lib/generators/liquid_cms/templates/public/cms/codemirror/css/xmlcolors.css +0 -55
  120. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/codemirror.js +0 -582
  121. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/editor.js +0 -1671
  122. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/highlight.js +0 -68
  123. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/mirrorframe.js +0 -81
  124. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/parsecss.js +0 -161
  125. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/parsedummy.js +0 -32
  126. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/parsehtmlmixed.js +0 -93
  127. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/parsejavascript.js +0 -359
  128. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/parsesparql.js +0 -162
  129. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/parsexml.js +0 -291
  130. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/select.js +0 -699
  131. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/stringstream.js +0 -159
  132. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/tokenize.js +0 -57
  133. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/tokenizejavascript.js +0 -174
  134. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/undo.js +0 -413
  135. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/unittests.js +0 -44
  136. data/lib/generators/liquid_cms/templates/public/cms/codemirror/js/util.js +0 -133
@@ -1,162 +0,0 @@
1
- var SparqlParser = Editor.Parser = (function() {
2
- function wordRegexp(words) {
3
- return new RegExp("^(?:" + words.join("|") + ")$", "i");
4
- }
5
- var ops = wordRegexp(["str", "lang", "langmatches", "datatype", "bound", "sameterm", "isiri", "isuri",
6
- "isblank", "isliteral", "union", "a"]);
7
- var keywords = wordRegexp(["base", "prefix", "select", "distinct", "reduced", "construct", "describe",
8
- "ask", "from", "named", "where", "order", "limit", "offset", "filter", "optional",
9
- "graph", "by", "asc", "desc"]);
10
- var operatorChars = /[*+\-<>=&|]/;
11
-
12
- var tokenizeSparql = (function() {
13
- function normal(source, setState) {
14
- var ch = source.next();
15
- if (ch == "$" || ch == "?") {
16
- source.nextWhileMatches(/[\w\d]/);
17
- return "sp-var";
18
- }
19
- else if (ch == "<" && !source.matches(/[\s\u00a0=]/)) {
20
- source.nextWhileMatches(/[^\s\u00a0>]/);
21
- if (source.equals(">")) source.next();
22
- return "sp-uri";
23
- }
24
- else if (ch == "\"" || ch == "'") {
25
- setState(inLiteral(ch));
26
- return null;
27
- }
28
- else if (/[{}\(\),\.;\[\]]/.test(ch)) {
29
- return "sp-punc";
30
- }
31
- else if (ch == "#") {
32
- while (!source.endOfLine()) source.next();
33
- return "sp-comment";
34
- }
35
- else if (operatorChars.test(ch)) {
36
- source.nextWhileMatches(operatorChars);
37
- return "sp-operator";
38
- }
39
- else if (ch == ":") {
40
- source.nextWhileMatches(/[\w\d\._\-]/);
41
- return "sp-prefixed";
42
- }
43
- else {
44
- source.nextWhileMatches(/[_\w\d]/);
45
- if (source.equals(":")) {
46
- source.next();
47
- source.nextWhileMatches(/[\w\d_\-]/);
48
- return "sp-prefixed";
49
- }
50
- var word = source.get(), type;
51
- if (ops.test(word))
52
- type = "sp-operator";
53
- else if (keywords.test(word))
54
- type = "sp-keyword";
55
- else
56
- type = "sp-word";
57
- return {style: type, content: word};
58
- }
59
- }
60
-
61
- function inLiteral(quote) {
62
- return function(source, setState) {
63
- var escaped = false;
64
- while (!source.endOfLine()) {
65
- var ch = source.next();
66
- if (ch == quote && !escaped) {
67
- setState(normal);
68
- break;
69
- }
70
- escaped = !escaped && ch == "\\";
71
- }
72
- return "sp-literal";
73
- };
74
- }
75
-
76
- return function(source, startState) {
77
- return tokenizer(source, startState || normal);
78
- };
79
- })();
80
-
81
- function indentSparql(context) {
82
- return function(nextChars) {
83
- var firstChar = nextChars && nextChars.charAt(0);
84
- if (/[\]\}]/.test(firstChar))
85
- while (context && context.type == "pattern") context = context.prev;
86
-
87
- var closing = context && firstChar == matching[context.type];
88
- if (!context)
89
- return 0;
90
- else if (context.type == "pattern")
91
- return context.col;
92
- else if (context.align)
93
- return context.col - (closing ? context.width : 0);
94
- else
95
- return context.indent + (closing ? 0 : indentUnit);
96
- }
97
- }
98
-
99
- function parseSparql(source) {
100
- var tokens = tokenizeSparql(source);
101
- var context = null, indent = 0, col = 0;
102
- function pushContext(type, width) {
103
- context = {prev: context, indent: indent, col: col, type: type, width: width};
104
- }
105
- function popContext() {
106
- context = context.prev;
107
- }
108
-
109
- var iter = {
110
- next: function() {
111
- var token = tokens.next(), type = token.style, content = token.content, width = token.value.length;
112
-
113
- if (content == "\n") {
114
- token.indentation = indentSparql(context);
115
- indent = col = 0;
116
- if (context && context.align == null) context.align = false;
117
- }
118
- else if (type == "whitespace" && col == 0) {
119
- indent = width;
120
- }
121
- else if (type != "sp-comment" && context && context.align == null) {
122
- context.align = true;
123
- }
124
-
125
- if (content != "\n") col += width;
126
-
127
- if (/[\[\{\(]/.test(content)) {
128
- pushContext(content, width);
129
- }
130
- else if (/[\]\}\)]/.test(content)) {
131
- while (context && context.type == "pattern")
132
- popContext();
133
- if (context && content == matching[context.type])
134
- popContext();
135
- }
136
- else if (content == "." && context && context.type == "pattern") {
137
- popContext();
138
- }
139
- else if ((type == "sp-word" || type == "sp-prefixed" || type == "sp-uri" || type == "sp-var" || type == "sp-literal") &&
140
- context && /[\{\[]/.test(context.type)) {
141
- pushContext("pattern", width);
142
- }
143
-
144
- return token;
145
- },
146
-
147
- copy: function() {
148
- var _context = context, _indent = indent, _col = col, _tokenState = tokens.state;
149
- return function(source) {
150
- tokens = tokenizeSparql(source, _tokenState);
151
- context = _context;
152
- indent = _indent;
153
- col = _col;
154
- return iter;
155
- };
156
- }
157
- };
158
- return iter;
159
- }
160
-
161
- return {make: parseSparql, electricChars: "}]"};
162
- })();
@@ -1,291 +0,0 @@
1
- /* This file defines an XML parser, with a few kludges to make it
2
- * useable for HTML. autoSelfClosers defines a set of tag names that
3
- * are expected to not have a closing tag, and doNotIndent specifies
4
- * the tags inside of which no indentation should happen (see Config
5
- * object). These can be disabled by passing the editor an object like
6
- * {useHTMLKludges: false} as parserConfig option.
7
- */
8
-
9
- var XMLParser = Editor.Parser = (function() {
10
- var Kludges = {
11
- autoSelfClosers: {"br": true, "img": true, "hr": true, "link": true, "input": true,
12
- "meta": true, "col": true, "frame": true, "base": true, "area": true},
13
- doNotIndent: {"pre": true, "!cdata": true}
14
- };
15
- var NoKludges = {autoSelfClosers: {}, doNotIndent: {"!cdata": true}};
16
- var UseKludges = Kludges;
17
- var alignCDATA = false;
18
-
19
- // Simple stateful tokenizer for XML documents. Returns a
20
- // MochiKit-style iterator, with a state property that contains a
21
- // function encapsulating the current state. See tokenize.js.
22
- var tokenizeXML = (function() {
23
- function inText(source, setState) {
24
- var ch = source.next();
25
- if (ch == "<") {
26
- if (source.equals("!")) {
27
- source.next();
28
- if (source.equals("[")) {
29
- if (source.lookAhead("[CDATA[", true)) {
30
- setState(inBlock("xml-cdata", "]]>"));
31
- return null;
32
- }
33
- else {
34
- return "xml-text";
35
- }
36
- }
37
- else if (source.lookAhead("--", true)) {
38
- setState(inBlock("xml-comment", "-->"));
39
- return null;
40
- }
41
- else if (source.lookAhead("DOCTYPE", true)) {
42
- source.nextWhileMatches(/[\w\._\-]/);
43
- setState(inBlock("xml-doctype", ">"));
44
- return "xml-doctype";
45
- }
46
- else {
47
- return "xml-text";
48
- }
49
- }
50
- else if (source.equals("?")) {
51
- source.next();
52
- source.nextWhileMatches(/[\w\._\-]/);
53
- setState(inBlock("xml-processing", "?>"));
54
- return "xml-processing";
55
- }
56
- else {
57
- if (source.equals("/")) source.next();
58
- setState(inTag);
59
- return "xml-punctuation";
60
- }
61
- }
62
- else if (ch == "&") {
63
- while (!source.endOfLine()) {
64
- if (source.next() == ";")
65
- break;
66
- }
67
- return "xml-entity";
68
- }
69
- else {
70
- source.nextWhileMatches(/[^&<\n]/);
71
- return "xml-text";
72
- }
73
- }
74
-
75
- function inTag(source, setState) {
76
- var ch = source.next();
77
- if (ch == ">") {
78
- setState(inText);
79
- return "xml-punctuation";
80
- }
81
- else if (/[?\/]/.test(ch) && source.equals(">")) {
82
- source.next();
83
- setState(inText);
84
- return "xml-punctuation";
85
- }
86
- else if (ch == "=") {
87
- return "xml-punctuation";
88
- }
89
- else if (/[\'\"]/.test(ch)) {
90
- setState(inAttribute(ch));
91
- return null;
92
- }
93
- else {
94
- source.nextWhileMatches(/[^\s\u00a0=<>\"\'\/?]/);
95
- return "xml-name";
96
- }
97
- }
98
-
99
- function inAttribute(quote) {
100
- return function(source, setState) {
101
- while (!source.endOfLine()) {
102
- if (source.next() == quote) {
103
- setState(inTag);
104
- break;
105
- }
106
- }
107
- return "xml-attribute";
108
- };
109
- }
110
-
111
- function inBlock(style, terminator) {
112
- return function(source, setState) {
113
- while (!source.endOfLine()) {
114
- if (source.lookAhead(terminator, true)) {
115
- setState(inText);
116
- break;
117
- }
118
- source.next();
119
- }
120
- return style;
121
- };
122
- }
123
-
124
- return function(source, startState) {
125
- return tokenizer(source, startState || inText);
126
- };
127
- })();
128
-
129
- // The parser. The structure of this function largely follows that of
130
- // parseJavaScript in parsejavascript.js (there is actually a bit more
131
- // shared code than I'd like), but it is quite a bit simpler.
132
- function parseXML(source) {
133
- var tokens = tokenizeXML(source), token;
134
- var cc = [base];
135
- var tokenNr = 0, indented = 0;
136
- var currentTag = null, context = null;
137
- var consume;
138
-
139
- function push(fs) {
140
- for (var i = fs.length - 1; i >= 0; i--)
141
- cc.push(fs[i]);
142
- }
143
- function cont() {
144
- push(arguments);
145
- consume = true;
146
- }
147
- function pass() {
148
- push(arguments);
149
- consume = false;
150
- }
151
-
152
- function markErr() {
153
- token.style += " xml-error";
154
- }
155
- function expect(text) {
156
- return function(style, content) {
157
- if (content == text) cont();
158
- else {markErr(); cont(arguments.callee);}
159
- };
160
- }
161
-
162
- function pushContext(tagname, startOfLine) {
163
- var noIndent = UseKludges.doNotIndent.hasOwnProperty(tagname) || (context && context.noIndent);
164
- context = {prev: context, name: tagname, indent: indented, startOfLine: startOfLine, noIndent: noIndent};
165
- }
166
- function popContext() {
167
- context = context.prev;
168
- }
169
- function computeIndentation(baseContext) {
170
- return function(nextChars, current) {
171
- var context = baseContext;
172
- if (context && context.noIndent)
173
- return current;
174
- if (alignCDATA && /<!\[CDATA\[/.test(nextChars))
175
- return 0;
176
- if (context && /^<\//.test(nextChars))
177
- context = context.prev;
178
- while (context && !context.startOfLine)
179
- context = context.prev;
180
- if (context)
181
- return context.indent + indentUnit;
182
- else
183
- return 0;
184
- };
185
- }
186
-
187
- function base() {
188
- return pass(element, base);
189
- }
190
- var harmlessTokens = {"xml-text": true, "xml-entity": true, "xml-comment": true, "xml-processing": true, "xml-doctype": true};
191
- function element(style, content) {
192
- if (content == "<") cont(tagname, attributes, endtag(tokenNr == 1));
193
- else if (content == "</") cont(closetagname, expect(">"));
194
- else if (style == "xml-cdata") {
195
- if (!context || context.name != "!cdata") pushContext("!cdata");
196
- if (/\]\]>$/.test(content)) popContext();
197
- cont();
198
- }
199
- else if (harmlessTokens.hasOwnProperty(style)) cont();
200
- else {markErr(); cont();}
201
- }
202
- function tagname(style, content) {
203
- if (style == "xml-name") {
204
- currentTag = content.toLowerCase();
205
- token.style = "xml-tagname";
206
- cont();
207
- }
208
- else {
209
- currentTag = null;
210
- pass();
211
- }
212
- }
213
- function closetagname(style, content) {
214
- if (style == "xml-name") {
215
- token.style = "xml-tagname";
216
- if (context && content.toLowerCase() == context.name) popContext();
217
- else markErr();
218
- }
219
- cont();
220
- }
221
- function endtag(startOfLine) {
222
- return function(style, content) {
223
- if (content == "/>" || (content == ">" && UseKludges.autoSelfClosers.hasOwnProperty(currentTag))) cont();
224
- else if (content == ">") {pushContext(currentTag, startOfLine); cont();}
225
- else {markErr(); cont(arguments.callee);}
226
- };
227
- }
228
- function attributes(style) {
229
- if (style == "xml-name") {token.style = "xml-attname"; cont(attribute, attributes);}
230
- else pass();
231
- }
232
- function attribute(style, content) {
233
- if (content == "=") cont(value);
234
- else if (content == ">" || content == "/>") pass(endtag);
235
- else pass();
236
- }
237
- function value(style) {
238
- if (style == "xml-attribute") cont(value);
239
- else pass();
240
- }
241
-
242
- return {
243
- indentation: function() {return indented;},
244
-
245
- next: function(){
246
- token = tokens.next();
247
- if (token.style == "whitespace" && tokenNr == 0)
248
- indented = token.value.length;
249
- else
250
- tokenNr++;
251
- if (token.content == "\n") {
252
- indented = tokenNr = 0;
253
- token.indentation = computeIndentation(context);
254
- }
255
-
256
- if (token.style == "whitespace" || token.type == "xml-comment")
257
- return token;
258
-
259
- while(true){
260
- consume = false;
261
- cc.pop()(token.style, token.content);
262
- if (consume) return token;
263
- }
264
- },
265
-
266
- copy: function(){
267
- var _cc = cc.concat([]), _tokenState = tokens.state, _context = context;
268
- var parser = this;
269
-
270
- return function(input){
271
- cc = _cc.concat([]);
272
- tokenNr = indented = 0;
273
- context = _context;
274
- tokens = tokenizeXML(input, _tokenState);
275
- return parser;
276
- };
277
- }
278
- };
279
- }
280
-
281
- return {
282
- make: parseXML,
283
- electricChars: "/",
284
- configure: function(config) {
285
- if (config.useHTMLKludges != null)
286
- UseKludges = config.useHTMLKludges ? Kludges : NoKludges;
287
- if (config.alignCDATA)
288
- alignCDATA = config.alignCDATA;
289
- }
290
- };
291
- })();