/tags/jsdoc_toolkit-2.0.1/jsdoc-toolkit/app/frame/Dumper.js
JavaScript | 144 lines | 97 code | 18 blank | 29 comment | 26 complexity | 840202dce50234da4ca45a1a6882c529 MD5 | raw file
- /**
- * @class
- <pre>
- This is a lightly modified version of Kevin Jones' JavaScript
- library Data.Dump. To download the original visit:
- <a href="http://openjsan.org/doc/k/ke/kevinj/Data/Dump/">http://openjsan.org/doc/k/ke/kevinj/Data/Dump/</a>
- AUTHORS
- The Data.Dump JavaScript module is written by Kevin Jones
- (kevinj@cpan.org), based on Data::Dump by Gisle Aas (gisle@aas.no),
- based on Data::Dumper by Gurusamy Sarathy (gsar@umich.edu).
- COPYRIGHT
- Copyright 2007 Kevin Jones. Copyright 1998-2000,2003-2004 Gisle Aas.
- Copyright 1996-1998 Gurusamy Sarathy.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the Perl Artistic License
- See http://www.perl.com/perl/misc/Artistic.html
- </pre>
- * @static
- */
- Dumper = {
- /** @param [...] The objects to dump. */
- dump: function () {
- if (arguments.length > 1)
- return this._dump(arguments);
- else if (arguments.length == 1)
- return this._dump(arguments[0]);
- else
- return "()";
- },
-
- _dump: function (obj) {
- if (typeof obj == 'undefined') return 'undefined';
- var out;
- if (obj.serialize) { return obj.serialize(); }
- var type = this._typeof(obj);
- if (obj.circularReference) obj.circularReference++;
- switch (type) {
- case 'circular':
- out = "{ //circularReference\n}";
- break;
- case 'object':
- var pairs = new Array;
-
- for (var prop in obj) {
- if (prop != "circularReference" && obj.hasOwnProperty(prop)) { //hide inherited properties
- pairs.push(prop + ': ' + this._dump(obj[prop]));
- }
- }
-
- out = '{' + this._format_list(pairs) + '}';
- break;
-
- case 'string':
- for (var prop in Dumper.ESC) {
- if (Dumper.ESC.hasOwnProperty(prop)) {
- obj = obj.replace(prop, Dumper.ESC[prop]);
- }
- }
-
- // Escape UTF-8 Strings
- if (obj.match(/^[\x00-\x7f]*$/)) {
- out = '"' + obj.replace(/\"/g, "\\\"").replace(/([\n\r]+)/g, "\\$1") + '"';
- }
- else {
- out = "unescape('"+escape(obj)+"')";
- }
- break;
-
- case 'array':
- var elems = new Array;
-
- for (var i=0; i<obj.length; i++) {
- elems.push( this._dump(obj[i]) );
- }
-
- out = '[' + this._format_list(elems) + ']';
- break;
-
- case 'date':
- // firefox returns GMT strings from toUTCString()...
- var utc_string = obj.toUTCString().replace(/GMT/,'UTC');
- out = 'new Date("' + utc_string + '")';
- break;
-
- case 'element':
- // DOM element
- out = this._dump_dom(obj);
- break;
-
- default:
- out = obj;
- }
-
- out = String(out).replace(/\n/g, '\n ');
- out = out.replace(/\n (.*)$/,"\n$1");
-
- return out;
- },
-
- _format_list: function (list) {
- if (!list.length) return '';
- var nl = list.toString().length > 60 ? '\n' : ' ';
- return nl + list.join(',' + nl) + nl;
- },
-
- _typeof: function (obj) {
- if (obj && obj.circularReference && obj.circularReference > 1) return 'circular';
- if (Array.prototype.isPrototypeOf(obj)) return 'array';
- if (Date.prototype.isPrototypeOf(obj)) return 'date';
- if (typeof obj.nodeType != 'undefined') return 'element';
- return typeof(obj);
- },
-
- _dump_dom: function (obj) {
- return '"' + Dumper.nodeTypes[obj.nodeType] + '"';
- }
- };
- Dumper.ESC = {
- "\t": "\\t",
- "\n": "\\n",
- "\f": "\\f"
- };
- Dumper.nodeTypes = {
- 1: "ELEMENT_NODE",
- 2: "ATTRIBUTE_NODE",
- 3: "TEXT_NODE",
- 4: "CDATA_SECTION_NODE",
- 5: "ENTITY_REFERENCE_NODE",
- 6: "ENTITY_NODE",
- 7: "PROCESSING_INSTRUCTION_NODE",
- 8: "COMMENT_NODE",
- 9: "DOCUMENT_NODE",
- 10: "DOCUMENT_TYPE_NODE",
- 11: "DOCUMENT_FRAGMENT_NODE",
- 12: "NOTATION_NODE"
- };