Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: Source/devtools/front_end/ScriptFormatterWorker.js

Issue 18347003: DevTools: Implement CSS pretty-printing (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebased Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 45
46 function format(params) 46 function format(params)
47 { 47 {
48 // Default to a 4-space indent. 48 // Default to a 4-space indent.
49 var indentString = params.indentString || " "; 49 var indentString = params.indentString || " ";
50 var result = {}; 50 var result = {};
51 51
52 if (params.mimeType === "text/html") { 52 if (params.mimeType === "text/html") {
53 var formatter = new HTMLScriptFormatter(indentString); 53 var formatter = new HTMLScriptFormatter(indentString);
54 result = formatter.format(params.content); 54 result = formatter.format(params.content);
55 } else if (params.mimeType === "text/css") {
56 result.mapping = { original: [0], formatted: [0] };
57 result.content = formatCSS(params.content, result.mapping, 0, 0, indentS tring);
55 } else { 58 } else {
56 result.mapping = { original: [0], formatted: [0] }; 59 result.mapping = { original: [0], formatted: [0] };
57 result.content = formatScript(params.content, result.mapping, 0, 0, inde ntString); 60 result.content = formatScript(params.content, result.mapping, 0, 0, inde ntString);
58 } 61 }
59 postMessage(result); 62 postMessage(result);
60 } 63 }
61 64
62 function getChunkCount(totalLength, chunkSize) 65 function getChunkCount(totalLength, chunkSize)
63 { 66 {
64 if (totalLength <= chunkSize) 67 if (totalLength <= chunkSize)
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 tokenizer(line, processToken); 143 tokenizer(line, processToken);
141 } 144 }
142 postMessage({ chunk: outlineChunk, total: chunkCount, index: chunkCount }); 145 postMessage({ chunk: outlineChunk, total: chunkCount, index: chunkCount });
143 } 146 }
144 147
145 function formatScript(content, mapping, offset, formattedOffset, indentString) 148 function formatScript(content, mapping, offset, formattedOffset, indentString)
146 { 149 {
147 var formattedContent; 150 var formattedContent;
148 try { 151 try {
149 var tokenizer = new Tokenizer(content); 152 var tokenizer = new Tokenizer(content);
150 var builder = new FormattedContentBuilder(tokenizer.content(), mapping, offset, formattedOffset, indentString); 153 var builder = new JavaScriptFormattedContentBuilder(tokenizer.content(), mapping, offset, formattedOffset, indentString);
151 var formatter = new JavaScriptFormatter(tokenizer, builder); 154 var formatter = new JavaScriptFormatter(tokenizer, builder);
152 formatter.format(); 155 formatter.format();
153 formattedContent = builder.content(); 156 formattedContent = builder.content();
154 } catch (e) { 157 } catch (e) {
155 formattedContent = content; 158 formattedContent = content;
156 } 159 }
157 return formattedContent; 160 return formattedContent;
158 } 161 }
159 162
163 function formatCSS(content, mapping, offset, formattedOffset, indentString)
164 {
165 var formattedContent;
166 try {
167 var builder = new CSSFormattedContentBuilder(content, mapping, offset, f ormattedOffset, indentString);
168 var formatter = new CSSFormatter(content, builder);
169 formatter.format();
170 formattedContent = builder.content();
171 } catch (e) {
172 formattedContent = content;
173 }
174 return formattedContent;
175 }
176
160 Array.prototype.keySet = function() 177 Array.prototype.keySet = function()
161 { 178 {
162 var keys = {}; 179 var keys = {};
163 for (var i = 0; i < this.length; ++i) 180 for (var i = 0; i < this.length; ++i)
164 keys[this[i]] = true; 181 keys[this[i]] = true;
165 return keys; 182 return keys;
166 }; 183 };
167 184
168 HTMLScriptFormatter = function(indentString) 185 HTMLScriptFormatter = function(indentString)
169 { 186 {
170 this._indentString = indentString; 187 this._indentString = indentString;
171 } 188 }
172 189
173 HTMLScriptFormatter.prototype = { 190 HTMLScriptFormatter.prototype = {
174 format: function(content) 191 format: function(content)
175 { 192 {
176 this.line = content; 193 this.line = content;
177 this._content = content; 194 this._content = content;
178 this._formattedContent = ""; 195 this._formattedContent = "";
179 this._mapping = { original: [0], formatted: [0] }; 196 this._mapping = { original: [0], formatted: [0] };
180 this._position = 0; 197 this._position = 0;
181 198
182 var scriptOpened = false; 199 var scriptOpened = false;
200 var styleOpened = false;
183 var tokenizer = WebInspector.CodeMirrorUtils.createTokenizer("text/html" ); 201 var tokenizer = WebInspector.CodeMirrorUtils.createTokenizer("text/html" );
184 function processToken(tokenValue, tokenType, tokenStart, tokenEnd) { 202 function processToken(tokenValue, tokenType, tokenStart, tokenEnd) {
185 if (tokenValue.toLowerCase() === "<script" && tokenType === "xml-tag ") { 203 if (tokenType !== "xml-tag")
204 return;
205 if (tokenValue.toLowerCase() === "<script") {
186 scriptOpened = true; 206 scriptOpened = true;
187 } else if (scriptOpened && tokenValue === ">" && tokenType === "xml- tag") { 207 } else if (scriptOpened && tokenValue === ">") {
188 scriptOpened = false; 208 scriptOpened = false;
189 this._scriptStarted(tokenEnd); 209 this._scriptStarted(tokenEnd);
190 } else if (tokenValue.toLowerCase() === "</script" && tokenType === "xml-tag") { 210 } else if (tokenValue.toLowerCase() === "</script") {
191 this._scriptEnded(tokenStart); 211 this._scriptEnded(tokenStart);
212 } else if (tokenValue.toLowerCase() === "<style") {
213 styleOpened = true;
214 } else if (styleOpened && tokenValue === ">") {
215 styleOpened = false;
216 this._styleStarted(tokenEnd);
217 } else if (tokenValue.toLowerCase() === "</style") {
218 this._styleEnded(tokenStart);
192 } 219 }
193 } 220 }
194 tokenizer(content, processToken.bind(this)); 221 tokenizer(content, processToken.bind(this));
195 222
196 this._formattedContent += this._content.substring(this._position); 223 this._formattedContent += this._content.substring(this._position);
197 return { content: this._formattedContent, mapping: this._mapping }; 224 return { content: this._formattedContent, mapping: this._mapping };
198 }, 225 },
199 226
200 _scriptStarted: function(cursor) 227 _scriptStarted: function(cursor)
201 { 228 {
229 this._handleSubFormatterStart(cursor);
230 },
231
232 _scriptEnded: function(cursor)
233 {
234 this._handleSubFormatterEnd(formatScript, cursor);
235 },
236
237 _styleStarted: function(cursor)
238 {
239 this._handleSubFormatterStart(cursor);
240 },
241
242 _styleEnded: function(cursor)
243 {
244 this._handleSubFormatterEnd(formatCSS, cursor);
245 },
246
247 _handleSubFormatterStart: function(cursor)
248 {
202 this._formattedContent += this._content.substring(this._position, cursor ); 249 this._formattedContent += this._content.substring(this._position, cursor );
203 this._formattedContent += "\n"; 250 this._formattedContent += "\n";
204 this._position = cursor; 251 this._position = cursor;
205 }, 252 },
206 253
207 _scriptEnded: function(cursor) 254 _handleSubFormatterEnd: function(formatFunction, cursor)
208 { 255 {
209 if (cursor === this._position) 256 if (cursor === this._position)
210 return; 257 return;
211 258
212 var scriptContent = this._content.substring(this._position, cursor); 259 var scriptContent = this._content.substring(this._position, cursor);
213 this._mapping.original.push(this._position); 260 this._mapping.original.push(this._position);
214 this._mapping.formatted.push(this._formattedContent.length); 261 this._mapping.formatted.push(this._formattedContent.length);
215 var formattedScriptContent = formatScript(scriptContent, this._mapping, this._position, this._formattedContent.length, this._indentString); 262 var formattedScriptContent = formatFunction(scriptContent, this._mapping , this._position, this._formattedContent.length, this._indentString);
216 263
217 this._formattedContent += formattedScriptContent; 264 this._formattedContent += formattedScriptContent;
218 this._position = cursor; 265 this._position = cursor;
219 }, 266 }
220 } 267 }
221 268
222 function require() 269 function require()
223 { 270 {
224 return parse; 271 return parse;
225 } 272 }
226 273
227 var exports = {}; 274 var exports = {};
228 importScripts("UglifyJS/parse-js.js"); 275 importScripts("UglifyJS/parse-js.js");
229 var parse = exports; 276 var parse = exports;
230 277
231 importScripts("JavaScriptFormatter.js"); 278 importScripts("JavaScriptFormatter.js");
279 importScripts("CSSFormatter.js");
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698