Table of contents
No headers
var mMap = $Map ?? $mMap ?? __request.args["_Map"] ?? __request.args["_mMap"] ?? {};
var nLog = $Log ?? $nLog ?? __request.args["_Log"] ?? __request.args["_nLog"] ?? 0;
let sMap=String.Serialize(mMap);
var sType=String.SubStr(sMap,0,1);
if (sType!="{")
return;
if (nLog) "mMap: "..Json.Format(mMap);
if (nLog) { Web.Html("<br>");"> '"..sType.."'"; }
var lMapTree=[];
var nNodeId=0;
var nParentId=0;
var nLevel=0;
var sKey="";
var nInd=0;
let lMapTree..=[{ id: nNodeId, parent: nParentId, level: nLevel, type: String.SubStr(sMap,0,1), key: "", val : mMap }];
let nParentId=nNodeId;
let nNodeId+=1;
var nMapLevel1=1;
var lInd=[];
let lInd=Num.Series(0,#mMap-1);
if (nLog) " #="..#mMap;
foreach (var nInd1 in lInd)
//foreach (var sKey1 in Map.Keys(mMap))
{
let nInd=nInd1;
let sKey=Map.Keys(mMap)[nInd];
var sKey1=sKey;
var vMap1=mMap[sKey];
//var vMap1=mMap[sKey1];
let vMap=vMap1;
//let sKey=sKey1;
let sMap=String.Serialize(vMap);
let sType=String.SubStr(sMap,0,1);
if (sType=="{")
{
let sKey=Map.Keys(vMap)[nInd];
}
else
let sKey="";
let nLevel=1;
if (nLog) { Web.Html("<br>");">> #"..nInd.." '"..sType.."': "..sKey..": "..Json.Emit(sMap); }
let lMapTree..=[{ id: nNodeId, parent: nParentId, level: nLevel, maplev: nMapLevel1, type: sType, key: sKey1, val : vMap }];
let nNodeId+=1;
if (List.Contains(["{","["],sType))
{
var nMapLevel2=((sType=="{") ? nMapLevel1+1 : nMapLevel1);
var nParentId2=nNodeId-1;
var sType2=sType;
let lInd=Num.Series(0,#vMap-1);
if (nLog) " #="..#vMap;
foreach (var nInd2 in lInd)
{
let nInd=nInd2;
if (sType2=="{")
{
let vMap=Map.Values(vMap1)[nInd];
let sKey=Map.Keys(vMap1)[nInd];
}//if
else
{
let vMap=vMap1[nInd];
let sKey="#"..nInd;
}//el
var vMap2=vMap;
var sKey2=sKey;
let sMap=String.Serialize(vMap);
let sType=String.SubStr(sMap,0,1);
//if (sType=="{")
// let sKey=Map.Keys(vMap)[nInd];
//else
// let sKey2="";
let nLevel=2;
if (nLog) { Web.Html("<br>");">>> #"..nInd.." '"..sType.."': "..sKey..": "..Json.Emit(sMap); }
let lMapTree..=[{ id: nNodeId, parent: nParentId2, level: nLevel, maplev: nMapLevel2, type: sType, key: sKey2, val : vMap }];
let nNodeId+=1;
if (List.Contains(["{","["],sType))
{
var nMapLevel3=((sType=="{") ? nMapLevel2+1 : nMapLevel2);
var nParentId3=nNodeId-1;
var sType3=sType;
let lInd=Num.Series(0,#vMap-1);
if (nLog) " #="..#vMap;
foreach (var nInd3 in lInd)
{
let nInd=nInd3;
if (sType3=="{")
{
let vMap=Map.Values(vMap2)[nInd];
let sKey=Map.Keys(vMap2)[nInd];
}//if
else
{
let vMap=vMap2[nInd];
let sKey="#"..nInd;
}//el
var vMap3=vMap;
var sKey3=sKey;
let sMap=String.Serialize(vMap3);
let sType=String.SubStr(sMap,0,1);
let nLevel=3;
if (nLog) { Web.Html("<br>");">>>> #"..nInd.." '"..sType.."': "..sKey..": "..Json.Emit(sMap); }
let lMapTree..=[{ id: nNodeId, parent: nParentId3, level: nLevel, maplev: nMapLevel3, type: sType, key: sKey3, val : vMap }];
let nNodeId+=1;
if (List.Contains(["{","["],sType))
{
var nMapLevel4=((sType=="{") ? nMapLevel3+1 : nMapLevel3);
var nParentId4=nNodeId-1;
var sType4=sType;
let lInd=Num.Series(0,#vMap-1);
if (nLog) " #="..#vMap;
foreach (var nInd4 in lInd)
{
let nInd=nInd4;
if (sType4=="{")
{
let vMap=Map.Values(vMap3)[nInd];
let sKey=Map.Keys(vMap3)[nInd];
}//if
else
{
let vMap=vMap3[nInd];
let sKey="#"..nInd;
}//el
var vMap4=vMap;
var sKey4=sKey;
let sMap=String.Serialize(vMap4);
let sType=String.SubStr(sMap,0,1);
let nLevel=4;
if (nLog) { Web.Html("<br>");">>>>> #"..nInd.." '"..sType.."': "..sKey..": "..Json.Emit(sMap); }
let lMapTree..=[{ id: nNodeId, parent: nParentId4, level: nLevel, maplev: nMapLevel4, type: sType, key: sKey4, val : vMap }];
let nNodeId+=1;
if (List.Contains(["{","["],sType))
{
var nMapLevel5=((sType=="{") ? nMapLevel4+1 : nMapLevel4);
var nParentId5=nNodeId-1;
var sType5=sType;
let lInd=Num.Series(0,#vMap-1);
if (nLog) " #="..#vMap;
foreach (var nInd5 in lInd)
{
let nInd=nInd5;
if (sType5=="{")
{
let vMap=Map.Values(vMap4)[nInd];
let sKey=Map.Keys(vMap4)[nInd];
}//if
else
{
let vMap=vMap4[nInd];
let sKey="#"..nInd;
}//el
var vMap5=vMap;
var sKey5=sKey;
let sMap=String.Serialize(vMap5);
let sType=String.SubStr(sMap,0,1);
let nLevel=5;
if (nLog) { Web.Html("<br>");">>>>>> #"..nInd.." '"..sType.."': "..sKey..": "..Json.Emit(sMap); }
let lMapTree..=[{ id: nNodeId, parent: nParentId5, level: nLevel, maplev: nMapLevel5, type: sType, key: sKey5, val : vMap }];
let nNodeId+=1;
if (List.Contains(["{","["],sType))
{
var nMapLevel6=((sType=="{") ? nMapLevel5+1 : nMapLevel5);
var nParentId6=nNodeId-1;
var sType6=sType;
let lInd=Num.Series(0,#vMap-1);
if (nLog) " #="..#vMap;
foreach (var nInd6 in lInd)
{
let nInd=nInd6;
if (sType6=="{")
{
let vMap=Map.Values(vMap5)[nInd];
let sKey=Map.Keys(vMap5)[nInd];
}//if
else
{
let vMap=vMap5[nInd];
let sKey="#"..nInd;
}//el
var vMap6=vMap;
var sKey6=sKey;
let sMap=String.Serialize(vMap6);
let sType=String.SubStr(sMap,0,1);
let nLevel=6;
if (nLog) { Web.Html("<br>");">>>>>> #"..nInd.." '"..sType.."': "..sKey..": "..Json.Emit(sMap); }
let lMapTree..=[{ id: nNodeId, parent: nParentId6, level: nLevel, maplev: nMapLevel6, type: sType, key: sKey6, val : vMap }];
let nNodeId+=1;
if (List.Contains(["{","["],sType))
{
var nMapLevel7=((sType=="{") ? nMapLevel6+1 : nMapLevel6);
var nParentId7=nNodeId-1;
var sType7=sType;
let lInd=Num.Series(0,#vMap-1);
if (nLog) " #="..#vMap;
}//if
}//fe6
}//if
}//fe5
}//if
}//fe4
}//if
}//fe3
}//if
}//fe2
}//if
}//fe1
if (nLog) { Web.Html("<br>");"lMapTree: "..Json.Format(lMapTree); }
if (nLog)
{
foreach (var mMapNode in lMapTree)
{
//Read Node Properties
var nNodeId=mMapNode["id"];
var nParentId=mMapNode["parent"];
var nLevel=mMapNode["level"];
var nMapLevel=mMapNode["maplev"];
var sType=mMapNode["type"];
var sKey=mMapNode["key"];
var vVal=mMapNode["val"];
Web.Html("<br>");"Id: "..nNodeId.." Parent: "..nParentId.." Level: "..nLevel.." MapLev: "..nMapLevel.." Type: "..sType.." Key: "..sKey.." Val: "..Json.Emit(vVal);
}//fe
Web.Html("<br>");
}//if
foreach (var mMapNode in lMapTree)
{
//Read Node Properties
var nNodeId=mMapNode["id"];
var nParentId=mMapNode["parent"];
var nLevel=mMapNode["level"];
var nMapLevel=mMapNode["maplev"];
var sType=mMapNode["type"];
var sKey=mMapNode["key"];
var vVal=mMapNode["val"];
//if (nLog) { Web.Html("<br>");"Id: "..nNodeId.." Parent: "..nParentId.." Level: "..nLevel.." MapLev: "..nMapLevel.." Type: "..sType.." Key: "..sKey.." Val: "..Json.Emit(vVal); }
//Locate Parent Node
var sListCond="String.IndexOf(Json.Emit($),'\"id\": "..nParentId.."')>0";
//var sMapCond="($.key=='parent')&&($.value=="..nParentId..")";
//var sListCond="Map.Select($,"..sMapCond..")";
var mParent=List.Select(lMapTree,sListCond)[0];
//Process
if (sKey=="#0")
{
if (mParent!=nil)
{
if (mParent["type"]=="[")
{
//Get List of Properties, Node's Childs
var sListCond="String.IndexOf(Json.Emit($),'\"parent\": "..nNodeId.."')>0";
var lChilds=List.Select(lMapTree,sListCond);
foreach (var mChild in lChilds)
{
//Get Property's Key & Value
" "..mChild["key"].."=\""..mChild["val"].."\"";
}//fe
//" TagProp: "..Json.Emit(vVal);
}//if
">";
}//if
}//if
var bDoCloseTags=false;
if ((sKey!="")&&(sKey[0]!="#")&&(mParent["key"]!="#0")) //&&(List.Contains(["{","["],sType))
{
//" id:"..nNodeId.." key:"..sKey.." type: "..sType;
//Set tabulation
Web.Html("<br>");
foreach (var nRep in Num.Series(0,nMapLevel-2,1))
Web.Html(" "); //4 x
"<"..sKey;
if (sType!="[")
">";
if (!List.Contains(["{","["],sType))
{
vVal.."</"..sKey..">";
}//if
let bDoCloseTags=true;
}//if
let bDoCloseTags=(bDoCloseTags)||(__index+1==#lMapTree); //on the last record
if (bDoCloseTags)
{
//Get Following's MapLevel
var nFolMapLev=((__index+1<#lMapTree)? lMapTree[__index+1]["maplev"] : 0);
//" L:"..nFolMapLev;
//Close Parent Tags
var nFollowId=0;
foreach (var nClose in Num.Series(nMapLevel-1,nFolMapLev,-1))
{
var mFollow={};
if (__index==0)
let mFollow=mParent;
else
{
//Locate Parent's Parent Node
var sListCond="String.IndexOf(Json.Emit($),'\"id\": "..nFollowId.."')>0";
var lFollow=List.Select(lMapTree,sListCond);
let mFollow=lFollow[0];
if (mFollow["key"]=="#1") //Tag with properties
{
let nFollowId=mFollow["parent"];
let sListCond="String.IndexOf(Json.Emit($),'\"id\": "..nFollowId.."')>0";
let lFollow=List.Select(lMapTree,sListCond);
let mFollow=lFollow[0];
}//if
//" F:"..nFollowId.." L#="..#lFollow;
}//else
var sCloseTag=mFollow["key"];
let nFollowId=mFollow["parent"];
if (sCloseTag!="")
{
Web.Html("<br>");
foreach (var nRep in Num.Series(0,nClose-2,1))
Web.Html(" "); //4 x
"</"..sCloseTag..">";
}//if
}//fe
}//if : DoCloseTags
}//fe

Comments