( (function (__global__) { var Tof = (function () { var __struct__ = Object.create (null); var FLAT_CODE = Type.subType (STRING) (function (x) { var parseResult = Tof.FlatCode.parseStringRecordList (x); if (Moral.isGood (parseResult)) { return ""; } else { return ("`Tof.FLAT_CODE` complain: " + Moral.badValue (parseResult)); } }); var FlatCode = (function () { var __struct__ = Object.create (null); var kindOfLine = function (line) { if ( /^\/\*\*\*.*$/ . test (line) ) { return 'blockCommentBegin'; } // block comment start is `/*** ...` else if ( /^\*\*\*\/\s*$/ . test (line) ) { return 'blockCommentEnd'; } // block comment end is `***/ ...` else if ( /^\/\/.*$/ . test (line) ) { return 'lineComment'; } // line comment is `// ...` else if ( /^----*\s*$/ . test (line) ) { return 'horizontalRule'; } // horizontal rule is three or more hyphens `---` else if ( /^[ \t]*$/ . test (line) ) { return 'whiteLine'; } // white line is made of spaces or tabs else if ( /^[a-zA-Z_][a-zA-Z0-9_\$]*\s*$/ . test (line) ) { return 'keyLine'; } // key line starts with an identifier else if ( /^ .*$/ . test (line) ) { return 'valueLine'; } // value line starts with two or more spaces else { return null; } // other kind of line }; var TOKEN = Type.synonym (Type.tuple ([Type.finite (['LineComment', 'BlockComment', 'Separator', 'KeyLine', 'ValueBlock']), INT, STRING])); var toTokenList = function (c) { // declaration of the main variables var tokL = []; // of type `Type.list(TOKEN)` for the result var lineL = c.split ('\n') ; // of type `Type.list(STRING)` var i = 1; // integer for the running line number (note, that the line number starts at 1, but `lineL` at 0) // main program and `while` loop while (i <= lineL.length) { switch (kindOfLine (lineL [i-1])) { case 'blockCommentBegin': var startOfBlockComment = i; var commentLevel = 1; // block comments may be nested, `commentLevel` monitors how many are opened var comment = lineL[i-1] + '\n'; while (commentLevel > 0) { i++; if (i > lineL.length) { throw Error ( "The block comment starting on line `" + startOfBlockComment + "` exceeds the end of the whole flat code without being closed before." ); } else { comment += lineL[i-1] + '\n'; switch (kindOfLine (lineL[i-1])) { case 'blockCommentBegin': commentLevel++; break; case 'blockCommentEnd': commentLevel--; break; default: break; } } } i++ tokL.push (['BlockComment', startOfBlockComment, comment]); break; case 'blockCommentEnd': throw Error ("There is a block comment termination `***/` at line `" + i + "`, but the comment was not opened before."); case 'lineComment': tokL.push (['LineComment', i, lineL[i-1]]); i++; break; case 'horizontalRule': var startOfSeparator = i; var separator = lineL[i-1] + '\n'; i++; while (i <= lineL.length && (kindOfLine (lineL[i-1]) === 'horizontalRule' || kindOfLine (lineL[i-1]) === 'whiteLine')) { separator += lineL[i-1]; i++; } tokL.push (['Separator', startOfSeparator, separator]); break; case 'whiteLine': i++; break; case 'keyLine': tokL.push (['KeyLine', i, lineL[i-1]]) i++; break; case 'valueLine': var startOfValueBlock = i; var valueBlock = lineL[i-1].substr(2); i++; while (i <= lineL.length && (kindOfLine (lineL[i-1]) === 'valueLine' || kindOfLine (lineL[i-1]) === 'whiteLine')) { valueBlock += '\n' + lineL[i-1].substr(2); i++ } tokL.push (['ValueBlock', startOfValueBlock, valueBlock]); break; case null: throw Error ( "Line `" + i + "` has an undefined syntax:\n" + lineL[i-1] ); default: throw Error ( "Something went wrong in the implementation of `Tof.FlatCode.toTokenList(Tof.FLAT_CODE)`; the `kindOfLine` result `" + kindOfLine (lineL[i-1]) + "` is undefined." ); } } return tokL; }; var unitGrouping = function (tokenL) { var i = 0; // running index for the `tokenL` elements var group = []; // of type `Type.list(TOKEN)` for the next collection of key and value tokens var groupL = []; // of type `Type.list(Type.list(TOKEN))` for the result while (i < tokenL.length) { switch (tokenL[i][0]) { case 'LineComment': i++; break; case 'BlockComment': i++; break; case 'Separator': if (group.length > 0) { groupL.push (group); group = []; } i++; break; case 'KeyLine': group.push (tokenL[i]); i++; break; case 'ValueBlock': var token = tokenL[i]; i++; while (tokenL[i][0] === 'ValueBlock') { token[2] += tokenL[i][2]; i++; } group.push (token); break; default: throw Error ( 'Undefined token tag `' + tokenL[i][0] + '` for the token at line `' + tokenL[i][1] + '` with flatCode `' + tokenL[i][2] + '`.' ); } } return groupL; }; var groupListToStringRecordList = function (groupL) { var strRecL = []; var key, value; for (var i = 0; i < groupL.length; i++) { var strRec = Rec.create ({}); var j = 0; while (j < groupL[i].length) { // next key if (groupL[i][j][0] === 'KeyLine') { key = groupL[i][j][2].trim(); } else { throw Error ('At line number `' + groupL[i][j][1] + '`, a key was expected. But instead, there is:\n' + groupL[i][j][2]); } j++; // next value if (j >= groupL[i].length) { throw Error ('Unit `' + i + '` terminated after the key at line `' + groupL[i][j-1][1] + '`.'); } if (groupL[i][j][0] === 'ValueBlock') { value = groupL[i][j][2]; } else { throw Error ('A value block was expected at line `' + groupL[i][j][1] + '`, but there is a ' + groupL[i][j][0] + ', instead.'); } j++; // add the key-value pair to `strRec` strRec[key] = value; } strRecL.push (strRec); } return strRecL; }; var parseStringRecordList = function (flatCode) { var tokenL, groupL, strRecL; try { tokenL = toTokenList (flatCode); } catch (e) { return Data.Moral.bad ("`Tof.FlatCode.parseStringRecordList(flatCode)` error when calling `Tof.FlatCode.toTokenList(flatCode)`:\n" + e); } try { groupL = unitGrouping (tokenL); } catch (e) { return Data.Moral.bad ("`Tof.FlatCode.parseStringRecordList(flatCode)` error when calling `Tof.FlatCode.unitGrouping(tokenList):\n" + e); } try { strRecL = groupListToStringRecordList (groupL); } catch (e) { return Data.Moral.bad ("`Tof.FlatCode.parseStringRecordList(flatCode)` error when calling `Tof.FlatCode.groupListToStringRecordList:\n" + e); } return Data.Moral.good (strRecL); }; var toStringRecordList = function (flatCode) { var parseResult = parseStringRecordList (flatCode); if (Data.Moral.isGood (parseResult)) { var strRecL = Data.Moral.goodValue (parseResult); return strRecL; } else { throw Error ("`Tof.FlatCode.toStringRecordList(flatCode)` error: " + Data.Moral.badValue (parseResult)); } }; var fromStringRecordList = function (strRecL) { var strL = []; for (var i = 0; i < strRecL.length; i++) { var str = ""; for (var k in strRecL[i]) { str += k + "\n" if (strRecL[i][k].length > 0) { str += " " + (strRecL[i][k].split("\n").join(" \n")) + "\n"; } } strL.push (str); } return ('---\n' + strL.join ('---\n') + '---\n'); }; var stringRecordList2jsonCode = function (strRecL) { var n = strRecL.length; if (n > 0) { // Determine the tabular positions for the keys (`keyColumn`), the colon (`colonColumn`) and the values (`valueColumn`) var keyColumn = 4; var colonColumn = 0; for (var i = 0; i < n; i++) { for (var k in strRecL[i]) { colonColumn = Int.max (colonColumn) (k.length); } } colonColumn += keyColumn + 3; var valueColumn = colonColumn + 2; // generate the code var code = ''; var x, y, z; // three string variables for (var i = 0; i < n; i++) { var pairL = Rec.pairs (strRecL [i]); var m = pairL.length; for (var j = 0; j < m; j++) { if (i === 0 && j === 0) { x = '[ { '; } else if (j === 0) { x = ' { '; } else { x = ''; } y = JSON.stringify (pairL[j][0]); z = JSON.stringify (pairL[j][1]); if (j+1 < m) { z += ' ,\n'; } else if (i+1 < n) { z += ' } ,\n'; } else { z += ' } ]\n'; } code += Data.Pretty.oneTabLine ([ [0, x], [keyColumn, y], [colonColumn, ':'], [valueColumn, z] ]); } } return code; } else { // i.e. strRecL.length === 0 return "[]\n"; } }; var stringRecord2boxString = function (strRec) { var grid = []; for (var k in strRec) { grid.push ( [ [k] , [':'] , Data.Pretty.stringBox (strRec [k]) ] ); } var box = Data.TextBox.fromGrid ({border: 'space', horizontal: 'left', vertical: 'top'}) (grid); var str = Data.TextBox.box2string (box); return str; }; Object.defineProperty (__struct__, "kindOfLine", { writable: false, configurable: false, enumerable: true, value: kindOfLine }); Object.defineProperty (__struct__, "TOKEN", { writable: false, configurable: false, enumerable: true, value: TOKEN }); Object.defineProperty (__struct__, "toTokenList", { writable: false, configurable: false, enumerable: true, value: toTokenList }); Object.defineProperty (__struct__, "unitGrouping", { writable: false, configurable: false, enumerable: true, value: unitGrouping }); Object.defineProperty (__struct__, "groupListToStringRecordList", { writable: false, configurable: false, enumerable: true, value: groupListToStringRecordList }); Object.defineProperty (__struct__, "parseStringRecordList", { writable: false, configurable: false, enumerable: true, value: parseStringRecordList }); Object.defineProperty (__struct__, "toStringRecordList", { writable: false, configurable: false, enumerable: true, value: toStringRecordList }); Object.defineProperty (__struct__, "fromStringRecordList", { writable: false, configurable: false, enumerable: true, value: fromStringRecordList }); Object.defineProperty (__struct__, "stringRecordList2jsonCode", { writable: false, configurable: false, enumerable: true, value: stringRecordList2jsonCode }); Object.defineProperty (__struct__, "stringRecord2boxString", { writable: false, configurable: false, enumerable: true, value: stringRecord2boxString }); return __struct__; }) (); var Session = Object.create (null); var UNIT = Type.fromRecord ({ complain: function (x) { var mdL = Unit.unitCheck (x); // of type `list (MARKDOWN)` var n = mdL.length; if (n > 0) { var md = 'The given value is not a `UNIT` value, because there are ' + n + ' syntax violations:\n'; for (var i = 0; i < n; i++) { md += '\n' + i + '.\n'; md += mdL [i]; } return md; } else { return ''; } }, members: function () { return null; }, cardinality: function () { return Infinity; }, name: 'Tof.UNIT' }); var FLAT_UNIT_TREE = Type.fromRecord ({ complain: function (x) { var mdL = Unit.flatUnitTreeCheck (x); // of type `list (MARKDOWN)` var n = mdL.length; if (n > 0) { var md = 'The given value is not a Flat Unit Tree, because there are ' + n + ' syntax violations:\n'; for (var i = 0; i < n; i++) { md += '\n' + i + '.\n'; md += mdL [i]; } return md; } else { return ''; } }, members: function () { return null; }, cardinality: function () { return Infinity; }, name: 'Tof.FLAT_UNIT_TREE' }); var DEEP_UNIT_TREE = Type.fromRecord ({ complain: function (x) { var mdL = Unit.deepUnitTreeCheck (x); // of type `list (MARKDOWN)` var n = mdL.length; if (n > 0) { var md = 'The given value is not a Deep Unit Tree, because there are ' + n + ' syntax violations:\n'; for (var i = 0; i < n; i++) { md += '\n' + i + '.\n'; md += mdL [i]; } return md; } else { return ''; } }, members: function () { return null; }, cardinality: function () { return Infinity; }, name: 'Tof.DEEP_UNIT_TREE' }); var Unit = (function () { var __struct__ = Object.create (null); var SOURCE_CODE = STRING; var FlagSchema = (function () { var __struct__ = Object.create (null); var forAllUnits = Rec.create ({ kind_of_unit : ['value', 'doc', 'session'] }); var forValueUnits = Rec.create ({ kind_of_value_unit : ['static_value', 'import', 'proto', 'param', 'accessor'], type_of_value_unit : ['any', 'struct', 'construct', 'function', 'type'], scope : ['global', 'local'], modifiability : ['constant', 'variable'], extensibility : ['extensible', 'sealed', 'frozen'], dialect : ['es6', 'coffeescript', 'tofscript'], augmentation : ['typed_augmentation', 'catch_augmentation', 'no_augmentation'], origin : ['value_code', 'predefined'] }); var forInitialValueUnits = Rec.create ({ target_platform : ['universal_target', 'system_target', 'browser_target', 'no_target'], target_dialect : ['es5_target_dialect', 'es6_target_dialect', 'es3_target_dialect'], overall_source_dialect : ['all_es6', 'all_coffeescript', 'all_tofscript'], overall_value_scope : ['custom_value_scope', 'enforce_global_value_scope'], overall_augmentation : ['custom_augmentation', 'enforce_typed_augmentation', 'enforce_catch_augmentation', 'enforce_no_augmentation'], overall_value_existence : ['all_unit_implemented', 'all_predefined'], static_type_check : ['type_check', 'no_type_check'], session_verification : ['verify_sessions', 'no_session_verification'], document_executability : ['no_executable_document', 'executable_document'], target_minification : ['no_minification', 'minify'] }); Object.defineProperty (__struct__, "forAllUnits", { writable: false, configurable: false, enumerable: true, value: forAllUnits }); Object.defineProperty (__struct__, "forValueUnits", { writable: false, configurable: false, enumerable: true, value: forValueUnits }); Object.defineProperty (__struct__, "forInitialValueUnits", { writable: false, configurable: false, enumerable: true, value: forInitialValueUnits }); return __struct__; }) (); var theFlagSchema = Rec.disjunctJoinList ([FlagSchema.forAllUnits, FlagSchema.forValueUnits, FlagSchema.forInitialValueUnits]); var UnitSignature = (function () { var __struct__ = Object.create (null); var userDefined = Rec.create ({ unit : Data.Flags.flagStringType (theFlagSchema), name : Global.NAME, info : Data.MARKDOWN, comment : Data.MARKDOWN, project : EcmaScript.IDENTIFIER, version : STRING, type : STRING, value : SOURCE_CODE, get : SOURCE_CODE, set : SOURCE_CODE, parameter : EcmaScript.EXPRESSION, header : Data.MARKDOWN, session : STRING }); var compilerGenerated = Rec.create ({ $unit_flags$ : Data.Flags.flagRecordType (theFlagSchema), $name$ : UNIT_NAME, $info$ : Data.HTML, $comment$ : Data.HTML, $type$ : EcmaScript.EXPRESSION, $value$ : EcmaScript.EXPRESSION, $get$ : EcmaScript.EXPRESSION, $set$ : EcmaScript.EXPRESSION, $parameter$ : EcmaScript.EXPRESSION, $header$ : Data.HTML, $session$ : STRING, $session_doc$ : Data.HTML }); Object.defineProperty (__struct__, "userDefined", { writable: false, configurable: false, enumerable: true, value: userDefined }); Object.defineProperty (__struct__, "compilerGenerated", { writable: false, configurable: false, enumerable: true, value: compilerGenerated }); return __struct__; }) (); var theUnitSignature = Rec.join (UnitSignature.userDefined) (UnitSignature.compilerGenerated); var initialValueUnit2flagRecord = function (u) { if (u.unit) { try { var flagRec = Data.Flags.flagString2flagRecord (theFlagSchema) (u.unit); flagRec = Rec.update (Data.Flags.defaultFlagSchemaRecord (theFlagSchema)) (flagRec); return flagRec; } catch (e) { throw Error ("Could not determine the Flag Record from the Flag String, i.e. the `unit` value `" + u.unit + "`: " + e); } } else { throw Error ("The given unit does not have a `unit` value."); } }; var unit2flagRecord = function (u) { if (u.unit) { try { var flagRec = Data.Flags.flagString2flagRecord (theFlagSchema) (u.unit); flagRec = Rec.update (Data.Flags.defaultFlagSchemaRecord (FlagSchema.forAllUnits)) (flagRec); switch (flagRec.kind_of_unit) { case 'value': flagRec = Rec.update (Data.Flags.defaultFlagSchemaRecord (FlagSchema.forValueUnits)) (flagRec); return flagRec; case 'doc': return flagRec; case 'session': return flagRec; default: throw Error ("The `kind_of_unit` value `" + flagRec.kind_of_unit + "` is undefined."); } } catch (e) { throw Error ("Could not determine the Flag Record from the Flag String, i.e. the `unit` value `" + u.unit + "`: " + e); } } else { throw Error ("The given unit does not have a `unit` value."); } }; var UNIT_IDENTIFIER = STRING; var UNIT_NAME = STRING; var unitName2identifierList = function (uname) { var strL = uname.split ('.'); if (strL.length === 1 && strL[0] === '') { return []; } else { return strL; } }; var identifierList2unitName = function (idL) { return idL.join ('.'); }; var createDocName = function (name) { return function (i) { if (name === '') { return 'doc_' + i; } else { return [name, 'doc_' + i] . join ('.'); } } }; var createSessionName = function (name) { return function (i) { if (name === '') { return 'session_' + i; } else { return [name, 'session_' + i] . join ('.'); } } }; var docNameNumber = function (uname) { var strL = unitName2identifierList (uname); if (strL.length === 0) { return null; } else { var str = strL.pop (); if (Str.startsWith (str) ('doc_')) { return parseInt (str.slice (4)); } else { return null; } } }; var sessionNameNumber = function (uname) { var strL = unitName2identifierList (uname); if (strL.length === 0) { return null; } else { var str = strL.pop (); if (Str.startsWith (str) ('session_')) { return parseInt (str.slice (8)); } else { return null; } } }; var getUnit = function (deep) { return function (name) { // // // main part // // // return iter (unitName2identifierList (name), deep); // // // iter : (list (IDENTIFIER), DEEP_UNIT_TREE) --> UNIT // // // function iter (idL, deep) { if (idL.length === 0) { return deep[1]; } else { var id = idL.shift (); for (var i = 2; i < deep.length; i++) { if (id === deep[i][0]) { iter (idL, deep[i]); } } throw Error ('The name `"' + name + '"` is undefined in the given Deep Unit Tree.'); } } } }; var getSubtree = function (deep) { return function (name) { // // // main part // // // return iter (unitName2identifierList (name), deep); // // // iter : (list (IDENTIFIER), DEEP_UNIT_TREE) --> UNIT // // // function iter (idL, deep) { if (idL.length === 0) { return deep; } else { var id = idL.shift (); for (var i = 2; i < deep.length; i++) { if (id === deep[i][0]) { return iter (idL, deep[i]); } } throw Error ('The name `"' + name + '"` is undefined in the given Deep Unit Tree.'); } } } }; var insert = function (deep) { return function (unit) { var kindOfUnit = unit2flagRecord (unit) . kind_of_unit; // of type `finite (['value', 'doc', 'session'])` switch (kindOfUnit) { case 'value': if (unit.name) { // split the `unit.name` into a `parent` name and the child `id` var idL = unitName2identifierList (unit.name); var id = idL.pop (); var parent = identifierList2unitName (idL); // get the `subTree` of the `parent` name in `deep` try { var subTree = getSubtree (deep) (parent); } catch (e) { throw Error ( "The `name` of the given value unit is `" + unit.name + "`, but `" + parent + "` is undefined in the given deep unit tree." ); } // verify that the `subTree` does not already have a child with identifier `id` for (var j = 2; j < subTree.length; j++) { if (id === subTree[j][0]) { throw Error ("The given subtree already contains a unit with name `" + unit.name + "`."); } } // add `[id, unit]` as a new `DEEP_UNIT_TREE` at the end of the `subTree` subTree.push ([id, unit]); // return the modified `deep` tree return deep; } else { // i.e. `unit.name` is empty or undefined throw Error ("The given value unit does not have a (non-empty) `name` value."); }; case 'doc': // first, get the `subTree` of the given `unit.name` in `deep` var name = unit.name || ''; if (name.length > 0) { try { var subTree = getSubtree (deep) (name); } catch (e) { throw Error ("The name `" + name + "` of the given doc unit is undefined in the given deep unit tree."); } } else { // i.e. `name` is empty var subTree = deep; } // now count the number `n` of doc units that are already in the `subTree` var n = 0; for (var j = 2; j < subTree.length; j++) { if (unit2flagRecord (subTree [j][1]) . kind_of_unit === 'doc') { n++; } } // create a new identifier `id`, which is `doc_n` var id = createDocName ('') (n+1); // add the new deep unit tree `[id, unit]` to the `subTree` and return the overall modified `deep` tree subTree.push ([id, unit]); return deep; case 'session': // first, get the `subTree` of the given `unit.name` in `deep` var name = unit.name || ''; if (name.length > 0) { try { var subTree = getSubtree (deep) (name); } catch (e) { throw Error ("The name `" + name + "` of the given session unit is undefined in the given deep unit tree."); } } else { // i.e. `name` is empty subTree = deep; } // now count the number `n` of session units that are already in the `subTree` var n = 0; for (var j = 2; j < subTree.length; j++) { if (unit2flagRecord (subTree [j][1]) . kind_of_unit === 'session') { n++; } } // create a new identifier `id`, which is `session_n` var id = createSessionName (name) (n+1); // add the new deep unit tree `[id, unit]` to the `subTree` and return the overall modified `deep` tree subTree.push ([id, unit]); return deep; default: throw Error ("The given unit has an undefined `kind_of_unit` value `" + kindOfUnit + "`."); }; } }; var flat2deep = function (flat) { if (flat.length === 0) { throw Error ("Cannot convert an empty unit list to a deep unit tree."); } else { var u = flat[0]; if (u.name) { throw Error ( "Cannot convert the unit list to a deep unit tree, because the first unit has a non-empty name `" + u.name + "`." ); } else { var deep = [null, u]; for (var j = 1; j < flat.length; j++) { try { deep = insert (deep) (flat [j]); } catch (e) { throw Error ("Unable to insert unit `" + j + "` from the Flat Unit List into the Deep Unit Tree: " + e); } } return deep; } } }; var deep2flat = function deep2flat (deep) { var flat = []; flat.push (deep [1]); for (var j = 2; j < deep.length; j++) { flat = flat.concat (deep2flat (deep [j])); } return flat; }; var unitCheck = function (x) { return []; //////////////DUMMY/////////////////////////////////////////////////////////////////////////////////////////////////// }; var flatUnitTreeCheck = function (x) { return []; ////////////DUMMY////////////////////////////////////////////////////////////////////////////////////////////////////// }; var deepUnitTreeCheck = function (x) { return []; ////////////DUMMY////////////////////////////////////////////////////////////////////////////////////////////////////// }; var deepUnitTree2nameList = function deepUnitTree2nameList (deep) { var name = deep[1].name || ''; var nameL = [name]; for (var j = 2; j < deep.length; j++) { var n = deep[j][1].name || ''; if (n !== name) { nameL = nameL . concat (deepUnitTree2nameList (deep [j])); } } return nameL; }; var deepUnitTreeOverlaps = function (deep1) { return function (deep2) { return List.meet (deepUnitTree2nameList (deep1)) (deepUnitTree2nameList (deep2)); } }; var deepUnitTreeListOverlaps = function (deepL) { var nameL = []; for (var i = 0; i+1 < deepL.length; i++) { for (var j = i+1; j < deepL.length; j++) { nameL = nameL . concat (deepUnitTreeOverlaps (deepL [i]) (deepL [j])); } } return List.unique (nameL); }; var deepUnitTreeAdjoin = function (deep1) { return function (deep2) { // // // iter (deep1, deep2) : deep0 // // // function iter (deep1, deep2) { // 1. initialize `deep0` var deep0 = [deep1[0], Any.clone (deep1[1])]; // 2. add all value units of `deep1` to `deep0` for (var j = 2; j < deep1.length; j++) { var kindOfUnit = unit2flagRecord (deep1 [j] [1]) . kind_of_unit; switch (kindOfUnit) { case 'value': for (var k = 2; k < deep2.length; k++) { if (deep1[j][0] === deep2[k][0]) { deep0.push (iter (deep1[j], deep2[k])); break; } } deep0.push (Any.clone (deep1 [j])); break; case 'doc': break; case 'session': break; default: throw Error ( "Undefined `kind_of_unit` value `" + kindOfUnit + "` in the unit named `" + deep1[j][1].name + "` of the first Deep Unit Tree." ); } } // 3. Also add all value units of `deep2` which are not in `deep1` to `deep0` for (var k = 2; k < deep2.length; k++) { var kindOfUnit = unit2flagRecord (deep2 [k] [1]) . kind_of_unit; switch (kindOfUnit) { case 'value': for (var j = 2; j < deep1.length; j++) { if (deep1[j][0] === deep2[k][0]) { break; } } deep0.push (Any.clone (deep2 [k])); break; case 'doc': break; case 'session': break; default: throw Error ( "Undefined `kind_of_unit` value `" + kindOfUnit + "` in the unit named `" + deep2[k][1].name + "` of the second Deep Unit Tree." ); } } // 4. return `deep0` return deep0; } // // // main part // // // if (deep1 [0] === null && deep2 [0] === null) { return iter (deep1, deep2); } else { throw Error ("Cannot create the adjoin of the two Deep Unit Trees, because not both of them have `null` as their initial element."); } } }; var deepUnitTreeListAdjoin = function (deepL) { if (deepL.length > 1) { var deep = deepL [0]; for (var i = 1; i < deepL.length; i++) { try { deep = deepUnitTreeAdjoin (deep) (deepL [i]); } catch (e) { throw Error ("Something went wrong adjoining the " + i + ". Deep Unit Tree: " + e); } } return deep; } else { return Any.clone (deepL [0]); } }; var flatUnitTreeCode2value = function (code) { try { return Data.Json.code2value (code); } catch (e) { throw Error ("Unable to convert the code into a Flat Unit Tree value: " + e); } }; var flatUnitTreeValue2code = function (flat) { try { return Data.Json.value2code (flat); } catch (e) { throw Error ("Unable to convert the Flat Unit Tree value into code: " + e); } }; var deepUnitTreeCode2value = function (code) { try { return Data.Json.code2value (code); } catch (e) { throw Error ("Unable to convert the code into a Deep Unit Tree value: " + e); }; }; var deepUnitTreeValue2code = function (deep) { try { return Data.Json.value2code (deep); } catch (e) { throw Error ("Unable to convert the Deep Unit Tree value into code: " + e); } }; var readFlatUnitTreeFile = function (file) { var code; // of type `Data.Json.CODE` var flat; // of type `Data.Json.VALUE` // 1. read the `code` try { code = System.File.read (file); } catch (e) { throw Error ("Unable to read the Flat Unit Tree file `" + file + "`: " + e); }; // 2. convert the code into a value try { flat = flatUnitTreeCode2value (code); // if `flat` is still a string, convert it again if (typeof flat === 'string') { flat = flatUnitTreeCode2value (flat); } } catch (e) { throw Error ("The content of `" + file + "` does not convert to a Flat Unit Tree: " + e); }; // 3. return the result return flat; }; var readDeepUnitTreeFile = function (file) { var code; // of type `Data.Json.CODE` var deep; // of type `Data.Json.VALUE` // 1. read the `code` try { code = System.File.read (file); } catch (e) { throw Error ("Unable to read the Deep Unit Tree file `" + file + "`: " + e); }; // 2. convert the code into a value try { deep = deepUnitTreeCode2value (code); // if `deep` is still a string, convert it again if (typeof deep === 'string') { deep = deepUnitTreeCode2value (deep); } } catch (e) { throw Error ("The content of `" + file + "` does not convert to a Deep Unit Tree: " + e); }; // 3. return the result return deep; }; var writeFlatUnitTreeFile = function (file) { return function (flat) { var code; // of type `Data.Json.CODE` // 1. convert the value of the Flat Unit Tree into code try { code = flatUnitTreeValue2code (flat); } catch (e) { throw Error ("Unable to convert the Flat Unit Tree value into code: " + e); }; // 2. write the code to the `file` try { System.File.write (file) (code); } catch (e) { throw Error ("Unable to write the Flat Unit Tree into `" + file + "`: " + e); }; // 3. return `null` return null; } }; var writeDeepUnitTreeFile = function (file) { return function (deep) { var code; // of type `Data.Json.CODE` // 1. convert the value of the Deep Unit Tree into code try { code = deepUnitTreeValue2code (deep); } catch (e) { throw Error ("Unable to convert the Deep Unit Tree value into code: " + e); }; // 2. write the code to the `file` try { System.File.write (file) (code); } catch (e) { throw Error ("Unable to write the Deep Unit Tree into `" + file + "`: " + e); }; // 3. return `null` return null; } }; Object.defineProperty (__struct__, "SOURCE_CODE", { writable: false, configurable: false, enumerable: true, value: SOURCE_CODE }); Object.defineProperty (__struct__, "FlagSchema", { writable: false, configurable: false, enumerable: true, value: FlagSchema }); Object.defineProperty (__struct__, "theFlagSchema", { writable: false, configurable: false, enumerable: true, value: theFlagSchema }); Object.defineProperty (__struct__, "UnitSignature", { writable: false, configurable: false, enumerable: true, value: UnitSignature }); Object.defineProperty (__struct__, "theUnitSignature", { writable: false, configurable: false, enumerable: true, value: theUnitSignature }); Object.defineProperty (__struct__, "initialValueUnit2flagRecord", { writable: false, configurable: false, enumerable: true, value: initialValueUnit2flagRecord }); Object.defineProperty (__struct__, "unit2flagRecord", { writable: false, configurable: false, enumerable: true, value: unit2flagRecord }); Object.defineProperty (__struct__, "UNIT_IDENTIFIER", { writable: false, configurable: false, enumerable: true, value: UNIT_IDENTIFIER }); Object.defineProperty (__struct__, "UNIT_NAME", { writable: false, configurable: false, enumerable: true, value: UNIT_NAME }); Object.defineProperty (__struct__, "unitName2identifierList", { writable: false, configurable: false, enumerable: true, value: unitName2identifierList }); Object.defineProperty (__struct__, "identifierList2unitName", { writable: false, configurable: false, enumerable: true, value: identifierList2unitName }); Object.defineProperty (__struct__, "createDocName", { writable: false, configurable: false, enumerable: true, value: createDocName }); Object.defineProperty (__struct__, "createSessionName", { writable: false, configurable: false, enumerable: true, value: createSessionName }); Object.defineProperty (__struct__, "docNameNumber", { writable: false, configurable: false, enumerable: true, value: docNameNumber }); Object.defineProperty (__struct__, "sessionNameNumber", { writable: false, configurable: false, enumerable: true, value: sessionNameNumber }); Object.defineProperty (__struct__, "getUnit", { writable: false, configurable: false, enumerable: true, value: getUnit }); Object.defineProperty (__struct__, "getSubtree", { writable: false, configurable: false, enumerable: true, value: getSubtree }); Object.defineProperty (__struct__, "insert", { writable: false, configurable: false, enumerable: true, value: insert }); Object.defineProperty (__struct__, "flat2deep", { writable: false, configurable: false, enumerable: true, value: flat2deep }); Object.defineProperty (__struct__, "deep2flat", { writable: false, configurable: false, enumerable: true, value: deep2flat }); Object.defineProperty (__struct__, "unitCheck", { writable: false, configurable: false, enumerable: true, value: unitCheck }); Object.defineProperty (__struct__, "flatUnitTreeCheck", { writable: false, configurable: false, enumerable: true, value: flatUnitTreeCheck }); Object.defineProperty (__struct__, "deepUnitTreeCheck", { writable: false, configurable: false, enumerable: true, value: deepUnitTreeCheck }); Object.defineProperty (__struct__, "deepUnitTree2nameList", { writable: false, configurable: false, enumerable: true, value: deepUnitTree2nameList }); Object.defineProperty (__struct__, "deepUnitTreeOverlaps", { writable: false, configurable: false, enumerable: true, value: deepUnitTreeOverlaps }); Object.defineProperty (__struct__, "deepUnitTreeListOverlaps", { writable: false, configurable: false, enumerable: true, value: deepUnitTreeListOverlaps }); Object.defineProperty (__struct__, "deepUnitTreeAdjoin", { writable: false, configurable: false, enumerable: true, value: deepUnitTreeAdjoin }); Object.defineProperty (__struct__, "deepUnitTreeListAdjoin", { writable: false, configurable: false, enumerable: true, value: deepUnitTreeListAdjoin }); Object.defineProperty (__struct__, "flatUnitTreeCode2value", { writable: false, configurable: false, enumerable: true, value: flatUnitTreeCode2value }); Object.defineProperty (__struct__, "flatUnitTreeValue2code", { writable: false, configurable: false, enumerable: true, value: flatUnitTreeValue2code }); Object.defineProperty (__struct__, "deepUnitTreeCode2value", { writable: false, configurable: false, enumerable: true, value: deepUnitTreeCode2value }); Object.defineProperty (__struct__, "deepUnitTreeValue2code", { writable: false, configurable: false, enumerable: true, value: deepUnitTreeValue2code }); Object.defineProperty (__struct__, "readFlatUnitTreeFile", { writable: false, configurable: false, enumerable: true, value: readFlatUnitTreeFile }); Object.defineProperty (__struct__, "readDeepUnitTreeFile", { writable: false, configurable: false, enumerable: true, value: readDeepUnitTreeFile }); Object.defineProperty (__struct__, "writeFlatUnitTreeFile", { writable: false, configurable: false, enumerable: true, value: writeFlatUnitTreeFile }); Object.defineProperty (__struct__, "writeDeepUnitTreeFile", { writable: false, configurable: false, enumerable: true, value: writeDeepUnitTreeFile }); return __struct__; }) (); var Compiler = (function () { var __struct__ = Object.create (null); var Boost = (function () { var __struct__ = Object.create (null); var allUnitFlags = function (deep) { // // // the main function part // // / deep [1] . $unit_flags$ = Unit.initialValueUnit2flagRecord (deep [1]); // first, boost the initial value unit for (var j = 2; j < deep.length; j++) { deep [j] = iter (deep [j]); } return deep; // // // the recursive function for all other units // // // function iter (deep) { deep [1] . $unit_flags$ = Unit.unit2flagRecord (deep [1]); for (var j = 2; j < deep.length; j++) { deep [j] = iter (deep [j]); } return deep; }; }; var allNames = function allNames (deep) { // add the `$name$` to the unit `deep[1]` of `deep` if (deep [0] === null) { deep [1] . $name$ = ''; } else { if (deep [1] . $unit_flags$) { var flagRec = deep[1] . $unit_flags$; } else { throw Error ("The unit at `" + deep[0] + "` does not have a `$unit_flags$ record."); } switch (flagRec.kind_of_unit) { case 'value': deep [1] . $name$ = deep [1] . name; break; case 'doc': case 'session': var idL = Unit.unitName2identifierList (deep[1].name || ''); idL.push (deep [0]); deep [1] . $name$ = Unit.identifierList2unitName (idL); break; default: throw Error ("Unknown `kind_of_unit` value `" + flagRec.kind_of_unit + "` in the unit at `" + deep[0] + "`."); } } // recursively apply the procedure to all children of `deep` for (var j = 2; j < deep.length; j++) { deep [j] = allNames (deep [j]); } // return the modified `deep` unit tree return deep; }; var allValues = function allValues (deep) { // 1. determine the code for the unit `deep[1]` try { var x = Code.unitCode (deep [1]); // of type `nullify(EXPRESSION)` } catch (e) { throw Error ("Unable to derive the value code of the unit at `" + deep[0] + "`: \n" + e); } // 2. add the `$value$` to the unit if (x !== null) { deep[1].$value$ = x; } // 3. recursively repeat the procedure for all children of `deep` for (var i = 2; i < deep.length; i++) { deep[i] = allValues (deep [i]); } // 4. return the modified `deep` return deep; }; var allTextProperties = function allTextProperties (deep) { // add the optional `$info$`, `$comment$` and `$header$` to the unit `deep[1]` of `deep` if (deep [1] . info) { deep [1] . $info$ = Doc.Markdown.toHtml (deep [1] . info); } if (deep [1] . comment) { deep [1] . $comment$ = Doc.Markdown.toHtml (deep [1] . comment); } if (deep [1] . header) { deep [1] . $header$ = Doc.Markdown.inlineHtml (deep [1] . header); } // perform the procedure recursively on all children of `deep` for (var j = 2; j < deep.length; j++) { deep [j] = allTextProperties (deep [j]); } // return the modified `deep` unit tree return deep; }; var allCaptions = function allCaptions (deep) { // add the `$markdown_caption$` and `$html_caption$` to the unit `deep[1]` of `deep` deep [1] . $markdown_caption$ = Doc.markdownCaption (deep [1]); deep [1] . $html_caption$ = Doc.htmlCaption (deep [1]); // perform the procedure recursively on all children of `deep` for (var j = 2; j < deep.length; j++) { deep [j] = allCaptions (deep [j]); }; // return the modified `deep` unit tree return deep; }; var allSessions = function (deep) { return deep; // dummy///////////////////////////////////////////////////////////////////////////////////////////////////////////// throw Error (".............................................Tof.Compiler.Boost.allSessions......................................"); }; var fullBoost = function (deep) { var nextDeep = deep; // of type `DEEP_UNIT_TREE` // All unit flags try { nextDeep = Boost.allUnitFlags (nextDeep); } catch (e) { throw Error ("Incomplete boost of the given Deep Unit Tree. Unable to add all unit flags: \n" + e); } // All. names try { nextDeep = Boost.allNames (nextDeep); } catch (e) { throw Error ("Incomplete boost of the given Deep Unit Tree. Unable to add all names: \n" + e); } // All values try { nextDeep = Boost.allValues (nextDeep); } catch (e) { throw Error ("Incomplete boost of the given Deep Unit Tree. Unable to add all values: \n" + e); } // All text properties try { nextDeep = Boost.allTextProperties (nextDeep); } catch (e) { throw Error ("Incomplete boost of the given Deep Unit Tree. Unable to add all infos and comments: \n" + e); } // All captions try { nextDeep = Boost.allCaptions (nextDeep); } catch (e) { throw Error ("Incomplete boost of the given Deep Unit Tree. Unable to add all the captions: \n" + e); } // All sessions try { nextDeep = Boost.allSessions (nextDeep); } catch (e) { throw Error ("Incomplete boost of the given Deep Unit Tree. Unable to add all sessions: \n" + e); } // return the result return nextDeep; }; Object.defineProperty (__struct__, "allUnitFlags", { writable: false, configurable: false, enumerable: true, value: allUnitFlags }); Object.defineProperty (__struct__, "allNames", { writable: false, configurable: false, enumerable: true, value: allNames }); Object.defineProperty (__struct__, "allValues", { writable: false, configurable: false, enumerable: true, value: allValues }); Object.defineProperty (__struct__, "allTextProperties", { writable: false, configurable: false, enumerable: true, value: allTextProperties }); Object.defineProperty (__struct__, "allCaptions", { writable: false, configurable: false, enumerable: true, value: allCaptions }); Object.defineProperty (__struct__, "allSessions", { writable: false, configurable: false, enumerable: true, value: allSessions }); Object.defineProperty (__struct__, "fullBoost", { writable: false, configurable: false, enumerable: true, value: fullBoost }); return __struct__; }) (); var Code = (function () { var __struct__ = Object.create (null); var unitCode = function (u) { if (u.$unit_flags$) { var flags = u.$unit_flags$; switch (flags.kind_of_unit) { case 'value': // // // establish an initial value `x` for the code; usually the `value` of the unit // // // var x; // holds the value code if (u.value) { x = u.value; } else if (flags.origin === 'predefined') { x = '( (typeof ' + u.name + ' === "undefined")\n' + '? (throw Error ("' + u.name + ' is undefined"))' + ': ' + u.name + ' )'; } else if (flags.type_of_value_unit === 'struct') { x = 'Object.create (null)' ; } else { throw Error ("The given value unit has no `value`."); } // // // translate from a foreign dialect // // // switch (flags.dialect) { case 'es6': break; case 'coffeescript': throw Error ('.............................coffescript......................'); case 'tofscript': throw Error ('.............................tofscript........................'); default: throw Error ('.............................unknown dialect value............'); } // // // augmentation // // // //switch (flags.augmentation) { // case 'no_augmentation': // break; // case 'typed_augmentation': // throw Error ('.............................typed_augmentation...............'); // case 'catch_augmentation': // throw Error ('.............................catch_augmentation...............'); // default: // throw Error ('.............................unknown augmentation value.......'); //} // ..................................................................... // // // return x // // // return x; case 'session': case 'doc': return null; default: throw Error ("The `kind_of_unit` value `" + u.$unit_flags$.kind_of_unit + "` of the given unit is undefined."); } } else { // i.e. `$unit_flags$` is undefined in `u` throw Error ("The given unit has no `$unit_flags$ defined."); } }; var deepUnitTree2expression = function (deep) { // // // establish the `flagRec` and the `value` of `deep` // // // var flagRec = deep[1].$unit_flags$; if (! flagRec) { throw Error ("The given Deep Unit Tree has no `$unit_flags$` property."); } var value = deep[1].$value$; if (! value) { throw Error ("The given Deep Unit Tree has no `$value$` property."); } // // // count the number `n` of subtrees of `deep` that are value units // // // var n = 0; for (var j = 2; j < deep.length; j++) { if (deep[j][1].$unit_flags$) { switch (deep[j][1].$unit_flags$.kind_of_unit) { case 'value' : n++; break; case 'doc' : break; case 'session' : break; default : throw Error ("One Unit in the given Deep Unit Tree has an undefined `kind_of_unit` value `" + deep[j][1].$unit_flags$.kind_of_unit + "`."); } } else { throw Error ("The given Deep Unit Tree does not have a `$unit_flags$` property defined for all its units."); } } // // // // // // if (n === 0) { return value; } else { // i.e. n > 0 switch (flagRec.kind_of_value_unit) { case 'static_value': switch (flagRec.type_of_value_unit) { case 'struct': return deepUnitTree2structExpression (deep); case 'construct': return deepUnitTree2constructExpression (deep); case 'function': throw Error ("The given Deep Unit Tree of name `" + deep[1].name + "` has a `function` value unit and it has children values, and that is not allowed."); case 'type': throw Error ("The given Deep Unit Tree of name `" + deep[1].name + "` has a `type` value unit and it has children values, and that is not allowed."); case 'any': return ("...........................deepUnitTree2expression undefined for any....................."); default: throw Error ("One Unit in the given Deep Unit Tree has an undefined `type_of_value_unit` value `" + flagRec.type_of_value + "`."); } case 'proto': throw Error ("The given Deep Unit Tree has a `proto` unit (with `name` value `" + deep[1].name + "`) that is not a child of a `construct` unit."); case 'import': throw Error ("...................the `kind_of_value_unit` value `import` is not implemented yet........................."); case 'param': throw Error ("...................the `kind_of_value_unit` value `param` is not implemented yet.........................."); case 'accessor': throw Error ("...................the `kind_of_value_unit` value `accessor` is not implemented yet......................."); default: throw Error ("...................undefined kind_ov_value_unit value....................................................."); } } };; var deepUnitTree2structExpression = function (deep) { var value = deep[1].$value$; if (! value) { throw Error ("The Deep Unit Tree with `name` value `" + deep[1].name + "` has no `$value$`."); } var block1 = ''; var block2 = ''; for (var j = 2; j < deep.length; j++) { var id = deep[j][0]; var unit = deep[j][1]; var flagRec = unit . $unit_flags$; if (flagRec . kind_of_unit === 'value') { if (block1 !== '') { block1 += ';\n'; } block1 += 'var ' + id + ' =\n' + Str.indent (2) (deepUnitTree2expression (deep [j])) ; if (flagRec . scope === 'global') { if (block2 !== '') { block2 += ';\n'; } switch (flagRec . modifiability) { case 'constant': block2 += 'Object.defineProperty (__struct__, "' + id + '", { ' + 'writable: false, configurable: false, enumerable: true, value: ' + id + ' })'; break; case 'variable': block2 += 'Object.defineProperty (__struct__, "' + id + '", { ' + 'writable: true, configurable: false, enumerable: true, value: ' + id + ' })'; break; default: throw Error ("The `modifiability` flag value `" + flagRec.modifiability + "` of the unit with `name` value `" + unit.name + "` is undefined."); } } } } return ( '(function () {\n' + ' var __struct__ =\n' + Str.indent (4) (value) + ';\n' + Str.indent (2) (block1) + ';\n' + Str.indent (2) (block2) + ';\n' + ' return __struct__;\n' + '}) ()' ); }; var deepUnitTree2constructExpression = function (deep) { var value = deep[1].$value$; if (! value) { throw Error ("The Deep Unit tree with `name` value `" + deep[1].name + "` has no `$value$`.") } var block1 = ''; var block2 = ''; for (var j = 2; j < deep.length; j++) { var id = deep[j][0]; var unit = deep[j][1]; var name = unit.name; var flagRec = unit . $unit_flags$; if (flagRec . kind_of_unit === 'value') { switch (flagRec. kind_of_value_unit) { case 'proto': if (block2 !== '') { block2 += ';\n'; } block2 += '__construct__.prototype.' + id + ' =\n' + Str.indent (2) (deepUnitTree2expression (deep [j])); break; default: if (block1 !== '') { block1 += ';\n'; } block1 += 'var ' + id + ' =\n' + Str.indent (2) (deepUnitTree2expression (deep [j])); if (block2 !== '') { block2 += ';\n'; } switch (flagRec . modifiability) { case 'constant': block2 += 'Object.defineProperty (__construct__, "' + id + '", { ' + 'writeable: false, configurable: false, enumerable: true, value: ' + id + ' })'; break; case 'variable': block2 += 'Object.defineProperty (__construct__, "' + id + '", { ' + 'writable: true, configurable: false, enumerable: true, value: ' + id + ' })'; break; default: throw Error ("The `modifiability` flag value `" + flagRec.modifiability + "` of the unit with `name` value `" + name + "` is undefined."); } } } } return ( '(function () {\n' + ' var __construct__ =\n' + Str.indent (4) (value) + ';\n' + Str.indent (2) (block1) + ';\n' + Str.indent (2) (block2) + ';\n' + ' return __construct__;\n' + '}) ()' ); }; var DEFUN = Type.synonym (EcmaScript.EXPRESSION); var deepUnitTree2defun = function (deep) { var id = deep[0]; var unit = deep[1]; var flagRec = unit . $unit_flags$; var block1 = ''; var block2 = ''; if (flagRec && flagRec.kind_of_unit === 'value' && flagRec.type_of_value_unit === 'struct') { for (var j = 2; j < deep.length; j++) { id = deep [j] [0]; unit = deep [j] [1]; flagRec = unit . $unit_flags$; if (flagRec.kind_of_unit === 'value') { if (block1 !== '') { block1 += ';\n'; } block1 += 'var ' + id + ' =\n' + Str.indent (2) (deepUnitTree2expression (deep [j])); if (flagRec . scope === 'global') { if (block2 !== '') { block2 += ';\n'; } switch (flagRec . modifiability) { case 'constant': block2 += 'Object.defineProperty (__global__, "' + id + '", { ' + 'writable: false, configurable: false, enumerable: true, value: ' + id + ' })'; break; case 'variable': block2 += 'Object.definedProperty (__global__, "' + id + '", { ' + 'writable: true, configurable: false, enumerable: true, value: ' + id + ' })'; break; default: throw Error ("The `modifiability` flag value `" + flagRec.modifiability + "` of the unit with `name` value `" + unit.name + "` is undefined."); } } } } return ( '(function (__global__) {\n' + Str . indent (2) (block1) + ';\n' + Str. indent (2) (block2) + ';\n' + ' return null;\n' + '})' ); } else { throw Error ("The unit flags of the given Deep Unit Tree do not identify the unit as a `struct` value unit."); }; }; var defun2globalScriptCode = function (defun) { return ( '(\n' + Str.indent (2) (defun) + '\n' + ') (this);\n' ); }; var defun2nodeModuleCode = function (defun) { return ( 'module.exports = (function () {\n' + ' var __obj__ = Object.create (null);\n' + ' (\n' + Str.indent (6) (defun) + '\n' + ' ) (__obj__);\n' + ' return __obj__;\n' + '}) ();\n' ); }; var defun2standardModuleCode = function (defun) { return "..................................................................Tof.Compiler.Code.defun2standardModuleCode......................"; }; var defunComposition = function (dL) { var code = '' for (var i = 0; i < dL.length; i++) { if (code !== '') { code += '\n'; } code += dL[i] + ' (__GLOBAL__);'; } return ( '(function (__GLOBAL__) {\n' + Str.indent (2) (code) + '})' ); }; Object.defineProperty (__struct__, "unitCode", { writable: false, configurable: false, enumerable: true, value: unitCode }); Object.defineProperty (__struct__, "deepUnitTree2expression", { writable: false, configurable: false, enumerable: true, value: deepUnitTree2expression }); Object.defineProperty (__struct__, "deepUnitTree2structExpression", { writable: false, configurable: false, enumerable: true, value: deepUnitTree2structExpression }); Object.defineProperty (__struct__, "deepUnitTree2constructExpression", { writable: false, configurable: false, enumerable: true, value: deepUnitTree2constructExpression }); Object.defineProperty (__struct__, "DEFUN", { writable: false, configurable: false, enumerable: true, value: DEFUN }); Object.defineProperty (__struct__, "deepUnitTree2defun", { writable: false, configurable: false, enumerable: true, value: deepUnitTree2defun }); Object.defineProperty (__struct__, "defun2globalScriptCode", { writable: false, configurable: false, enumerable: true, value: defun2globalScriptCode }); Object.defineProperty (__struct__, "defun2nodeModuleCode", { writable: false, configurable: false, enumerable: true, value: defun2nodeModuleCode }); Object.defineProperty (__struct__, "defun2standardModuleCode", { writable: false, configurable: false, enumerable: true, value: defun2standardModuleCode }); Object.defineProperty (__struct__, "defunComposition", { writable: false, configurable: false, enumerable: true, value: defunComposition }); return __struct__; }) (); var Doc = (function () { var __struct__ = Object.create (null); var Markdown = (function () { var __struct__ = Object.create (null); var toHtml = function (md) { if (Pandoc.markdownToHtml) { return Pandoc.markdownToHtml (md); } else { return Data.Markdown.toHtml (md); } }; var inlineHtml = function (md) { return Data.Markdown.inlineHtml (md); }; Object.defineProperty (__struct__, "toHtml", { writable: false, configurable: false, enumerable: true, value: toHtml }); Object.defineProperty (__struct__, "inlineHtml", { writable: false, configurable: false, enumerable: true, value: inlineHtml }); return __struct__; }) (); var Symbol = (function () { var __struct__ = Object.create (null); var homeCharacter = '\u2302'; var homeEntity = '⌂'; Object.defineProperty (__struct__, "homeCharacter", { writable: false, configurable: false, enumerable: true, value: homeCharacter }); Object.defineProperty (__struct__, "homeEntity", { writable: false, configurable: false, enumerable: true, value: homeEntity }); return __struct__; }) (); var valueUnitFlags2annotations = function (flagRec) { var idL = []; if ('scope' in flagRec) { idL.push (flagRec.scope); } if ('modifiability' in flagRec) { idL.push (flagRec.modifiability); } if ('extensibility' in flagRec) { idL.push (flagRec.extensibility); } return idL; }; var markdownCaption = function (u) { // verify, that `u` has all required properties if (! ('$unit_flags$' in u)) { throw Error ("The given unit does not have a `$unit_flags$` property."); } if (! ('$name$' in u)) { throw Error ("The given unit does not have a `$name$` property."); } // establish the basic values var flagRec = u.$unit_flags$ // a record var name = u.$name$; // of type `UNIT_NAME` // create the result, depending on the kind of unit switch (flagRec.kind_of_unit) { case 'value': // // // The Markdown caption `md` for a value unit // // // var md = ''; // 1. the annotations var idL = valueUnitFlags2annotations (flagRec); if (idL.length > 0) { md += idL.join (' '); md += ' '; } // 2. the naming part switch (flagRec.kind_of_value_unit) { case 'static_value': if (u.$name$ === '') { md += Symbol.homeCharacter; } else { md += u.$name$; } break; case 'proto': md += Data.Name.parentName(u.name) + '::' + Data.Name.childIdentifier(u.name); break; case 'param': md += u.$name$ + ' (' + u.parameter + ')' default: throw Error ("`markdownCaption(u)` is not implemented a `kind_of_value_unit` value `" + flagRec.kind_of_value_unit + "`."); } // 3. the optional type if (u.type) { md += ' : ' + u.type; } else { switch (flagRec.type_of_value_unit) { case 'struct' : md += ' : ' + 'STRUCT' ; break; case 'construct': md += ' : ' + 'CONSTRUCT'; break; case 'type' : md += ' : ' + 'TYPE' ; break; case 'function' : md += ' : ' + 'FUNCTION' ; break; default : break; } } // return the result return md; case 'doc': // // // The Markdown caption `md` for a doc unit // // // return ( Unit.docNameNumber (u.$name$) + '. ' + u.header ); case 'session': // // // The Markdown caption `md` for a session unit // // // var md = Data.Name.childIdentifier (u.$name$); if (u.header) { md += ' ' + u.header; } return md; default: throw Error ("The `kind_of_unit` value `" + flagRec.kind_of_unit + "` is undefined."); } }; var htmlCaption = function (u) { // verify, that `u` has all required properties if (! ('$unit_flags$' in u)) { throw Error ("The given unit does not have a `$unit_flags$` property."); } if (! ('$name$' in u)) { throw Error ("The given unit does not have a `$name$` property."); } // establish the basic values var flagRec = u.$unit_flags$ // a record var name = u.$name$; // of type `UNIT_NAME` // create the result, depending on the kind of unit switch (flagRec.kind_of_unit) { case 'value': // // // The HTML caption `md` for a value unit // // // var html = ''; var h = ''; // 1. the annotations var idL = valueUnitFlags2annotations (flagRec); if (idL.length > 0) { html += '' + idL.join (' ') + ' '; } // 2. the naming part switch (flagRec.kind_of_value_unit) { case 'static_value': h = u.$name$; if (h === '') { h = Symbol.homeEntity; } html += '' + h + ''; break; case 'proto': h = Data.Name.parentName(u.name) + '::' + Data.Name.childIdentifier(u.name); html += '' + h + ''; break; case 'param': h = u.parameter; // improve this: wrap into different `` elements for parameter keys and type-values!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! html += '' + u.$name$ + '' + '(' + h + ')' + u.type + ''; } else { switch (flagRec.type_of_value_unit) { case 'struct': html += ' : ' + '' + 'STRUCT' + ''; break; case 'construct': html += ' : ' + '' + 'CONSTRUCT' + ''; break; case 'type': html += ' : ' + '' + 'TYPE' + ''; break; case 'function': html += ' : ' + '' + 'FUNCTION' + ''; break; default: break; } } // return the result return html; case 'doc': // // // The HMTL caption `md` for a doc unit // // // return ( '' + Unit.docNameNumber (u.$name$) + '. ' + '' + u.$header$ + '' ); case 'session': // // // The HTML caption `md` for a session unit // // // var html = '' + Data.Name.childIdentifier (u.$name$) + '' if (u.$header$) { html += ' ' + u.$header$ + ''; } return html; default: throw Error ("The `kind_of_unit` value `" + flagRec.kind_of_unit + "` is undefined."); } }; var cssForUnits = [ '/* CSS for unit properties and the color styles */' , '.name { background-color: rgba(0,0,255,0.1); color: blue }' , '.type { background-color: rgba(0,255,0,0.1); color: green }' , '.value { background-color: rgba(255,0,0,0.1); color: red; white-space: pre; font-family: monospace; }' , '.info { background-color: rgba(90,90,90,0.1); color: rgba(90,90,90,1) }' , '.comment { background-color: rgba(90,90,90,0.1); color: rgba(90,90,90,1) }' , '.flags { background-color: #DDDDDD; color: #888888; font-size:xx-small; }' , '.header { background-color: #DDDDDD; color: #444444; }' , '.session { background-color: yellow; color: green; }' // update this to better colors!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ] . join ("\n");; var section4unit = function (deep) { var u = deep [1]; // the `UNIT` var htmlL = []; if (u.$html_caption$) { htmlL .push ( '
' ); } if (u.$info$) { htmlL .push ( ' The name ' + paramRec.name + '
is undefined in the given Deep Unit Tree.
The display
value ' + paramRec.display + '
is undefined.
' +
'Open the browser console and call $help()
for all the options.' +
'
Project | ' ]; for (var k = 0; k < fileTypeL.length; k++) { row.push ( '' + fileTypeL[k] + ' | ' ); } table += '\n' + row.join ('\n') + '\n\n' ; // 2. add the body rows for (var k = 0; k < piL.length; k++) { var row = [ '' + piL[k] + ' | ' ]; // of type `list(HTML)` for (var i = 0; i < extensionL.length; i++) { if (List.member (fileL) (piL[k] + extensionL[i])) { row.push ( '' + extensionL[i] + ' | ' ); } else { row.push ( '' ); } } table += ' |
---|