1
0
Fork 0
arangodb/js/common/bootstrap/js-print.h

334 lines
12 KiB
C

static string JS_common_bootstrap_print =
"/*jslint indent: 2,\n"
" nomen: true,\n"
" maxlen: 100,\n"
" sloppy: true,\n"
" vars: true,\n"
" white: true,\n"
" plusplus: true */\n"
"/*global require, print */\n"
"\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"/// @brief printing\n"
"///\n"
"/// @file\n"
"///\n"
"/// DISCLAIMER\n"
"///\n"
"/// Copyright 2010-2012 triagens GmbH, Cologne, Germany\n"
"///\n"
"/// Licensed under the Apache License, Version 2.0 (the \"License\");\n"
"/// you may not use this file except in compliance with the License.\n"
"/// You may obtain a copy of the License at\n"
"///\n"
"/// http://www.apache.org/licenses/LICENSE-2.0\n"
"///\n"
"/// Unless required by applicable law or agreed to in writing, software\n"
"/// distributed under the License is distributed on an \"AS IS\" BASIS,\n"
"/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n"
"/// See the License for the specific language governing permissions and\n"
"/// limitations under the License.\n"
"///\n"
"/// Copyright holder is triAGENS GmbH, Cologne, Germany\n"
"///\n"
"/// @author Dr. Frank Celler\n"
"/// @author Copyright 2011-2012, triAGENS GmbH, Cologne, Germany\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"\n"
"(function () {\n"
" var internal = require(\"internal\");\n"
"\n"
"// -----------------------------------------------------------------------------\n"
"// --SECTION-- Module \"internal\"\n"
"// -----------------------------------------------------------------------------\n"
"\n"
"// -----------------------------------------------------------------------------\n"
"// --SECTION-- private functions\n"
"// -----------------------------------------------------------------------------\n"
"\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"/// @addtogroup V8Shell\n"
"/// @{\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"/// @brief prints objects to standard output\n"
"///\n"
"/// @FUN{print(@FA{arg1}, @FA{arg2}, @FA{arg3}, ...)}\n"
"///\n"
"/// Only available in shell mode.\n"
"///\n"
"/// Prints the arguments. If an argument is an object having a\n"
"/// function @FN{_PRINT}, then this function is called. Otherwise @FN{toJson} is\n"
"/// used. A final newline is printed\n"
"///\n"
"/// @verbinclude fluent40\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"\n"
" internal.printShell = function () {\n"
" var i;\n"
"\n"
" for (i = 0; i < arguments.length; ++i) {\n"
" if (0 < i) {\n"
" internal.output(\" \");\n"
" }\n"
"\n"
" if (typeof(arguments[i]) === \"string\") {\n"
" internal.output(arguments[i]);\n"
" }\n"
" else {\n"
" internal.printRecursive(arguments[i], [], \"~\", [], 0);\n"
" }\n"
" }\n"
"\n"
" if (internal.COLOR_OUTPUT) {\n"
" internal.output(internal.COLOR_OUTPUT_RESET);\n"
" }\n"
"\n"
" internal.output(\"\\n\");\n"
" };\n"
"\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"/// @brief quote cache\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"\n"
" internal.characterQuoteCache = {\n"
" '\\b': '\\\\b', // ASCII 8, Backspace\n"
" '\\t': '\\\\t', // ASCII 9, Tab\n"
" '\\n': '\\\\n', // ASCII 10, Newline\n"
" '\\f': '\\\\f', // ASCII 12, Formfeed\n"
" '\\r': '\\\\r', // ASCII 13, Carriage Return\n"
" '\\\"': '\\\\\"',\n"
" '\\\\': '\\\\\\\\'\n"
" };\n"
"\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"/// @brief quotes a single character\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"\n"
" internal.quoteSingleJsonCharacter = function (c) {\n"
" if (internal.characterQuoteCache.hasOwnProperty[c]) {\n"
" return internal.characterQuoteCache[c];\n"
" }\n"
"\n"
" var charCode = c.charCodeAt(0);\n"
" var result;\n"
"\n"
" if (charCode < 16) {\n"
" result = '\\\\u000';\n"
" }\n"
" else if (charCode < 256) {\n"
" result = '\\\\u00';\n"
" }\n"
" else if (charCode < 4096) {\n"
" result = '\\\\u0';\n"
" }\n"
" else {\n"
" result = '\\\\u';\n"
" }\n"
"\n"
" result += charCode.toString(16);\n"
" internal.characterQuoteCache[c] = result;\n"
"\n"
" return result;\n"
" };\n"
"\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"/// @brief quotes a string character\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"\n"
" internal.quoteJsonString = function (str) {\n"
" var quotable = /[\\\\\\\"\\x00-\\x1f]/g;\n"
" return '\"' + str.replace(quotable, internal.quoteSingleJsonCharacter) + '\"';\n"
" };\n"
"\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"/// @brief prints objects to standard output without a new-line\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"\n"
" internal.printRecursive = function (value, seen, path, names, level) {\n"
" var p;\n"
"\n"
" if (seen === undefined) {\n"
" seen = [];\n"
" names = [];\n"
" }\n"
"\n"
" p = seen.indexOf(value);\n"
"\n"
" if (0 <= p) {\n"
" internal.output(names[p]);\n"
" }\n"
" else {\n"
" if (value instanceof Object) {\n"
" seen.push(value);\n"
" names.push(path);\n"
" }\n"
"\n"
" if (value instanceof Object) {\n"
" if ('_PRINT' in value) {\n"
" value._PRINT(seen, path, names, level);\n"
" }\n"
" else if (value instanceof Array) {\n"
" internal.printArray(value, seen, path, names, level);\n"
" }\n"
" else if (value.__proto__ === Object.prototype) {\n"
" internal.printObject(value, seen, path, names, level);\n"
" }\n"
" else if ('toString' in value) {\n"
" internal.output(value.toString());\n"
" }\n"
" else {\n"
" internal.printObject(value, seen, path, names, level);\n"
" }\n"
" }\n"
" else if (value === undefined) {\n"
" internal.output(\"undefined\");\n"
" }\n"
" else {\n"
" if (typeof(value) === \"string\") {\n"
" internal.output(internal.quoteJsonString(value));\n"
" }\n"
" else {\n"
" internal.output(String(value));\n"
" }\n"
" }\n"
" }\n"
" };\n"
"\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"/// @brief prints the ident for pretty printing\n"
"///\n"
"/// @FUN{internal.printIndent(@FA{level})}\n"
"///\n"
"/// Only available in shell mode.\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"\n"
" internal.printIndent = function (level) {\n"
" var j;\n"
"\n"
" if (internal.PRETTY_PRINT) {\n"
" internal.output(\"\\n\");\n"
"\n"
" for (j = 0; j < level; ++j) {\n"
" internal.output(\" \");\n"
" }\n"
" }\n"
" };\n"
"\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"/// @brief JSON representation of an array\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"\n"
" internal.printArray = function (object, seen, path, names, level) {\n"
" if (object.length === 0) {\n"
" internal.output(\"[ ]\");\n"
" }\n"
" else {\n"
" var i;\n"
" var sep = \"\";\n"
"\n"
" internal.output(\"[\");\n"
"\n"
" var newLevel = level + 1;\n"
"\n"
" for (i = 0; i < object.length; i++) {\n"
" internal.output(sep);\n"
"\n"
" internal.printIndent(newLevel);\n"
"\n"
" internal.printRecursive(object[i],\n"
" seen,\n"
" path + \"[\" + i + \"]\",\n"
" names,\n"
" newLevel);\n"
" sep = \", \";\n"
" }\n"
"\n"
" internal.printIndent(level);\n"
"\n"
" internal.output(\"]\");\n"
" }\n"
" };\n"
"\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"/// @brief prints an object\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"\n"
" internal.printObject = function (object, seen, path, names, level) {\n"
" var sep = \" \";\n"
" var k;\n"
"\n"
" internal.output(\"{\");\n"
"\n"
" var newLevel = level + 1;\n"
"\n"
" for (k in object) {\n"
" if (object.hasOwnProperty(k)) {\n"
" var val = object[k];\n"
"\n"
" internal.output(sep);\n"
"\n"
" internal.printIndent(newLevel);\n"
"\n"
" if (internal.COLOR_OUTPUT) {\n"
" internal.output(internal.COLOR_OUTPUT_DEFAULT,\n"
" k,\n"
" internal.COLOR_OUTPUT_RESET, \n"
" \" : \");\n"
" }\n"
" else {\n"
" internal.output(internal.quoteJsonString(k), \" : \");\n"
" }\n"
"\n"
" internal.printRecursive(val,\n"
" seen,\n"
" path + \"[\" + k + \"]\",\n"
" names,\n"
" newLevel);\n"
" sep = \", \";\n"
" }\n"
" }\n"
"\n"
" internal.printIndent(level);\n"
"\n"
" internal.output(\" }\");\n"
" };\n"
"\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"/// @}\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"\n"
"}());\n"
"\n"
"// -----------------------------------------------------------------------------\n"
"// --SECTION-- global functions\n"
"// -----------------------------------------------------------------------------\n"
"\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"/// @addtogroup V8Shell\n"
"/// @{\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"/// @brief global print\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"\n"
"// must be a variable definition for the browser\n"
"if (typeof require(\"internal\").printBrowser === \"function\") {\n"
" print = require(\"internal\").print = require(\"internal\").printBrowser;\n"
"}\n"
"else {\n"
" print = require(\"internal\").print = require(\"internal\").printShell;\n"
"}\n"
"\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"/// @}\n"
"////////////////////////////////////////////////////////////////////////////////\n"
"\n"
"// Local Variables:\n"
"// mode: outline-minor\n"
"// outline-regexp: \"^\\\\(/// @brief\\\\|/// @addtogroup\\\\|// --SECTION--\\\\|/// @page\\\\|/// @}\\\\)\"\n"
"// End:\n"
;