{"id":2216,"date":"2024-07-11T21:08:41","date_gmt":"2024-07-11T19:08:41","guid":{"rendered":"https:\/\/175er-verlag.org\/.recherchiert\/?page_id=2216"},"modified":"2026-08-09T13:33:10","modified_gmt":"2026-08-09T11:33:10","slug":"serviceseite","status":"publish","type":"page","link":"https:\/\/175er-verlag.org\/.recherchiert\/serviceseite","title":{"rendered":"Service-Seiten f\u00fcr meine Besucher"},"content":{"rendered":"\n<h3 class=\"wp-block-heading has-text-align-center\"><strong>Kleine Programme mit gro\u00dfer Wirkung<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Hier bie\u00adte ich allen Besu\u00adchern eini\u00adge n\u00fctz\u00adli\u00adche Hilfs\u00admit\u00adtel an, die f\u00fcr den (fast) t\u00e4g\u00adli\u00adchen Gebrauch vom Vor\u00adteil sind, da sie so man\u00adche Arbei\u00adten erleich\u00adtern. <br>F\u00fcr den Anfang die ers\u00adten klei\u00adnen HTML-Pro\u00adgram\u00adme, die ich erstellt habe, da ich sie st\u00e4n\u00addig nut\u00adze. Nach und nach fol\u00adgen wei\u00adte\u00adre HTML-Werkzeuge.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sil\u00adben\u00adz\u00e4h\u00adler (nicht nur) f\u00fcr Liedtexte<\/strong><\/li>\n\n\n\n<li><strong>Zei\u00adlen (ePost- und ande\u00adre Adres\u00adsen \u2026) sor\u00adtie\u00adren und Dupli\u00adka\u00adte finden<\/strong><\/li>\n\n\n\n<li><strong>ePost-Adres\u00adsen aus einem x\u2011beliebigen Text extrahieren<\/strong><\/li>\n\n\n\n<li><strong>ePost-Adres\u00adsen berei\u00adni\u00adgen (zwei Lis\u00adten ver\u00adglei\u00adchen und Neue erstellen)<\/strong><\/li>\n\n\n\n<li>und wei\u00adte\u00adre \u2026<\/li>\n\n\n\n<li><strong>In Arbeit:<\/strong> Lan\u00adge Inter\u00adnet-Adres\u00adsen (mit Wunsch\u00adna\u00admen) k\u00fcrzen<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<!-- RoZe-Programm: Ein HTML-Service vom 175er Verlag -->\n<meta charset=\"UTF-8\">\n  <title>RoZe-Programm*: Silbenz\u00e4hler (nicht nur) f\u00fcr Lied-Texte<\/title>\n  <style>\n    .roze-silbenzaehler {\n      font-family: Arial, sans-serif;\n      background-color: #fbe8f0;\n      padding: 20px;\n      border-radius: 12px;\n      box-shadow: 0 4px 14px rgba(0, 0, 0, 0.12);\n      box-sizing: border-box;\n    }\n    .roze-silbenzaehler * {\n      box-sizing: border-box;\n    }\n    .roze-silbenzaehler .titelbalken {\n      background-color: #ff6699;\n      color: #ffffff;\n      font-weight: bold;\n      font-size: 1.3em;\n      text-align: center;\n      padding: 12px 20px;\n      border-radius: 8px;\n      width: 100%;\n      margin-bottom: 12px;\n    }\n    .roze-silbenzaehler .titelbalken .sternchen {\n      font-weight: normal;\n    }\n    .roze-silbenzaehler .beschreibung {\n      font-size: 0.95em;\n      color: #333;\n      line-height: 1.4em;\n      margin: 0 0 15px 0;\n    }\n    .roze-silbenzaehler .beschreibung strong {\n      display: block;\n      margin-bottom: 8px;\n    }\n    .roze-silbenzaehler .spalten {\n      display: flex;\n      gap: 20px;\n      flex-wrap: wrap;\n      align-items: stretch;\n    }\n    .roze-silbenzaehler .spalte-eingabe {\n      flex: 3;\n      min-width: 280px;\n      display: flex;\n      flex-direction: column;\n    }\n    .roze-silbenzaehler .spalte-ergebnis {\n      flex: 2;\n      min-width: 160px;\n      display: flex;\n      flex-direction: column;\n    }\n    .roze-silbenzaehler h3 {\n      color: #ff6699;\n      font-weight: bold;\n      margin-top: 0;\n      margin-bottom: 8px;\n    }\n    .roze-silbenzaehler textarea,\n    .roze-silbenzaehler .ausgabefeld {\n      width: 100%;\n      height: 350px;\n      max-height: 350px;\n      padding: 10px;\n      border: 1px solid #e0b8c8;\n      border-radius: 8px;\n      background-color: #fffafc;\n      font-family: Arial, sans-serif;\n      font-size: 1em;\n      color: #333;\n      overflow-y: auto;\n      white-space: pre-wrap;\n      word-break: break-word;\n      margin: 0;\n      line-height: normal;\n    }\n    .roze-silbenzaehler textarea {\n      resize: none;\n      margin-bottom: 15px;\n    }\n    .roze-silbenzaehler .knopfreihe {\n      display: flex;\n      gap: 10px;\n      margin-top: 12px;\n      margin-bottom: 0;\n    }\n    .roze-silbenzaehler button {\n      background-color: #ff6699;\n      color: #ffffff;\n      font-weight: bold;\n      border: 2px solid #ff6699;\n      border-radius: 8px;\n      padding: 10px 20px;\n      font-size: 0.95em;\n      cursor: pointer;\n      flex: 1;\n      outline: none;\n    }\n    .roze-silbenzaehler button:hover,\n    .roze-silbenzaehler button:focus,\n    .roze-silbenzaehler button:active {\n      background-color: #ffffff;\n      color: #ff6699;\n      border: 2px solid #ff6699;\n      outline: none;\n      box-shadow: none;\n    }\n    .roze-silbenzaehler .knopfreihe-klein button {\n      font-size: 0.85em;\n      padding: 10px 10px;\n      white-space: nowrap;\n    }\n    .roze-silbenzaehler .reset-zeile {\n      margin-top: 12px;\n    }\n    .roze-silbenzaehler .reset-zeile button {\n      width: 100%;\n    }\n    .roze-silbenzaehler .note {\n      font-size: 0.9em;\n      font-style: italic;\n      color: #ff6699;\n      margin-top: 8px;\n    }\n  <\/style>\n\n  <div class=\"roze-silbenzaehler\">\n\n    <div class=\"titelbalken\">RoZe-Pro\u00adgramm<span class=\"sternchen\">*<\/span>: Sil\u00adben\u00adz\u00e4h\u00adler (nicht nur) f\u00fcr Liedtexte<\/div>\n    <div class=\"beschreibung\">\n      <strong>Was macht die\u00adses klei\u00adne Hilfsprogramm:<\/strong> Z\u00e4hlt auto\u00adma\u00adtisch z. B. die Sil\u00adben eines Lied-Tex\u00adtes, wahl\u00adwei\u00adse als Anzei\u00adge pro Wort, als Sum\u00adme pro Zei\u00adle und wei\u00adte\u00adre M\u00f6g\u00adlich\u00adkei\u00adten. Text ein\u00adge\u00adben, Modus w\u00e4h\u00adlen, das Ergeb\u00adnis erscheint darunter.&nbsp;<\/div>\n\n    <div class=\"spalten\">\n      <div class=\"spalte-eingabe\">\n        <h3>Text-Eingabe<\/h3>\n        <textarea id=\"lyrics-sz\" placeholder=\"Hier deinen Text eingeben...\"><\/textarea>\n        <div class=\"knopfreihe knopfreihe-klein\">\n          <button onclick=\"szSetMode('lines')\">Silben\/Zeile<\/button>\n          <button onclick=\"szSetMode('strophen')\">Silben\/Strophe<\/button>\n          <button onclick=\"szSetMode('summe')\">Gesamt\/Silben<\/button>\n        <\/div>\n        <div class=\"knopfreihe knopfreihe-klein\">\n          <button onclick=\"szSetMode('abweichung')\">Auff\u00e4llige Zeilen<\/button>\n          <button onclick=\"szSetMode('words')\">Silbenanzahl\/Wort<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"spalte-ergebnis\">\n        <h3>Ergebnis<\/h3>\n        <div class=\"ausgabefeld\" id=\"result-sz\"><\/div>\n        <div class=\"reset-zeile\">\n          <button onclick=\"szCopyResult()\">Ergebnis kopieren<\/button>\n        <\/div>\n        <div class=\"reset-zeile\">\n          <button onclick=\"szResetAll()\">Zur\u00fccksetzen<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"note\">* RoZe = (Herr) Rosa von Zehn\u00adle (\u00far) \u2013 Ein kos\u00adten\u00adlo\u00adser HTML-Ser\u00advice vom 175er Verlag!<\/div>\n\n  <\/div>\n\n  <!-- Ein Service vom 175er Verlag -->\n\n  <script>\n  (function() {\n    let szMode = 'words'; \/\/ Standardmodus\n\n    function szEstimateSyllables(word) {\n        word = word.toLowerCase().replace(\/[^a-z\u00e4\u00f6\u00fc\u00df]\/g,''); \/\/ nur Buchstaben z\u00e4hlen\n        if(word.length <= 3) return 1;\n        let matches = word.match(\/[aeiou\u00e4\u00f6\u00fcy]{1,2}\/g);\n        return matches ? matches.length : 1;\n    }\n\n    \/\/ Alle Silben pro Wort + Gesamtsumme\n    function szCountSyllablesWords(text) {\n        let lines = text.split('\\n');\n        let output = \"\";\n        for(let line of lines) {\n            if (line.trim() === \"\") {\n                output += \"\\n\";\n                continue;\n            }\n            let words = line.trim().split(\/\\s+\/).filter(w => w.length > 0);\n            let syllsPerWord = words.map(w => szEstimateSyllables(w));\n            let lineResult = words.map((w,i) => `${w}(${syllsPerWord[i]})`).join(' ');\n            let total = syllsPerWord.reduce((a,b)=>a+b,0);\n            output += lineResult + ` = ${total}\\n`;\n        }\n        return output;\n    }\n\n    \/\/ Nur Silben pro Zeile\n    function szCountSyllablesLines(text) {\n        let lines = text.split('\\n');\n        let output = \"\";\n        for(let i=0;i<lines.length;i++){\n            if (lines[i].trim() === \"\") {\n                output += \"\\n\";\n                continue;\n            }\n            let words = lines[i].trim().split(\/\\s+\/).filter(w=>w.length>0);\n            let total = words.reduce((sum,w)=>sum+szEstimateSyllables(w),0);\n            output += `Zeile ${i+1}: ${total} Silben\\n`;\n        }\n        return output;\n    }\n\n    \/\/ Gesamtsumme aller Silben im Text\n    function szCountSyllablesSumme(text) {\n        let lines = text.split('\\n');\n        let total = 0;\n        lines.forEach(line => {\n            if (line.trim() === \"\") return;\n            let words = line.trim().split(\/\\s+\/).filter(w=>w.length>0);\n            total += words.reduce((sum,w)=>sum+szEstimateSyllables(w),0);\n        });\n        return `Gesamt: ${total} Silben`;\n    }\n\n    \/\/ Auff\u00e4llige Zeilen: starke Abweichung vom Durchschnitt farblich markieren\n    function szCountSyllablesAbweichung(text) {\n        let lines = text.split('\\n');\n        let counts = lines.map(line => {\n            if (line.trim() === \"\") return null;\n            let words = line.trim().split(\/\\s+\/).filter(w=>w.length>0);\n            return words.reduce((sum,w)=>sum+szEstimateSyllables(w),0);\n        });\n        let valide = counts.filter(c => c !== null);\n        let durchschnitt = valide.length ? valide.reduce((a,b)=>a+b,0)\/valide.length : 0;\n        let output = `Durchschnitt: ${durchschnitt.toFixed(1)} Silben pro Zeile\\n\\n`;\n        counts.forEach((c, i) => {\n            if (c === null) { output += \"\\n\"; return; }\n            let zeileText = `Zeile ${i+1}: ${c} Silben`;\n            if (Math.abs(c - durchschnitt) > 1) {\n                output += `<span style=\"color:#cc0033; font-weight:bold;\">${zeileText}<\/span>\\n`;\n            } else {\n                output += zeileText + \"\\n\";\n            }\n        });\n        return output;\n    }\n\n    \/\/ Silbensumme pro Strophe (Abs\u00e4tze, getrennt durch Leerzeilen)\n    function szCountSyllablesStrophen(text) {\n        let strophen = text.split(\/\\n\\s*\\n\/);\n        let output = \"\";\n        strophen.forEach((strophe, idx) => {\n            let lines = strophe.split('\\n').filter(l => l.trim() !== \"\");\n            let total = 0;\n            lines.forEach(line => {\n                let words = line.trim().split(\/\\s+\/).filter(w=>w.length>0);\n                total += words.reduce((sum,w)=>sum+szEstimateSyllables(w),0);\n            });\n            output += `Strophe ${idx+1}: ${total} Silben\\n`;\n        });\n        return output;\n    }\n\n    \/\/ Modus setzen\n    window.szSetMode = function(selectedMode){\n        szMode = selectedMode;\n        szUpdateOutput();\n    };\n\n    const szTextarea = document.getElementById('lyrics-sz');\n    szTextarea.addEventListener('input', () => {\n        szUpdateOutput();\n    });\n\n    function szUpdateOutput(){\n        let text = szTextarea.value;\n        let resultDiv = document.getElementById('result-sz');\n        if (szMode === 'abweichung') {\n            resultDiv.innerHTML = szCountSyllablesAbweichung(text);\n        } else {\n            let result;\n            switch(szMode) {\n                case 'lines':\n                    result = szCountSyllablesLines(text);\n                    break;\n                case 'summe':\n                    result = szCountSyllablesSumme(text);\n                    break;\n                case 'strophen':\n                    result = szCountSyllablesStrophen(text);\n                    break;\n                default:\n                    result = szCountSyllablesWords(text);\n            }\n            resultDiv.innerText = result;\n        }\n    }\n\n    \/\/ Initiales Update\n    szUpdateOutput();\n\n    \/\/ Ergebnis in die Zwischenablage kopieren\n    window.szCopyResult = function(){\n        const text = document.getElementById('result-sz').innerText;\n        if (!text) return;\n        navigator.clipboard.writeText(text)\n            .then(() => alert('Ergebnis wurde in die Zwischenablage kopiert!'))\n            .catch(err => alert('Fehler beim Kopieren: ' + err));\n    };\n\n    \/\/ Alles in den Urzustand zur\u00fcckversetzen\n    window.szResetAll = function(){\n        szTextarea.value = \"\";\n        document.getElementById('result-sz').innerText = \"\";\n        szMode = 'words';\n        if (document.activeElement && document.activeElement.blur) {\n            document.activeElement.blur();\n        }\n    };\n  })();\n  <\/script>\n<br><br><br>\n\n\n\n<!-- RoZe-Programm: Ein Service vom 175er Verlag -->\n<meta charset=\"UTF-8\">\n  <title>RoZe-Programm*: Zeilen sortieren und Duplikate finden<\/title>\n  <style>\n    .roze-zeilensortierer {\n      font-family: Arial, sans-serif;\n      background-color: #fbe8f0 !important;\n      padding: 20px !important;\n      border-radius: 12px !important;\n      box-shadow: 0 4px 14px rgba(0, 0, 0, 0.12) !important;\n      box-sizing: border-box;\n    }\n    .roze-zeilensortierer * {\n      box-sizing: border-box;\n    }\n    .roze-zeilensortierer .titelbalken {\n      background-color: #ff6699 !important;\n      color: #ffffff !important;\n      font-weight: bold;\n      font-size: 1.3em;\n      text-align: center;\n      padding: 12px 20px !important;\n      border-radius: 8px !important;\n      width: 100%;\n      margin-bottom: 12px;\n    }\n    .roze-zeilensortierer .titelbalken .sternchen {\n      font-weight: normal;\n    }\n    .roze-zeilensortierer .beschreibung {\n      font-size: 0.95em;\n      color: #333;\n      line-height: 1.4em;\n      margin: 0 0 15px 0;\n    }\n    .roze-zeilensortierer .beschreibung strong {\n      display: block;\n      margin-bottom: 8px;\n    }\n    .roze-zeilensortierer .spalten {\n      display: flex;\n      gap: 20px;\n      flex-wrap: wrap;\n      align-items: stretch;\n    }\n    .roze-zeilensortierer .spalte-eingabe,\n    .roze-zeilensortierer .spalte-ergebnis {\n      flex: 1;\n      min-width: 280px;\n      display: flex;\n      flex-direction: column;\n    }\n    .roze-zeilensortierer h3 {\n      color: #ff6699 !important;\n      font-weight: bold;\n      margin-top: 0;\n      margin-bottom: 8px;\n    }\n    .roze-zeilensortierer textarea,\n    .roze-zeilensortierer .ausgabefeld {\n      width: 100% !important;\n      height: 350px !important;\n      max-height: 350px !important;\n      padding: 10px !important;\n      border: 1px solid #e0b8c8 !important;\n      border-radius: 8px !important;\n      background-color: #fffafc !important;\n      font-family: Arial, sans-serif !important;\n      font-size: 1em !important;\n      color: #333 !important;\n      overflow-y: auto !important;\n      white-space: pre-wrap;\n      word-break: break-word;\n      margin: 0 !important;\n      line-height: normal !important;\n    }\n    .roze-zeilensortierer textarea {\n      resize: none;\n      margin-bottom: 10px !important;\n    }\n    .roze-zeilensortierer .zaehler {\n      margin: 8px 0;\n      font-weight: bold;\n      color: #333;\n    }\n    .roze-zeilensortierer .knopfreihe-gesamt {\n      display: flex;\n      gap: 10px;\n      margin-top: 15px;\n    }\n    .roze-zeilensortierer button {\n      background-color: #ff6699 !important;\n      color: #ffffff !important;\n      font-weight: bold;\n      border: 2px solid #ff6699 !important;\n      border-radius: 8px !important;\n      padding: 10px 14px !important;\n      font-size: 0.9em;\n      cursor: pointer;\n      flex: 1;\n      outline: none;\n      white-space: normal;\n      line-height: 1.3em;\n      text-align: center;\n    }\n    .roze-zeilensortierer button:hover,\n    .roze-zeilensortierer button:focus,\n    .roze-zeilensortierer button:active {\n      background-color: #ffffff !important;\n      color: #ff6699 !important;\n      border: 2px solid #ff6699 !important;\n      outline: none;\n      box-shadow: none;\n    }\n    .roze-zeilensortierer .duplicate {\n      color: #cc0033;\n      font-weight: bold;\n    }\n    .roze-zeilensortierer .note {\n      font-size: 0.9em;\n      font-style: italic;\n      color: #ff6699;\n      margin-top: 15px;\n    }\n  <\/style>\n\n  <div class=\"roze-zeilensortierer\">\n\n    <div class=\"titelbalken\">RoZe-Pro\u00adgramm<span class=\"sternchen\">*<\/span>: Zei\u00adlen sor\u00adtie\u00adren und Dupli\u00adka\u00adte finden<\/div>\n    <div class=\"beschreibung\">\n      <strong>Was macht die\u00adses klei\u00adne Hilfsprogramm:<\/strong> Sor\u00adtiert ein\u00adge\u00adge\u00adbe\u00adne Zei\u00adlen alpha\u00adbe\u00adtisch und zeigt Dublet\u00adten deut\u00adlich an, wahl\u00adwei\u00adse mar\u00adkiert oder direkt ent\u00adfernt. Text ein\u00adge\u00adben, gew\u00fcnsch\u00adte Funk\u00adti\u00adon w\u00e4h\u00adlen, das Ergeb\u00adnis erscheint rechts.<br> N\u00fctz\u00adlich etwa f\u00fcr ePost-Ver\u00adtei\u00adler (dop\u00adpel\u00adte oder mehr\u00adfach glei\u00adche vor\u00adkom\u00admen\u00adde ePost-Adres\u00adsen), Post\u00adan\u00adschrif\u00adten, Namens- und Teil\u00adneh\u00admer\u00adlis\u00adten oder Quel\u00adlen\u00adver\u00adzeich\u00adnis\u00adse, wenn meh\u00adre\u00adre Lis\u00adten zusam\u00admen\u00adge\u00adf\u00fchrt wer\u00adden sollen.&nbsp;<\/div>\n\n    <div class=\"spalten\">\n      <div class=\"spalte-eingabe\">\n        <h3>Text-Eingabe<\/h3>\n        <textarea id=\"rzs-inputText\" placeholder=\"Hier Zeilen eingeben...\"><\/textarea>\n        <div class=\"zaehler\">Ein\u00adga\u00adbe\u00adzei\u00adlen: <span id=\"rzs-inputCount\">0<\/span><\/div>\n      <\/div>\n      <div class=\"spalte-ergebnis\">\n        <h3>Ergebnis<\/h3>\n        <div class=\"ausgabefeld\" id=\"rzs-output\"><\/div>\n        <div class=\"zaehler\">Ergeb\u00adnis\u00adzei\u00adlen: <span id=\"rzs-outputCount\">0<\/span><\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"knopfreihe-gesamt\">\n      <button onclick=\"rzsSortLines()\">Duplikate<br>markieren<\/button>\n      <button onclick=\"rzsSortAndRemoveDuplicates()\">Duplikate<br>l\u00f6schen<\/button>\n      <button onclick=\"rzsCopyOutput()\">Ergebnis<br>kopieren<\/button>\n      <button onclick=\"rzsResetAll()\">Alles<br>l\u00f6schen<\/button>\n    <\/div>\n\n    <div class=\"note\">* RoZe = (Herr) Rosa von Zehn\u00adle (\u00far) \u2013 Ein kos\u00adten\u00adlo\u00adser HTML-Ser\u00advice vom 175er Verlag!<\/div>\n\n  <\/div>\n\n  <!-- Ein Service vom 175er Verlag -->\n\n  <script>\n  (function() {\n    let rzsOutputLines = [];\n\n    \/\/ Hilfsfunktion: Zeile bereinigen (Leerzeichen + , ; am Ende entfernen)\n    function rzsCleanLine(line) {\n      return line.trim()\n                 .replace(\/\\s*[;,]+$\/g, \"\")  \/\/ entfernt Leerzeichen + , ; am Ende\n                 .toLowerCase();             \/\/ optional: macht alles klein\n    }\n\n    function rzsUpdateCounts(inputLines, outputLinesCount) {\n      document.getElementById(\"rzs-inputCount\").textContent = inputLines.length;\n      document.getElementById(\"rzs-outputCount\").textContent = outputLinesCount;\n    }\n\n    window.rzsSortLines = function() {\n      let text = document.getElementById(\"rzs-inputText\").value;\n      let lines = text.split(\/\\r?\\n\/)\n                      .map(line => rzsCleanLine(line))\n                      .filter(line => line !== \"\");\n      lines.sort((a, b) => a.localeCompare(b, 'de', {sensitivity: 'base'}));\n\n      rzsOutputLines = [];\n      let outputHTML = \"\";\n      for (let i = 0; i < lines.length; i++) {\n        if (i > 0 && lines[i] === lines[i - 1]) {\n          outputHTML += `<span class=\"duplicate\">${lines[i]}  *Doppelt*<\/span><br>`;\n          rzsOutputLines.push(lines[i] + '  *Doppelt*');\n        } else {\n          outputHTML += lines[i] + \"<br>\";\n          rzsOutputLines.push(lines[i]);\n        }\n      }\n      document.getElementById(\"rzs-output\").innerHTML = outputHTML;\n      rzsUpdateCounts(lines, rzsOutputLines.length);\n    };\n\n    window.rzsSortAndRemoveDuplicates = function() {\n      let text = document.getElementById(\"rzs-inputText\").value;\n      let lines = text.split(\/\\r?\\n\/)\n                      .map(line => rzsCleanLine(line))\n                      .filter(line => line !== \"\");\n      lines.sort((a, b) => a.localeCompare(b, 'de', {sensitivity: 'base'}));\n\n      let unique = [];\n      lines.forEach(line => { if (!unique.includes(line)) unique.push(line); });\n\n      rzsOutputLines = [...unique];\n      document.getElementById(\"rzs-output\").textContent = unique.join(\"\\n\");\n      rzsUpdateCounts(lines, rzsOutputLines.length);\n    };\n\n    window.rzsCopyOutput = function() {\n      if (rzsOutputLines.length === 0) return;\n      const textToCopy = rzsOutputLines.join('\\n');\n      navigator.clipboard.writeText(textToCopy)\n        .then(() => alert('Ergebnis wurde in die Zwischenablage kopiert!'))\n        .catch(err => alert('Fehler beim Kopieren: ' + err));\n    };\n\n    window.rzsResetAll = function() {\n      document.getElementById(\"rzs-inputText\").value = \"\";\n      document.getElementById(\"rzs-output\").innerHTML = \"\";\n      document.getElementById(\"rzs-inputCount\").textContent = \"0\";\n      document.getElementById(\"rzs-outputCount\").textContent = \"0\";\n      rzsOutputLines = [];\n      if (document.activeElement && document.activeElement.blur) {\n        document.activeElement.blur();\n      }\n    };\n  })();\n  <\/script>\n<br><br><br>\n\n\n\n<!-- RoZe-Programm: Ein Service vom 175er Verlag -->\n<meta charset=\"UTF-8\">\n  <title>RoZe-Programm*: ePost-Adressen aus Text extrahieren<\/title>\n  <style>\n    .roze-epost-extrahieren {\n      font-family: Arial, sans-serif;\n      background-color: #fbe8f0 !important;\n      padding: 20px !important;\n      border-radius: 12px !important;\n      box-shadow: 0 4px 14px rgba(0, 0, 0, 0.12) !important;\n      box-sizing: border-box;\n    }\n    .roze-epost-extrahieren * {\n      box-sizing: border-box;\n    }\n    .roze-epost-extrahieren .titelbalken {\n      background-color: #ff6699 !important;\n      color: #ffffff !important;\n      font-weight: bold;\n      font-size: 1.3em;\n      text-align: center;\n      padding: 12px 20px !important;\n      border-radius: 8px !important;\n      width: 100%;\n      margin-bottom: 12px;\n    }\n    .roze-epost-extrahieren .titelbalken .sternchen {\n      font-weight: normal;\n    }\n    .roze-epost-extrahieren .beschreibung {\n      font-size: 0.95em;\n      color: #333;\n      line-height: 1.4em;\n      margin: 0 0 15px 0;\n    }\n    .roze-epost-extrahieren .beschreibung strong {\n      display: block;\n      margin-bottom: 8px;\n    }\n    .roze-epost-extrahieren .spalten {\n      display: flex;\n      gap: 20px;\n      flex-wrap: wrap;\n      align-items: stretch;\n    }\n    .roze-epost-extrahieren .spalte-eingabe,\n    .roze-epost-extrahieren .spalte-ergebnis {\n      flex: 1;\n      min-width: 280px;\n      display: flex;\n      flex-direction: column;\n    }\n    .roze-epost-extrahieren h3 {\n      color: #ff6699 !important;\n      font-weight: bold;\n      margin-top: 0;\n      margin-bottom: 8px;\n    }\n    .roze-epost-extrahieren textarea,\n    .roze-epost-extrahieren .ausgabefeld {\n      width: 100% !important;\n      height: 350px !important;\n      max-height: 350px !important;\n      padding: 10px !important;\n      border: 1px solid #e0b8c8 !important;\n      border-radius: 8px !important;\n      background-color: #fffafc !important;\n      font-family: Arial, sans-serif !important;\n      font-size: 1em !important;\n      color: #333 !important;\n      overflow-y: auto !important;\n      white-space: pre-wrap;\n      word-break: break-all;\n      margin: 0 !important;\n      line-height: normal !important;\n    }\n    .roze-epost-extrahieren textarea {\n      resize: none;\n      margin-bottom: 10px !important;\n    }\n    .roze-epost-extrahieren .zaehler {\n      margin: 8px 0;\n      font-weight: bold;\n      color: #333;\n    }\n    .roze-epost-extrahieren .knopfreihe-gesamt {\n      display: flex;\n      gap: 10px;\n      margin-top: 15px;\n    }\n    .roze-epost-extrahieren button {\n      background-color: #ff6699 !important;\n      color: #ffffff !important;\n      font-weight: bold;\n      border: 2px solid #ff6699 !important;\n      border-radius: 8px !important;\n      padding: 10px 14px !important;\n      font-size: 0.9em;\n      cursor: pointer;\n      flex: 1;\n      outline: none;\n      white-space: normal;\n      line-height: 1.3em;\n      text-align: center;\n    }\n    .roze-epost-extrahieren button:hover,\n    .roze-epost-extrahieren button:focus,\n    .roze-epost-extrahieren button:active {\n      background-color: #ffffff !important;\n      color: #ff6699 !important;\n      border: 2px solid #ff6699 !important;\n      outline: none;\n      box-shadow: none;\n    }\n    .roze-epost-extrahieren .note {\n      font-size: 0.9em;\n      font-style: italic;\n      color: #ff6699;\n      margin-top: 15px;\n    }\n  <\/style>\n\n  <div class=\"roze-epost-extrahieren\">\n\n    <div class=\"titelbalken\">RoZe-Pro\u00adgramm<span class=\"sternchen\">*<\/span>: ePost-Adres\u00adsen aus Text extrahieren<\/div>\n    <div class=\"beschreibung\">\n      <strong>Was macht die\u00adses klei\u00adne Hilfsprogramm:<\/strong> Fil\u00adtert auto\u00adma\u00adtisch alle ePost-Adres\u00adsen aus einem belie\u00adbig lan\u00adgen Text her\u00adaus, ent\u00adfernt Dublet\u00adten und sor\u00adtiert alpha\u00adbe\u00adtisch. Text ein\u00adge\u00adben, extra\u00adhie\u00adren, das Ergeb\u00adnis erscheint rechts.<br> N\u00fctz\u00adlich zum Bei\u00adspiel bei R\u00fcck\u00adl\u00e4u\u00adfern aus Gmail oder ande\u00adren ePost-Pro\u00adgram\u00admen: ein\u00adfach den kom\u00adplet\u00adten Text der unzu\u00adstell\u00adba\u00adren Nach\u00adrich\u00adten hier ein\u00adf\u00fc\u00adgen, statt jede Adres\u00adse ein\u00adzeln herauszusuchen.&nbsp;<\/div>\n\n    <div class=\"spalten\">\n      <div class=\"spalte-eingabe\">\n        <h3>Text-Eingabe<\/h3>\n        <textarea id=\"epx-inputText\" placeholder=\"Hier Text mit ePost-Adressen einf\u00fcgen ...\"><\/textarea>\n        <div class=\"zaehler\">Zei\u00adchen: <span id=\"epx-inputCount\">0<\/span><\/div>\n      <\/div>\n      <div class=\"spalte-ergebnis\">\n        <h3>Ergebnis<\/h3>\n        <div class=\"ausgabefeld\" id=\"epx-output\"><\/div>\n        <div class=\"zaehler\">ePost-Adres\u00adsen gesam\u00admelt: <span id=\"epx-outputCount\">0<\/span><\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"knopfreihe-gesamt\">\n      <button onclick=\"epxExtractEmails()\">ePost-Adressen<br>extrahieren<\/button>\n      <button onclick=\"epxCopyOutput()\">Ergebnis<br>kopieren<\/button>\n      <button onclick=\"epxAlleLoeschen()\">Alles<br>l\u00f6schen<\/button>\n    <\/div>\n\n    <div class=\"note\">* RoZe = (Herr) Rosa von Zehn\u00adle (\u00far) \u2013 Ein kos\u00adten\u00adlo\u00adser HTML-Ser\u00advice vom 175er Verlag!<\/div>\n\n  <\/div>\n\n  <!-- Ein Service vom 175er Verlag -->\n\n  <script>\n  (function() {\n    let epxOutputLines = [];\n\n    const epxInput = document.getElementById(\"epx-inputText\");\n    epxInput.addEventListener(\"input\", function() {\n      document.getElementById(\"epx-inputCount\").textContent = this.value.length;\n    });\n\n    window.epxExtractEmails = function() {\n      let text = epxInput.value;\n\n      \/\/ Regul\u00e4rer Ausdruck zum Erkennen von ePost-Adressen\n      let regex = \/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}\/g;\n      let found = text.match(regex) || [];\n\n      \/\/ Alle klein schreiben, f\u00fcr einheitlichen Vergleich\n      let cleaned = found.map(mail => mail.trim().toLowerCase());\n\n      \/\/ Dubletten entfernen\n      let unique = [];\n      cleaned.forEach(mail => { if (!unique.includes(mail)) unique.push(mail); });\n\n      \/\/ Alphabetisch sortieren\n      unique.sort((a, b) => a.localeCompare(b, 'de', {sensitivity: 'base'}));\n\n      epxOutputLines = unique;\n      document.getElementById(\"epx-output\").textContent = unique.join(\"\\n\");\n      document.getElementById(\"epx-outputCount\").textContent = unique.length;\n      document.getElementById(\"epx-inputCount\").textContent = text.length;\n    };\n\n    window.epxCopyOutput = function() {\n      if (epxOutputLines.length === 0) return;\n      const textToCopy = epxOutputLines.join('\\n');\n      navigator.clipboard.writeText(textToCopy)\n        .then(() => alert('Ergebnis wurde in die Zwischenablage kopiert!'))\n        .catch(err => alert('Fehler beim Kopieren: ' + err));\n    };\n\n    window.epxAlleLoeschen = function() {\n      epxInput.value = \"\";\n      document.getElementById(\"epx-output\").textContent = \"\";\n      document.getElementById(\"epx-inputCount\").textContent = \"0\";\n      document.getElementById(\"epx-outputCount\").textContent = \"0\";\n      epxOutputLines = [];\n      if (document.activeElement && document.activeElement.blur) {\n        document.activeElement.blur();\n      }\n    };\n  })();\n  <\/script>\n<br><br><br>\n\n\n\n<!-- RoZe-Programm: Ein HTML-Service vom 175er Verlag -->\n<meta charset=\"UTF-8\">\n<title>RoZe-Programm*: ePost-Adressen bereinigen<\/title>\n<style>\n  .roze-epost-bereinigen {\n    font-family: Arial, sans-serif;\n    background-color: #fbe8f0 !important;\n    padding: 20px !important;\n    border-radius: 12px !important;\n    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.12) !important;\n    box-sizing: border-box;\n  }\n  .roze-epost-bereinigen * {\n    box-sizing: border-box;\n  }\n  .roze-epost-bereinigen .titelbalken {\n    background-color: #ff6699 !important;\n    color: #ffffff !important;\n    font-weight: bold;\n    font-size: 1.3em;\n    text-align: center;\n    padding: 12px 20px !important;\n    border-radius: 8px !important;\n    width: 100%;\n    margin-bottom: 12px;\n  }\n  .roze-epost-bereinigen .titelbalken .sternchen {\n    font-weight: normal;\n  }\n  .roze-epost-bereinigen .beschreibung {\n    font-size: 0.95em;\n    color: #333;\n    line-height: 1.4em;\n    margin: 0 0 15px 0;\n  }\n  .roze-epost-bereinigen .beschreibung strong {\n    display: block;\n    margin-bottom: 8px;\n  }\n  .roze-epost-bereinigen .spalten {\n    display: flex;\n    gap: 16px;\n    flex-wrap: wrap;\n    align-items: stretch;\n  }\n  .roze-epost-bereinigen .spalte {\n    flex: 1;\n    min-width: 240px;\n    display: flex;\n    flex-direction: column;\n  }\n  .roze-epost-bereinigen h3 {\n    color: #ff6699 !important;\n    font-weight: bold;\n    margin-top: 0;\n    margin-bottom: 8px;\n  }\n  .roze-epost-bereinigen textarea {\n    width: 100% !important;\n    height: 350px !important;\n    max-height: 350px !important;\n    padding: 10px !important;\n    border: 1px solid #e0b8c8 !important;\n    border-radius: 8px !important;\n    background-color: #fffafc !important;\n    font-family: Arial, sans-serif !important;\n    font-size: 0.9em !important;\n    color: #333 !important;\n    overflow-y: auto !important;\n    resize: none;\n    margin: 0 0 8px 0 !important;\n    line-height: normal !important;\n    box-sizing: border-box !important;\n  }\n  .roze-epost-bereinigen .zaehler {\n    margin: 4px 0 0 0;\n    font-weight: bold;\n    color: #333;\n  }\n  .roze-epost-bereinigen .knopfreihe-gesamt {\n    display: flex;\n    gap: 10px;\n    margin-top: 15px;\n  }\n  .roze-epost-bereinigen button {\n    background-color: #ff6699 !important;\n    color: #ffffff !important;\n    font-weight: bold;\n    border: 2px solid #ff6699 !important;\n    border-radius: 8px !important;\n    padding: 10px 14px !important;\n    font-size: 0.9em;\n    cursor: pointer;\n    flex: 1;\n    outline: none;\n    white-space: normal;\n    line-height: 1.3em;\n    text-align: center;\n  }\n  .roze-epost-bereinigen button:hover,\n  .roze-epost-bereinigen button:focus,\n  .roze-epost-bereinigen button:active {\n    background-color: #ffffff !important;\n    color: #ff6699 !important;\n    border: 2px solid #ff6699 !important;\n    outline: none;\n    box-shadow: none;\n  }\n  .roze-epost-bereinigen .note {\n    font-size: 0.9em;\n    font-style: italic;\n    color: #ff6699;\n    margin-top: 15px;\n  }\n<\/style>\n\n<div class=\"roze-epost-bereinigen\">\n\n  <div class=\"titelbalken\">RoZe-Pro\u00adgramm<span class=\"sternchen\">*<\/span>: ePost-Adres\u00adsen bereinigen<\/div>\n  <div class=\"beschreibung\">\n    <strong>Was macht die\u00adses klei\u00adne Hilfsprogramm:<\/strong> Ver\u00adgleicht eine aktu\u00adel\u00adle Lis\u00adte von ePost-Adres\u00adsen mit einer Lis\u00adte zu l\u00f6schen\u00adder Adres\u00adsen und ent\u00adfernt alle \u00dcber\u00adein\u00adstim\u00admun\u00adgen auto\u00adma\u00adtisch, ganz ohne teu\u00adre Soft\u00adware, rein mit kos\u00adten\u00adlo\u00adsem&nbsp;HTML.<br> N\u00fctz\u00adlich zum Bei\u00adspiel, wenn R\u00fcck\u00adl\u00e4u\u00adfer oder abge\u00admel\u00adde\u00adte Adres\u00adsen aus einem bestehen\u00adden Ver\u00adtei\u00adler ent\u00adfernt wer\u00adden sollen.&nbsp;<\/div>\n\n  <div class=\"spalten\">\n    <div class=\"spalte\">\n      <h3>Aktuelle Liste<\/h3>\n      <textarea id=\"epb-listeAktuell\" placeholder=\"Hier alle aktuellen ePost-Adressen einf\u00fcgen ...\"><\/textarea>\n      <div class=\"zaehler\">Adres\u00adsen: <span id=\"epb-zahlAktuell\">0<\/span><\/div>\n    <\/div>\n    <div class=\"spalte\">\n      <h3>Zu l\u00f6schende Adressen<\/h3>\n      <textarea id=\"epb-listeLoeschen\" placeholder=\"Hier die zu l\u00f6schenden ePost-Adressen einf\u00fcgen ...\"><\/textarea>\n      <div class=\"zaehler\">Adres\u00adsen: <span id=\"epb-zahlLoeschen\">0<\/span><\/div>\n    <\/div>\n    <div class=\"spalte\">\n      <h3>Bereinigte Liste<\/h3>\n      <textarea id=\"epb-ergebnis\" readonly placeholder=\"Hier erscheint die bereinigte Liste ...\"><\/textarea>\n      <div class=\"zaehler\">Ver\u00adblei\u00adbend: <span id=\"epb-zahlErgebnis\">0<\/span> | Ent\u00adfernt: <span id=\"epb-zahlEntfernt\">0<\/span><\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"knopfreihe-gesamt\">\n    <button onclick=\"epbBereinigen()\">Liste<br>bereinigen<\/button>\n    <button onclick=\"epbKopieren()\">Ergebnis<br>kopieren<\/button>\n    <button onclick=\"epbAllesLoeschen()\">Alles<br>l\u00f6schen<\/button>\n  <\/div>\n\n  <div class=\"note\">* RoZe = (Herr) Rosa von Zehn\u00adle (\u00far) \u2013 Ein kos\u00adten\u00adlo\u00adser HTML-Ser\u00advice vom 175er Verlag!<\/div>\n\n<\/div>\n\n<!-- Ein Service vom 175er Verlag -->\n\n<script>\n(function() {\n  function epbAdressen(text) {\n    return text.split(\/[\\r\\n;,\\s]+\/)\n      .map(a => a.trim().toLowerCase().replace(\/^[\"'<]|[>\"',;]+$\/g, \"\"))\n      .filter(a => a.includes(\"@\") && a.includes(\".\"));\n  }\n\n  function epbZaehlen() {\n    document.getElementById(\"epb-zahlAktuell\").textContent =\n      epbAdressen(document.getElementById(\"epb-listeAktuell\").value).length;\n    document.getElementById(\"epb-zahlLoeschen\").textContent =\n      epbAdressen(document.getElementById(\"epb-listeLoeschen\").value).length;\n  }\n\n  document.getElementById(\"epb-listeAktuell\").addEventListener(\"input\", epbZaehlen);\n  document.getElementById(\"epb-listeLoeschen\").addEventListener(\"input\", epbZaehlen);\n\n  window.epbBereinigen = function() {\n    const aktuell = epbAdressen(document.getElementById(\"epb-listeAktuell\").value);\n    const loeschen = new Set(epbAdressen(document.getElementById(\"epb-listeLoeschen\").value));\n    const ergebnis = [...new Set(aktuell)].filter(a => !loeschen.has(a)).sort();\n    document.getElementById(\"epb-ergebnis\").value = ergebnis.join(\"\\n\");\n    document.getElementById(\"epb-zahlErgebnis\").textContent = ergebnis.length;\n    document.getElementById(\"epb-zahlEntfernt\").textContent = aktuell.length - ergebnis.length;\n  };\n\n  window.epbKopieren = function() {\n    const text = document.getElementById(\"epb-ergebnis\").value;\n    if (!text) return;\n    navigator.clipboard.writeText(text)\n      .then(() => alert(\"Ergebnis wurde in die Zwischenablage kopiert!\"))\n      .catch(err => alert(\"Fehler beim Kopieren: \" + err));\n  };\n\n  window.epbAllesLoeschen = function() {\n    document.getElementById(\"epb-listeAktuell\").value = \"\";\n    document.getElementById(\"epb-listeLoeschen\").value = \"\";\n    document.getElementById(\"epb-ergebnis\").value = \"\";\n    document.getElementById(\"epb-zahlAktuell\").textContent = \"0\";\n    document.getElementById(\"epb-zahlLoeschen\").textContent = \"0\";\n    document.getElementById(\"epb-zahlErgebnis\").textContent = \"0\";\n    document.getElementById(\"epb-zahlEntfernt\").textContent = \"0\";\n    if (document.activeElement && document.activeElement.blur) {\n      document.activeElement.blur();\n    }\n  };\n})();\n<\/script>\n<br><br><br>\n\n\n\n<!-- RoZe-Programm: Ein HTML-Service vom 175er Verlag -->\n<meta charset=\"UTF-8\">\n<title>RoZe-Programm*: ePost-Adressen nach Suchwort herausfischen<\/title>\n<style>\n  .roze-woertersuche {\n    font-family: Arial, sans-serif;\n    background-color: #fbe8f0 !important;\n    padding: 20px !important;\n    border-radius: 12px !important;\n    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.12) !important;\n    box-sizing: border-box;\n  }\n  .roze-woertersuche * {\n    box-sizing: border-box;\n  }\n  .roze-woertersuche .titelbalken {\n    background-color: #ff6699 !important;\n    color: #ffffff !important;\n    font-weight: bold;\n    font-size: 1.3em;\n    text-align: center;\n    padding: 12px 20px !important;\n    border-radius: 8px !important;\n    width: 100%;\n    margin-bottom: 12px;\n  }\n  .roze-woertersuche .titelbalken .sternchen {\n    font-weight: normal;\n  }\n  .roze-woertersuche .beschreibung {\n    font-size: 0.95em;\n    color: #333;\n    line-height: 1.4em;\n    margin: 0 0 15px 0;\n  }\n  .roze-woertersuche .beschreibung strong {\n    display: block;\n    margin-bottom: 8px;\n  }\n  .roze-woertersuche .hinweis-technik {\n    font-size: 0.88em;\n    font-style: italic;\n    color: #7a4a5c;\n    line-height: 1.4em;\n    margin: 0 0 15px 0;\n    background-color: #fff0f5;\n    border: 1px solid #e0b8c8;\n    border-radius: 8px;\n    padding: 10px 12px;\n  }\n  .roze-woertersuche .spalten {\n    display: flex;\n    gap: 16px;\n    flex-wrap: wrap;\n    align-items: stretch;\n  }\n  .roze-woertersuche .spalte {\n    flex: 1;\n    min-width: 240px;\n    display: flex;\n    flex-direction: column;\n  }\n  .roze-woertersuche h3 {\n    color: #ff6699 !important;\n    font-weight: bold;\n    margin-top: 0;\n    margin-bottom: 8px;\n    text-align: center;\n  }\n  .roze-woertersuche .ablagefeld {\n    width: 100%;\n    flex: 1;\n    min-height: 190px;\n    padding: 10px !important;\n    border: 2px dashed #e0b8c8 !important;\n    border-radius: 8px !important;\n    background-color: #fffafc !important;\n    color: #999;\n    font-size: 0.9em;\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    overflow-y: auto;\n    margin: 0 0 8px 0;\n  }\n  .roze-woertersuche .ablagefeld.ueber-dem-feld {\n    background-color: #fdeaf1 !important;\n    border-color: #ff6699 !important;\n    color: #ff6699;\n  }\n  .roze-woertersuche .ablagefeld ul {\n    list-style: none;\n    padding: 0;\n    margin: 8px 0 0 0;\n    width: 100%;\n    text-align: left;\n    font-size: 0.95em;\n    color: #333;\n  }\n  .roze-woertersuche .ablagefeld li {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding: 3px 6px;\n    border-bottom: 1px solid #f0d0dc;\n  }\n  .roze-woertersuche .ablagefeld li .entfernen-datei {\n    color: #ff6699;\n    font-weight: bold;\n    cursor: pointer;\n    padding: 0 4px;\n  }\n  .roze-woertersuche input[type=\"text\"] {\n    width: 100% !important;\n    padding: 10px !important;\n    border: 1px solid #e0b8c8 !important;\n    border-radius: 8px !important;\n    background-color: #fffafc !important;\n    font-family: Arial, sans-serif !important;\n    font-size: 0.95em !important;\n    color: #333 !important;\n    margin: 0 0 10px 0 !important;\n  }\n  .roze-woertersuche textarea {\n    width: 100% !important;\n    flex: 1;\n    min-height: 190px;\n    padding: 10px !important;\n    border: 1px solid #e0b8c8 !important;\n    border-radius: 8px !important;\n    background-color: #fffafc !important;\n    font-family: Arial, sans-serif !important;\n    font-size: 0.9em !important;\n    color: #333 !important;\n    overflow-y: auto !important;\n    resize: none;\n    margin: 0 0 8px 0 !important;\n    line-height: normal !important;\n  }\n  .roze-woertersuche .zaehler {\n    margin: 4px 0 0 0;\n    font-weight: bold;\n    color: #333;\n    text-align: center;\n  }\n  .roze-woertersuche .knopfreihe-optionen {\n    display: flex;\n    gap: 8px;\n    margin-bottom: 10px;\n  }\n  .roze-woertersuche .knopfreihe-optionen button {\n    flex: 1;\n    font-size: 0.85em;\n    padding: 8px 6px !important;\n    white-space: nowrap;\n  }\n  .roze-woertersuche .knopfreihe-optionen button.gewaehlt {\n    background-color: #ffffff !important;\n    color: #ff6699 !important;\n    border: 2px solid #ff6699 !important;\n  }\n  .roze-woertersuche .ws-suchen-knopf {\n    flex: none !important;\n    width: 100%;\n    padding: 8px 14px !important;\n  }\n  .roze-woertersuche button {\n    background-color: #ff6699 !important;\n    color: #ffffff !important;\n    font-weight: bold;\n    border: 2px solid #ff6699 !important;\n    border-radius: 8px !important;\n    padding: 10px 14px !important;\n    font-size: 0.9em;\n    cursor: pointer;\n    flex: 1;\n    outline: none;\n    white-space: normal;\n    line-height: 1.3em;\n    text-align: center;\n  }\n  .roze-woertersuche button:hover,\n  .roze-woertersuche button:focus,\n  .roze-woertersuche button:active {\n    background-color: #ffffff !important;\n    color: #ff6699 !important;\n    border: 2px solid #ff6699 !important;\n    outline: none;\n    box-shadow: none;\n  }\n  .roze-woertersuche .ws-kopieren-knopf {\n    flex: none !important;\n    padding: 8px 14px !important;\n    margin-top: 10px;\n  }\n  .roze-woertersuche .ws-zuruecksetzen-knopf {\n    flex: none !important;\n    padding: 8px 14px !important;\n    margin-top: 10px;\n  }\n  .roze-woertersuche .bereinigte-dateien {\n    margin-top: 15px;\n  }\n  .roze-woertersuche .bereinigte-dateien h3 {\n    margin-bottom: 6px;\n  }\n  .roze-woertersuche .datei-download-zeile {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    background-color: #fffafc;\n    border: 1px solid #e0b8c8;\n    border-radius: 8px;\n    padding: 8px 10px;\n    margin-bottom: 6px;\n    font-size: 0.9em;\n    color: #333;\n  }\n  .roze-woertersuche .datei-download-zeile span {\n    flex: 1;\n    word-break: break-all;\n  }\n  .roze-woertersuche .datei-download-zeile button {\n    flex: none;\n    padding: 6px 12px !important;\n    font-size: 0.85em;\n  }\n  .roze-woertersuche .note {\n    font-size: 0.9em;\n    font-style: italic;\n    color: #ff6699;\n    margin-top: 15px;\n  }\n<\/style>\n\n<div class=\"roze-woertersuche\">\n\n  <div class=\"titelbalken\">RoZe-Pro\u00adgramm<span class=\"sternchen\">*<\/span>: ePost-Adres\u00adsen nach Such\u00adwort herausfischen<\/div>\n  <div class=\"beschreibung\">\n    <strong>Was macht die\u00adses klei\u00adne Hilfsprogramm:<\/strong> Durch\u00adsucht meh\u00adre\u00adre hoch\u00adge\u00adla\u00adde\u00adne Datei\u00aden gleich\u00adzei\u00adtig nach einem von Dir ein\u00adge\u00adge\u00adbe\u00adnen Such\u00adwort. Aus jeder Zei\u00adle, in der das Such\u00adwort vor\u00adkommt, wird die ent\u00adhal\u00adte\u00adne ePost-Adres\u00adse her\u00adaus\u00adge\u00adfischt und in einer eige\u00adnen Ergeb\u00adnis\u00adlis\u00adte gesam\u00admelt. F\u00fcr jede durch\u00adsuch\u00adte Datei wird zus\u00e4tz\u00adlich eine berei\u00adnig\u00adte Fas\u00adsung zum Her\u00adun\u00adter\u00adla\u00adden bereit\u00adge\u00adstellt, aus der die gefun\u00adde\u00adnen Zei\u00adlen bereits ent\u00adfernt&nbsp;sind.&nbsp;<br><br>\n    <strong>Wich\u00adtig: die ePost-Adres\u00adsen m\u00fcs\u00adsen in jeder hoch\u00adge\u00adla\u00adde\u00adnen Datei ein\u00adzeln, eine je Zei\u00adle, unter\u00adein\u00adan\u00adder ste\u00adhen, damit die\u00adses Werk\u00adzeug zuver\u00adl\u00e4s\u00adsig arbei\u00adtet. Wer sei\u00adne Lis\u00adten noch nicht so auf\u00adbe\u00adrei\u00adtet hat, kann daf\u00fcr mein ande\u00adres klei\u00adnes Pro\u00adgramm nut\u00adzen: RoZe-Pro\u00adgramm*: ePost-Adres\u00adsen aus Text extrahieren.<\/strong>\n  <\/div>\n  <div class=\"hinweis-technik\">Ein wich\u00adti\u00adger Hin\u00adweis zur Arbeits\u00adwei\u00adse: die\u00adses Werk\u00adzeug l\u00e4uft allein in Dei\u00adnem Brow\u00adser und kann aus tech\u00adni\u00adschen Gr\u00fcn\u00adden kei\u00adne Datei auf Dei\u00adner Fest\u00adplat\u00adte selb\u00adst\u00e4n\u00addig ver\u00ad\u00e4n\u00addern oder l\u00f6schen. Es liest die hoch\u00adge\u00adla\u00adde\u00adnen Datei\u00aden nur ein, durch\u00adsucht sie und bie\u00adtet Dir je Datei eine berei\u00adnig\u00adte Fas\u00adsung zum Her\u00adun\u00adter\u00adla\u00adden an. Die alte Datei auf Dei\u00adnem Rech\u00adner mu\u00dft Du danach von Hand mit der her\u00adun\u00adter\u00adge\u00adla\u00adde\u00adnen berei\u00adnig\u00adten Fas\u00adsung ersetzen.&nbsp;<\/div>\n\n  <div class=\"spalten\">\n    <div class=\"spalte\">\n      <h3>Dateien hierher<\/h3>\n      <div class=\"ablagefeld\" id=\"ws-ablage\">\n        <div id=\"ws-ablage-text\">Datei\u00aden hier hin\u00adein\u00adzie\u00adhen oder ankli\u00adcken, um sie aus\u00adzu\u00adw\u00e4h\u00adlen (meh\u00adre\u00adre Datei\u00aden gleich\u00adzei\u00adtig m\u00f6glich)<\/div>\n        <ul id=\"ws-dateiliste\"><\/ul>\n      <\/div>\n      <input type=\"file\" id=\"ws-dateiauswahl\" multiple style=\"display:none;\">\n      <div class=\"zaehler\">Datei\u00aden gela\u00adden: <span id=\"ws-zahlDateien\">0<\/span><\/div>\n    <\/div>\n    <div class=\"spalte\">\n      <h3>Suchwort<\/h3>\n      <input type=\"text\" id=\"ws-suchwort\" placeholder=\"Suchwort eingeben, zum Beispiel Garten\">\n      <div class=\"knopfreihe-optionen\">\n        <button id=\"ws-modus-ganz\" class=\"gewaehlt\" onclick=\"wsSetModus('ganz')\">Ganzes Wort<\/button>\n        <button id=\"ws-modus-teil\" onclick=\"wsSetModus('teil')\">Wortteil<\/button>\n      <\/div>\n      <button class=\"ws-suchen-knopf\" onclick=\"wsDurchsuchen()\">Dateien durchsuchen<\/button>\n      <button class=\"ws-kopieren-knopf\" onclick=\"wsKopieren()\">Ergebnis kopieren<\/button>\n      <button class=\"ws-zuruecksetzen-knopf\" onclick=\"wsAllesLoeschen()\">Alles zur\u00fccksetzen<\/button>\n    <\/div>\n    <div class=\"spalte\">\n      <h3>Gefundene Adressen<\/h3>\n      <textarea id=\"ws-ergebnis\" readonly placeholder=\"Hier erscheinen die gefundenen ePost-Adressen ...\"><\/textarea>\n      <div class=\"zaehler\">Gefun\u00adde\u00adne Adres\u00adsen: <span id=\"ws-zahlGefunden\">0<\/span><\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"bereinigte-dateien\" id=\"ws-bereinigte-bereich\" style=\"display:none;\">\n    <h3>Bereinigte Dateien zum Herunterladen<\/h3>\n    <div id=\"ws-bereinigte-liste\"><\/div>\n  <\/div>\n\n  <div class=\"note\">* RoZe = (Herr) Rosa von Zehn\u00adle (\u00far) \u2013 Ein kos\u00adten\u00adlo\u00adser HTML-Ser\u00advice vom 175er Verlag!<\/div>\n\n<\/div>\n\n<!-- Ein Service vom 175er Verlag -->\n\n<script>\n(function() {\n  let wsDateien = []; \/\/ { name, inhalt }\n  let wsModus = 'ganz';\n  const wsEmailMuster = \/[a-zA-Z0-9_.+\\-]+@[a-zA-Z0-9\\-]+\\.[a-zA-Z0-9\\-.]+\/g;\n\n  const wsAblage = document.getElementById('ws-ablage');\n  const wsAuswahl = document.getElementById('ws-dateiauswahl');\n\n  function wsEscapeRegex(text) {\n    return text.replace(\/[.*+?^${}()|[\\]\\\\]\/g, '\\\\$&');\n  }\n\n  function wsTreffer(zeile, suchwort) {\n    if (!suchwort) return false;\n    if (wsModus === 'ganz') {\n      const muster = new RegExp('\\\\b' + wsEscapeRegex(suchwort) + '\\\\b', 'i');\n      return muster.test(zeile);\n    }\n    return zeile.toLowerCase().includes(suchwort.toLowerCase());\n  }\n\n  function wsDateiHinzufuegen(datei) {\n    if (wsDateien.some(d => d.name === datei.name)) return;\n    const eintrag = { name: datei.name, inhalt: null };\n    wsDateien.push(eintrag);\n    const reader = new FileReader();\n    reader.onload = e => {\n      eintrag.inhalt = e.target.result;\n      wsListeAktualisieren();\n    };\n    reader.readAsText(datei, 'UTF-8');\n    wsListeAktualisieren();\n  }\n\n  function wsListeAktualisieren() {\n    const liste = document.getElementById('ws-dateiliste');\n    liste.innerHTML = '';\n    wsDateien.forEach((d, i) => {\n      const li = document.createElement('li');\n      const name = document.createElement('span');\n      name.textContent = d.name;\n      const entfernen = document.createElement('span');\n      entfernen.className = 'entfernen-datei';\n      entfernen.textContent = '\u2715';\n      entfernen.onclick = (ev) => { ev.stopPropagation(); wsDateien.splice(i, 1); wsListeAktualisieren(); };\n      li.appendChild(name);\n      li.appendChild(entfernen);\n      liste.appendChild(li);\n    });\n    document.getElementById('ws-ablage-text').style.display = wsDateien.length ? 'none' : 'block';\n    document.getElementById('ws-zahlDateien').textContent = wsDateien.length;\n  }\n\n  wsAblage.addEventListener('click', () => wsAuswahl.click());\n  wsAblage.addEventListener('dragover', e => { e.preventDefault(); wsAblage.classList.add('ueber-dem-feld'); });\n  wsAblage.addEventListener('dragleave', () => wsAblage.classList.remove('ueber-dem-feld'));\n  wsAblage.addEventListener('drop', e => {\n    e.preventDefault();\n    wsAblage.classList.remove('ueber-dem-feld');\n    [...e.dataTransfer.files].forEach(wsDateiHinzufuegen);\n  });\n  wsAuswahl.addEventListener('change', e => {\n    [...e.target.files].forEach(wsDateiHinzufuegen);\n    wsAuswahl.value = '';\n  });\n\n  window.wsSetModus = function(m) {\n    wsModus = m;\n    document.getElementById('ws-modus-ganz').classList.toggle('gewaehlt', m === 'ganz');\n    document.getElementById('ws-modus-teil').classList.toggle('gewaehlt', m === 'teil');\n  };\n\n  window.wsDurchsuchen = function() {\n    const suchwort = document.getElementById('ws-suchwort').value.trim();\n    if (!suchwort) { alert('Bitte zuerst ein Suchwort eingeben.'); return; }\n    if (!wsDateien.length) { alert('Bitte zuerst mindestens eine Datei hineinschieben.'); return; }\n    if (wsDateien.some(d => d.inhalt === null)) { alert('Die Dateien werden noch eingelesen, bitte einen Augenblick warten und erneut versuchen.'); return; }\n\n    const gefundeneAdressen = new Set();\n    const bereinigteListe = document.getElementById('ws-bereinigte-liste');\n    bereinigteListe.innerHTML = '';\n    let anzahlMitTreffer = 0;\n\n    wsDateien.forEach(datei => {\n      const zeilen = datei.inhalt.split(\/\\r?\\n\/);\n      const behalteneZeilen = [];\n      let dateiHatTreffer = false;\n\n      zeilen.forEach(zeile => {\n        if (wsTreffer(zeile, suchwort)) {\n          dateiHatTreffer = true;\n          const adressen = zeile.match(wsEmailMuster);\n          if (adressen) adressen.forEach(a => gefundeneAdressen.add(a.toLowerCase()));\n        } else {\n          behalteneZeilen.push(zeile);\n        }\n      });\n\n      if (dateiHatTreffer) {\n        anzahlMitTreffer++;\n        const sortierteZeilen = behalteneZeilen\n          .filter(z => z.trim() !== '')\n          .sort((a, b) => a.localeCompare(b, 'de', { sensitivity: 'base' }));\n        const bereinigterInhalt = sortierteZeilen.join('\\n');\n        const zeile = document.createElement('div');\n        zeile.className = 'datei-download-zeile';\n        const name = document.createElement('span');\n        name.textContent = datei.name;\n        const knopf = document.createElement('button');\n        knopf.textContent = 'Bereinigte Fassung herunterladen';\n        knopf.onclick = () => wsHerunterladen('bereinigt_' + datei.name, bereinigterInhalt);\n        zeile.appendChild(name);\n        zeile.appendChild(knopf);\n        bereinigteListe.appendChild(zeile);\n      }\n    });\n\n    const ergebnisText = [...gefundeneAdressen].sort();\n    document.getElementById('ws-ergebnis').value = ergebnisText.join('\\n');\n    document.getElementById('ws-zahlGefunden').textContent = ergebnisText.length;\n    document.getElementById('ws-bereinigte-bereich').style.display = anzahlMitTreffer ? 'block' : 'none';\n\n    if (!ergebnisText.length) {\n      alert('Zu diesem Suchwort wurden in den hochgeladenen Dateien keine ePost-Adressen gefunden.');\n    }\n  };\n\n  function wsHerunterladen(dateiname, inhalt) {\n    const blob = new Blob([inhalt], { type: 'text\/plain;charset=utf-8' });\n    const url = URL.createObjectURL(blob);\n    const a = document.createElement('a');\n    a.href = url;\n    a.download = dateiname;\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n    URL.revokeObjectURL(url);\n  }\n\n  window.wsKopieren = function() {\n    const text = document.getElementById('ws-ergebnis').value;\n    if (!text) return;\n    navigator.clipboard.writeText(text)\n      .then(() => alert('Ergebnis wurde in die Zwischenablage kopiert!'))\n      .catch(err => alert('Fehler beim Kopieren: ' + err));\n  };\n\n  window.wsAllesLoeschen = function() {\n    wsDateien = [];\n    document.getElementById('ws-suchwort').value = '';\n    document.getElementById('ws-ergebnis').value = '';\n    document.getElementById('ws-zahlGefunden').textContent = '0';\n    document.getElementById('ws-zahlDateien').textContent = '0';\n    document.getElementById('ws-bereinigte-liste').innerHTML = '';\n    document.getElementById('ws-bereinigte-bereich').style.display = 'none';\n    wsSetModus('ganz');\n    wsListeAktualisieren();\n    if (document.activeElement && document.activeElement.blur) {\n      document.activeElement.blur();\n    }\n  };\n})();\n<\/script>\n<br><br><br>\n\n\n\n<!-- RoZe-Programm: Ein HTML-Service vom 175er Verlag -->\n<meta charset=\"UTF-8\">\n<title>RoZe-Programm*: Ordnerstruktur als Baum darstellen<\/title>\n<style>\n  .roze-baum {\n    font-family: Arial, sans-serif !important;\n    background-color: #fbe8f0 !important;\n    padding: 20px !important;\n    border-radius: 12px !important;\n    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.12) !important;\n    box-sizing: border-box;\n  }\n  .roze-baum * {\n    box-sizing: border-box;\n  }\n  .roze-baum .titelbalken {\n    background-color: #ff6699 !important;\n    color: #ffffff !important;\n    font-weight: bold;\n    font-size: 1.3em;\n    text-align: center;\n    padding: 12px 20px !important;\n    border-radius: 8px !important;\n    width: 100%;\n    margin-bottom: 12px;\n  }\n  .roze-baum .titelbalken .sternchen {\n    font-weight: normal;\n  }\n  .roze-baum .beschreibung {\n    font-size: 0.95em;\n    color: #333;\n    line-height: 1.4em;\n    margin: 0 0 15px 0;\n  }\n  .roze-baum .beschreibung strong {\n    display: block;\n    margin-bottom: 8px;\n  }\n  .roze-baum .hinweis-null {\n    font-style: italic;\n    color: #777;\n    font-size: 0.9em;\n    margin: 0 0 15px 0;\n  }\n  .roze-baum h3 {\n    color: #ff6699 !important;\n    font-weight: bold;\n    margin-top: 0;\n    margin-bottom: 8px;\n  }\n  .roze-baum .feld {\n    margin-bottom: 16px;\n  }\n\n  .roze-baum .roze-baum-dropzone {\n    width: 100%;\n    padding: 26px 20px;\n    text-align: center;\n    background-color: #fffafc !important;\n    border: 2px dashed #ff6699 !important;\n    border-radius: 10px !important;\n    cursor: pointer;\n    transition: background-color 0.15s, border-color 0.15s;\n  }\n  .roze-baum .roze-baum-dropzone.roze-baum-drag-ueber {\n    background-color: #ffe0ec !important;\n    border-color: #d6337a !important;\n  }\n  .roze-baum .roze-baum-dropzone .dz-titel {\n    color: #ff6699;\n    font-weight: bold;\n    font-size: 1.05em;\n    letter-spacing: 0.5px;\n    margin-bottom: 6px;\n  }\n  .roze-baum .roze-baum-dropzone .dz-untertitel {\n    color: #999;\n    font-size: 0.9em;\n  }\n  .roze-baum input[type=\"file\"] {\n    display: none;\n  }\n\n  .roze-baum .knopfreihe-gesamt {\n    display: flex;\n    gap: 10px;\n    flex-wrap: wrap;\n    margin: 0 0 18px 0;\n  }\n  .roze-baum button {\n    background-color: #ff6699 !important;\n    color: #ffffff !important;\n    font-weight: bold;\n    border: 2px solid #ff6699 !important;\n    border-radius: 8px !important;\n    padding: 10px 16px !important;\n    font-size: 0.9em;\n    cursor: pointer;\n    flex: 1 1 auto;\n    outline: none;\n    white-space: nowrap;\n    line-height: 1.3em;\n    text-align: center;\n  }\n  .roze-baum button:hover,\n  .roze-baum button:focus,\n  .roze-baum button:active {\n    background-color: #ffffff !important;\n    color: #ff6699 !important;\n    border: 2px solid #ff6699 !important;\n    outline: none;\n    box-shadow: none;\n  }\n  .roze-baum button.knopf-ebene {\n    flex: 0 0 auto;\n    padding: 10px 14px !important;\n    min-width: 0;\n  }\n  .roze-baum .note {\n    font-size: 0.9em;\n    font-style: italic;\n    color: #ff6699;\n    margin-top: 15px;\n  }\n\n  .roze-baum .roze-dateien-schalter {\n    font-size: 0.9em;\n    color: #555;\n  }\n  .roze-baum .roze-dateien-schalter label {\n    cursor: pointer;\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n  }\n  .roze-baum .roze-baum-ausgabe {\n    width: 100%;\n    box-sizing: border-box;\n    overflow-y: auto;\n    overflow-x: auto;\n    background-color: #fffafc !important;\n    border: 1px solid #e0b8c8 !important;\n    border-radius: 8px !important;\n    padding: 16px 20px;\n    font-family: \"Courier New\", Courier, monospace !important;\n    font-size: 0.92em !important;\n    letter-spacing: normal !important;\n    line-height: 1.55em;\n    color: #333;\n  }\n  .roze-baum .roze-baum-platzhalter {\n    color: #999;\n    white-space: normal;\n    font-family: Arial, sans-serif !important;\n  }\n\n  .roze-baum .roze-knoten { display: block !important; }\n  .roze-baum .roze-kinder { padding: 0 !important; }\n  .roze-baum .roze-knoten-zeile { display: flex !important; align-items: baseline !important; white-space: nowrap !important; }\n  .roze-baum .roze-toggle-zelle { flex-shrink: 0 !important; }\n  .roze-baum .roze-nummer-zelle { display: inline-block !important; font-weight: bold !important; color: #222222 !important; text-align: left !important; flex-shrink: 0 !important; }\n  .roze-baum .roze-icon-zelle { display: inline-block !important; width: 20px !important; text-align: center !important; flex-shrink: 0 !important; }\n  .roze-baum .roze-name-zelle { color: #222222 !important; }\n  .roze-baum .roze-anzahl { color: #808080; font-weight: normal; font-size: 0.85em; }\n  .roze-baum .roze-toggle {\n    color: #999999;\n    cursor: pointer;\n    display: inline-block;\n    width: 14px;\n    user-select: none;\n    font-weight: bold;\n  }\n  .roze-baum .roze-toggle.roze-leer { cursor: default; color: transparent; }\n  .roze-baum .roze-zeile-klickbar { cursor: pointer; }\n  .roze-baum .roze-zeile-klickbar:hover { background-color: #fdeaf1 !important; }\n\n  @media print {\n    body * { visibility: hidden; }\n    .roze-baum-ausgabe, .roze-baum-ausgabe * { visibility: visible; }\n    .roze-baum-ausgabe {\n      position: absolute;\n      left: 0;\n      top: 0;\n      width: 100% !important;\n      height: auto !important;\n      max-height: none !important;\n      overflow: visible !important;\n      border: none !important;\n      box-shadow: none !important;\n    }\n  }\n<\/style>\n\n<div class=\"roze-baum\">\n\n  <div class=\"titelbalken\">RoZe-Pro\u00adgramm<span class=\"sternchen\">*<\/span>: Ord\u00adner\u00adstruk\u00adtur als Baum darstellen<\/div>\n  <div class=\"beschreibung\">\n    <strong>Was macht die\u00adses klei\u00adne Hilfsprogramm:<\/strong> Ver\u00adwan\u00addelt eine Ord\u00adner\u00adstruk\u00adtur in eine far\u00adbig geglie\u00adder\u00adte, num\u00adme\u00adrier\u00adte Baum\u00addar\u00adstel\u00adlung, ganz ohne zus\u00e4tz\u00adli\u00adche Soft\u00adware, rein mit kos\u00adten\u00adlo\u00adsem&nbsp;HTML.<br> Ein Ord\u00adner wird per Drag &amp;&nbsp;Drop in das Feld unten gezo\u00adgen, die Struk\u00adtur wird auto\u00adma\u00adtisch ein\u00adge\u00adle\u00adsen. Der obers\u00adte Ord\u00adner erh\u00e4lt die Null, sein gesam\u00adter Inhalt beginnt eben\u00adfalls mit Null (0.1., 0.2. \u2026), erst die Ebe\u00adne dar\u00adun\u00adter z\u00e4hlt wie\u00adder ab Eins wei\u00adter. Ein\u00adzel\u00adne Ord\u00adner las\u00adsen sich auf- und zuklap\u00adpen, das Ergeb\u00adnis kann als TXT-Datei her\u00adun\u00adter\u00adge\u00adla\u00adden werden.&nbsp;<\/div>\n  <div class=\"hinweis-null\">\n    <em>Hin\u00adweis: Die\u00adses Werk\u00adzeug wur\u00adde in ers\u00adter Linie f\u00fcr die eige\u00adnen Zwe\u00adcke des Rosa Archivs ent\u00adwi\u00adckelt, des\u00adhalb beginnt bewusst schon die ers\u00adte Ebe\u00adne mit der&nbsp;Null.<\/em>\n  <\/div>\n\n  <div class=\"feld\">\n    <div id=\"rozeBaumDropzone\" class=\"roze-baum-dropzone\">\n      <div class=\"dz-titel\">ORDNER HIER ABLEGEN<\/div>\n      <div class=\"dz-untertitel\">Drag &amp;&nbsp;Drop eines Ord\u00adners zum Einlesen<\/div>\n    <\/div>\n    <input type=\"file\" id=\"rozeBaumDateiauswahl\" webkitdirectory directory multiple>\n  <\/div>\n\n  <div class=\"feld roze-dateien-schalter\">\n    <label><input type=\"checkbox\" id=\"rozeDateienAnzeigen\" checked> Datei\u00aden anzeigen<\/label>\n  <\/div>\n\n  <div class=\"knopfreihe-gesamt\">\n    <button id=\"rozeBaumAufklappen\">Alles aufklappen<\/button>\n    <button class=\"knopf-ebene\" data-ebene=\"1\">E1<\/button>\n    <button class=\"knopf-ebene\" data-ebene=\"2\">E2<\/button>\n    <button class=\"knopf-ebene\" data-ebene=\"3\">E3<\/button>\n    <button class=\"knopf-ebene\" data-ebene=\"4\">E4<\/button>\n    <button class=\"knopf-ebene\" data-ebene=\"5\">E5<\/button>\n    <button class=\"knopf-ebene\" data-ebene=\"6\">E6<\/button>\n    <button class=\"knopf-ebene\" data-ebene=\"7\">E7<\/button>\n    <button id=\"rozeBaumZuklappen\">Alles zuklappen<\/button>\n  <\/div>\n\n  <div class=\"feld\">\n    <h3>Baumdarstellung<\/h3>\n    <div id=\"rozeBaumAusgabe\" class=\"roze-baum-ausgabe\">\n      <div class=\"roze-baum-platzhalter\">Hier erscheint die Baumdarstellung&nbsp;\u2026<\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"knopfreihe-gesamt\">\n    <button id=\"rozeBaumDownload\">Download TXT<\/button>\n    <button id=\"rozeBaumDrucken\">Drucken<\/button>\n    <button id=\"rozeBaumLoeschen\">Alles l\u00f6schen<\/button>\n  <\/div>\n\n  <div class=\"note\">* RoZe = (Herr) Rosa von Zehn\u00adle (\u00far) \u2013 Ein kos\u00adten\u00adlo\u00adser HTML-Ser\u00advice vom 175er Verlag!<\/div>\n\n<\/div>\n\n<!-- Ein Service vom 175er Verlag -->\n\n<script>\n(function(){\n  var EXT_TYPEN = {\n    html:'html', htm:'html',\n    txt:'txt',\n    pdf:'pdf',\n    jpg:'img', jpeg:'img', png:'img', gif:'img', bmp:'img', svg:'img', webp:'img', psd:'img',\n    ttf:'font', otf:'font', woff:'font', woff2:'font',\n    doc:'sonst', docx:'sonst', xls:'sonst', xlsx:'sonst', ppt:'sonst', pptx:'sonst',\n    odt:'sonst', ods:'sonst', odp:'sonst', rtf:'sonst', csv:'sonst', xml:'sonst',\n    css:'sonst', js:'sonst', json:'sonst', zip:'sonst', rar:'sonst', ini:'sonst', bak:'sonst',\n    mp3:'sonst', mp4:'sonst', wav:'sonst', mov:'sonst', avi:'sonst', m4a:'sonst'\n  };\n  var TYP_ICON = {\n    ordner:'\ud83d\udcc1', html:'\ud83c\udf10', txt:'\ud83d\udcdd', pdf:'\ud83d\udcd5',\n    img:'\ud83d\uddbc\ufe0f', font:'\ud83d\udd24', sonst:'\ud83d\udcc4'\n  };\n\n  function klassifiziere(name){\n    var m = name.match(\/\\.([A-Za-z0-9]{2,5})$\/);\n    if(!m) return 'ordner';\n    var ext = m[1].toLowerCase();\n    return EXT_TYPEN[ext] || 'ordner';\n  }\n\n  function escapeHtml(s){\n    return s.replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;').replace(\/>\/g,'&gt;');\n  }\n\n  \/\/ ----- Ordner per Drag & Drop einlesen (Dateisystem-Schnittstelle des Browsers) -----\n\n  function liesVerzeichnis(dirEntry){\n    return new Promise(function(resolve){\n      var reader = dirEntry.createReader();\n      var alleEintraege = [];\n      function weiterlesen(){\n        reader.readEntries(function(stapel){\n          if(!stapel.length){\n            alleEintraege.sort(function(a,b){\n              if(a.isDirectory !== b.isDirectory) return a.isDirectory ? -1 : 1;\n              return a.name.localeCompare(b.name, 'de');\n            });\n            var versprechen = alleEintraege.map(function(e){\n              return e.isDirectory ? liesVerzeichnis(e) : Promise.resolve({ name: e.name, kinder: [] });\n            });\n            Promise.all(versprechen).then(function(kinder){\n              resolve({ name: dirEntry.name, kinder: kinder });\n            });\n          } else {\n            alleEintraege = alleEintraege.concat(stapel);\n            weiterlesen();\n          }\n        }, function(){ resolve({ name: dirEntry.name, kinder: [] }); });\n      }\n      weiterlesen();\n    });\n  }\n\n  function liesAusDateiliste(dateien){\n    \/\/ Fallback \u00fcber die Dateiauswahl (webkitdirectory): webkitRelativePath rekonstruieren\n    var wurzelName = null;\n    var wurzel = { name:'', kinder:[] };\n    var karte = {};\n    for(var i=0;i<dateien.length;i++){\n      var pfad = dateien[i].webkitRelativePath || dateien[i].name;\n      var teile = pfad.split('\/');\n      if(!wurzelName){ wurzelName = teile[0]; wurzel.name = wurzelName; karte[teile[0]] = wurzel; }\n      var aktuellerPfad = teile[0];\n      var aktuellerKnoten = wurzel;\n      for(var j=1;j<teile.length;j++){\n        var istDatei = (j === teile.length - 1);\n        aktuellerPfad += '\/' + teile[j];\n        if(!karte[aktuellerPfad]){\n          var neu = { name: teile[j], kinder: [] };\n          aktuellerKnoten.kinder.push(neu);\n          karte[aktuellerPfad] = neu;\n        }\n        aktuellerKnoten = karte[aktuellerPfad];\n      }\n    }\n    return wurzel;\n  }\n\n  \/\/ ----- Darstellung -----\n\n  var idZaehler = 0;\n\n  function teilNummer(index, gesamt){\n    if(gesamt >= 10){\n      var stellen = String(gesamt).length;\n      var s = String(index);\n      while(s.length < stellen) s = '0' + s;\n      return s;\n    }\n    return String(index);\n  }\n\n  function ordnerIndizes(kinder){\n    var gesamtOrdner = 0;\n    kinder.forEach(function(k){ if(klassifiziere(k.name) === 'ordner') gesamtOrdner++; });\n    var zaehler = 0;\n    return kinder.map(function(k){\n      if(klassifiziere(k.name) === 'ordner'){\n        zaehler++;\n        return { istOrdner: true, index: zaehler, gesamt: gesamtOrdner };\n      }\n      return { istOrdner: false };\n    });\n  }\n\n  function zaehleInhalt(kinder){\n    var o = 0, d = 0;\n    kinder.forEach(function(k){\n      if(klassifiziere(k.name) === 'ordner') o++; else d++;\n    });\n    return { o: o, d: d };\n  }\n\n  function kindNummernBerechnen(knoten, nummer, ebene){\n    var indizes = ordnerIndizes(knoten.kinder);\n    return knoten.kinder.map(function(kind, idx){\n      var info = indizes[idx];\n      if(!info.istOrdner) return null;\n      var teil = teilNummer(info.index, info.gesamt);\n      return (ebene === 0) ? teil : (nummer + '.' + teil);\n    });\n  }\n\n  function ermittleSpaltenbreitenProEbene(knoten, nummer, ebene, statObj){\n    if(nummer !== null){\n      var bisher = statObj[ebene] || 0;\n      statObj[ebene] = Math.max(bisher, nummer.length + 1);\n    }\n    var kindNummern = kindNummernBerechnen(knoten, nummer, ebene);\n    knoten.kinder.forEach(function(kind, idx){\n      ermittleSpaltenbreitenProEbene(kind, kindNummern[idx], ebene+1, statObj);\n    });\n  }\n\n  function spaltenbreitenBerechnen(wurzel){\n    var statObj = {};\n    ermittleSpaltenbreitenProEbene(wurzel, '0', 0, statObj);\n    var maxEbene = 0;\n    Object.keys(statObj).forEach(function(k){ maxEbene = Math.max(maxEbene, parseInt(k,10)); });\n    for(var e = 1; e <= maxEbene + 1; e++){\n      var vorherige = statObj[e-1] || 2;\n      statObj[e] = Math.max(statObj[e] || 0, vorherige);\n    }\n    if(statObj[0] === undefined) statObj[0] = 2;\n    return statObj;\n  }\n\n  function textPixelBreite(text, font){\n    var canvas = textPixelBreite._canvas || (textPixelBreite._canvas = document.createElement('canvas'));\n    var ctx = canvas.getContext('2d');\n    ctx.font = font;\n    return ctx.measureText(text).width;\n  }\n\n  function ermittleNummernProEbene(knoten, nummer, ebene, sammlung){\n    if(nummer !== null){\n      if(!sammlung[ebene]) sammlung[ebene] = [];\n      sammlung[ebene].push(nummer + '.');\n    }\n    var kindNummern = kindNummernBerechnen(knoten, nummer, ebene);\n    knoten.kinder.forEach(function(kind, idx){\n      ermittleNummernProEbene(kind, kindNummern[idx], ebene+1, sammlung);\n    });\n  }\n\n  function spaltenbreitenInPixelBerechnen(wurzel, font){\n    var sammlung = {};\n    ermittleNummernProEbene(wurzel, '0', 0, sammlung);\n    var breiten = {};\n    var maxEbene = 0;\n    Object.keys(sammlung).forEach(function(k){ maxEbene = Math.max(maxEbene, parseInt(k,10)); });\n    for(var e = 0; e <= maxEbene + 1; e++){\n      var maxDieserEbene = 0;\n      (sammlung[e] || []).forEach(function(text){\n        maxDieserEbene = Math.max(maxDieserEbene, textPixelBreite(text, font));\n      });\n      var vorherige = breiten[e-1] || 0;\n      breiten[e] = Math.max(maxDieserEbene, vorherige) + 8;\n    }\n    return breiten;\n  }\n\n  var zaehlerGlobal = 0;\n  var alleKnotenListe = [];\n\n  function renderKnoten(knoten, nummer, tiefe, spaltenbreiten){\n    zaehlerGlobal++;\n    var eigeneId = 'zr' + zaehlerGlobal;\n    var typ = (tiefe === 0) ? 'ordner' : klassifiziere(knoten.name);\n    var icon = tiefe === 0 ? '\ud83d\udcc1' : TYP_ICON[typ];\n    var hatKinder = knoten.kinder.length > 0;\n    var anzahl = hatKinder ? zaehleInhalt(knoten.kinder) : null;\n    var breite = spaltenbreiten[tiefe] || 20;\n\n    alleKnotenListe.push({ id: eigeneId, tiefe: tiefe, hatKinder: hatKinder });\n\n    var toggleHtml = hatKinder\n      ? '<span class=\"roze-toggle\" data-id=\"' + eigeneId + '\">\u25be<\/span>'\n      : '<span class=\"roze-toggle roze-leer\">\u00b7<\/span>';\n    var anzahlHtml = (typ === 'ordner' && anzahl)\n      ? ' <span class=\"roze-anzahl\">(' + anzahl.o + '\/' + anzahl.d + ')<\/span>'\n      : '';\n    var klasse = 'roze-knoten-zeile' + (typ !== 'ordner' ? ' roze-datei-zeile' : '') + (hatKinder ? ' roze-zeile-klickbar' : '');\n\n    var html = '<div class=\"roze-knoten\">';\n    html += '<div class=\"' + klasse + '\" data-id=\"' + eigeneId + '\">';\n    html += '<span class=\"roze-toggle-zelle\">' + toggleHtml + '<\/span>';\n    html += '<span class=\"roze-nummer-zelle\" style=\"min-width:' + breite + 'px\">' + (nummer !== null ? nummer + '.' : '') + '<\/span>';\n    html += '<span class=\"roze-icon-zelle\">' + icon + '<\/span>';\n    html += '<span class=\"roze-name-zelle\">' + escapeHtml(knoten.name) + anzahlHtml + '<\/span>';\n    html += '<\/div>';\n\n    if(hatKinder){\n      html += '<div class=\"roze-kinder\" id=\"kinder-' + eigeneId + '\" style=\"margin-left:24px;\">';\n      var kindNummern = kindNummernBerechnen(knoten, nummer, tiefe);\n      knoten.kinder.forEach(function(kind, idx){\n        html += renderKnoten(kind, kindNummern[idx], tiefe+1, spaltenbreiten);\n      });\n      html += '<\/div>';\n    }\n    html += '<\/div>';\n    return html;\n  }\n\n  function rozeSichtbarkeitAktualisieren(){\n    var ausgabe = document.getElementById('rozeBaumAusgabe');\n    var schalter = document.getElementById('rozeDateienAnzeigen');\n    var dateienSichtbar = schalter ? schalter.checked : true;\n    ausgabe.querySelectorAll('.roze-datei-zeile').forEach(function(zeile){\n      zeile.style.display = dateienSichtbar ? '' : 'none';\n    });\n    alleKnotenListe.forEach(function(k){\n      if(!k.hatKinder) return;\n      var kinderBereich = document.getElementById('kinder-' + k.id);\n      var zustand = window.__rozeExpandState[k.id];\n      var versteckt = (zustand === false);\n      if(kinderBereich) kinderBereich.style.display = versteckt ? 'none' : '';\n      var eigeneZeile = document.querySelector('.roze-knoten-zeile[data-id=\"' + k.id + '\"]');\n      if(eigeneZeile){\n        var toggle = eigeneZeile.querySelector('.roze-toggle');\n        if(toggle) toggle.textContent = versteckt ? '\u25b8' : '\u25be';\n      }\n    });\n  }\n\n  function zeigeBaum(wurzel){\n    var ausgabe = document.getElementById('rozeBaumAusgabe');\n    zaehlerGlobal = 0;\n    alleKnotenListe = [];\n    window.__rozeExpandState = {};\n\n    var font = getComputedStyle(ausgabe).fontWeight + ' ' + getComputedStyle(ausgabe).fontSize + ' ' + getComputedStyle(ausgabe).fontFamily;\n    var spaltenbreiten = spaltenbreitenInPixelBerechnen(wurzel, font);\n\n    var html = renderKnoten(wurzel, '0', 0, spaltenbreiten);\n    ausgabe.innerHTML = html;\n    ausgabe.dataset.baum = JSON.stringify(wurzel);\n\n    ausgabe.querySelectorAll('.roze-zeile-klickbar').forEach(function(zeile){\n      zeile.addEventListener('click', function(){\n        var id = zeile.dataset.id;\n        var aktuell = window.__rozeExpandState[id];\n        window.__rozeExpandState[id] = (aktuell === false) ? true : false;\n        rozeSichtbarkeitAktualisieren();\n      });\n    });\n\n    rozeSichtbarkeitAktualisieren();\n  }\n\n  function alleUmschalten(anzeigen){\n    alleKnotenListe.forEach(function(k){\n      if(k.hatKinder) window.__rozeExpandState[k.id] = anzeigen;\n    });\n    rozeSichtbarkeitAktualisieren();\n  }\n\n  function ebeneOeffnen(zielEbene){\n    alleKnotenListe.forEach(function(k){\n      if(!k.hatKinder) return;\n      window.__rozeExpandState[k.id] = (k.tiefe < zielEbene);\n    });\n    rozeSichtbarkeitAktualisieren();\n  }\n\n  function alsTextExportieren(knoten, nummer, ebene, dateienZeigen, spaltenbreiten){\n    var einzug = '  '.repeat(ebene);\n    var typ = klassifiziere(knoten.name);\n    var icon = ebene === 0 ? '\ud83d\udcc1' : TYP_ICON[typ];\n    if(typ !== 'ordner' && !dateienZeigen) return '';\n    var breite = spaltenbreiten[ebene] || 2;\n    var nummerRoh = (nummer === null) ? '' : (nummer + '.');\n    while(nummerRoh.length < breite) nummerRoh += ' ';\n    var anzahlText = '';\n    if(typ === 'ordner' && knoten.kinder.length){\n      var anzahl = zaehleInhalt(knoten.kinder);\n      anzahlText = ' (' + anzahl.o + '\/' + anzahl.d + ')';\n    }\n    var zeile = einzug + nummerRoh + icon + ' ' + knoten.name + anzahlText + '\\n';\n    var kindNummern = kindNummernBerechnen(knoten, nummer, ebene);\n    knoten.kinder.forEach(function(kind, idx){\n      zeile += alsTextExportieren(kind, kindNummern[idx], ebene+1, dateienZeigen, spaltenbreiten);\n    });\n    return zeile;\n  }\n\n  function downloadErzeugen(){\n    var ausgabe = document.getElementById('rozeBaumAusgabe');\n    if(!ausgabe.dataset.baum){\n      alert('Es liegt noch kein eingelesener Ordner vor.');\n      return;\n    }\n    var wurzel = JSON.parse(ausgabe.dataset.baum);\n    var schalter = document.getElementById('rozeDateienAnzeigen');\n    var dateienZeigen = schalter ? schalter.checked : true;\n    var spaltenbreiten = spaltenbreitenBerechnen(wurzel);\n    var text = alsTextExportieren(wurzel, '0', 0, dateienZeigen, spaltenbreiten);\n    var blob = new Blob([text], { type: 'text\/plain;charset=utf-8' });\n    var url = URL.createObjectURL(blob);\n    var a = document.createElement('a');\n    a.href = url;\n    a.download = 'ordnerstammbaum.txt';\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n    URL.revokeObjectURL(url);\n  }\n\n  function loeschen(){\n    var ausgabe = document.getElementById('rozeBaumAusgabe');\n    ausgabe.innerHTML = '<div class=\"roze-baum-platzhalter\">Hier erscheint die Baumdarstellung ...<\/div>';\n    delete ausgabe.dataset.baum;\n  }\n\n  \/\/ ----- Ereignisse -----\n\n  var dropzone = document.getElementById('rozeBaumDropzone');\n  var dateiauswahl = document.getElementById('rozeBaumDateiauswahl');\n\n  dropzone.addEventListener('click', function(){ dateiauswahl.click(); });\n\n  dropzone.addEventListener('dragover', function(e){\n    e.preventDefault();\n    dropzone.classList.add('roze-baum-drag-ueber');\n  });\n  dropzone.addEventListener('dragleave', function(){\n    dropzone.classList.remove('roze-baum-drag-ueber');\n  });\n  dropzone.addEventListener('drop', function(e){\n    e.preventDefault();\n    dropzone.classList.remove('roze-baum-drag-ueber');\n    var items = e.dataTransfer.items;\n    if(!items || !items.length) return;\n    var eintrag = items[0].webkitGetAsEntry ? items[0].webkitGetAsEntry() : null;\n    var ausgabe = document.getElementById('rozeBaumAusgabe');\n    if(!eintrag){\n      ausgabe.innerHTML = '<div class=\"roze-baum-platzhalter\">Dieser Browser unterst\u00fctzt das direkte Einlesen von Ordnern per Drag &amp; Drop nicht. Die Dateiauswahl kann stattdessen \u00fcber einen Klick auf das Feld ge\u00f6ffnet werden.<\/div>';\n      return;\n    }\n    if(!eintrag.isDirectory){\n      ausgabe.innerHTML = '<div class=\"roze-baum-platzhalter\">Es wird ein Ordner ben\u00f6tigt, keine einzelne Datei.<\/div>';\n      return;\n    }\n    ausgabe.innerHTML = '<div class=\"roze-baum-platzhalter\">Ordner wird eingelesen ...<\/div>';\n    liesVerzeichnis(eintrag).then(zeigeBaum);\n  });\n\n  dateiauswahl.addEventListener('change', function(){\n    if(!dateiauswahl.files || !dateiauswahl.files.length) return;\n    var ausgabe = document.getElementById('rozeBaumAusgabe');\n    ausgabe.innerHTML = '<div class=\"roze-baum-platzhalter\">Ordner wird eingelesen ...<\/div>';\n    var wurzel = liesAusDateiliste(dateiauswahl.files);\n    zeigeBaum(wurzel);\n  });\n\n  document.getElementById('rozeBaumAufklappen').addEventListener('click', function(){ alleUmschalten(true); });\n  document.getElementById('rozeBaumZuklappen').addEventListener('click', function(){ alleUmschalten(false); });\n  document.querySelectorAll('.knopf-ebene').forEach(function(knopf){\n    knopf.addEventListener('click', function(){\n      ebeneOeffnen(parseInt(knopf.dataset.ebene, 10));\n    });\n  });\n  document.getElementById('rozeBaumDownload').addEventListener('click', downloadErzeugen);\n  document.getElementById('rozeBaumDrucken').addEventListener('click', function(){ window.print(); });\n  document.getElementById('rozeBaumLoeschen').addEventListener('click', loeschen);\n  document.getElementById('rozeDateienAnzeigen').addEventListener('change', function(){\n    rozeSichtbarkeitAktualisieren();\n  });\n})();\n<\/script>\n<br><br><br>\n\n\n\n<div style=\"text-align:center;\">\n    <img decoding=\"async\" id=\"gifImage\" border=\"0\" style=\"border:0; display:block; margin:0 auto;\" src=\"https:\/\/www.123gif.de\/gifs\/verkehrsschilder\/verkehrsschild-0016.gif\" alt=\"Verkehrsschild von 123gif.de\" aria-describedby=\"bildinfo\"><!-- RoZe-Programm: Ein HTML-Service vom 175er Verlag -->\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>RoZe-Programm*: Linkk\u00fcrzer<\/title>\n<style>\n  .roze-linkkuerzer {\n    font-family: Arial, sans-serif;\n    background-color: #fbe8f0 !important;\n    padding: 20px !important;\n    border-radius: 12px !important;\n    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.12) !important;\n    box-sizing: border-box;\n  }\n  .roze-linkkuerzer * {\n    box-sizing: border-box;\n  }\n  .roze-linkkuerzer .titelbalken {\n    background-color: #ff6699 !important;\n    color: #ffffff !important;\n    font-weight: bold;\n    font-size: 1.3em;\n    text-align: center;\n    padding: 12px 20px !important;\n    border-radius: 8px !important;\n    width: 100%;\n    margin-bottom: 12px;\n  }\n  .roze-linkkuerzer .titelbalken .sternchen {\n    font-weight: normal;\n  }\n  .roze-linkkuerzer .beschreibung {\n    font-size: 0.95em;\n    color: #333;\n    line-height: 1.4em;\n    margin: 0 0 15px 0;\n  }\n  .roze-linkkuerzer .beschreibung strong {\n    display: block;\n    margin-bottom: 8px;\n  }\n  .roze-linkkuerzer .note {\n    font-size: 0.9em;\n    font-style: italic;\n    color: #ff6699;\n    margin-top: 15px;\n  }\n<\/style>\n\n<div class=\"roze-linkkuerzer\">\n\n  <div class=\"titelbalken\">RoZe-Pro\u00adgramm<span class=\"sternchen\">*<\/span>: Link\u00adk\u00fcr\u00adzer<\/div>\n  <div class=\"beschreibung\">\n    <strong>Was macht die\u00adses klei\u00adne Hilfsprogramm:<\/strong> Ver\u00adk\u00fcrzt eine lan\u00adge Inter\u00adnet\u00adadres\u00adse in einen kur\u00adzen, leicht zu mer\u00adken\u00adden Link mit der Domain rab\u2011k.de. Der erzeug\u00adte Link ist zeit\u00adlich unbe\u00adgrenzt g\u00fcltig.<br> Lan\u00adge URL ein\u00adf\u00fc\u00adgen und ent\u00adwe\u00adder direkt auf \u201eK\u00fcr\u00adzen\u201c kli\u00adcken, oder im zwei\u00adten Feld einen eige\u00adnen Wunsch\u00adlink ein\u00adtra\u00adgen und dann \u201eK\u00fcr\u00adzen\u201c. <\/div>\n\n  <!-- WordPress Plugin Shortcode --> [link\u00adkuer\u00adzer] <div class=\"note\">* RoZe = (Herr) Rosa von Zehn\u00adle (\u00far) \u2013 Ein kos\u00adten\u00adlo\u00adser HTML-Ser\u00advice vom 175er Verlag!<\/div>\n\n<\/div>\n\n<!-- Ein Service vom 175er Verlag -->\n<br><br><br>\n<p>Views: 67<\/p><\/div>","protected":false},"excerpt":{"rendered":"<p>Klei\u00adne Pro\u00adgram\u00adme mit gro\u00ad\u00dfer Wir\u00adkung Hier bie\u00adte ich allen Besu\u00adchern eini\u00adge n\u00fctz\u00adli\u00adche Hilfs\u00admit\u00adtel an, die f\u00fcr den (fast) t\u00e4g\u00adli\u00adchen Gebrauch vom Vor\u00adteil sind, da sie so man\u00adche Arbei\u00adten erleich\u00adtern. F\u00fcr den Anfang die ers\u00adten klei\u00adnen \u2026 <a title=\"Service-Seiten f\u00fcr meine Besucher\" class=\"hm-read-more\" href=\"https:\/\/175er-verlag.org\/.recherchiert\/serviceseite\"><span class=\"screen-reader-text\">Ser\u00advice-Sei\u00adten f\u00fcr mei\u00adne Besu\u00adcher<\/span>Wei\u00adter\u00adle\u00adsen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","wp_typography_post_enhancements_disabled":false,"footnotes":""},"class_list":["post-2216","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"hybridmag-featured-image":false,"hybridmag-archive-image":false,"hybridmag-archive-image-large":false,"hybridmag-thumbnail":false,"audioigniter_cover":false},"uagb_author_info":{"display_name":"RoZe-recherchiert","author_link":"https:\/\/175er-verlag.org\/.recherchiert\/archive\/author\/roze-recherchiert"},"uagb_comment_info":0,"uagb_excerpt":"Kleine Programme mit gro\u00dfer Wirkung Hier bie\u00adte ich allen Besu\u00adchern eini\u00adge n\u00fctz\u00adli\u00adche Hilfs\u00admit\u00adtel an, die f\u00fcr den (fast) t\u00e4g\u00adli\u00adchen Gebrauch vom Vor\u00adteil sind, da sie so man\u00adche Arbei\u00adten erleich\u00adtern. F\u00fcr den Anfang die ers\u00adten klei\u00adnen &hellip; Service-Seiten f\u00fcr meine BesucherWeiterlesen","_links":{"self":[{"href":"https:\/\/175er-verlag.org\/.recherchiert\/wp-json\/wp\/v2\/pages\/2216","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/175er-verlag.org\/.recherchiert\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/175er-verlag.org\/.recherchiert\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/175er-verlag.org\/.recherchiert\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/175er-verlag.org\/.recherchiert\/wp-json\/wp\/v2\/comments?post=2216"}],"version-history":[{"count":3,"href":"https:\/\/175er-verlag.org\/.recherchiert\/wp-json\/wp\/v2\/pages\/2216\/revisions"}],"predecessor-version":[{"id":11170,"href":"https:\/\/175er-verlag.org\/.recherchiert\/wp-json\/wp\/v2\/pages\/2216\/revisions\/11170"}],"wp:attachment":[{"href":"https:\/\/175er-verlag.org\/.recherchiert\/wp-json\/wp\/v2\/media?parent=2216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}