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