/* * Verrückte Turing-Maschinen — A turing complete game * Copyright (C) 2016 Christian Fraß * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ module mod_vtm_helfer { /** * @author kcf */ function einrueckung(tiefe : int, zeichen : string = "\t") : string { return ((tiefe === 0) ? "" : (zeichen + einrueckung(tiefe-1))); } /** * @author kcf */ export type typ_xmlknoten_normal = { name : string; attribute : {[schluessel : string] : string}; kinder : Array; } ; /** * @author kcf */ function xmlknoten_normal_erstellen ( name : string, attribute : {[schluessel : string] : string} = {}, kinder : Array = [] ) : typ_xmlknoten_normal { return { "name": name, "attribute": attribute, "kinder": kinder }; } /** * @author kcf */ export function xmlknoten_normal_erstellen_erweitert ( name : string, attribute : {[schluessel : string] : string} = {}, kinder : Array = [] ) : typ_xmlknoten { return { "art": "normal", "angaben": xmlknoten_normal_erstellen(name, attribute, kinder) }; } /** * @author kcf */ function xmlknoten_normal_darstellen(xmlknoten_normal : typ_xmlknoten_normal, tiefe : int) : string { let str : string = ""; // anfang { let str_anfang : string = ""; str_anfang += xmlknoten_normal.name; // attribute { let str_attribute : string = ""; Object.keys(xmlknoten_normal.attribute).forEach ( schluessel => { let wert : string = xmlknoten_normal.attribute[schluessel]; str_attribute += (" " + schluessel + "=" + "\"" + wert + "\""); } ) ; str_anfang += str_attribute; } str_anfang = (einrueckung(tiefe) + "<" + str_anfang + ">" + "\n"); str += str_anfang; } // kinder { xmlknoten_normal.kinder.forEach(kind => (str += xmlknoten_darstellen(kind, tiefe+1))); } // ende { let str_ende : string = ""; str_ende += xmlknoten_normal.name; str_ende = (einrueckung(tiefe) + "<" + "/" + str_ende + ">" + "\n"); str += str_ende; } return str; } /** * @author kcf */ implementierung_xmlknoten["normal"] = { "darstellen": (xmlknoten, tiefe) => xmlknoten_normal_darstellen(xmlknoten.angaben, tiefe), } ; }