{"id":7362,"date":"2025-02-17T14:22:10","date_gmt":"2025-02-17T05:22:10","guid":{"rendered":"https:\/\/code-plus.jp\/gp\/?page_id=7362"},"modified":"2026-06-10T14:18:08","modified_gmt":"2026-06-10T05:18:08","slug":"updatetags-converter","status":"publish","type":"page","link":"https:\/\/code-plus.jp\/gp\/tools\/updatetags-converter\/","title":{"rendered":"HTML\u30bf\u30b0\u4e00\u62ec\u5909\u63db\u30c4\u30fc\u30eb | \u30aa\u30f3\u30e9\u30a4\u30f3\u4e0a\u3067\u30bf\u30b0\u8a18\u6cd5\u3092\u77ac\u6642\u306b\u5909\u63db"},"content":{"rendered":"<!-- \u0f3b\u273f.page-Markdown\u8a18\u6cd5\u21c4HTML \u30aa\u30f3\u30e9\u30a4\u30f3\u5909\u63db\u30c4\u30fc\u30eb \uff08\/tools\/markdown-converter\/\uff09\r\n* \u30da\u30fc\u30b8\u30af\u30e9\u30b9\uff1apg-saracnvtvkaa\uff08WordPress\u304c\u5c0f\u6587\u5b57\u3067\u3057\u304b\u51fa\u529b\u3067\u304d\u306a\u3044\u305f\u3081\uff09\r\n* \u8b58\u5225\u30b3\u30fc\u30c9\uff1acnvtVkaA\uff08section\/dept \u306e\u30af\u30e9\u30b9\u540d, \u753b\u50cf\u540d\u306b\u4f7f\u7528\uff09\r\n\u0fd0\u0f36\u22b0\u27e1\u22b1\u0f36\u22b0\u27e1\u22b1\u0f36\u22b0\u27e1\u22b1\u0f36\u2740\u0f36\u22b0\u27e1\u22b1\u0f36\u22b0\u27e1\u22b1\u0f36\u22b0\u27e1\u22b1\u0f36\u0f04 -->\r\n\r\n<div class=\"pg-saracnvtvkaa bg-hackingGate\">\r\n\r\n  <!-- \u0f3b.mezzala\uff08\u4f59\u767d\u8abf\u6574\uff1apage\u4e0a\uff09\u0f3a -->\r\n  <hr class=\"spacer-mezzala\" \/>\r\n\r\n  <header class=\"page-header mx-auto\">\r\n    <!-- \u2756\u30d1\u30f3\u304f\u305a\u30ea\u30b9\u30c8 --><div><!-- breadcrumb.php -->\n<style>\n\/* \u2756breadcrumb.leckermaul\uff08\u30d1\u30f3\u304f\u305a\u30ea\u30b9\u30c8\uff09\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u0f1a\u0f36\u22b0\u27e1\u22b1\u0f36\u0f1a\u0f3a *\/\n.zaratan .breadcrumb.leckermaul {\n\twidth: 100%;\n\tmax-width: 92.5vw;\n\tmargin-inline: auto;\n}\n\n.zaratan .breadcrumb.leckermaul :is(ul, ol) {\n\tmin-height: 3rem;\n\tline-height: initial;\n\tfont-size: 0;\n\tletter-spacing: 0;\n\toverflow: hidden;\n}\n\n.zaratan .breadcrumb.leckermaul li {\n\tdisplay: inline;\n\tline-height: 1.55;\n\tfont-size: clamp(0.775rem, calc(0.775rem + ((1vw - 0.225rem) * 0.1563)), 0.8750rem);\n}\n\n.zaratan .breadcrumb.leckermaul li>*,\n.zaratan .breadcrumb.leckermaul li::before {\n\tposition: relative;\n\ttop: 0.125em;\n\tdisplay: inline-flex;\n\talign-items: center;\n}\n\n.zaratan .breadcrumb.leckermaul a {\n\tdisplay: inline;\n\tcolor: var(--c-text-300, hsl(233, 6%, 74%));\n\tmargin-right: .5em;\n}\n\n.zaratan .breadcrumb.leckermaul li:nth-of-type(n+2) a {\n\tmargin-left: .5em;\n}\n\n.zaratan .breadcrumb.leckermaul .current_page_item a {\n\tpointer-events: none;\n\tcolor: var(--c-text-300, hsl(233, 6%, 74%));\n}\n\n@media (any-hover:hover) {\n\t.zaratan .breadcrumb.leckermaul a:hover {\n\t\tcolor: var(--c-text-300, hsl(233, 6%, 74%));\n\t}\n}\n\n\/* .separator *\/\n.zaratan .breadcrumb.leckermaul li:nth-of-type(n+2)::before,\n.zaratan .breadcrumb.leckermaul.chevron-right li:nth-of-type(n+2)::before {\n\tcontent: \">\";\n\tcolor: var(--c-text-300, hsl(233, 6%, 74%))\n}\n\n.zaratan .breadcrumb.leckermaul.slash li:nth-of-type(n+2)::before {\n\tcontent: \"\/\";\n}\n\n.zaratan .breadcrumb.leckermaul.trigon-bullet li:nth-of-type(n+2)::before {\n\tcontent: \"\u2023\";\n}\n<\/style>\n\n\n<nav class=\"breadcrumb leckermaul mx-auto py-0.5r\">\n  <ul class=\"breadcrumb-wrapper\">\n    <!-- \u30c8\u30c3\u30d7\u30da\u30fc\u30b8\u3078\u306e\u30ea\u30f3\u30af\u3092\u8868\u793a -->\n    <li><a href=\"https:\/\/code-plus.jp\/gp\/\"><i><\/i>\u30c8\u30c3\u30d7<\/a><\/li>\n\n          <!-- \u56fa\u5b9a\u30da\u30fc\u30b8\uff08\u305d\u308c\u4ee5\u5916\uff09\uff1a \u5148\u7956\u30da\u30fc\u30b8\u540d\u3068\u3001\u73fe\u5728\u306e\u30da\u30fc\u30b8\u540d\u3092\u8868\u793a -->\n      <li><a href=\"https:\/\/code-plus.jp\/gp\/tools\/\">TOOLS\uff08\u30c4\u30fc\u30eb\u4e00\u89a7\uff09<\/a><\/li><li class=\"current_page_item\"><a>\u30c4\u30fc\u30eb<\/a><\/li>    <!-- \/\/\/if (is_page()) -->\n\n  <\/ul>\n<\/nav><\/div>\r\n  <\/header><!-- \/\/\/.inheader -->\r\n\r\n\r\n\r\n\r\n  <!-- \u0f3b\u00a7\ud835\udc12\ud835\udc04\ud835\udc02\ud835\udc13\ud835\udc08\ud835\udc0e\ud835\udc0d\u0f3a -->\r\n  <section class=\"sect-cnvtVkaA-Intro\">\r\n    <header class=\"section__inheader mx-auto scroll-fadeIn\">\r\n      <div class=\"hgroup-wrapper d-iblock mb-0.5r\">\r\n        <h1 class=\"fz-xxl hdg-page mb-0.25pc\"><span>HTML\u30bf\u30b0\u4e00\u62ec\u5909\u63db\u30c4\u30fc\u30eb | \u30aa\u30f3\u30e9\u30a4\u30f3\u4e0a\u3067\u30bf\u30b0\u8a18\u6cd5\u3092\u77ac\u6642\u306b\u5909\u63db<\/span><\/h1>\r\n        <p class=\"page-foreword fz-ss\">HTML\u30bf\u30b0\u3092\u4e00\u62ec\u5909\u63db\u3067\u304d\u308b\u30aa\u30f3\u30e9\u30a4\u30f3\u5909\u63db\u30b5\u30a4\u30c8\u3002div\u2192section\u3001span\u2192em\u8a18\u6cd5\u306a\u3069\u6307\u5b9a\u30bf\u30b0\u3092\u4efb\u610f\u30bf\u30b0\u306b\u5909\u63db\u3002<\/p>\r\n      <\/div><!-- \/\/\/.hgroup -->\r\n\r\n      <a class=\"fl-right badge is-outlined is-gray fz-xs bdrs-0.25r\" href=\"#ch-Explanation\">\r\n        <i class=\"icon mas ma-help\"><\/i>&nbsp;<span>\u4f7f\u3044\u65b9<\/span>\r\n      <\/a>\r\n    <\/header><!-- \/\/\/.inheader -->\r\n  <\/section>\r\n\r\n\r\n  <!-- \u0f3b\u00a7\ud835\udc12\ud835\udc04\ud835\udc02\ud835\udc13\ud835\udc08\ud835\udc0e\ud835\udc0d\u0f3a -->\r\n  <hr id=\"ch-Converter\" anchor \/>\r\n  <section class=\"sect-cnvtVkaA-Converter\">\r\n    <div class=\"section__interior fxd-row mx-auto\">\r\n      <figure class=\"section__leftlane\">\r\n        <div class=\"hgroup-wrapper\">\r\n          <h3 class=\"fz-rg hdg-section mb-0.25pc\"><span>\u25bc\u30c6\u30ad\u30b9\u30c8\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044<\/span><\/h3>\r\n        <\/div><!-- \/\/\/.hgroup -->\r\n\r\n        <div class=\"chest-wrapper relatived\">\r\n          <textarea id=\"encodeArea\" class=\"textarea\" style=\"height:17.5pc;\" placeholder=\"\u3053\u3053\u306b\u30c6\u30ad\u30b9\u30c8\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\"><\/textarea>\r\n          <ins id=\"decodedMessage\"><\/ins>\r\n        <\/div><!-- \/\/\/.chest -->\r\n\r\n        <!-- \u30aa\u30d7\u30b7\u30e7\u30f3 -->\r\n        <!-- <div class=\"colgroup w-full mt-1r\"><\/div> -->\r\n\r\n        <div class=\"colgroup w-full mt-1r\">\r\n          <h4 class=\"title is-outlined fz-sm\">\u30aa\u30d7\u30b7\u30e7\u30f3\u8a2d\u5b9a\r\n            <a href=\"javascript:void(0);\" onclick=\"uncheckAllOptions()\" class=\"badge is-outlined is-gray fz-xxs ml-auto\">\r\n              <i class=\"icon mas ma-close\"><\/i>&nbsp;<span>\u3059\u3079\u3066\u30c1\u30a7\u30c3\u30af\u3092\u5916\u3059<\/span>\r\n            <\/a>\r\n            <a href=\"javascript:void(0);\" onclick=\"resetDefaultOptions()\" class=\"badge is-outlined is-gray fz-xxs ml-0.5r\">\r\n              <i class=\"icon mas ma-restart_alt\"><\/i>&nbsp;<span>\u30c7\u30d5\u30a9\u30eb\u30c8\u306b\u623b\u3059<\/span>\r\n            <\/a>\r\n          <\/h4>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertUpdateTag1s\" checked>\r\n            <input type=\"text\" id=\"targetUpdateTag1\" class=\"input w-11e\" value='&lt;strong&gt;'>&nbsp;\u30bf\u30b0\u3092\u3001&nbsp;&nbsp;\r\n            <input type=\"text\" id=\"afterUpdateTag1\" class=\"input w-11e\" value='&lt;b class=\"bold\"&gt;'>&nbsp;\u306b\u5909\u63db\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertUpdateTag2s\">\r\n            <input type=\"text\" id=\"targetUpdateTag2\" class=\"input w-11e\" value='&lt;thead class=\"therm\"&gt;'>&nbsp;\u30bf\u30b0\u3092\u3001&nbsp;&nbsp;\r\n            <input type=\"text\" id=\"afterUpdateTag2\" class=\"input w-11e\" value='&lt;thead&gt;'>&nbsp;\u306b\u5909\u63db\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertUpdateTag3s\">\r\n            <input type=\"text\" id=\"targetUpdateTag3\" class=\"input w-11e\" value='&lt;table class=\"table\"&gt;'>&nbsp;\u30bf\u30b0\u3092\u3001&nbsp;&nbsp;\r\n            <input type=\"text\" id=\"afterUpdateTag3\" class=\"input w-11e\" value='&lt;dl class=\"delimit\"&gt;'>&nbsp;\u306b\u5909\u63db\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertUpdateTag4s\">\r\n            <input type=\"text\" id=\"targetUpdateTag4\" class=\"input w-11e\" value='&lt;tr class=\"rung\"&gt;'>&nbsp;\u30bf\u30b0\u3092\u3001&nbsp;&nbsp;\r\n            <input type=\"text\" id=\"afterUpdateTag4\" class=\"input w-11e\" value='&lt;div class=\"rung\"&gt;'>&nbsp;\u306b\u5909\u63db\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertUpdateTag5s\">\r\n            <input type=\"text\" id=\"targetUpdateTag5\" class=\"input w-11e\" value='&lt;th&gt;'>&nbsp;\u30bf\u30b0\u3092\u3001&nbsp;&nbsp;\r\n            <input type=\"text\" id=\"afterUpdateTag5\" class=\"input w-11e\" value='&lt;dt&gt;'>&nbsp;\u306b\u5909\u63db\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertUpdateTag6s\">\r\n            <input type=\"text\" id=\"targetUpdateTag6\" class=\"input w-11e\" value='&lt;td&gt;'>&nbsp;\u30bf\u30b0\u3092\u3001&nbsp;&nbsp;\r\n            <input type=\"text\" id=\"afterUpdateTag6\" class=\"input w-11e\" value='&lt;dd&gt;'>&nbsp;\u306b\u5909\u63db\r\n          <\/label>\r\n        <\/div><!-- \/\/\/.colgroup -->\r\n      <\/figure><!-- \/\/\/.leftlane -->\r\n\r\n      <figure class=\"section__centerlane\">\r\n        <aside class=\"sticky-sidebar fxd-column pc-center\">\r\n          <a class=\"button is-solided is-primary\" href=\"#ch-Converter\" onclick=\"encodeText()\"><span>\u5909\u63db&nbsp;\u00bb<\/span><\/a>\r\n        <\/aside>\r\n      <\/figure><!-- \/\/\/.centerlane -->\r\n\r\n\r\n      <figure class=\"section__rightlane\">\r\n        <div class=\"chest-wrapper relatived\">\r\n          <h3 class=\"fz-rg hdg-section mb-0.25pc\"><span>\u25bc\u5909\u63db\u5f8c\u306e\u30c6\u30ad\u30b9\u30c8<\/span><\/h3>\r\n          <textarea class=\"textarea\" id=\"decodeArea\" style=\"height:17.5pc;\" placeholder=\"\u3053\u3053\u306b\u5909\u63db\u5f8c\u306e\u30c6\u30ad\u30b9\u30c8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\"><\/textarea>\r\n          <ins id=\"encodedMessage\"><\/ins>\r\n        <\/div><!-- \/\/\/.chest -->\r\n      <\/figure><!-- \/\/\/.rightlane -->\r\n    <\/div><!-- \/\/\/.interior.fxd-row -->\r\n  <\/section>\r\n\r\n\r\n  <!-- \u0f3b\u00a7\ud835\udc12\ud835\udc04\ud835\udc02\ud835\udc13\ud835\udc08\ud835\udc0e\ud835\udc0d\u0f3a -->\r\n  <hr id=\"ch-Explanation\" anchor \/>\r\n  <section class=\"sect-cnvtVkaA-Explanation pt-3r\" style=\"contain-intrinsic-size:1000px;\">\r\n    <div class=\"section__interior mx-auto scroll-fadeIn\">\r\n      <div class=\"box is-broad is-solided c-text\">\r\n        <h4 class=\"hdg-explanation fz-md mb-0.25pc\">\u4f7f\u3044\u65b9<\/h4>\r\n        <p class=\"fz-ss mb-1r\">\r\n          \u5de6\u5074\u306e\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2\u306b\u5909\u63db\u3057\u305f\u3044HTML\u30b3\u30fc\u30c9\u3092\u5165\u529b\u3057\u3001\u5909\u63db\u30eb\u30fc\u30eb\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u300c\u5909\u63db \u00bb\u300d\u3092\u30af\u30ea\u30c3\u30af\u3002\u53f3\u5074\u306b\u5909\u63db\u3055\u308c\u305fHTML\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\r\n        <\/p>\r\n        \r\n        <h5 class=\"fz-sm hdg-explanation mb-0.25pc\">\ud83d\udca1 \u4e3b\u306a\u6a5f\u80fd<\/h5>\r\n        <ul class=\"fz-ss mb-1r\">\r\n          <li><b>\u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30afHTML\u5316\uff1a<\/b> div\u2192section\u3001article\u3001aside\u306a\u3069\u610f\u5473\u306e\u3042\u308b\u30bf\u30b0\u306b\u5909\u63db<\/li>\r\n          <li><b>\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u5411\u4e0a\uff1a<\/b> span\u2192strong\u3001em\u306a\u3069\u9069\u5207\u306a\u610f\u5473\u3092\u6301\u3064\u30bf\u30b0\u306b\u5909\u63db<\/li>\r\n          <li><b>\u30ec\u30b9\u30dd\u30f3\u30b7\u30d6\u5bfe\u5fdc\uff1a<\/b> table\u2192div\u3067\u30e2\u30d0\u30a4\u30eb\u30d5\u30a1\u30fc\u30b9\u30c8\u306aHTML\u306b\u5909\u63db<\/li>\r\n          <li><b>\u30af\u30e9\u30b9\u5c5e\u6027\u540c\u6642\u5909\u63db\uff1a<\/b> \u30bf\u30b0\u5909\u63db\u3068\u540c\u6642\u306bclass\u5c5e\u6027\u3082\u6307\u5b9a\u53ef\u80fd<\/li>\r\n          <li><b>\u4e00\u62ec\u51e6\u7406\uff1a<\/b> \u5927\u91cf\u306eHTML\u30b3\u30fc\u30c9\u3092\u77ac\u6642\u306b\u4e00\u62ec\u5909\u63db<\/li>\r\n        <\/ul>\r\n        \r\n        <h5 class=\"fz-sm hdg-explanation mb-0.25pc\">\ud83c\udfaf \u6d3b\u7528\u30b7\u30fc\u30f3<\/h5>\r\n        <ul class=\"fz-ss mb-1r\">\r\n          <li><b>CMS\u79fb\u884c\uff1a<\/b> WordPress\u304b\u3089\u4ed6CMS\u3078\u306e\u79fb\u884c\u6642\u306bHTML\u30bf\u30b0\u69cb\u9020\u3092\u7d71\u4e00<\/li>\r\n          <li><b>SEO\u6700\u9069\u5316\uff1a<\/b> \u53e4\u3044\u30b5\u30a4\u30c8\u3092\u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30afHTML\u306b\u6539\u4fee<\/li>\r\n          <li><b>\u30ec\u30b9\u30dd\u30f3\u30b7\u30d6\u5316\uff1a<\/b> PC\u30b5\u30a4\u30c8\u3092\u30e2\u30d0\u30a4\u30eb\u5bfe\u5fdcHTML\u306b\u5909\u63db<\/li>\r\n          <li><b>\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u5bfe\u5fdc\uff1a<\/b> WCAG\u6e96\u62e0\u306eHTML\u306b\u4e00\u62ec\u5909\u63db<\/li>\r\n          <li><b>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u79fb\u884c\uff1a<\/b> Bootstrap\u2192Tailwind CSS\u7b49\u306e\u5909\u63db<\/li>\r\n        <\/ul>\r\n        \r\n        <h5 class=\"fz-sm hdg-explanation mb-0.25pc\">\u2699\ufe0f \u5909\u63db\u30eb\u30fc\u30eb\u4f8b<\/h5>\r\n        <ul class=\"fz-ss\">\r\n          <li><b>&lt;strong&gt; \u2192 &lt;b class=\"bold\"&gt;\uff1a<\/b> \u30ab\u30b9\u30bf\u30e0\u30b9\u30bf\u30a4\u30eb\u3078\u306e\u7d71\u4e00<\/li>\r\n          <li><b>&lt;div&gt; \u2192 &lt;section&gt;\uff1a<\/b> \u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30af\u306a\u69cb\u9020\u3078\u306e\u5909\u63db<\/li>\r\n          <li><b>&lt;span&gt; \u2192 &lt;em&gt;\uff1a<\/b> \u610f\u5473\u7684\u306b\u9069\u5207\u306a\u30bf\u30b0\u3078\u306e\u5909\u63db<\/li>\r\n          <li><b>&lt;table&gt; \u2192 &lt;div class=\"table-responsive\"&gt;\uff1a<\/b> \u30ec\u30b9\u30dd\u30f3\u30b7\u30d6\u5bfe\u5fdc<\/li>\r\n        <\/ul>\r\n      <\/div><!-- \/\/\/.box -->\r\n    <\/div><!-- \/\/\/.interior -->\r\n  <\/section><!-- \/\/\/.section -->\r\n\r\n\r\n  <!-- \u0f3b\u00a7\ud835\udc03\ud835\udc04\ud835\udc0f\ud835\udc00\ud835\udc11\ud835\udc13\ud835\udc0c\ud835\udc04\ud835\udc0d\ud835\udc13\u0f3a -->\r\n  <hr id=\"ch-Relation\" anchor \/>\r\n  <section class=\"sect-cnvtVkaA-Relation pt-3r\" style=\"contain-intrinsic-size:1000px;\">\r\n    <div class=\"section__interior mx-auto scroll-fadeIn\">\r\n      <div class=\"hgroup-wrapper mb-0.5pc\">\r\n        <h5 class=\"hdg-relation fz-rg\"><span>\u95a2\u9023\u30c4\u30fc\u30eb<\/span><\/h5>\r\n      <\/div><!-- \/\/\/.hgroup -->\r\n\r\n      <ul class=\"shelf-wrapper_pc shelfA\" data-cols_pc=\"2\">\r\n        <li class=\"slide\">\r\n          <a href=\"https:\/\/code-plus.jp\/gp\/tools\/markdown-converter\/\" class=\"linkbox\">\r\n              <picture class=\"linkbox-thumbnail\">\r\n                <img decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/code-plus.jp\/gp\/wp-content\/uploads\/Markdown_2410161832.jpg?ver=20260610141808\" alt=\"Markdown\u8a18\u6cd5 HTML\u5909\u63db\u30c4\u30fc\u30eb\" loading=\"lazy\" \/>\r\n              <\/picture>\r\n              <h4 class=\"linkbox-title fz-md\">Markdown\u8a18\u6cd5 HTML\u5909\u63db\u30c4\u30fc\u30eb<\/h4>\r\n              <span class=\"linkbox-excerpt\">\r\n                Markdown\u8a18\u6cd5\u3092HTML\u306b\u5909\u63db\u3002\u30c6\u30fc\u30d6\u30eb\u3001\u30ea\u30b9\u30c8\u8a18\u6cd5\u3092\u5b8c\u5168\u30b5\u30dd\u30fc\u30c8\u3002\r\n              <\/span>\r\n          <\/a>\r\n        <\/li>\r\n        <li class=\"slide\">\r\n          <a href=\"https:\/\/code-plus.jp\/gp\/tools\/eyecatch-generator\/\" class=\"linkbox\">\r\n              <picture class=\"linkbox-thumbnail\">\r\n                <img decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/code-plus.jp\/gp\/wp-content\/uploads\/9f123ad809acd36a5d71db4bb292d52e.jpg?ver=20260610141808\" alt=\"\u30bf\u30a4\u30c8\u30eb\u4ed8\u304d\u306e\u30a2\u30a4\u30ad\u30e3\u30c3\u30c1\u753b\u50cf\u751f\u6210\u30c4\u30fc\u30eb\" loading=\"lazy\" \/>\r\n              <\/picture>\r\n              <h4 class=\"linkbox-title fz-md\">\u30bf\u30a4\u30c8\u30eb\u4ed8\u304d\u306e\u30a2\u30a4\u30ad\u30e3\u30c3\u30c1\u753b\u50cf\u751f\u6210\u30c4\u30fc\u30eb<\/h4>\r\n              <span class=\"linkbox-excerpt\">\r\n                \u30c6\u30ad\u30b9\u30c8\u3092\u7f8e\u3057\u3044\u753b\u50cf\u306b\u5909\u63db\u3002SNS\u6295\u7a3f\u3001\u30d0\u30ca\u30fc\u4f5c\u6210\u306b\u6700\u9069\u3002\r\n              <\/span>\r\n          <\/a>\r\n        <\/li>\r\n      <\/ul><!-- \/\/\/.shelf -->\r\n    <\/div><!-- \/\/\/.interior -->\r\n  <\/section><!-- \/\/\/.section -->\r\n\r\n\r\n\r\n\r\n  <!-- \u0f3b.mediano\uff08\u4f59\u767d\u8abf\u6574\uff1apage\u4e0b\uff09\u0f3a -->\r\n  <hr class=\"spacer-mediano\" \/>\r\n\r\n<\/div><!-- \/\/\/\u25b2.page  -->\r\n\r\n\r\n\r\n\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/marked\/marked.min.js\"><\/script>\r\n<script src=\"https:\/\/unpkg.com\/turndown\/dist\/turndown.js\"><\/script>\r\n<script>\r\n  \/\/\u5de6\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2 \u2192 \u53f3\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2\u3078\u306e\u5909\u63db\r\n  function encodeText() {\r\n    let encode_area = document.getElementById('encodeArea');\r\n    let decode_area = document.getElementById('decodeArea');\r\n    let text = encode_area.value;\r\n\r\n    \/\/\u6307\u5b9a\u306e\u30bf\u30b0\u3092 \u2192 \u4efb\u610f\u306e\u30bf\u30b0 \u306b\u5909\u63db\r\n    if (document.getElementById('convertUpdateTag1s').checked ||\r\n      document.getElementById('convertUpdateTag2s').checked ||\r\n      document.getElementById('convertUpdateTag3s').checked ||\r\n      document.getElementById('convertUpdateTag4s').checked ||\r\n      document.getElementById('convertUpdateTag5s').checked ||\r\n      document.getElementById('convertUpdateTag6s').checked) {\r\n      text = processAllTagUpdates(text);\r\n    }\r\n\r\n    decode_area.value = text;\r\n    copyToClipboard(text, false);  \/\/isDecode = false\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/AI\u6587\u7ae0\u3092\u81ea\u7136\u306a\u8868\u73fe\u306b\u4fee\u6b63\r\n  function fixAiWriting(text) {\r\n    \/\/ 1. \u30ea\u30b9\u30c8\u306e\u904e\u5ea6\u306a\u5f37\u8abf\u3092\u4fee\u6b63\r\n    text = fixListEmphasis(text);\r\n\r\n    \/\/ 2. \u8a87\u5f35\u8868\u73fe\u3092\u7a4f\u3084\u304b\u306b\r\n    text = fixHypeExpressions(text);\r\n\r\n    \/\/ 3. \u904e\u5ea6\u306a\u5f37\u8abf\u30d1\u30bf\u30fc\u30f3\u3092\u524a\u9664\r\n    text = fixExcessiveEmphasis(text);\r\n\r\n    return text;\r\n  }\r\n\r\n  \/\/ \u30ea\u30b9\u30c8\u306e\u904e\u5ea6\u306a\u5f37\u8abf\u3092\u4fee\u6b63\r\n  function fixListEmphasis(text) {\r\n    \/\/ **\u5f37\u8abf**: \u30c6\u30ad\u30b9\u30c8 \u2192 \u5f37\u8abf\u306a\u30c6\u30ad\u30b9\u30c8\r\n    text = text.replace(\/^(\\s*[-*+]\\s+)\\*\\*([^*:\uff1a]+)\\*\\*\\s*[:\uff1a]\\s*(.+)$\/gm, '$1$2\u306a$3');\r\n\r\n    \/\/ \u7d75\u6587\u5b57\u4ed8\u304d\u30ea\u30b9\u30c8\u30a2\u30a4\u30c6\u30e0\u306e\u7d75\u6587\u5b57\u3092\u524a\u9664\r\n    const emojiPatterns = [\r\n      \/^(\\s*[-*+]\\s+)[\u2705\u274c\ud83d\udca1\ud83d\udd25\ud83d\ude80\u2b50\ud83c\udfaf\ud83d\udcdd\u26a1\u2728\ud83c\udf89\ud83d\udc4d\ud83d\udc4e\u26a0\ufe0f\ud83d\udcaf\ud83d\udd34\ud83d\udfe2\ud83d\udfe1]\/gm\r\n    ];\r\n\r\n    emojiPatterns.forEach(pattern => {\r\n      text = text.replace(pattern, '$1');\r\n    });\r\n\r\n    return text;\r\n  }\r\n\r\n  \/\/ \u8a87\u5f35\u8868\u73fe\u3092\u7a4f\u3084\u304b\u306b\r\n  function fixHypeExpressions(text) {\r\n    const replacements = {\r\n      \/\/ \u7d76\u5bfe\u6027\u30fb\u5b8c\u5168\u6027\u3092\u6f14\u51fa\u3059\u308b\u8868\u73fe\r\n      '\u9769\u547d\u7684\u306a': '\u52b9\u679c\u7684\u306a',\r\n      '\u9769\u547d\u7684\u306b': '\u52b9\u679c\u7684\u306b',\r\n      '\u30b2\u30fc\u30e0\u30c1\u30a7\u30f3\u30b8\u30e3\u30fc': '\u5927\u304d\u306a\u5909\u5316',\r\n      '\u30b2\u30fc\u30e0\u30c1\u30a7\u30f3\u30b8\u30f3\u30b0': '\u5927\u304d\u304f\u5909\u5316\u3055\u305b\u308b',\r\n      '\u4e16\u754c\u521d': '\u65b0\u3057\u3044',\r\n      '\u696d\u754c\u521d': '\u65b0\u3057\u3044',\r\n      '\u7a76\u6975\u306e': '\u512a\u308c\u305f',\r\n      '\u7a76\u6975': '\u512a\u308c\u305f\u7d50\u679c',\r\n      '\u5b8c\u5168\u306b': '\u591a\u304f\u306e',\r\n      '\u5b8c\u74a7\u306b': '\u9069\u5207\u306b',\r\n      '\u3059\u3079\u3066\u306e': '\u4e3b\u8981\u306a',\r\n      '\u5168\u3066\u306e': '\u4e3b\u8981\u306a',\r\n      '\u6700\u9ad8\u306e': '\u9ad8\u3044',\r\n\r\n      \/\/ \u62bd\u8c61\u7684\u30fb\u611f\u899a\u7684\u52b9\u679c\u3092\u6f14\u51fa\u3059\u308b\u8868\u73fe\r\n      '\u9b54\u6cd5\u306e\u3088\u3046\u306b': '\u30b9\u30e0\u30fc\u30ba\u306b',\r\n      '\u9b54\u6cd5\u306e': '\u52b9\u679c\u7684\u306a',\r\n      '\u5947\u8de1\u7684\u306a': '\u512a\u308c\u305f',\r\n      '\u5947\u8de1\u306e': '\u512a\u308c\u305f',\r\n      '\u53ef\u80fd\u6027\u3092\u89e3\u304d\u653e\u3064': '\u65b0\u305f\u306a\u6a5f\u4f1a\u3092\u5275\u51fa\u3059\u308b',\r\n      '\u89e3\u304d\u653e\u3064': '\u6d3b\u7528\u3059\u308b',\r\n      '\u6c11\u4e3b\u5316\u3059\u308b': '\u5229\u7528\u3057\u3084\u3059\u304f\u3059\u308b',\r\n      '\u6c11\u4e3b\u5316': '\u5229\u7528\u3057\u3084\u3059\u3055',\r\n      '\u30b9\u30fc\u30d1\u30fc\u30c1\u30e3\u30fc\u30b8': '\u52b9\u7387\u5316',\r\n      '\u30b9\u30fc\u30d1\u30fc\u30c1\u30e3\u30fc\u30b8\u3059\u308b': '\u52b9\u7387\u5316\u3059\u308b',\r\n\r\n      \/\/ \u6a29\u5a01\u7684\u30fb\u4e88\u8a00\u7684\u306a\u8868\u73fe\r\n      '\u518d\u5b9a\u7fa9\u3059\u308b': '\u65b0\u3057\u3044\u8996\u70b9\u3092\u3082\u305f\u3089\u3059',\r\n      '\u518d\u5b9a\u7fa9': '\u65b0\u3057\u3044\u8996\u70b9',\r\n      '\u672a\u6765\u3092\u5909\u3048\u308b': '\u5c06\u6765\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u308b',\r\n      '\u30d1\u30e9\u30c0\u30a4\u30e0\u30b7\u30d5\u30c8': '\u5927\u304d\u306a\u5909\u5316',\r\n      '\u4e0d\u53ef\u907f': '\u91cd\u8981',\r\n      '\u4e0d\u53ef\u907f\u306e': '\u91cd\u8981\u306a',\r\n      '\u6b21\u4e16\u4ee3\u306e': '\u65b0\u3057\u3044',\r\n      '\u6b21\u4e16\u4ee3': '\u65b0\u3057\u3044\u4e16\u4ee3'\r\n    };\r\n\r\n    \/\/ \u5404\u30d1\u30bf\u30fc\u30f3\u3092\u7f6e\u63db\r\n    for (const [from, to] of Object.entries(replacements)) {\r\n      const regex = new RegExp(from.replace(\/[.*+?^${}()|[\\]\\\\]\/g, '\\\\$&'), 'g');\r\n      text = text.replace(regex, to);\r\n    }\r\n\r\n    return text;\r\n  }\r\n\r\n  \/\/ \u904e\u5ea6\u306a\u5f37\u8abf\u30d1\u30bf\u30fc\u30f3\u3092\u524a\u9664\r\n  function fixExcessiveEmphasis(text) {\r\n    \/\/ **\u975e\u5e38\u306b** \u2192 \u524a\u9664\r\n    text = text.replace(\/\\*\\*\u975e\u5e38\u306b\\*\\*\/g, '');\r\n    text = text.replace(\/\\*\\*\u3068\u3066\u3082\\*\\*\/g, '');\r\n    text = text.replace(\/\\*\\*\u3059\u3054\u304f\\*\\*\/g, '');\r\n    text = text.replace(\/\\*\\*\u304b\u306a\u308a\\*\\*\/g, '');\r\n\r\n    \/\/ \u5358\u8a9e\u306e\u5f37\u8abf\u30d1\u30bf\u30fc\u30f3\u3092\u524a\u9664\uff08\u7279\u5b9a\u306e\u60c5\u5831\u7cfb\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\uff09\r\n    \/\/ **\u6ce8\u610f** \u2192 \u6ce8\u610f\r\n    text = text.replace(\/\\*\\*\u6ce8\u610f\\*\\*\/g, '\u6ce8\u610f');\r\n    text = text.replace(\/\\*\\*\u91cd\u8981\\*\\*\/g, '\u91cd\u8981');\r\n    text = text.replace(\/\\*\\*\u30dd\u30a4\u30f3\u30c8\\*\\*\/g, '\u30dd\u30a4\u30f3\u30c8');\r\n    text = text.replace(\/\\*\\*\u30d2\u30f3\u30c8\\*\\*\/g, '\u30d2\u30f3\u30c8');\r\n    text = text.replace(\/\\*\\*\u88dc\u8db3\\*\\*\/g, '\u88dc\u8db3');\r\n\r\n    \/\/ \u898b\u51fa\u3057\u5185\u306e\u5f37\u8abf\u3092\u524a\u9664\r\n    \/\/ # **\u30bf\u30a4\u30c8\u30eb** \u2192 # \u30bf\u30a4\u30c8\u30eb\r\n    text = text.replace(\/^(#{1,6}\\s+)\\*\\*(.+?)\\*\\*$\/gm, '$1$2');\r\n\r\n    return text;\r\n  }\r\n\r\n\r\n  \/\/Markdown\u8a18\u6cd5\u3092 \u2192 HTML \u306b\u5909\u63db\r\n  \/\/ ============================================================\r\n  \/\/ \u2605\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u4fdd\u8b77\u6a5f\u69cb\u2605\uff08\u624b\u52d5\u30d1\u30fc\u30b5\u30fc\u7248\uff09\r\n  \/\/ GFM\/CommonMark \u4ed5\u69d8\u6e96\u62e0\uff1a\r\n  \/\/   - \u884c\u982d\u306e3\u9023\u4ee5\u4e0a\u306e\u30d0\u30c3\u30af\u30af\u30a9\u30fc\u30c8\u3067\u30d5\u30a7\u30f3\u30b9\u30c9\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u958b\u59cb\r\n  \/\/   - \u300c\u958b\u59cb\u3068\u540c\u6570\u4ee5\u4e0a\u306e\u300d\u30d0\u30c3\u30af\u30af\u30a9\u30fc\u30c8 + (\u6539\u884c or \u672b\u5c3e) \u3067\u9589\u3058\u308b\r\n  \/\/   - \u9589\u3058\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u30d5\u30a1\u30a4\u30eb\u672b\u5c3e\u307e\u3067\u3092\u4fdd\u8b77\u5bfe\u8c61\r\n  \/\/\r\n  \/\/ \u3053\u308c\u306b\u3088\u308a\u3001\u5916\u5074 ```` (4\u9023) ```` \u3067\u56f2\u307e\u308c\u305f\u4e2d\u306b ``` (3\u9023) \u3092\u542b\u3080\u30cd\u30b9\u30c8\u69cb\u9020\u3082\r\n  \/\/ \u6b63\u3057\u304f1\u3064\u306e\u30d6\u30ed\u30c3\u30af\u3068\u3057\u3066\u4fdd\u8b77\u3067\u304d\u308b\u3002\r\n  \/\/\r\n  \/\/ \u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u306f\u82f1\u5927\u6587\u5b57\u306e\u307f\uff08XCBPX\uff09\u3092\u4f7f\u3044\u3001marked\u306e\u659c\u4f53(_x_)\u30fb\u592a\u5b57(__x__)\r\n  \/\/ \u306a\u3069\u306e\u8aa4\u8a8d\u8b58\u3092\u56de\u907f\u3059\u308b\u3002\r\n  \/\/ ============================================================\r\n  function protectCodeBlocks(text, store) {\r\n    let result = '';\r\n    let pos = 0;\r\n    const len = text.length;\r\n\r\n    while (pos < len) {\r\n      \/\/ \u884c\u982d\u5224\u5b9a\uff08pos=0\u3001\u307e\u305f\u306f\u76f4\u524d\u304c \\n\uff09\r\n      const atLineStart = (pos === 0) || (text.charAt(pos - 1) === '\\n');\r\n\r\n      if (atLineStart) {\r\n        \/\/ \u884c\u982d\u3067\u30d5\u30a7\u30f3\u30b9\u958b\u59cb\uff083\u9023\u4ee5\u4e0a\u306e\u30d0\u30c3\u30af\u30af\u30a9\u30fc\u30c8 + \u8a00\u8a9e\u6307\u5b9a + \u6539\u884c\uff09\u3092\u30c1\u30a7\u30c3\u30af\r\n        const rest = text.substring(pos);\r\n        const fenceMatch = rest.match(\/^(`{3,})([^\\n`]*)\\n\/);\r\n\r\n        if (fenceMatch) {\r\n          const fenceLen = fenceMatch[1].length;\r\n          const lang = fenceMatch[2].trim();\r\n          const contentStart = pos + fenceMatch[0].length;\r\n\r\n          \/\/ \u9589\u3058\u30d5\u30a7\u30f3\u30b9\uff08fenceLen\u500b\u4ee5\u4e0a\u306e\u30d0\u30c3\u30af\u30af\u30a9\u30fc\u30c8\u3001\u884c\u982d\u3001\u305d\u306e\u5f8c \\n \u307e\u305f\u306f\u672b\u5c3e\uff09\u3092\u63a2\u3059\r\n          \/\/ \u884c\u30d9\u30fc\u30b9\u3067\u8d70\u67fb\u3057\u3066\u3001\u30d5\u30a7\u30f3\u30b9\u306b\u30de\u30c3\u30c1\u3059\u308b\u884c\u3092\u898b\u3064\u3051\u308b\r\n          let contentEnd = len;\r\n          let blockEnd = len;\r\n          let scanPos = contentStart;\r\n\r\n          while (scanPos < len) {\r\n            \/\/ \u884c\u672b\u3092\u63a2\u3059\r\n            const nextNl = text.indexOf('\\n', scanPos);\r\n            const lineEnd = (nextNl === -1) ? len : nextNl;\r\n            const line = text.substring(scanPos, lineEnd);\r\n\r\n            \/\/ \u3053\u306e\u884c\u304c\u9589\u3058\u30d5\u30a7\u30f3\u30b9\u304b\u30c1\u30a7\u30c3\u30af\uff08\u884c\u5168\u4f53\u304c fenceLen\u500b\u4ee5\u4e0a\u306e\u30d0\u30c3\u30af\u30af\u30a9\u30fc\u30c8\u3001\u672b\u5c3e\u306e\u7a7a\u767d\u306f\u8a31\u5bb9\uff09\r\n            const closeMatch = line.match(\/^(`{3,})\\s*$\/);\r\n            if (closeMatch && closeMatch[1].length >= fenceLen) {\r\n              \/\/ \u9589\u3058\u30d5\u30a7\u30f3\u30b9\u3092\u767a\u898b\r\n              contentEnd = scanPos - 1; \/\/ \u76f4\u524d\u306e \\n \u306f\u4e2d\u8eab\u306b\u542b\u3081\u306a\u3044\r\n              blockEnd = (nextNl === -1) ? len : (nextNl + 1); \/\/ \u6539\u884c\u3082\u542b\u3081\u3066\u30d6\u30ed\u30c3\u30af\u7d42\u4e86\r\n              break;\r\n            }\r\n\r\n            if (nextNl === -1) {\r\n              \/\/ \u30d5\u30a1\u30a4\u30eb\u672b\u5c3e\u306b\u5230\u9054\u3001\u9589\u3058\u30d5\u30a7\u30f3\u30b9\u306a\u3057\r\n              contentEnd = len;\r\n              blockEnd = len;\r\n              break;\r\n            }\r\n            scanPos = nextNl + 1;\r\n          }\r\n\r\n          \/\/ contentEnd\u306e\u8abf\u6574\uff08\u4e2d\u8eab\u304c\u7a7a\u306e\u30b1\u30fc\u30b9\u3067\u8ca0\u306b\u306a\u308b\u306e\u3092\u9632\u3050\uff09\r\n          if (contentEnd < contentStart) contentEnd = contentStart;\r\n\r\n          const content = text.substring(contentStart, contentEnd);\r\n          const idx = store.length;\r\n          store.push({ type: 'fence', lang: lang, content: content });\r\n          \/\/ \u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u306e\u524d\u5f8c\u306b\u7a7a\u884c\u3092\u631f\u3080\u3002\r\n          \/\/ \u3053\u308c\u306b\u3088\u308amarked.js\u304c\u72ec\u7acb\u3057\u305f\u30d6\u30ed\u30c3\u30af\u8981\u7d20\u3068\u3057\u3066\u6271\u3044\u3001\r\n          \/\/ \u76f4\u524d\u306e\u898b\u51fa\u3057\u3084\u76f4\u5f8c\u306e\u6bb5\u843d\u30fbsetext\u898b\u51fa\u3057\uff08---\uff09\u3068\u6df7\u3056\u308b\u306e\u3092\u9632\u3050\u3002\r\n          \/\/ \u91cd\u8907\u3057\u305f\u6539\u884c\u306f\u6700\u5f8c\u306brestoreCodeBlocks\u3067\u6b63\u898f\u5316\u3059\u308b\u3002\r\n          result += '\\n\\nXCBPX' + idx + 'XCBPX\\n\\n';\r\n          pos = blockEnd;\r\n          continue;\r\n        }\r\n      }\r\n\r\n      \/\/ \u30d5\u30a7\u30f3\u30b9\u958b\u59cb\u3067\u306a\u3044\u5834\u5408\uff1a1\u884c\u305a\u3064\u9032\u3081\u308b\r\n      \/\/ \u305f\u3060\u3057\u3001\u884c\u5185\u306b\u30a4\u30f3\u30e9\u30a4\u30f3\u30b3\u30fc\u30c9\u304c\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u306e\u3067\u3001\u5f8c\u3067\u5225\u9014\u51e6\u7406\r\n      const nextNl = text.indexOf('\\n', pos);\r\n      if (nextNl === -1) {\r\n        result += text.substring(pos);\r\n        break;\r\n      }\r\n      result += text.substring(pos, nextNl + 1);\r\n      pos = nextNl + 1;\r\n    }\r\n\r\n    \/\/ \u30a4\u30f3\u30e9\u30a4\u30f3\u30b3\u30fc\u30c9\uff08`\uff5e`\uff09\u3092\u4fdd\u8b77\r\n    \/\/ \u30d5\u30a7\u30f3\u30b9\u30c9\u306f\u65e2\u306b\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u5316\u6e08\u307f\u306a\u306e\u3067\u3001\u6b8b\u3063\u305f\u30d0\u30c3\u30af\u30af\u30a9\u30fc\u30c8\u306f\u30a4\u30f3\u30e9\u30a4\u30f3\u306e\u307f\r\n    \/\/ \u30d0\u30c3\u30af\u30b9\u30e9\u30c3\u30b7\u30e5\u30a8\u30b9\u30b1\u30fc\u30d7\u3055\u308c\u305f \\` \u306f\u5bfe\u8c61\u5916\r\n    result = result.replace(\/(^|[^\\\\`])`([^`\\n]+)`\/g, function (m, prefix, content) {\r\n      const idx = store.length;\r\n      store.push({ type: 'inline', content: content });\r\n      return prefix + 'XCBPX' + idx + 'XCBPX';\r\n    });\r\n\r\n    return result;\r\n  }\r\n\r\n  function restoreCodeBlocks(text, store) {\r\n    \/\/ HTML\u30a8\u30b9\u30b1\u30fc\u30d7\u7528\r\n    const escapeHtml = function (s) {\r\n      return s\r\n        .replace(\/&\/g, '&amp;')\r\n        .replace(\/<\/g, '&lt;')\r\n        .replace(\/>\/g, '&gt;');\r\n    };\r\n\r\n    \/\/ \u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u3092\u5f8c\u308d\u304b\u3089\u9806\u306b\u623b\u3059\uff08\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u885d\u7a81\u9632\u6b62\uff09\r\n    for (let i = store.length - 1; i >= 0; i--) {\r\n      const item = store[i];\r\n      const placeholder = 'XCBPX' + i + 'XCBPX';\r\n      let replacement;\r\n\r\n      if (item.type === 'fence') {\r\n        const langClass = item.lang ? ('language-' + item.lang) : 'language-';\r\n        replacement = '<pre><code class=\"' + langClass + '\">' + escapeHtml(item.content) + '<\/code><\/pre>';\r\n      } else {\r\n        replacement = '<code>' + escapeHtml(item.content) + '<\/code>';\r\n      }\r\n\r\n      \/\/ marked.js\u304c\u30d5\u30a7\u30f3\u30b9\u30c9\u306e\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u3092 <p>...<\/p> \u3067\u5305\u3080\u5834\u5408\u304c\u3042\u308b\u306e\u3067\u9664\u53bb\r\n      if (item.type === 'fence') {\r\n        const wrapped = new RegExp('<p>\\\\s*' + placeholder + '\\\\s*<\/p>', 'g');\r\n        text = text.replace(wrapped, replacement);\r\n      }\r\n\r\n      \/\/ \u901a\u5e38\u306e\u7f6e\u63db\r\n      text = text.split(placeholder).join(replacement);\r\n    }\r\n\r\n    return text;\r\n  }\r\n\r\n\r\n  function convertMd2Html(text) {\r\n    \/\/ \u65e5\u672c\u8a9e\u6587\u5b57\u3068**\u306e\u7d44\u307f\u5408\u308f\u305b\u3092\u524d\u51e6\u7406\u3067\u8abf\u6574\r\n    \/\/ **\u306e\u76f4\u5f8c\u306b\u65e5\u672c\u8a9e\u304c\u3042\u308b\u5834\u5408\u3001marked.js\u304c\u8a8d\u8b58\u3067\u304d\u308b\u3088\u3046\u306b\u8abf\u6574\r\n    text = fixJapaneseEmphasis(text);\r\n\r\n    text = marked.parse(text);\r\n    text = text.replace(\/<pre><code>\/g, '<pre><code class=\"language-\">'); \/\/Prism.js\u5f62\u5f0f\u306b\u7f6e\u63db\r\n\r\n    \/\/<pre>\u30bf\u30b0\u5185\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u4e00\u6642\u7684\u306b\u4fdd\u8b77\r\n    const preBlocks = [];\r\n    let preIndex = 0;\r\n\r\n    \/\/<pre>\uff5e<\/pre>\u306e\u30d6\u30ed\u30c3\u30af\u3092\u62bd\u51fa\u3057\u3066\u4e00\u6642\u7684\u306a\u30de\u30fc\u30ab\u30fc\u306b\u7f6e\u63db\r\n    text = text.replace(\/<pre[^>]*>[\\s\\S]*?<\\\/pre>\/g, function (match) {\r\n      const marker = `___PRE_BLOCK_${preIndex}___`;\r\n      preBlocks.push(match);\r\n      preIndex++;\r\n      return marker;\r\n    });\r\n\r\n    \/\/<pre>\u4ee5\u5916\u306e\u90e8\u5206\u306e\u30a4\u30f3\u30c7\u30f3\u30c8\u3092\u524a\u9664\r\n    text = text.split('\\n').map(line => line.trim()).filter(line => line !== '').join('\\n');\r\n\r\n    \/\/\u4fdd\u8b77\u3057\u3066\u3044\u305f<pre>\u30d6\u30ed\u30c3\u30af\u3092\u5143\u306b\u623b\u3059\r\n    preBlocks.forEach((block, index) => {\r\n      const marker = `___PRE_BLOCK_${index}___`;\r\n      text = text.replace(marker, block);\r\n    });\r\n\r\n    \/\/ \u5916\u90e8\u30ea\u30f3\u30af\u306b <cite> \u3068 target=\"_blank\" \u3092\u8ffd\u52a0\uff08code-plus.jp \u4ee5\u5916\uff09\r\n    text = text.replace(\/<a\\s+href=\"([^\"]*)\"([^>]*)>([\\s\\S]*?)<\\\/a>\/gi, function (match, href, attrs, content) {\r\n      if (href.indexOf('code-plus.jp') === -1) {\r\n        return '<cite><a href=\"' + href + '\" target=\"_blank\"' + attrs + '>' + content + '<\/a><\/cite>';\r\n      }\r\n      return match;\r\n    });\r\n\r\n    \/\/ [ ] \u3092 &lsqb; &rsqb; \u306b\u5909\u63db\uff08WordPress\u30b7\u30e7\u30fc\u30c8\u30b3\u30fc\u30c9\u8aa4\u52d5\u4f5c\u9632\u6b62\uff09\r\n    \/\/ <pre>\u5185\u3082\u542b\u3081\u5168\u4f53\u3092\u5909\u63db\r\n    text = text.replace(\/\\[\/g, '&lsqb;');\r\n    text = text.replace(\/\\]\/g, '&rsqb;');\r\n\r\n    return text;\r\n  }\r\n\r\n  \/\/ \u65e5\u672c\u8a9e\u3068**\u306e\u7d44\u307f\u5408\u308f\u305b\u3092\u8abf\u6574\u3059\u308b\u95a2\u6570\r\n  function fixJapaneseEmphasis(text) {\r\n    \/\/ **\u3067\u56f2\u307e\u308c\u305f\u90e8\u5206\u3092\u4e00\u6642\u7684\u306b\u30de\u30fc\u30ab\u30fc\u306b\u7f6e\u304d\u63db\u3048\r\n    const emphasisMarkers = [];\r\n    let markerIndex = 0;\r\n\r\n    \/\/ **text**\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u691c\u51fa\uff08\u8caa\u6b32\u3067\u306a\u3044\u6700\u77ed\u30de\u30c3\u30c1\uff09\r\n    text = text.replace(\/\\*\\*(.+?)\\*\\*\/g, function (match, content) {\r\n      const marker = `___EMPHASIS_MARKER_${markerIndex}___`;\r\n      emphasisMarkers.push(content);\r\n      markerIndex++;\r\n      return marker;\r\n    });\r\n\r\n    \/\/ \u30de\u30fc\u30ab\u30fc\u3092<strong>\u30bf\u30b0\u306b\u7f6e\u304d\u63db\u3048\uff08marked.js\u3092\u901a\u3055\u305a\u76f4\u63a5\u5909\u63db\uff09\r\n    emphasisMarkers.forEach((content, index) => {\r\n      const marker = `___EMPHASIS_MARKER_${index}___`;\r\n      text = text.replace(marker, `<strong>${content}<\/strong>`);\r\n    });\r\n\r\n    return text;\r\n  }\r\n\r\n\r\n\r\n  \/\/\u3059\u3079\u3066\u306e\u30bf\u30b0\u3092\u9664\u53bb\r\n  function removeTags(text) {\r\n    text = text.replace(\/<style\\b[^<]*(?:(?!<\\\/style>)<[^<]*)*<\\\/style>\/gi, '');  \/\/<style> \u30bf\u30b0\u3068\u305d\u306e\u5185\u5bb9\u3092\u524a\u9664\r\n    text = text.split('\\n').map(line => line.trim()).join('\\n');\r\n    text = text.replace(\/<[^>]*>\/g, '');\r\n    text = text.trim(); \/\/\u6700\u5f8c\u306b\u5148\u982d\u3068\u672b\u5c3e\u306e\u7a7a\u767d\u3092\u524a\u9664\r\n    return text;\r\n  }\r\n\r\n\r\n  \/\/< >\u3092 \u2192 &lt; &gt; \u306b\u5909\u63db\r\n  function convertEntityLtGts(text) { return text.replace(\/<\/g, '&lt;').replace(\/>\/g, '&gt;'); }\r\n\r\n\r\n  \/\/\u5168\u3066\u306e\u6539\u884c\u3092\u524a\u9664\r\n  function removeLineBreaks(text) { return text.replace(\/\\n\/g, ''); }\r\n\r\n  \/\/\u5358\u4e00\u6539\u884c\u3092\u524a\u9664\u3001\u9023\u7d9a\u6539\u884c\u306f\uff11\u3064\u6e1b\u3089\u3059\r\n  function adjustLineBreaks(text) {\r\n    text = text.replace(\/\\n\\n\\n\\n\/g, '<QuadrupleNewLine>');\r\n    text = text.replace(\/\\n\\n\\n\/g, '<TripleNewLine>');\r\n    text = text.replace(\/\\n\\n\/g, '<DoubleNewLine>');\r\n    text = text.replace(\/\\n\/g, '');\r\n    text = text.replace(\/<QuadrupleNewLine>\/g, '\\n\\n\\n');\r\n    text = text.replace(\/<TripleNewLine>\/g, '\\n\\n');\r\n    text = text.replace(\/<DoubleNewLine>\/g, '\\n');\r\n    return text;\r\n  }\r\n\r\n  \/\/\u6539\u884c\u3092 \u2192 <br \/> \u306b\u5909\u63db\r\n  function convertTagBreaks(text) { return text.replace(\/\\n\/g, '<br \/>\\n'); }\r\n\r\n  \/\/\u6539\u884c\u3092 \u2192 &#13;&#10; \u306b\u5909\u63db\r\n  function convertEntityNewLines(text) { return text.replace(\/\\n\/g, '&#13;&#10;'); }\r\n\r\n  \/\/\u6539\u884c\u3092 \u2192 \\A \u306b\u5909\u63db\r\n  function convertULineFeeds(text) { return text.replace(\/\\n\/g, '\\\\A'); }\r\n\r\n  \/\/\u30bf\u30d6\uff08\\t\uff09\u3092 \u2192 &#9; \u306b\u5909\u63db\r\n  function convertEntityTabs(text) { return text.replace(\/\\t\/g, '&#9;'); }\r\n\r\n  \/\/n+1\u756a\u76ee\u306e\u6539\u884c\u3092\u30bf\u30d6\u306b\u5909\u63db\r\n  function convertNthBreak2Tabs(text) {\r\n    const pattern = document.getElementById('nthBreakCount').value.trim();\r\n\r\n    \/\/\u30d1\u30bf\u30fc\u30f3\u306e\u89e3\u6790\r\n    let nth = 2; \/\/\u30c7\u30d5\u30a9\u30eb\u30c8\u306f2\u756a\u76ee\uff08\u5076\u6570\u756a\u76ee\uff09\r\n\r\n    if (pattern === 'n+1' || pattern === 'odd') {\r\n      \/\/\u5947\u6570\u756a\u76ee\uff081, 3, 5...\uff09\u306e\u6539\u884c\r\n      nth = 'odd';\r\n    } else if (pattern === 'n' || pattern === 'even') {\r\n      \/\/\u5076\u6570\u756a\u76ee\uff082, 4, 6...\uff09\u306e\u6539\u884c\r\n      nth = 'even';\r\n    } else if (pattern.match(\/^\\d+$\/)) {\r\n      \/\/\u7279\u5b9a\u306e\u756a\u53f7\u6307\u5b9a\uff082, 3, 4...\uff09\r\n      nth = parseInt(pattern);\r\n    }\r\n\r\n    \/\/\u884c\u3054\u3068\u306b\u5206\u5272\r\n    const lines = text.split('\\n');\r\n\r\n    if (nth === 'odd') {\r\n      \/\/\u5947\u6570\u756a\u76ee\u306e\u6539\u884c\u3092\u30bf\u30d6\u306b\u5909\u63db\uff082\u884c\u305a\u3064\u30da\u30a2\u306b\u3059\u308b\uff09\r\n      const result = [];\r\n      for (let i = 0; i < lines.length; i += 2) {\r\n        if (i + 1 < lines.length) {\r\n          result.push(lines[i] + '\\t' + lines[i + 1]);\r\n        } else {\r\n          result.push(lines[i]);\r\n        }\r\n      }\r\n      return result.join('\\n');\r\n    } else if (nth === 'even') {\r\n      \/\/\u5076\u6570\u756a\u76ee\u306e\u6539\u884c\u3092\u30bf\u30d6\u306b\u5909\u63db\r\n      const result = [];\r\n      for (let i = 0; i < lines.length; i++) {\r\n        if (i % 2 === 0 && i + 1 < lines.length) {\r\n          \/\/\u6b21\u306e\u884c\u3092\u8ffd\u52a0\u3057\u306a\u3044\uff08\u6b21\u306e\u30eb\u30fc\u30d7\u3067\u51e6\u7406\uff09\r\n          continue;\r\n        } else if (i % 2 === 1) {\r\n          \/\/\u524d\u306e\u884c\u3068\u30bf\u30d6\u3067\u7d50\u5408\r\n          result.push(lines[i - 1] + '\\t' + lines[i]);\r\n        } else {\r\n          \/\/\u6700\u5f8c\u306e\u884c\u304c\u5947\u6570\u756a\u76ee\u306e\u5834\u5408\r\n          result.push(lines[i]);\r\n        }\r\n      }\r\n      return result.join('\\n');\r\n    } else if (typeof nth === 'number' && nth > 0) {\r\n      \/\/\u7279\u5b9a\u756a\u53f7\u3054\u3068\u306e\u6539\u884c\u3092\u30bf\u30d6\u306b\u5909\u63db\r\n      const result = [];\r\n      let currentGroup = [];\r\n\r\n      for (let i = 0; i < lines.length; i++) {\r\n        currentGroup.push(lines[i]);\r\n\r\n        if (currentGroup.length === nth || i === lines.length - 1) {\r\n          result.push(currentGroup.join('\\t'));\r\n          currentGroup = [];\r\n        }\r\n      }\r\n      return result.join('\\n');\r\n    }\r\n\r\n    return text;\r\n  }\r\n\r\n  \/\/\uff12\u3064\u4ee5\u4e0a\u306e\u9023\u7d9a\u3059\u308b\u30b9\u30da\u30fc\u30b9\uff08\\s{X,}\uff09\u3092\u3001\u30bf\u30d6\uff08\\t\uff09 \u306b\u5909\u63db\r\n  function convert2spacesTabs(text, count) {\r\n    const regex = new RegExp(`\\\\s{${count},}`, 'g');\r\n    return text.replace(regex, '\\t');\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/\u5168\u89d2\u6587\u5b57\uff08\\x01-\\x7E\uff09\u3092 \u2192 \u303c \u306b\u5909\u63db\uff08\u3000|\u3001|\u3002|\u8a18\u53f7 \u306f\u9664\u5916\uff09\r\n  function convertFullWidths(text) {\r\n    return text\r\n      .replace(\/\u3000\/g, '\u2b1a')  \/\/\u5168\u89d2\u30b9\u30da\u30fc\u30b9\u3092 \u2192 \u2b1a \u306b\u5909\u63db\r\n      .replace(\/[^(?!.*(\u3000|\uff3f|\u2b1a|\u303c|\u3001|\u3002|\u30fb|\u2025|\u2026|\uff5e|\u203b|\u3012|\u25cf|\u25ef|\u25cc|\u25ce|\u25c9|\u29bf|\u25a0|\u25a1|\u25a3|\u25c6|\u25c7|\u25c8|\u25b2|\u25b3|\u25bc|\u25bd|\u25c0|\u25c1|\u25b6|\u25b7|\u2606|\u2605)).\\x01-\\x7E]\/g, '\u303c');\r\n  }\r\n\r\n  \/\/\u82f1\u5927\u6587\u5b57\u3092 \u2192 \u2341 \u306b\u5909\u63db\r\n  function convertAlphaUppers(text) { return text.replace(\/[A-Z]\/g, '\u2341'); }\r\n\r\n  \/\/\u82f1\u5c0f\u6587\u5b57\u3092 \u2192 \u29c4 \u306b\u5909\u63db\r\n  function convertAlphaLowers(text) { return text.replace(\/[a-z]\/g, '\u29c4'); }\r\n\r\n  \/\/\u6570\u5b57\u3092 \u2192 \u00f8 \u306b\u5909\u63db\r\n  function convertNumber0s(text) { return text.replace(\/[0-9]\/g, '\u00f8'); }\r\n\r\n  \/\/\u6570\u5b57\u3092 \u2192 \u30e9\u30f3\u30c0\u30e0\u306a\u6570\u5b57 \u306b\u5909\u63db\uff080\u306f0\u306e\u307e\u307e\uff09\r\n  function convertNumberRandoms(text) { return text.replace(\/[1-9]\/g, () => Math.floor(Math.random() * 9) + 1); }\r\n\r\n  \/\/\u534a\u89d2()\u3092 \u2192 \u5168\u89d2\uff08\uff09 \u306b\u5909\u63db\r\n  function convertFullParenthesis(text) { return text.replace(\/\\(\/g, '\uff08').replace(\/\\)\/g, '\uff09'); }\r\n\r\n  \/\/\u5168\u89d2\uff08\uff09\u3092 \u2192 \u534a\u89d2() \u306b\u5909\u63db\r\n  function convertHalfParenthesis(text) { return text.replace(\/\uff08\/g, '(').replace(\/\uff09\/g, ')'); }\r\n\r\n\r\n\r\n\r\n  \/\/Markdown\u5f62\u5f0f\u306e\u756a\u53f7\uff08*. \uff09\u3092 \u2192 \u4e0a\u304b\u3089\u9023\u756a\u3067\u4ed8\u3051\u76f4\u3059\r\n  function convertRenumbers(text) {\r\n    \/\/\u884c\u3054\u3068\u306b\u5206\u5272\r\n    let lines = text.split('\\n');\r\n    let firstNumber = null;  \/\/\u6700\u521d\u306b\u898b\u3064\u3051\u305f\u756a\u53f7\u3092\u4fdd\u5b58\r\n    let currentNumber = null;  \/\/\u73fe\u5728\u306e\u9023\u756a\r\n    let hasNumberedLine = false;  \/\/\u756a\u53f7\u4ed8\u304d\u306e\u884c\u304c\u5b58\u5728\u3059\u308b\u304b\r\n\r\n    \/\/\u6700\u521d\u306e\u6709\u52b9\u306a\u756a\u53f7\u3092\u898b\u3064\u3051\u308b\r\n    for (let line of lines) {\r\n      const match = line.match(\/^(\\d+)\\.\\s+\/);\r\n      if (match) {\r\n        firstNumber = parseInt(match[1]);\r\n        currentNumber = firstNumber;\r\n        hasNumberedLine = true;\r\n        break;\r\n      }\r\n    }\r\n\r\n    \/\/\u756a\u53f7\u4ed8\u304d\u306e\u884c\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306f\u51e6\u7406\u3057\u306a\u3044\r\n    if (!hasNumberedLine) {\r\n      return text;\r\n    }\r\n\r\n    \/\/\u5404\u884c\u3092\u51e6\u7406\r\n    const processedLines = lines.map(line => {\r\n      \/\/Markdown\u5f62\u5f0f\u306e\u756a\u53f7\u4ed8\u304d\u30ea\u30b9\u30c8\u306b\u30de\u30c3\u30c1\u3059\u308b\u6b63\u898f\u8868\u73fe\r\n      const match = line.match(\/^(\\d+)\\.\\s+(.+)$\/);\r\n\r\n      if (match) {\r\n        \/\/\u756a\u53f7\u306e\u90e8\u5206\u3092\u73fe\u5728\u306e\u9023\u756a\u3067\u7f6e\u63db\r\n        \/\/\u5143\u306e\u6570\u5b57\u306e\u6841\u6570\u306b\u5fdc\u3058\u3066\u30b9\u30da\u30fc\u30b9\u306e\u6570\u3092\u8abf\u6574\r\n        const originalNumLength = match[1].length;\r\n        const newNumLength = currentNumber.toString().length;\r\n        const spaceDiff = originalNumLength - newNumLength;\r\n        const extraSpaces = spaceDiff > 0 ? ' '.repeat(spaceDiff) : '';\r\n\r\n        const newLine = `${currentNumber}.${extraSpaces} ${match[2]}`;\r\n        currentNumber++;\r\n        return newLine;\r\n      }\r\n      return line;\r\n    });\r\n\r\n    return processedLines.join('\\n');\r\n  }\r\n\r\n\r\n  \/\/+\u8a18\u53f7\u306e\u30ea\u30b9\u30c8\u5f62\u5f0f\u3092 \u2192 \u30c4\u30ea\u30fc\u5f62\u5f0f\u306b\u5909\u63db\r\n  function convertList2Trees(text) {\r\n    const lines = text.split('\\n');\r\n    const result = [];\r\n    const stack = []; \/\/ \u5404\u968e\u5c64\u3067\u300c\u307e\u3060\u5f8c\u7d9a\u8981\u7d20\u304c\u3042\u308b\u304b\u300d\u3092\u7ba1\u7406\r\n\r\n    for (let i = 0; i < lines.length; i++) {\r\n      const line = lines[i].trim();\r\n\r\n      \/\/ \u7a7a\u884c\u306f\u305d\u306e\u307e\u307e\u51fa\u529b\r\n      if (line === '') {\r\n        result.push('');\r\n        continue;\r\n      }\r\n\r\n      \/\/ + \u3067\u59cb\u307e\u308b\u884c\u3092\u691c\u51fa\uff08\u30b9\u30da\u30fc\u30b9\/\u30bf\u30d6\u3092\u542b\u3080\u53ef\u80fd\u6027\u3082\u8003\u616e\uff09\r\n      const match = line.match(\/^\\s*(\\+{1,6})\\s+(.+)$\/);\r\n      if (!match) {\r\n        result.push(line);\r\n        continue;\r\n      }\r\n\r\n      const plusCount = match[1].length; \/\/ + \u306e\u6570\u3067\u968e\u5c64\u30ec\u30d9\u30eb\u3092\u5224\u5b9a\r\n      const content = match[2].trim();\r\n\r\n      \/\/ \u73fe\u5728\u306e\u30ec\u30d9\u30eb\u3088\u308a\u6df1\u3044\u30b9\u30bf\u30c3\u30af\u8981\u7d20\u3092\u524a\u9664\r\n      while (stack.length >= plusCount) {\r\n        stack.pop();\r\n      }\r\n\r\n      \/\/ \u6b21\u306e\u540c\u3058\u30ec\u30d9\u30eb\u4ee5\u4e0a\u306e\u884c\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u3001\u3053\u308c\u304c\u6700\u5f8c\u306e\u8981\u7d20\u304b\u3069\u3046\u304b\u5224\u5b9a\r\n      let isLastInLevel = true;\r\n      for (let j = i + 1; j < lines.length; j++) {\r\n        const nextLine = lines[j].trim();\r\n        if (nextLine === '') continue; \/\/ \u7a7a\u884c\u306f\u7121\u8996\r\n\r\n        const nextMatch = nextLine.match(\/^\\s*(\\+{1,6})\\s+(.+)$\/);\r\n        if (nextMatch) {\r\n          const nextPlusCount = nextMatch[1].length;\r\n          if (nextPlusCount === plusCount) {\r\n            \/\/ \u540c\u3058\u30ec\u30d9\u30eb\u306e\u8981\u7d20\u304c\u898b\u3064\u304b\u3063\u305f\r\n            isLastInLevel = false;\r\n            break;\r\n          }\r\n          if (nextPlusCount < plusCount) {\r\n            \/\/ \u3088\u308a\u6d45\u3044\u30ec\u30d9\u30eb\u306e\u8981\u7d20\u304c\u898b\u3064\u304b\u3063\u305f\uff08\u3053\u308c\u3067\u7d42\u308f\u308a\uff09\r\n            break;\r\n          }\r\n          \/\/ \u3088\u308a\u6df1\u3044\u30ec\u30d9\u30eb\u306e\u8981\u7d20\u306f\u7121\u8996\u3057\u3066\u7d99\u7d9a\r\n        } else {\r\n          \/\/ + \u3067\u59cb\u307e\u3089\u306a\u3044\u884c\u304c\u898b\u3064\u304b\u3063\u305f\r\n          break;\r\n        }\r\n      }\r\n\r\n      \/\/ \u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u69cb\u7bc9\uff08\u968e\u5c64\u3054\u3068\u306e\u7e26\u7dda\uff09\r\n      let prefix = '';\r\n      for (let level = 1; level < plusCount; level++) {\r\n        if (stack[level - 1]) {\r\n          prefix += '\u2502    ';\r\n        } else {\r\n          prefix += '    ';\r\n        }\r\n      }\r\n\r\n      \/\/ \u73fe\u5728\u306e\u884c\u306e\u30b3\u30cd\u30af\u30bf\uff08\u679d\uff09\u3092\u8ffd\u52a0\r\n      const connector = isLastInLevel ? '\u2514\u2500 ' : '\u251c\u2500 ';\r\n\r\n      \/\/ \u30b9\u30bf\u30c3\u30af\u306b\u73fe\u5728\u306e\u72b6\u614b\u3092\u8a18\u9332\r\n      stack[plusCount - 1] = !isLastInLevel;\r\n\r\n      \/\/ \u7d50\u679c\u306b\u8ffd\u52a0\r\n      if (plusCount === 1) {\r\n        \/\/ \u7b2c1\u968e\u5c64\u306f\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u306a\u3057\r\n        result.push(content);\r\n      } else {\r\n        result.push(prefix + connector + content);\r\n      }\r\n    }\r\n\r\n    return result.join('\\n');\r\n  }\r\n\r\n\r\n  \/\/\u30d1\u30a4\u30d7(|)\u30ea\u30b9\u30c8\u3092 \u2192 \u7f6b\u7dda\u56f2\u307f\u306b\u5909\u63db\r\n  function convertPipe2Bounds(text) {\r\n    const lines = text.split('\\n');\r\n    const parsedLines = [];\r\n\r\n    \/\/ \u5404\u884c\u3092\u89e3\u6790\r\n    for (const line of lines) {\r\n      const trimmed = line.trim();\r\n      if (trimmed === '') {\r\n        parsedLines.push({ level: 0, content: '', isEmpty: true });\r\n        continue;\r\n      }\r\n\r\n      \/\/ \u30d1\u30a4\u30d7\u3067\u59cb\u307e\u308b\u884c\u3092\u691c\u51fa\r\n      const match = trimmed.match(\/^(\\|+)\\s*(.*)$\/);\r\n      if (match) {\r\n        const level = match[1].length;\r\n        const content = match[2];\r\n        parsedLines.push({ level, content, isEmpty: false });\r\n      } else {\r\n        parsedLines.push({ level: 0, content: trimmed, isEmpty: false });\r\n      }\r\n    }\r\n\r\n    \/\/ \u968e\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u69cb\u7bc9\r\n    const groups = buildHierarchicalGroups(parsedLines);\r\n\r\n    \/\/ \u7f6b\u7dda\u3067\u56f2\u3093\u3060\u30c6\u30ad\u30b9\u30c8\u3092\u751f\u6210\r\n    return renderBoxes(groups);\r\n  }\r\n\r\n  \/\/ \u968e\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u69cb\u7bc9\r\n  function buildHierarchicalGroups(parsedLines) {\r\n    const result = [];\r\n    let i = 0;\r\n\r\n    while (i < parsedLines.length) {\r\n      const line = parsedLines[i];\r\n\r\n      if (line.isEmpty || line.level === 0) {\r\n        result.push(line);\r\n        i++;\r\n        continue;\r\n      }\r\n\r\n      \/\/ \u540c\u3058\u30ec\u30d9\u30eb\u307e\u305f\u306f\u3088\u308a\u6df1\u3044\u30ec\u30d9\u30eb\u306e\u30b0\u30eb\u30fc\u30d7\u3092\u53ce\u96c6\r\n      const group = { level: line.level, items: [] };\r\n      const startLevel = line.level;\r\n\r\n      while (i < parsedLines.length) {\r\n        const current = parsedLines[i];\r\n\r\n        if (current.isEmpty) {\r\n          i++;\r\n          continue;\r\n        }\r\n\r\n        if (current.level === 0 || current.level < startLevel) {\r\n          break;\r\n        }\r\n\r\n        if (current.level === startLevel) {\r\n          group.items.push({ content: current.content, children: [] });\r\n          i++;\r\n\r\n          \/\/ \u5b50\u8981\u7d20\u3092\u30c1\u30a7\u30c3\u30af\r\n          const lastItem = group.items[group.items.length - 1];\r\n          while (i < parsedLines.length && parsedLines[i].level > startLevel) {\r\n            const child = parsedLines[i];\r\n            if (child.isEmpty) {\r\n              i++;\r\n              continue;\r\n            }\r\n\r\n            \/\/ \u5b50\u30b0\u30eb\u30fc\u30d7\u3092\u518d\u5e30\u7684\u306b\u69cb\u7bc9\r\n            const childGroup = buildChildGroup(parsedLines, i, startLevel + 1);\r\n            if (childGroup.consumed > 0) {\r\n              lastItem.children.push(childGroup.group);\r\n              i += childGroup.consumed;\r\n            } else {\r\n              break;\r\n            }\r\n          }\r\n        } else {\r\n          i++;\r\n        }\r\n      }\r\n\r\n      if (group.items.length > 0) {\r\n        result.push(group);\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  \/\/ \u5b50\u30b0\u30eb\u30fc\u30d7\u3092\u69cb\u7bc9\r\n  function buildChildGroup(parsedLines, startIndex, expectedLevel) {\r\n    const group = { level: expectedLevel, items: [] };\r\n    let i = startIndex;\r\n\r\n    while (i < parsedLines.length) {\r\n      const current = parsedLines[i];\r\n\r\n      if (current.isEmpty) {\r\n        i++;\r\n        continue;\r\n      }\r\n\r\n      if (current.level < expectedLevel) {\r\n        break;\r\n      }\r\n\r\n      if (current.level === expectedLevel) {\r\n        group.items.push({ content: current.content, children: [] });\r\n        i++;\r\n\r\n        \/\/ \u3055\u3089\u306b\u6df1\u3044\u5b50\u8981\u7d20\u3092\u30c1\u30a7\u30c3\u30af\r\n        const lastItem = group.items[group.items.length - 1];\r\n        while (i < parsedLines.length && parsedLines[i].level > expectedLevel) {\r\n          const child = parsedLines[i];\r\n          if (child.isEmpty) {\r\n            i++;\r\n            continue;\r\n          }\r\n\r\n          const childGroup = buildChildGroup(parsedLines, i, expectedLevel + 1);\r\n          if (childGroup.consumed > 0) {\r\n            lastItem.children.push(childGroup.group);\r\n            i += childGroup.consumed;\r\n          } else {\r\n            break;\r\n          }\r\n        }\r\n      } else {\r\n        i++;\r\n      }\r\n    }\r\n\r\n    return { group, consumed: i - startIndex };\r\n  }\r\n\r\n  \/\/ \u30dc\u30c3\u30af\u30b9\u3092\u63cf\u753b\r\n  function renderBoxes(groups) {\r\n    const result = [];\r\n\r\n    for (const item of groups) {\r\n      if (item.isEmpty) {\r\n        result.push('');\r\n        continue;\r\n      }\r\n\r\n      if (item.level === 0) {\r\n        result.push(item.content);\r\n        continue;\r\n      }\r\n\r\n      \/\/ \u30b0\u30eb\u30fc\u30d7\u3092\u30dc\u30c3\u30af\u30b9\u3067\u56f2\u3080\r\n      const boxLines = renderGroup(item, 0);\r\n      result.push(...boxLines);\r\n    }\r\n\r\n    return result.join('\\n');\r\n  }\r\n\r\n  \/\/ \u30b0\u30eb\u30fc\u30d7\u3092\u63cf\u753b\r\n  function renderGroup(group, indent) {\r\n    const lines = [];\r\n    const prefix = '\u2502'.repeat(indent);\r\n\r\n    \/\/ \u6700\u5927\u5e45\u3092\u8a08\u7b97\r\n    let maxWidth = 0;\r\n    for (const item of group.items) {\r\n      const width = getTextWidth(item.content);\r\n      if (width > maxWidth) maxWidth = width;\r\n\r\n      \/\/ \u5b50\u8981\u7d20\u306e\u5e45\u3082\u8003\u616e\r\n      for (const child of item.children) {\r\n        const childWidth = calculateGroupWidth(child);\r\n        if (childWidth + 2 > maxWidth) maxWidth = childWidth + 2;\r\n      }\r\n    }\r\n\r\n    \/\/ \u7f6b\u7dda\u306e\u5e45\u3092\u534a\u5206\u306b\uff08\u534a\u89d22\u6587\u5b57\u306b\u3064\u304d\u7f6b\u7dda1\u3064\uff09\r\n    const boxWidth = Math.ceil(maxWidth \/ 2);\r\n\r\n    \/\/ \u4e0a\u90e8\u306e\u7f6b\u7dda\r\n    lines.push(prefix + '\u250c' + '\u2500'.repeat(boxWidth) + '\u2510');\r\n\r\n    \/\/ \u5404\u30a2\u30a4\u30c6\u30e0\u3092\u63cf\u753b\r\n    for (let i = 0; i < group.items.length; i++) {\r\n      const item = group.items[i];\r\n      \/\/ \u30d1\u30c7\u30a3\u30f3\u30b0\u3092\u8a08\u7b97\uff08\u7f6b\u7dda\u5e45\u306b\u5408\u308f\u305b\u3066\u8abf\u6574\uff09\r\n      const contentWidth = getTextWidth(item.content);\r\n      const padding = Math.max(0, boxWidth - Math.ceil(contentWidth \/ 2));\r\n      lines.push(prefix + '\u2502' + item.content + ' '.repeat(padding) + '\u2502');\r\n\r\n      \/\/ \u5b50\u8981\u7d20\u3092\u63cf\u753b\r\n      if (item.children.length > 0) {\r\n        for (const child of item.children) {\r\n          const childLines = renderGroup(child, indent + 1);\r\n          lines.push(...childLines);\r\n        }\r\n      }\r\n    }\r\n\r\n    \/\/ \u4e0b\u90e8\u306e\u7f6b\u7dda\r\n    lines.push(prefix + '\u2514' + '\u2500'.repeat(boxWidth) + '\u2518');\r\n\r\n    return lines;\r\n  }\r\n\r\n  \/\/ \u30c6\u30ad\u30b9\u30c8\u306e\u8868\u793a\u5e45\u3092\u8a08\u7b97\uff08\u5168\u89d2\u6587\u5b57\u306f2\u3001\u534a\u89d2\u6587\u5b57\u306f1\u3068\u3057\u3066\u8a08\u7b97\uff09\r\n  function getTextWidth(text) {\r\n    let width = 0;\r\n    for (const char of text) {\r\n      \/\/ \u5168\u89d2\u6587\u5b57\u306e\u5224\u5b9a\uff08\u7c21\u6613\u7248\uff09\r\n      if (char.match(\/[^\\x00-\\xff]\/)) {\r\n        width += 2;\r\n      } else {\r\n        width += 1;\r\n      }\r\n    }\r\n    return width;\r\n  }\r\n\r\n  \/\/ \u30b0\u30eb\u30fc\u30d7\u306e\u5e45\u3092\u8a08\u7b97\r\n  function calculateGroupWidth(group) {\r\n    let maxWidth = 0;\r\n\r\n    for (const item of group.items) {\r\n      const width = getTextWidth(item.content);\r\n      if (width > maxWidth) maxWidth = width;\r\n\r\n      for (const child of item.children) {\r\n        const childWidth = calculateGroupWidth(child) * 2; \/\/ \u5b50\u8981\u7d20\u306f2\u500d\u3057\u3066\u6bd4\u8f03\r\n        if (childWidth > maxWidth) maxWidth = childWidth;\r\n      }\r\n    }\r\n\r\n    \/\/ \u7f6b\u7dda\u5e45\u3092\u534a\u5206\u306b\u3059\u308b\u8a2d\u5b9a\u306b\u5408\u308f\u305b\u3066\u8abf\u6574\r\n    return Math.ceil((maxWidth + 4) \/ 2);\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n  \/\/JSON\u5f62\u5f0f\u3067\u8907\u6570\u306e\u8a9e\u53e5\u3092\u307e\u3068\u3081\u3066\u524a\u9664\r\n  function removeMultiWords(text) {\r\n    try {\r\n      \/\/\u5165\u529b\u5024\u3092\u53d6\u5f97\u3057\u3066\u6574\u5f62\r\n      let removeTxts = document.getElementById('removeTxts').value;\r\n\r\n      \/\/\u5165\u529b\u5024\u3092\u6574\u5f62\u3059\u308b\u95a2\u6570\r\n      function formatToJSON(input) {\r\n        \/\/\u65e2\u306bJSON\u5f62\u5f0f\u306e\u5834\u5408\u306f\u305d\u306e\u307e\u307e\u8fd4\u3059\r\n        try {\r\n          JSON.parse(input);\r\n          return input;\r\n        } catch {\r\n          \/\/[] \u3067\u56f2\u307e\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u8ffd\u52a0\r\n          if (!input.startsWith('[') && !input.endsWith(']')) {\r\n            input = '[' + input + ']';\r\n          }\r\n\r\n          \/\/\u30ab\u30f3\u30de\u533a\u5207\u308a\u306e\u5404\u8981\u7d20\u3092\u51e6\u7406\r\n          const words = input.slice(1, -1).split(',').map(word => {\r\n            \/\/\u30b9\u30da\u30fc\u30b9\u3092\u4fdd\u6301\u3057\u305f\u307e\u307e\u3001\u30c0\u30d6\u30eb\u30af\u30a9\u30fc\u30c8\u306e\u307f\u3092\u8ffd\u52a0\r\n            if (!word.startsWith('\"') && !word.endsWith('\"')) {\r\n              word = '\"' + word + '\"';\r\n            }\r\n            return word;\r\n          });\r\n\r\n          return '[' + words.join(',') + ']';\r\n        }\r\n      }\r\n\r\n      \/\/\u5165\u529b\u5024\u3092\u6574\u5f62\r\n      removeTxts = formatToJSON(removeTxts);\r\n\r\n      \/\/\u6574\u5f62\u3057\u305f\u5024\u3092\u5165\u529b\u6b04\u306b\u53cd\u6620\uff08\u30aa\u30d7\u30b7\u30e7\u30f3\uff09\r\n      document.getElementById('removeTxts').value = removeTxts;\r\n\r\n      \/\/JSON\u3068\u3057\u3066\u30d1\u30fc\u30b9\r\n      const removeTxtsArray = JSON.parse(removeTxts);\r\n\r\n      \/\/\u5404\u8a9e\u53e5\u3092\u524a\u9664\r\n      removeTxtsArray.forEach(word => {\r\n        const escapedWord = word.replace(\/[.*+?^${}()|[\\]\\\\]\/g, '\\\\$&');\r\n        const regex = new RegExp(escapedWord, 'g');\r\n        text = text.replace(regex, '');\r\n      });\r\n\r\n      return text;\r\n    } catch (error) {\r\n      console.error('\u524a\u9664\u30a8\u30e9\u30fc:', error);\r\n      showMessage('\u8a9e\u53e5\u306e\u6307\u5b9a\u5f62\u5f0f\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002', false);\r\n      return text;\r\n    }\r\n  }\r\n\r\n  \/\/JSON\u5f62\u5f0f\u3067\u8907\u6570\u306e\u8a9e\u53e5\u3092\u307e\u3068\u3081\u3066\u5909\u63db\r\n  function convertMultiWords(text) {\r\n    try {\r\n      \/\/\u5165\u529b\u5024\u3092\u53d6\u5f97\u3057\u3066\u6574\u5f62\r\n      let beforeTxts = document.getElementById('beforeTxts').value;\r\n      let afterTxts = document.getElementById('afterTxts').value;\r\n\r\n      \/\/\u5165\u529b\u5024\u3092\u6574\u5f62\u3059\u308b\u95a2\u6570\r\n      function formatToJSON(input) {\r\n        \/\/\u65e2\u306bJSON\u5f62\u5f0f\u306e\u5834\u5408\u306f\u305d\u306e\u307e\u307e\u8fd4\u3059\r\n        try {\r\n          JSON.parse(input);\r\n          return input;\r\n        } catch {\r\n          \/\/[] \u3067\u56f2\u307e\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u8ffd\u52a0\r\n          if (!input.startsWith('[') && !input.endsWith(']')) {\r\n            input = '[' + input + ']';\r\n          }\r\n\r\n          \/\/\u30ab\u30f3\u30de\u533a\u5207\u308a\u306e\u5404\u8981\u7d20\u3092\u51e6\u7406\r\n          const words = input.slice(1, -1).split(',').map(word => {\r\n            \/\/\u30b9\u30da\u30fc\u30b9\u3092\u4fdd\u6301\u3057\u305f\u307e\u307e\u3001\u30c0\u30d6\u30eb\u30af\u30a9\u30fc\u30c8\u306e\u307f\u3092\u8ffd\u52a0\r\n            if (!word.startsWith('\"') && !word.endsWith('\"')) {\r\n              word = '\"' + word + '\"';\r\n            }\r\n            return word;\r\n          });\r\n\r\n          return '[' + words.join(',') + ']';\r\n        }\r\n      }\r\n\r\n      \/\/\u5165\u529b\u5024\u3092\u6574\u5f62\r\n      beforeTxts = formatToJSON(beforeTxts);\r\n      afterTxts = formatToJSON(afterTxts);\r\n\r\n      \/\/\u6574\u5f62\u3057\u305f\u5024\u3092\u5165\u529b\u6b04\u306b\u53cd\u6620\uff08\u30aa\u30d7\u30b7\u30e7\u30f3\uff09\r\n      document.getElementById('beforeTxts').value = beforeTxts;\r\n      document.getElementById('afterTxts').value = afterTxts;\r\n\r\n      \/\/JSON\u3068\u3057\u3066\u30d1\u30fc\u30b9\r\n      const beforeTxtsArray = JSON.parse(beforeTxts);\r\n      const afterTxtsArray = JSON.parse(afterTxts);\r\n\r\n      \/\/\u4ee5\u964d\u306f\u65e2\u5b58\u306e\u30b3\u30fc\u30c9\r\n      if (beforeTxtsArray.length !== afterTxtsArray.length) {\r\n        throw new Error('\u5909\u63db\u524d\u3068\u5909\u63db\u5f8c\u306e\u8a9e\u53e5\u306e\u6570\u304c\u4e00\u81f4\u3057\u307e\u305b\u3093');\r\n      }\r\n\r\n      beforeTxtsArray.forEach((beforeTxt, index) => {\r\n        const escapedFromWord = beforeTxt.replace(\/[.*+?^${}()|[\\]\\\\]\/g, '\\\\$&');\r\n        const regex = new RegExp(escapedFromWord, 'g');\r\n        text = text.replace(regex, afterTxtsArray[index]);\r\n      });\r\n\r\n      return text;\r\n    } catch (error) {\r\n      console.error('\u5909\u63db\u30a8\u30e9\u30fc:', error);\r\n      showMessage('\u8a9e\u53e5\u306e\u6307\u5b9a\u5f62\u5f0f\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002', false);\r\n      return text;\r\n    }\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/ |\uff08\u30d1\u30a4\u30d7\uff09\u3092 \u2192 <dl>\u30bf\u30b0 \u306b\u5909\u63db\r\n  function convertTagDelimits(text) {\r\n    \/\/\u6539\u884c\u3067\u5206\u5272\r\n    const lines = text.split('\\n');\r\n\r\n    \/\/\u5404\u884c\u3092\u51e6\u7406\r\n    const processedLines = lines.map(line => {\r\n      line = line.trim();\r\n      if (line === '') return '';\r\n\r\n      \/\/ |\uff08\u30d1\u30a4\u30d7\uff09\u3067\u59cb\u307e\u3063\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u8ffd\u52a0\r\n      if (!line.startsWith('|')) {\r\n        line = '|' + line;\r\n      }\r\n      \/\/ |\uff08\u30d1\u30a4\u30d7\uff09\u3067\u7d42\u308f\u3063\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u8ffd\u52a0\r\n      if (!line.endsWith('|')) {\r\n        line = line + '|';\r\n      }\r\n\r\n      return line;\r\n    }).filter(line => line !== ''); \/\/\u7a7a\u884c\u3092\u524a\u9664\r\n\r\n    if (processedLines.length === 0) return text;\r\n\r\n    \/\/Dl\u306eHTML\u69cb\u7bc9\r\n    let delimitHtml = '<dl class=\"delimit\">\\n';\r\n\r\n    processedLines.forEach(line => {\r\n      const cells = line.split('|')\r\n        .filter(cell => cell !== '') \/\/\u7a7a\u306e\u30bb\u30eb\u3092\u524a\u9664\r\n        .map(cell => cell.trim()); \/\/\u30bb\u30eb\u5185\u5bb9\u3092\u30c8\u30ea\u30e0\r\n\r\n      if (cells.length >= 2) { \/\/\u5c11\u306a\u304f\u3068\u30822\u3064\u306e\u30bb\u30eb\u304c\u3042\u308b\u5834\u5408\u306e\u307f\u51e6\u7406\r\n        delimitHtml += '  <div class=\"rung\">\\n';\r\n        delimitHtml += `    <dt>${cells[0]}<\/dt>\\n`;\r\n        for (let i = 1; i < cells.length; i++) {\r\n          delimitHtml += `    <dd>${cells[i]}<\/dd>\\n`;\r\n        }\r\n        delimitHtml += '  <\/div>\\n';\r\n      }\r\n    });\r\n\r\n    delimitHtml += '<\/dl><!-- \/\/\/.delimit -->';\r\n    return delimitHtml;\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/ |\uff08\u30d1\u30a4\u30d7\uff09\u3092 \u2192 <table>\u30bf\u30b0 \u306b\u5909\u63db\r\n  function convertTagTables(text) {\r\n    \/\/\u6539\u884c\u3067\u5206\u5272\r\n    const lines = text.split('\\n');\r\n\r\n    \/\/\u5404\u884c\u3092\u51e6\u7406\r\n    const processedLines = lines.map(line => {\r\n      line = line.trim();\r\n      if (line === '') return '';\r\n\r\n      \/\/ |\uff08\u30d1\u30a4\u30d7\uff09\u3067\u59cb\u307e\u3063\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u8ffd\u52a0\r\n      if (!line.startsWith('|')) {\r\n        line = '|' + line;\r\n      }\r\n      \/\/ |\uff08\u30d1\u30a4\u30d7\uff09\u3067\u7d42\u308f\u3063\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u8ffd\u52a0\r\n      if (!line.endsWith('|')) {\r\n        line = line + '|';\r\n      }\r\n\r\n      return line;\r\n    }).filter(line => line !== ''); \/\/\u7a7a\u884c\u3092\u524a\u9664\r\n\r\n    if (processedLines.length === 0) return text;\r\n\r\n    \/\/ \u30bb\u30d1\u30ec\u30fc\u30bf\u30fc\u884c\u3092\u691c\u51fa\uff08|------|------|------:| \u306e\u3088\u3046\u306a\u884c\uff09\r\n    let separatorIndex = -1;\r\n    for (let i = 0; i < processedLines.length; i++) {\r\n      const cells = processedLines[i].split('|').filter(cell => cell !== '').map(cell => cell.trim());\r\n      \/\/ \u5168\u30bb\u30eb\u304c -\u3001:\u3001\u7a7a\u767d\u306e\u307f\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u308c\u3070\u30bb\u30d1\u30ec\u30fc\u30bf\u30fc\u884c\r\n      if (cells.length >= 2 && cells.every(cell => \/^[:\\-]+$\/.test(cell))) {\r\n        separatorIndex = i;\r\n        break;\r\n      }\r\n    }\r\n\r\n    \/\/\u30c6\u30fc\u30d6\u30eb\u306eHTML\u69cb\u7bc9\r\n    let tableHtml = '<table>\\n';\r\n    const hasThead = separatorIndex > 0;\r\n\r\n    \/\/ \u884c\u3092HTML\u306b\u5909\u63db\u3059\u308b\u30d8\u30eb\u30d1\u30fc\r\n    function rowToHtml(line) {\r\n      const cells = line.split('|')\r\n        .filter(cell => cell !== '')\r\n        .map(cell => cell.trim());\r\n\r\n      if (cells.length < 2) return '';\r\n\r\n      let html = '  <tr class=\"rung\">\\n';\r\n      html += `    <th>${cells[0]}<\/th>\\n`;\r\n      for (let i = 1; i < cells.length; i++) {\r\n        html += `    <td>${cells[i]}<\/td>\\n`;\r\n      }\r\n      html += '  <\/tr>\\n';\r\n      return html;\r\n    }\r\n\r\n    if (hasThead) {\r\n      \/\/ \u30bb\u30d1\u30ec\u30fc\u30bf\u30fc\u524d\u3092 <thead> \u306b\r\n      tableHtml += '<thead>\\n';\r\n      for (let i = 0; i < separatorIndex; i++) {\r\n        tableHtml += rowToHtml(processedLines[i]);\r\n      }\r\n      tableHtml += '<\/thead>\\n';\r\n\r\n      \/\/ \u30bb\u30d1\u30ec\u30fc\u30bf\u30fc\u5f8c\u3092 <tbody> \u306b\uff08\u30bb\u30d1\u30ec\u30fc\u30bf\u30fc\u884c\u81ea\u4f53\u306f\u30b9\u30ad\u30c3\u30d7\uff09\r\n      tableHtml += '<tbody>\\n';\r\n      for (let i = separatorIndex + 1; i < processedLines.length; i++) {\r\n        tableHtml += rowToHtml(processedLines[i]);\r\n      }\r\n      tableHtml += '<\/tbody>\\n';\r\n    } else {\r\n      \/\/ \u30bb\u30d1\u30ec\u30fc\u30bf\u30fc\u306a\u3057 \u2192 \u5f93\u6765\u901a\u308a\u5168\u884c\u3092 <tbody> \u306b\r\n      tableHtml += '<tbody>\\n';\r\n      processedLines.forEach(line => {\r\n        tableHtml += rowToHtml(line);\r\n      });\r\n      tableHtml += '<\/tbody>\\n';\r\n    }\r\n\r\n    tableHtml += '<\/table><!-- \/\/\/.table -->';\r\n    return tableHtml;\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/ ============================================================\r\n  \/\/ \u533a\u5207\u308a\u6587\u5b57\u3092 | \u306b\u7f6e\u63db\r\n  \/\/ ============================================================\r\n  function replaceDelimiter(text, delimiter) {\r\n    if (!delimiter || delimiter === '|') return text;\r\n    return text.split('\\n').map(function (line) {\r\n      return line.split(delimiter).join('|');\r\n    }).join('\\n');\r\n  }\r\n\r\n\r\n  \/\/ ============================================================\r\n  \/\/ \u30bb\u30eb\u7d50\u5408\uff1a\u524d\u51e6\u7406\uff08\u30d1\u30a4\u30d7\u30c6\u30fc\u30d6\u30eb\u5185\u306e < > ^ \u3092\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u306b\u7f6e\u63db\uff09\r\n  \/\/ HTML\u5909\u63db\u524d\u306b\u5b9f\u884c\u3057\u3066\u3001< > \u304cHTML\u30bf\u30b0\u3068\u8aa4\u8a8d\u3055\u308c\u308b\u306e\u3092\u9632\u3050\r\n  \/\/ ============================================================\r\n  function preMergeCells(text) {\r\n    \/\/ \u30d1\u30a4\u30d7\u30c6\u30fc\u30d6\u30eb\u306e\u884c\u306e\u307f\u5bfe\u8c61\uff08|\u3067\u59cb\u307e\u308b\u884c\uff09\r\n    return text.replace(\/^(\\|[^\\n]*\\|)$\/gm, function (line) {\r\n      line = line.replace(\/\\|\\s*<\\s*(?=\\|)\/g, '| ___MERGE_LEFT___ ');\r\n      line = line.replace(\/\\|\\s*>\\s*(?=\\|)\/g, '| ___MERGE_RIGHT___ ');\r\n      line = line.replace(\/\\|\\s*\\^\\s*(?=\\|)\/g, '| ___MERGE_UP___ ');\r\n      return line;\r\n    });\r\n  }\r\n\r\n\r\n  \/\/ ============================================================\r\n  \/\/ \u30bb\u30eb\u7d50\u5408\uff1a\u5f8c\u51e6\u7406\uff08\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u3092\u691c\u51fa\u3057\u3066colspan\/rowspan\u3092\u9069\u7528\uff09\r\n  \/\/ HTML\u5909\u63db\u30fb\u6574\u5f62\u304c\u3059\u3079\u3066\u5b8c\u4e86\u3057\u305f\u5f8c\u306b\u5b9f\u884c\r\n  \/\/ ============================================================\r\n  function mergeCells(text) {\r\n    \/\/ \u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u304c\u5b58\u5728\u3057\u306a\u3051\u308c\u3070\u30b9\u30ad\u30c3\u30d7\r\n    if (text.indexOf('___MERGE_') === -1) return text;\r\n\r\n    \/\/ \u5404\u30c6\u30fc\u30d6\u30eb\u30d6\u30ed\u30c3\u30af\u3092\u51e6\u7406\r\n    return text.replace(\/<table[^>]*>\\s*(?:<thead>[\\s\\S]*?<\\\/thead>\\s*)?<tbody>([\\s\\S]*?)<\\\/tbody>\\s*<\\\/table>(?:\\s*<!--[^>]*-->)?\/g, function (fullMatch, tbodyContent) {\r\n\r\n      \/\/ \u884c\u3092\u62bd\u51fa\r\n      const rowRegex = \/<tr[^>]*>([\\s\\S]*?)<\\\/tr>\/g;\r\n      const rows = [];\r\n      let rowMatch;\r\n\r\n      while ((rowMatch = rowRegex.exec(tbodyContent)) !== null) {\r\n        const rowContent = rowMatch[1];\r\n        const cells = [];\r\n\r\n        \/\/ \u30bb\u30eb\u3092\u62bd\u51fa\uff08th\/td\u4e21\u5bfe\u5fdc\u3001\u5c5e\u6027\u4ed8\u304d\u3082\u5bfe\u5fdc\uff09\r\n        const cellRegex = \/<(th|td)([^>]*)>([\\s\\S]*?)<\\\/\\1>\/g;\r\n        let cellMatch;\r\n        while ((cellMatch = cellRegex.exec(rowContent)) !== null) {\r\n          cells.push({\r\n            tag: cellMatch[1],\r\n            attrs: cellMatch[2] || '',\r\n            content: cellMatch[3].trim(),\r\n            colspan: 1,\r\n            rowspan: 1,\r\n            merged: false\r\n          });\r\n        }\r\n\r\n        rows.push(cells);\r\n      }\r\n\r\n      if (rows.length === 0) return fullMatch;\r\n\r\n      \/\/ \u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u304c1\u3064\u3082\u306a\u3051\u308c\u3070\u3053\u306e\u30c6\u30fc\u30d6\u30eb\u306f\u30b9\u30ad\u30c3\u30d7\r\n      const hasPlaceholder = rows.some(row => row.some(cell =>\r\n        cell.content === '___MERGE_LEFT___' || cell.content === '___MERGE_RIGHT___' || cell.content === '___MERGE_UP___'\r\n      ));\r\n      if (!hasPlaceholder) return fullMatch;\r\n\r\n      \/\/ \u6a2a\u7d50\u5408\uff08\u5de6\u65b9\u5411\uff09: ___MERGE_LEFT___ \u306f\u5de6\u306e\u30bb\u30eb\u306b\u5438\u53ce\u3055\u308c\u308b\r\n      for (let r = 0; r < rows.length; r++) {\r\n        for (let c = 1; c < rows[r].length; c++) {\r\n          if (rows[r][c].content === '___MERGE_LEFT___') {\r\n            let target = c - 1;\r\n            while (target >= 0 && rows[r][target].merged) { target--; }\r\n            if (target >= 0) {\r\n              rows[r][target].colspan++;\r\n              rows[r][c].merged = true;\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      \/\/ \u6a2a\u7d50\u5408\uff08\u53f3\u65b9\u5411\uff09: ___MERGE_RIGHT___ \u306f\u53f3\u306e\u30bb\u30eb\u306b\u5438\u53ce\u3055\u308c\u308b\r\n      for (let r = 0; r < rows.length; r++) {\r\n        for (let c = rows[r].length - 2; c >= 0; c--) {\r\n          if (rows[r][c].content === '___MERGE_RIGHT___') {\r\n            let target = c + 1;\r\n            while (target < rows[r].length && rows[r][target].merged) { target++; }\r\n            if (target < rows[r].length) {\r\n              rows[r][target].colspan++;\r\n              rows[r][c].merged = true;\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      \/\/ \u7e26\u7d50\u5408: ___MERGE_UP___ \u306f\u4e0a\u306e\u30bb\u30eb\u306b\u5438\u53ce\u3055\u308c\u308b\r\n      for (let r = 1; r < rows.length; r++) {\r\n        for (let c = 0; c < rows[r].length; c++) {\r\n          if (rows[r][c].content === '___MERGE_UP___') {\r\n            let target = r - 1;\r\n            while (target >= 0 && rows[target][c] && rows[target][c].merged) { target--; }\r\n            if (target >= 0 && rows[target][c]) {\r\n              rows[target][c].rowspan++;\r\n              rows[r][c].merged = true;\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      \/\/ HTML\u518d\u69cb\u7bc9\r\n      let html = fullMatch.match(\/<table[^>]*>\/)[0] + '\\n';\r\n      \/\/ thead\u304c\u3042\u308c\u3070\u4fdd\u6301\r\n      const theadMatch = fullMatch.match(\/<thead>[\\s\\S]*?<\\\/thead>\/);\r\n      if (theadMatch) { html += theadMatch[0] + '\\n'; }\r\n\r\n      html += '<tbody>\\n';\r\n      for (let r = 0; r < rows.length; r++) {\r\n        const hasVisible = rows[r].some(c => !c.merged);\r\n        if (!hasVisible) continue;\r\n\r\n        html += '  <tr class=\"rung\">\\n';\r\n        for (let c = 0; c < rows[r].length; c++) {\r\n          if (rows[r][c].merged) continue;\r\n\r\n          const cell = rows[r][c];\r\n          let attrs = cell.attrs;\r\n          if (cell.colspan > 1) { attrs += ' colspan=\"' + cell.colspan + '\"'; }\r\n          if (cell.rowspan > 1) { attrs += ' rowspan=\"' + cell.rowspan + '\"'; }\r\n\r\n          html += '    <' + cell.tag + attrs + '>' + cell.content + '<\/' + cell.tag + '>\\n';\r\n        }\r\n        html += '  <\/tr>\\n';\r\n      }\r\n      html += '<\/tbody>\\n<\/table><!-- \/\/\/.table -->';\r\n\r\n      return html;\r\n    });\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/<table>\u5404\u884c\u6700\u521d\u306e\u30bb\u30eb\u3092 \u2192 <th> \u306b\u5909\u63db\r\n  function convertTagTd2Ths(text) {\r\n    try {\r\n      \/\/Step 1: \u4e00\u6642\u7684\u306a\u30de\u30fc\u30ab\u30fc\u3092\u4f7f\u7528\u3057\u3066\u30c6\u30fc\u30d6\u30eb\u5185\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u4fdd\u8b77\r\n      text = text.replace(\/(<table[\\s\\S]*?<\\\/table>)\/g, (table) => {\r\n        \/\/\u307e\u305a\u5168\u3066\u306e\u30bb\u30eb\u3092<td>\u306b\u5909\u63db\uff08<thead>\u5185\u3082\u542b\u3080\uff09\r\n        let processedTable = table.replace(\/<th(\\s[^>]*)?>([\\s\\S]*?)<\\\/th>\/g, '<td$1>$2<\/td>');\r\n\r\n        \/\/\u5404\u884c\u306e\u6700\u521d\u306e\u30bb\u30eb\u3092<th>\u306b\u5909\u63db\r\n        processedTable = processedTable.replace(\/(<tr[^>]*>)\\s*<td(\\s[^>]*)?>([\\s\\S]*?)<\\\/td>\/g,\r\n          '$1<th$2>$3<\/th>');\r\n\r\n        \/\/marked.js\u3068\u540c\u3058\u5f62\u5f0f\u306b\u6574\u5f62\uff08\u30a4\u30f3\u30c7\u30f3\u30c8\u3068\u6539\u884c\u3092\u8abf\u6574\uff09\r\n        processedTable = beautifyTable(processedTable);\r\n\r\n        return processedTable;\r\n      });\r\n\r\n      return text;\r\n    } catch (error) {\r\n      console.error('\u30c6\u30fc\u30d6\u30eb\u5909\u63db\u30a8\u30e9\u30fc:', error);\r\n      showMessage('\u30c6\u30fc\u30d6\u30eb\u306e\u5909\u63db\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002', false);\r\n      return text;\r\n    }\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/\u30c6\u30fc\u30d6\u30ebHTML\u3092\u6574\u5f62\u3059\u308b\u95a2\u6570\r\n  function beautifyTable(html) {\r\n    \/\/\u4e0d\u8981\u306a\u7a7a\u767d\u3092\u524a\u9664\r\n    html = html.replace(\/>\\s+<\/g, '><').trim();\r\n\r\n    \/\/\u57fa\u672c\u7684\u306a\u30a4\u30f3\u30c7\u30f3\u30c8\u3068\u6539\u884c\u3092\u8a2d\u5b9a\r\n    html = html\r\n      \/\/<table> \u30bf\u30b0\u306e\u5f8c\u306b\u6539\u884c\u3092\u8ffd\u52a0\r\n      .replace(\/<table([^>]*)>\/g, '<table$1>\\n')\r\n\r\n      \/\/<thead> \u30bf\u30b0\u306e\u524d\u5f8c\u306b\u6539\u884c\u3068\u30a4\u30f3\u30c7\u30f3\u30c8\u3092\u8ffd\u52a0\r\n      .replace(\/<thead>\/g, '<thead>\\n')\r\n      .replace(\/<\\\/thead>\/g, '\\n<\/thead>')\r\n\r\n      \/\/<tbody> \u30bf\u30b0\u306e\u524d\u5f8c\u306b\u6539\u884c\u3068\u30a4\u30f3\u30c7\u30f3\u30c8\u3092\u8ffd\u52a0\r\n      .replace(\/<tbody>\/g, '<tbody>\\n')\r\n      .replace(\/<\\\/tbody>\/g, '\\n<\/tbody>')\r\n\r\n      \/\/<tr> \u30bf\u30b0\u306e\u524d\u5f8c\u306b\u6539\u884c\u3068\u30a4\u30f3\u30c7\u30f3\u30c8\u3092\u8ffd\u52a0\r\n      .replace(\/<tr>\/g, '<tr>\\n')\r\n      .replace(\/<\\\/tr>\/g, '\\n<\/tr>')\r\n\r\n      \/\/<th> \u30bf\u30b0\u3068 <td> \u30bf\u30b0\u306e\u5f8c\u306b\u6539\u884c\u3092\u8ffd\u52a0\r\n      .replace(\/<th([^>]*)>\/g, '<th$1>')\r\n      .replace(\/<\\\/th>\/g, '<\/th>\\n')\r\n      .replace(\/<td([^>]*)>\/g, '<td$1>')\r\n      .replace(\/<\\\/td>\/g, '<\/td>\\n');\r\n\r\n    \/\/\u6700\u7d42\u7684\u306a\u6574\u5f62\uff08\u30a4\u30f3\u30c7\u30f3\u30c8\u306e\u8ffd\u52a0\uff09\r\n    const lines = html.split('\\n');\r\n    let indentLevel = 0;\r\n    let result = '';\r\n\r\n    for (let i = 0; i < lines.length; i++) {\r\n      const line = lines[i].trim();\r\n      if (!line) continue;\r\n\r\n      \/\/\u9589\u3058\u30bf\u30b0\u306e\u5834\u5408\u306f\u30a4\u30f3\u30c7\u30f3\u30c8\u3092\u6e1b\u3089\u3059\r\n      if (line.startsWith('<\/')) {\r\n        indentLevel = Math.max(0, indentLevel - 1);\r\n      }\r\n\r\n      \/\/\u30a4\u30f3\u30c7\u30f3\u30c8\u3092\u9069\u7528\r\n      result += ' '.repeat(indentLevel * 2) + line + '\\n';\r\n\r\n      \/\/\u958b\u59cb\u30bf\u30b0\u306e\u5834\u5408\u306f\u30a4\u30f3\u30c7\u30f3\u30c8\u3092\u5897\u3084\u3059\uff08\u9589\u3058\u30bf\u30b0\u3084\u81ea\u5df1\u9589\u3058\u30bf\u30b0\u306f\u9664\u304f\uff09\r\n      if (line.startsWith('<') && !line.startsWith('<\/') && !line.endsWith('\/>') && !line.startsWith('<th') && !line.startsWith('<td')) {\r\n        indentLevel++;\r\n      }\r\n    }\r\n\r\n    return result.trim();\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/<img \/>\u3092 \u2192 <picture> \u3067\u56f2\u3080\r\n  function encloseTagImgPictures(text) {\r\n    try {\r\n      \/\/\u3059\u3067\u306bpicture\u30bf\u30b0\u3067\u56f2\u307e\u308c\u3066\u3044\u308bimg\u30bf\u30b0\u3092\u4e00\u6642\u7684\u306b\u30de\u30fc\u30af\r\n      let markedText = text;\r\n      let markerIndex = 0;\r\n      const markers = {};\r\n\r\n      \/\/picture\u30bf\u30b0\u3067\u56f2\u307e\u308c\u3066\u3044\u308bimg\u30bf\u30b0\u3092\u4e00\u6642\u7684\u306b\u7f6e\u63db\r\n      markedText = markedText.replace(\/<picture[^>]*>[\\s\\S]*?<img[^>]*>[\\s\\S]*?<\\\/picture>\/gi, function (match) {\r\n        const marker = `___PICTURE_MARKER_${markerIndex}___`;\r\n        markers[marker] = match;\r\n        markerIndex++;\r\n        return marker;\r\n      });\r\n\r\n      \/\/picture\u30bf\u30b0\u3067\u56f2\u307e\u308c\u3066\u3044\u306a\u3044img\u30bf\u30b0\u3092picture\u30bf\u30b0\u3067\u56f2\u3080\r\n      markedText = markedText.replace(\/<img([^>]*)>\/gi, function (match, attributes) {\r\n        \/\/\u81ea\u5df1\u9589\u3058\u30bf\u30b0\u306e\u5834\u5408\u306e\u51e6\u7406\r\n        if (attributes.endsWith('\/')) {\r\n          \/\/\u6700\u5f8c\u306e\/\u3092\u524a\u9664\u3057\u3066\u304b\u3089\u51e6\u7406\r\n          const cleanAttrs = attributes.slice(0, -1).trim();\r\n          return `<picture><img${cleanAttrs ? ' ' + cleanAttrs : ''} \/><\/picture>`;\r\n        } else {\r\n          return `<picture><img${attributes}><\/picture>`;\r\n        }\r\n      });\r\n\r\n      \/\/\u30de\u30fc\u30ab\u30fc\u3092\u5143\u306epicture\u30bf\u30b0\u306b\u623b\u3059\r\n      Object.keys(markers).forEach(marker => {\r\n        markedText = markedText.replace(marker, markers[marker]);\r\n      });\r\n\r\n      return markedText;\r\n    } catch (error) {\r\n      console.error('img\u2192picture\u5909\u63db\u30a8\u30e9\u30fc:', error);\r\n      showMessage('img\u30bf\u30b0\u306epicture\u56f2\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002', false);\r\n      return text;\r\n    }\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/<p>\u5185\u306e\u6539\u884c\u3092 \u2192 <br \/> \u306b\u5909\u63db\r\n  function convertTagBreaks_inP(text) {\r\n    \/\/<p>\u30bf\u30b0\u5185\u306e\u6539\u884c\u3092\u691c\u51fa\u3057\u3066<br \/>\u30bf\u30b0\u306b\u7f6e\u63db\uff08<pre>\u30bf\u30b0\u306f\u9664\u5916\uff09\r\n    return text.replace(\/(<p(?:\\s[^>]*)?>)([\\s\\S]*?)(<\\\/p>)\/g, function (match, openTag, content, closeTag) {\r\n      \/\/\u30b3\u30f3\u30c6\u30f3\u30c4\u5185\u306e\u6539\u884c\u3092<br \/>\u306b\u5909\u63db\r\n      const convertedContent = content.replace(\/\\n\/g, '<br \/>\\n');\r\n      return openTag + convertedContent + closeTag;\r\n    });\r\n  }\r\n\r\n\r\n\r\n\r\n  function convertListStyles(text) {\r\n    \/\/list-style-type\u306e\u5909\u63db\r\n    const convertUList = document.getElementById('convertUListStyles').checked;\r\n    const convertOList = document.getElementById('convertOListStyles').checked;\r\n    const uListStyle = document.querySelector('#convertUListStyles + select').value;\r\n    const oListStyle = document.querySelector('#convertOListStyles + select').value;\r\n\r\n    if (convertUList) {\r\n      \/\/<ul>\u30bf\u30b0\u306e\u51e6\u7406\r\n      text = text.replace(\/<ul((?:[^>](?!style))*?)>\/gi, `<ul$1 style=\"list-style-type:${uListStyle};\">`);\r\n      text = text.replace(\/<ul([^>]*?)style=\"([^\"]*?)\"\/gi, function (match, p1, p2) {\r\n        if (p2.includes('list-style-type')) {\r\n          return `<ul${p1}style=\"${p2.replace(\/list-style-type:[^;]+;?\/, `list-style-type:${uListStyle};`)}\"`;\r\n        } else {\r\n          return `<ul${p1}style=\"${p2}list-style-type:${uListStyle};\"`;\r\n        }\r\n      });\r\n    }\r\n\r\n    if (convertOList) {\r\n      \/\/<ol>\u30bf\u30b0\u306e\u51e6\u7406\uff08<ul>\u3068\u540c\u69d8\uff09\r\n      text = text.replace(\/<ol((?:[^>](?!style))*?)>\/gi, `<ol$1 style=\"list-style-type:${oListStyle};\">`);\r\n      text = text.replace(\/<ol([^>]*?)style=\"([^\"]*?)\"\/gi, function (match, p1, p2) {\r\n        if (p2.includes('list-style-type')) {\r\n          return `<ol${p1}style=\"${p2.replace(\/list-style-type:[^;]+;?\/, `list-style-type:${oListStyle};`)}\"`;\r\n        } else {\r\n          return `<ol${p1}style=\"${p2}list-style-type:${oListStyle};\"`;\r\n        }\r\n      });\r\n    }\r\n\r\n    return text;\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n  \/\/\u6307\u5b9a\u306e\u30bf\u30b0\u306b\u3001\u4efb\u610f\u306e\u30af\u30e9\u30b9\u3092\u8ffd\u52a0\r\n  function processAllTagClasses(text) {\r\n    try {\r\n      \/\/\u51e6\u7406\u5bfe\u8c61\u306e\u5404\u30a4\u30f3\u30d7\u30c3\u30c8\u8981\u7d20\u306e\u30bb\u30c3\u30c8\r\n      const inputSets = [\r\n        { tagId: 'targetAddClase1', classId: 'afterAddClase1', checkboxId: 'convertAddClase1s' },\r\n        { tagId: 'targetAddClase11', classId: 'afterAddClase11', checkboxId: 'convertAddClase11s' },\r\n        { tagId: 'targetAddClase12', classId: 'afterAddClase12', checkboxId: 'convertAddClase12s' },\r\n        { tagId: 'targetAddClase13', classId: 'afterAddClase13', checkboxId: 'convertAddClase13s' },\r\n        { tagId: 'targetAddClase14', classId: 'afterAddClase14', checkboxId: 'convertAddClase14s' },\r\n        { tagId: 'targetAddClase15', classId: 'afterAddClase15', checkboxId: 'convertAddClase15s' },\r\n        { tagId: 'targetAddClase16', classId: 'afterAddClase16', checkboxId: 'convertAddClase16s' },\r\n        { tagId: 'targetAddClase17', classId: 'afterAddClase17', checkboxId: 'convertAddClase17s' },\r\n        { tagId: 'targetAddClase18', classId: 'afterAddClase18', checkboxId: 'convertAddClase18s' },\r\n        { tagId: 'targetAddClase19', classId: 'afterAddClase19', checkboxId: 'convertAddClase19s' },\r\n        { tagId: 'targetAddClase20', classId: 'afterAddClase20', checkboxId: 'convertAddClase20s' },\r\n        { tagId: 'targetAddClase21', classId: 'afterAddClase21', checkboxId: 'convertAddClase21s' },\r\n        { tagId: 'targetAddClase31', classId: 'afterAddClase31', checkboxId: 'convertAddClase31s' },\r\n        { tagId: 'targetAddClase32', classId: 'afterAddClase32', checkboxId: 'convertAddClase32s' },\r\n        { tagId: 'targetAddClase33', classId: 'afterAddClase33', checkboxId: 'convertAddClase33s' },\r\n        { tagId: 'targetAddClase34', classId: 'afterAddClase34', checkboxId: 'convertAddClase34s' }\r\n      ];\r\n      \/\/\u5404\u30bb\u30c3\u30c8\u306b\u5bfe\u3057\u3066\u51e6\u7406\u3092\u5b9f\u884c\r\n      for (const set of inputSets) {\r\n        \/\/\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u304c\u30c1\u30a7\u30c3\u30af\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\r\n        if (document.getElementById(set.checkboxId).checked) {\r\n          const targetTag = document.getElementById(set.tagId).value.trim();\r\n          const addClass = document.getElementById(set.classId).value.trim();\r\n\r\n          \/\/\u7a7a\u306e\u5165\u529b\u30c1\u30a7\u30c3\u30af\r\n          if (!targetTag || !addClass) {\r\n            console.warn(`${set.tagId}\u307e\u305f\u306f${set.classId}\u304c\u7a7a\u3067\u3059`);\r\n            continue; \/\/\u3053\u306e\u51e6\u7406\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u6b21\u3078\r\n          }\r\n\r\n          \/\/\u6b63\u78ba\u306a\u30bf\u30b0\u30de\u30c3\u30c1\u30f3\u30b0\u306e\u305f\u3081\u306e\u6539\u826f\u3055\u308c\u305f\u6b63\u898f\u8868\u73fe\r\n          \/\/\u30bf\u30b0\u306f<\u30bf\u30b0\u540d>\u307e\u305f\u306f<\u30bf\u30b0\u540d \u5c5e\u6027...>\u306e\u5f62\u5f0f\u306b\u30de\u30c3\u30c1\u3059\u308b\r\n          const regex = new RegExp(`<${targetTag}(>|\\\\s[^>]*>)`, 'g');\r\n\r\n          text = text.replace(regex, (match) => {\r\n            \/\/\u9589\u3058\u62ec\u5f27\u306e\u76f4\u524d\u306e\u4f4d\u7f6e\u3092\u898b\u3064\u3051\u308b\r\n            const closeBracketPos = match.lastIndexOf('>');\r\n            const beforeCloseBracket = match.substring(0, closeBracketPos);\r\n\r\n            if (beforeCloseBracket.includes('class=\"')) {\r\n              \/\/\u65e2\u5b58\u306eclass\u5c5e\u6027\u304c\u3042\u308b\u5834\u5408\r\n              return match.replace(\/class=\"([^\"]*)\"\/, (m, existingClasses) => {\r\n                const classArray = existingClasses.split(' ');\r\n                if (!classArray.includes(addClass)) {\r\n                  return `class=\"${existingClasses} ${addClass}\"`;\r\n                }\r\n                return m;\r\n              });\r\n            } else {\r\n              \/\/class\u5c5e\u6027\u304c\u306a\u3044\u5834\u5408\u3001\u9589\u3058\u62ec\u5f27\u306e\u76f4\u524d\u306bclass\u5c5e\u6027\u3092\u8ffd\u52a0\r\n              return `${beforeCloseBracket} class=\"${addClass}\">`;\r\n            }\r\n          });\r\n        }\r\n      }\r\n\r\n      return text;\r\n    } catch (error) {\r\n      console.error('\u30af\u30e9\u30b9\u8ffd\u52a0\u30a8\u30e9\u30fc:', error);\r\n      showMessage('\u30af\u30e9\u30b9\u8ffd\u52a0\u51e6\u7406\u3067\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002', false);\r\n      return text;\r\n    }\r\n  }\r\n\r\n\r\n  \/\/\u6307\u5b9a\u306e\u30bf\u30b0\u3092 \u2192 \u4efb\u610f\u306e\u30bf\u30b0 \u306b\u5909\u63db\r\n  function processAllTagUpdates(text) {\r\n    try {\r\n      \/\/\u51e6\u7406\u5bfe\u8c61\u306e\u5404\u30a4\u30f3\u30d7\u30c3\u30c8\u8981\u7d20\u306e\u30bb\u30c3\u30c8\r\n      const updateSets = [\r\n        { targetId: 'targetUpdateTag1', afterId: 'afterUpdateTag1', checkboxId: 'convertUpdateTag1s' },\r\n        { targetId: 'targetUpdateTag2', afterId: 'afterUpdateTag2', checkboxId: 'convertUpdateTag2s' },\r\n        { targetId: 'targetUpdateTag3', afterId: 'afterUpdateTag3', checkboxId: 'convertUpdateTag3s' },\r\n        { targetId: 'targetUpdateTag4', afterId: 'afterUpdateTag4', checkboxId: 'convertUpdateTag4s' },\r\n        { targetId: 'targetUpdateTag5', afterId: 'afterUpdateTag5', checkboxId: 'convertUpdateTag5s' },\r\n        { targetId: 'targetUpdateTag6', afterId: 'afterUpdateTag6', checkboxId: 'convertUpdateTag6s' }\r\n      ];\r\n\r\n      \/\/\u5404\u30bb\u30c3\u30c8\u306b\u5bfe\u3057\u3066\u51e6\u7406\u3092\u5b9f\u884c\r\n      for (const set of updateSets) {\r\n        \/\/\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u304c\u30c1\u30a7\u30c3\u30af\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\r\n        if (document.getElementById(set.checkboxId).checked) {\r\n          const targetTag = document.getElementById(set.targetId).value.trim();\r\n          const afterTag = document.getElementById(set.afterId).value.trim();\r\n\r\n          \/\/\u7a7a\u306e\u5165\u529b\u30c1\u30a7\u30c3\u30af\r\n          if (!targetTag || !afterTag) {\r\n            console.warn(`${set.targetId}\u307e\u305f\u306f${set.afterId}\u304c\u7a7a\u3067\u3059`);\r\n            continue; \/\/\u3053\u306e\u51e6\u7406\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u6b21\u3078\r\n          }\r\n\r\n          \/\/\u30bf\u30b0\u540d\u3068\u5c5e\u6027\u3092\u62bd\u51fa\r\n          const targetMatch = targetTag.match(\/^<([^\\s>]+)([^>]*)>\/);\r\n          const afterMatch = afterTag.match(\/^<([^\\s>]+)([^>]*)>\/);\r\n\r\n          if (!targetMatch || !afterMatch) {\r\n            console.warn(`${set.targetId}\u307e\u305f\u306f${set.afterId}\u306e\u30bf\u30b0\u5f62\u5f0f\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093`);\r\n            continue;\r\n          }\r\n\r\n          const [fullTargetTag, targetTagName, targetAttrs] = targetMatch;\r\n          const [fullAfterTag, afterTagName, afterAttrs] = afterMatch;\r\n\r\n          \/\/\u6b63\u898f\u8868\u73fe\u30d1\u30bf\u30fc\u30f3\u3067\u30bf\u30b0\u3092\u30a8\u30b9\u30b1\u30fc\u30d7\r\n          const escapedTargetTag = escapeRegExp(fullTargetTag);\r\n\r\n          \/\/\u958b\u59cb\u30bf\u30b0\u3068\u7d42\u4e86\u30bf\u30b0\u306e\u7f6e\u63db\u3092\u76f4\u63a5\u884c\u3046\uff08\u30de\u30fc\u30ab\u30fc\u3092\u4f7f\u308f\u306a\u3044\uff09\r\n          const openRegex = new RegExp(escapedTargetTag, 'g');\r\n          const closeRegex = new RegExp(`<\/${targetTagName}>`, 'g');\r\n\r\n          \/\/\u958b\u59cb\u30bf\u30b0\u3092\u7f6e\u63db\r\n          text = text.replace(openRegex, fullAfterTag);\r\n\r\n          \/\/\u7d42\u4e86\u30bf\u30b0\u3092\u7f6e\u63db\r\n          text = text.replace(closeRegex, `<\/${afterTagName}>`);\r\n        }\r\n      }\r\n\r\n      return text;\r\n    } catch (error) {\r\n      console.error('\u30bf\u30b0\u66f4\u65b0\u30a8\u30e9\u30fc:', error);\r\n      showMessage('\u30bf\u30b0\u306e\u66f4\u65b0\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002', false);\r\n      return text;\r\n    }\r\n  }\r\n\r\n  \/\/\u6b63\u898f\u8868\u73fe\u306e\u30a8\u30b9\u30b1\u30fc\u30d7\u7528\u30d8\u30eb\u30d1\u30fc\u95a2\u6570\r\n  function escapeRegExp(string) {\r\n    return string.replace(\/[.*+?^${}()|[\\]\\\\]\/g, '\\\\$&');\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/\u53f3\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2 \u2192 \u5de6\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2\u3078\u306e\u5909\u63db\r\n  function decodeText() {\r\n    let encode_area = document.getElementById('encodeArea');\r\n    let decode_area = document.getElementById('decodeArea');\r\n    let text = decode_area.value;\r\n\r\n    \/\/ \u30c6\u30fc\u30d6\u30eb\u5909\u63db \u2192 \u30d1\u30a4\u30d7\u5f62\u5f0f\u306b\u5909\u63db\u3057\u3064\u3064\u3001turndown\u304b\u3089\u4fdd\u8b77\u3059\u308b\u305f\u3081\r\n    \/\/ \u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u5316\u3059\u308b\uff08\u30c6\u30fc\u30d6\u30eb\u5185\u306e\u6539\u884c\u304cturndown\u3067\u534a\u89d2\u30b9\u30da\u30fc\u30b9\u306b\r\n    \/\/ \u6298\u308a\u305f\u305f\u307e\u308c\u308b\u306e\u3092\u9632\u3050\uff09\u3002\r\n    const tableBlocks = [];\r\n    if (document.getElementById('decodeTagTables').checked) {\r\n      text = decodeTagTables(text, tableBlocks);\r\n    }\r\n\r\n    \/\/ <pre><code> \u2192 \u30d5\u30a7\u30f3\u30b9\u30c9\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u5909\u63db + \u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u3067\u4fdd\u8b77\r\n    const codeBlocks = [];\r\n    text = decodePreCode(text, codeBlocks);\r\n\r\n    \/\/ <picture> \u30bf\u30b0\u3092\u5265\u304c\u3057\u3066 <img> \u306e\u307f\u306b\u3059\u308b\uff08turndown\u304c\u6539\u884c\u3092\u6b63\u3057\u304f\u51e6\u7406\u3067\u304d\u308b\u3088\u3046\u306b\uff09\r\n    text = decodeStripPicture(text);\r\n\r\n    if (document.getElementById('decodeHtml2Md').checked) { text = decodeHtml2Md(text); }\r\n\r\n    \/\/ \u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u3092\u30d5\u30a7\u30f3\u30b9\u30c9\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u306b\u5fa9\u5143\uff08turndown\u306e\u30a8\u30b9\u30b1\u30fc\u30d7\u306b\u3082\u5bfe\u5fdc\uff09\r\n    codeBlocks.forEach((block, index) => {\r\n      const plain = '___CODE_BLOCK_' + index + '___';\r\n      const escaped = '\\\\_\\\\_\\\\_CODE\\\\_BLOCK\\\\_' + index + '\\\\_\\\\_\\\\_';\r\n      text = text.replace(escaped, block);\r\n      text = text.replace(plain, block);\r\n    });\r\n\r\n    \/\/ \u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u3092\u30c6\u30fc\u30d6\u30eb\u306b\u5fa9\u5143\r\n    tableBlocks.forEach((block, index) => {\r\n      const plain = '___TABLE_BLOCK_' + index + '___';\r\n      const escaped = '\\\\_\\\\_\\\\_TABLE\\\\_BLOCK\\\\_' + index + '\\\\_\\\\_\\\\_';\r\n      text = text.replace(escaped, block);\r\n      text = text.replace(plain, block);\r\n    });\r\n\r\n    encode_area.value = text;\r\n    copyToClipboard(text, true);   \/\/isDecode = true\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/\u30c6\u30fc\u30d6\u30eb\u30bf\u30b0\u3092 \u2192 |\uff08\u30d1\u30a4\u30d7\uff09 \u306b\u30c7\u30b3\u30fc\u30c9\r\n  \/\/ tableBlocks \u914d\u5217\u3092\u6e21\u3059\u3068\u3001\u5909\u63db\u7d50\u679c\u3092\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u5316\u3057\u3066\u4fdd\u5b58\u3059\u308b\r\n  \/\/ \uff08turndown\u3067\u30c6\u30fc\u30d6\u30eb\u5185\u306e\u6539\u884c\u304c\u6f70\u3055\u308c\u308b\u306e\u3092\u9632\u3050\uff09\r\n  function decodeTagTables(text, tableBlocks) {\r\n    \/\/ \u5f8c\u65b9\u4e92\u63db: tableBlocks \u304c\u7701\u7565\u3055\u308c\u305f\u5834\u5408\u306f\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u5316\u305b\u305a\u76f4\u63a5\u7f6e\u63db\r\n    const usePlaceholder = Array.isArray(tableBlocks);\r\n\r\n    try {\r\n      \/\/\u30c6\u30fc\u30d6\u30eb\u5168\u4f53\u3092\u691c\u7d22\u3057\u3066\u51e6\u7406\r\n      return text.replace(\/<table[^>]*>([\\s\\S]*?)<\\\/table>\/g, function (tableMatch, tableContent) {\r\n\r\n        \/\/ thead\u306e\u6709\u7121\u3092\u78ba\u8a8d\r\n        const hasThead = \/<thead[\\s\\S]*?<\\\/thead>\/.test(tableContent);\r\n\r\n        \/\/ thead\u5185\u306e\u884c\u3068tbody\u5185\u306e\u884c\u3092\u5206\u3051\u3066\u53d6\u5f97\r\n        let theadRows = [];\r\n        let tbodyRows = [];\r\n\r\n        if (hasThead) {\r\n          const theadMatch = tableContent.match(\/<thead[^>]*>([\\s\\S]*?)<\\\/thead>\/);\r\n          if (theadMatch) {\r\n            theadRows = theadMatch[1].match(\/<tr[^>]*>([\\s\\S]*?)<\\\/tr>\/g) || [];\r\n          }\r\n          const tbodyMatch = tableContent.match(\/<tbody[^>]*>([\\s\\S]*?)<\\\/tbody>\/);\r\n          if (tbodyMatch) {\r\n            tbodyRows = tbodyMatch[1].match(\/<tr[^>]*>([\\s\\S]*?)<\\\/tr>\/g) || [];\r\n          }\r\n        } else {\r\n          \/\/ thead\u306a\u3057 \u2192 \u5168\u884c\u53d6\u5f97\r\n          tbodyRows = tableContent.match(\/<tr[^>]*>([\\s\\S]*?)<\\\/tr>\/g) || [];\r\n        }\r\n\r\n        if (theadRows.length === 0 && tbodyRows.length === 0) return tableMatch;\r\n\r\n        \/\/ \u884c\u3092\u30d1\u30a4\u30d7\u5f62\u5f0f\u306b\u5909\u63db\u3059\u308b\u30d8\u30eb\u30d1\u30fc\r\n        function rowToPipe(rowHtml) {\r\n          const rowContent = rowHtml.replace(\/<\\\/?tr[^>]*>\/g, '');\r\n          let pipeRow = '|';\r\n          let colCount = 0;\r\n\r\n          const cellMatches = rowContent.match(\/<(th|td)[^>]*>([\\s\\S]*?)<\\\/(th|td)>\/g);\r\n          if (cellMatches) {\r\n            cellMatches.forEach(cellMatch => {\r\n              let cellContent = cellMatch.replace(\/<\\\/(th|td)>$\/, '').replace(\/^<(th|td)[^>]*>\/, '');\r\n              \/\/ <br>, <br\/>, <br \/> \u3092\u524a\u9664\u3057\u3066\u30c6\u30fc\u30d6\u30eb\u8a18\u6cd5\u3092\u58ca\u3055\u306a\u3044\u3088\u3046\u306b\u3059\u308b\r\n              \/\/ \uff08\u30bb\u30eb\u5185\u6539\u884c\u306fMarkdown\u306e\u30c6\u30fc\u30d6\u30eb\u69cb\u6587\u3068\u885d\u7a81\u3059\u308b\u305f\u3081\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u524a\u9664\uff09\r\n              cellContent = cellContent.replace(\/<br\\s*\\\/?\\s*>\/gi, '');\r\n              pipeRow += cellContent.trim() + '|';\r\n              colCount++;\r\n            });\r\n          }\r\n\r\n          return { pipe: pipeRow, cols: colCount };\r\n        }\r\n\r\n        \/\/ \u30bb\u30d1\u30ec\u30fc\u30bf\u30fc\u884c\u3092\u751f\u6210\r\n        function makeSeparator(colCount) {\r\n          let sep = '|';\r\n          for (let i = 0; i < colCount; i++) { sep += '---|'; }\r\n          return sep;\r\n        }\r\n\r\n        let pipeRows = '';\r\n        let colCount = 0;\r\n\r\n        if (hasThead && theadRows.length > 0) {\r\n          \/\/ thead\u884c\u3092\u51fa\u529b\r\n          theadRows.forEach(row => {\r\n            const result = rowToPipe(row);\r\n            pipeRows += result.pipe + '\\n';\r\n            if (colCount === 0) colCount = result.cols;\r\n          });\r\n          \/\/ \u30bb\u30d1\u30ec\u30fc\u30bf\u30fc\u884c\u3092\u633f\u5165\r\n          if (colCount > 0) { pipeRows += makeSeparator(colCount) + '\\n'; }\r\n          \/\/ tbody\u884c\u3092\u51fa\u529b\r\n          tbodyRows.forEach(row => {\r\n            pipeRows += rowToPipe(row).pipe + '\\n';\r\n          });\r\n        } else {\r\n          \/\/ thead\u306a\u3057 \u2192 1\u884c\u76ee\u306e\u5f8c\u306b\u30bb\u30d1\u30ec\u30fc\u30bf\u30fc\u884c\u3092\u633f\u5165\r\n          tbodyRows.forEach((row, index) => {\r\n            const result = rowToPipe(row);\r\n            pipeRows += result.pipe + '\\n';\r\n            if (index === 0) {\r\n              colCount = result.cols;\r\n              if (colCount > 0) { pipeRows += makeSeparator(colCount) + '\\n'; }\r\n            }\r\n          });\r\n        }\r\n\r\n        \/\/\u6700\u5f8c\u306e\u6539\u884c\u3092\u524a\u9664\r\n        const finalPipeTable = pipeRows.replace(\/\\n$\/, '');\r\n\r\n        \/\/ \u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u5316\uff08turndown\u3067\u30c6\u30fc\u30d6\u30eb\u5185\u6539\u884c\u304c\u6f70\u3055\u308c\u308b\u306e\u3092\u9632\u3050\uff09\r\n        if (usePlaceholder) {\r\n          const index = tableBlocks.length;\r\n          tableBlocks.push(finalPipeTable);\r\n          \/\/ <p>...<\/p> \u3067\u56f2\u3093\u3067turndown\u306b\u72ec\u7acb\u30d6\u30ed\u30c3\u30af\u3068\u3057\u3066\u8a8d\u8b58\u3055\u305b\u308b\r\n          \/\/ \uff08\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u306f <pre><code> \u4fdd\u8b77\u3068\u540c\u3058\u30d1\u30bf\u30fc\u30f3\uff09\r\n          return '<p>___TABLE_BLOCK_' + index + '___<\/p>';\r\n        }\r\n        return finalPipeTable;\r\n      });\r\n    } catch (error) {\r\n      console.error('\u30c6\u30fc\u30d6\u30eb\u30c7\u30b3\u30fc\u30c9\u30a8\u30e9\u30fc:', error);\r\n      showMessage('\u30c6\u30fc\u30d6\u30eb\u306e\u30c7\u30b3\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002', false);\r\n      return text;\r\n    }\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/ ============================================================\r\n  \/\/ <pre><code> \u2192 ``` \u30d5\u30a7\u30f3\u30b9\u30c9\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u306b\u5909\u63db\r\n  \/\/ turndown\u306e\u524d\u306b\u5b9f\u884c\u3057\u3001\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u3067\u4fdd\u8b77\u3059\u308b\r\n  \/\/ ============================================================\r\n  function decodePreCode(text, codeBlocks) {\r\n    return text.replace(\/<pre[^>]*>\\s*<code(?:\\s+class=\"language-([^\"]*)\")?[^>]*>([\\s\\S]*?)<\\\/code>\\s*<\\\/pre>\/gi, function (match, lang, content) {\r\n      \/\/ HTML\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3092\u30c7\u30b3\u30fc\u30c9\r\n      let decoded = content\r\n        .replace(\/&lt;\/g, '<')\r\n        .replace(\/&gt;\/g, '>')\r\n        .replace(\/&amp;\/g, '&')\r\n        .replace(\/&quot;\/g, '\"')\r\n        .replace(\/&#39;\/g, \"'\");\r\n\r\n      \/\/ \u524d\u5f8c\u306e\u4f59\u5206\u306a\u6539\u884c\u3092\u524a\u9664\r\n      decoded = decoded.replace(\/^\\n+\/, '').replace(\/\\n+$\/, '');\r\n\r\n      \/\/ \u4e2d\u8eab\u306b\u542b\u307e\u308c\u308b\u30d0\u30c3\u30af\u30af\u30a9\u30fc\u30c8\u9023\u7d9a\u306e\u6700\u9577\u6570\u3092\u8abf\u3079\u3001\r\n      \/\/ \u305d\u308c\u3088\u308a1\u3064\u591a\u3044\u6570\uff08\u6700\u4f4e3\u3064\uff09\u3067\u30d5\u30a7\u30f3\u30b9\u3092\u4f5c\u308b\u3002\r\n      \/\/ \u4f8b: \u4e2d\u8eab\u306b ``` \u304c\u542b\u307e\u308c\u308b \u2192 \u5916\u5074\u306f ```` \uff084\u3064\uff09\u3067\u56f2\u3080\r\n      let maxBackticks = 0;\r\n      const backtickRuns = decoded.match(\/`+\/g);\r\n      if (backtickRuns) {\r\n        backtickRuns.forEach(function (run) {\r\n          if (run.length > maxBackticks) maxBackticks = run.length;\r\n        });\r\n      }\r\n      const fenceLen = Math.max(3, maxBackticks + 1);\r\n      const fenceChars = '`'.repeat(fenceLen);\r\n\r\n      const fence = fenceChars + (lang || '');\r\n      const block = fence + '\\n' + decoded + '\\n' + fenceChars;\r\n\r\n      \/\/ \u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u306b\u7f6e\u63db\u3057\u3066turndown\u304b\u3089\u4fdd\u8b77\r\n      \/\/ turndown\u306f\u30d5\u30ea\u30fc\u30c6\u30ad\u30b9\u30c8\u306e\u6539\u884c\u3092\u534a\u89d2\u30b9\u30da\u30fc\u30b9\u306b\u6298\u308a\u305f\u305f\u3080\u305f\u3081\u3001\r\n      \/\/ \u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u5358\u72ec\u3060\u3068\u524d\u5f8c\u306e\u30c6\u30ad\u30b9\u30c8\u30fb\u30c6\u30fc\u30d6\u30eb\u3068\u540c\u4e00\u6bb5\u843d\u3068\u3057\u3066\u9023\u7d50\u3055\u308c\u3066\u3057\u307e\u3046\u3002\r\n      \/\/ <p>...<\/p> \u3067\u56f2\u3080\u3053\u3068\u3067\u3001turndown\u304c\u72ec\u7acb\u3057\u305f\u6bb5\u843d\u3068\u3057\u3066\u6271\u3044\u3001\r\n      \/\/ \u5fa9\u5143\u6642\u306b\u524d\u5f8c\u306e\u6539\u884c\u304c\u78ba\u4fdd\u3055\u308c\u308b\u3002\r\n      const index = codeBlocks.length;\r\n      codeBlocks.push(block);\r\n      return '<p>___CODE_BLOCK_' + index + '___<\/p>';\r\n    });\r\n  }\r\n\r\n\r\n  \/\/ ============================================================\r\n  \/\/ <picture> \u30bf\u30b0\u3092\u5265\u304c\u3057\u3066\u4e2d\u306e <img> \u306e\u307f\u306b\u3059\u308b\r\n  \/\/ + \u30d6\u30ed\u30c3\u30af\u30ec\u30d9\u30eb\u306e <img> \u306e\u5f8c\u306b <br \/> \u3092\u88dc\u5b8c\u3059\u308b\r\n  \/\/ ============================================================\r\n  function decodeStripPicture(text) {\r\n    \/\/ <picture> \u3092\u5265\u304c\u3057\u3066\u4e2d\u306e <img> \u3060\u3051\u6b8b\u3059\r\n    text = text.replace(\/<picture[^>]*>\\s*([\\s\\S]*?)\\s*<\\\/picture>\/gi, function (match, inner) {\r\n      const imgMatch = inner.match(\/<img[^>]*\\\/?>\/i);\r\n      return imgMatch ? imgMatch[0] : inner;\r\n    });\r\n\r\n    \/\/ \u30d6\u30ed\u30c3\u30af\u30ec\u30d9\u30eb\u306e <img> \u306e\u5f8c\u306b <br \/> \u304c\u306a\u3051\u308c\u3070\u88dc\u5b8c\r\n    \/\/ \uff08\u76f4\u5f8c\u304c <br\u3001\u6539\u884c+<\u3001\u6539\u884c+\u7a7a\u884c \u3067\u306a\u3051\u308c\u3070\u8ffd\u52a0\uff09\r\n    text = text.replace(\/(<img[^>]*\\\/?>)(?!\\s*<br)(\\s*\\n)\/gi, '$1<br \/>\\n');\r\n\r\n    return text;\r\n  }\r\n\r\n\r\n  \/\/HTML\u3092 \u2192 Markdown\u8a18\u6cd5 \u306b\u30c7\u30b3\u30fc\u30c9\r\n  function decodeHtml2Md(text) {\r\n    const options = {};\r\n    if (document.getElementById('decodeHeadingAtx').checked) {\r\n      options.headingStyle = 'atx';\r\n    }\r\n    const turndownService = new TurndownService(options);\r\n    let result = turndownService.turndown(text);\r\n\r\n    \/\/ \u30c6\u30fc\u30d6\u30eb\u306e\u5404\u884c\u3092\u6539\u884c\u3067\u533a\u5207\u308b\r\n    \/\/ \u30d1\u30bf\u30fc\u30f31: | | \u3092 |\\n| \u306b\u5909\u63db\uff08\u884c\u306e\u7d42\u308f\u308a\u3068\u6b21\u306e\u884c\u306e\u59cb\u307e\u308a\uff09\r\n    result = result.replace(\/\\|\\s+\\|\/g, '|\\n|');\r\n\r\n    \/\/ \u30d1\u30bf\u30fc\u30f32: \u30c6\u30fc\u30d6\u30eb\u884c\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u691c\u51fa\u3057\u3066\u6539\u884c\u3092\u8ffd\u52a0\r\n    \/\/ |xxx|yyy|zzz| |aaa|bbb|ccc| \u306e\u3088\u3046\u306a\u9023\u7d9a\u3092\u5206\u5272\r\n    \/\/ \u305f\u3060\u3057\u3001\u30bb\u30eb\u5185\u306e\u30b9\u30da\u30fc\u30b9\u306f\u4fdd\u6301\r\n\r\n    \/\/ &lsqb; &rsqb; \u3092 [ ] \u306b\u623b\u3059\r\n    result = result.replace(\/&lsqb;\/g, '[');\r\n    result = result.replace(\/&rsqb;\/g, ']');\r\n\r\n    return result;\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u3078\u306e\u30b3\u30d4\u30fc\r\n  function copyToClipboard(text, isDecode = false) {\r\n    navigator.clipboard.writeText(text).then(function () {\r\n      if (isDecode) {\r\n        \/\/\u53f3\u304b\u3089\u5de6\u3078\u306e\u5909\u63db\u6642\u306f\u5de6\u5074(decodedMessage)\u306b\u8868\u793a\r\n        showMessage(\"\u30c6\u30ad\u30b9\u30c8\u304c\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u30b3\u30d4\u30fc\u3055\u308c\u307e\u3057\u305f\uff01\", true, 'decodedMessage');\r\n      } else {\r\n        \/\/\u5de6\u304b\u3089\u53f3\u3078\u306e\u5909\u63db\u6642\u306f\u53f3\u5074(encodedMessage)\u306b\u8868\u793a\r\n        showMessage(\"\u30c6\u30ad\u30b9\u30c8\u304c\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u30b3\u30d4\u30fc\u3055\u308c\u307e\u3057\u305f\uff01\", true, 'encodedMessage');\r\n      }\r\n    }, function (err) {\r\n      if (isDecode) {\r\n        showMessage(\"\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u3078\u306e\u30b3\u30d4\u30fc\u306b\u5931\u6557\u3057\u307e\u3057\u305f: \" + err, false, 'decodedMessage');\r\n      } else {\r\n        showMessage(\"\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u3078\u306e\u30b3\u30d4\u30fc\u306b\u5931\u6557\u3057\u307e\u3057\u305f: \" + err, false, 'encodedMessage');\r\n      }\r\n    });\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\r\n  function showMessage(msg, isSuccess, messageAreaId) {\r\n    let messageArea = document.getElementById(messageAreaId);\r\n    const messageHTML = isSuccess ?\r\n      `<p class=\"alert is-ghosted is-primary mt-0.5r\">\r\n<i class=\"icon mas ma-check_circle c-primary mr-0.5r\"><\/i>\r\n<span>${msg}<\/span>\r\n<\/p>` :\r\n      `<p class=\"alert is-ghosted is-error mt-0.5r\">\r\n<i class=\"icon mas ma-error c-error mr-0.5r\"><\/i>\r\n<span>${msg}<\/span>\r\n<\/p>`;\r\n\r\n    messageArea.innerHTML = '';\r\n    messageArea.insertAdjacentHTML('beforeend', messageHTML);\r\n\r\n    setTimeout(() => {\r\n      messageArea.innerHTML = '';\r\n    }, 3000);\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/\u3059\u3079\u3066\u306e\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3092\u5916\u3059\r\n  function uncheckAllOptions() {\r\n    const checkboxes = document.querySelectorAll('input[type=\"checkbox\"]');\r\n    checkboxes.forEach(checkbox => {\r\n      checkbox.checked = false;\r\n    });\r\n    saveOptions();\r\n    showMessage('\u3059\u3079\u3066\u306e\u30c1\u30a7\u30c3\u30af\u304c\u5916\u308c\u307e\u3057\u305f', true, 'decodedMessage');\r\n  }\r\n\r\n\r\n  \/\/\u30c7\u30d5\u30a9\u30eb\u30c8\u72b6\u614b\u306b\u623b\u3059\uff08HTML \u306e defaultChecked \/ defaultSelected \u3092\u4f7f\u7528\uff09\r\n  function resetDefaultOptions() {\r\n    OPTION_SELECTORS.forEach(sel => {\r\n      document.querySelectorAll(sel).forEach(el => {\r\n        if (el.type === 'checkbox') {\r\n          el.checked = el.defaultChecked;\r\n        } else if (el.tagName === 'SELECT') {\r\n          el.value = el.querySelector('option[selected]')?.value ?? el.options[0]?.value;\r\n        } else {\r\n          el.value = el.defaultValue;\r\n        }\r\n      });\r\n    });\r\n    saveOptions();\r\n    showMessage('\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u306b\u623b\u3057\u307e\u3057\u305f', true, 'decodedMessage');\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/ =========================================\r\n  \/\/ localStorage\uff1a\u30c6\u30ad\u30b9\u30c8\uff0b\u30aa\u30d7\u30b7\u30e7\u30f3\u72b6\u614b\u306e\u4fdd\u5b58\u30fb\u5fa9\u5143\r\n  \/\/ =========================================\r\n\r\n  const LS_KEY_TEXT = 'encodedText';\r\n  const LS_KEY_OPTIONS = 'cnvtVkaA_options';\r\n\r\n  \/\/ \u4fdd\u5b58\u5bfe\u8c61\u30bb\u30ec\u30af\u30bf\u30fc\uff08id\u5c5e\u6027\u306e\u3042\u308b\u8981\u7d20\u306e\u307f\u5bfe\u8c61\uff09\r\n  const OPTION_SELECTORS = [\r\n    'input[type=\"checkbox\"]',\r\n    'input[type=\"text\"]',\r\n    'input[type=\"number\"]',\r\n    'select',\r\n  ];\r\n\r\n\r\n  \/\/ \u30aa\u30d7\u30b7\u30e7\u30f3\u72b6\u614b\u3092\u4fdd\u5b58\r\n  function saveOptions() {\r\n    const state = {};\r\n    OPTION_SELECTORS.forEach(sel => {\r\n      document.querySelectorAll(sel).forEach(el => {\r\n        if (!el.id) return;\r\n        state[el.id] = (el.type === 'checkbox') ? el.checked : el.value;\r\n      });\r\n    });\r\n    localStorage.setItem(LS_KEY_OPTIONS, JSON.stringify(state));\r\n  }\r\n\r\n\r\n  \/\/ \u30aa\u30d7\u30b7\u30e7\u30f3\u72b6\u614b\u3092\u5fa9\u5143\r\n  function loadOptions() {\r\n    const saved = localStorage.getItem(LS_KEY_OPTIONS);\r\n    if (!saved) return;\r\n    let state;\r\n    try { state = JSON.parse(saved); } catch (e) { return; }\r\n    Object.entries(state).forEach(([id, val]) => {\r\n      const el = document.getElementById(id);\r\n      if (!el) return;\r\n      if (el.type === 'checkbox') el.checked = val;\r\n      else el.value = val;\r\n    });\r\n  }\r\n\r\n\r\n  \/\/ \u30da\u30fc\u30b8\u8aad\u307f\u8fbc\u307f\u6642\u306b\u5fa9\u5143\r\n  window.addEventListener('load', function () {\r\n\r\n    \/\/ \u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2\u3092\u5fa9\u5143\r\n    const savedText = localStorage.getItem(LS_KEY_TEXT);\r\n    if (savedText) {\r\n      document.getElementById('encodeArea').value = savedText;\r\n    }\r\n\r\n    \/\/ \u30aa\u30d7\u30b7\u30e7\u30f3\u72b6\u614b\u3092\u5fa9\u5143\r\n    loadOptions();\r\n\r\n    \/\/ \u5fa9\u5143\u5f8c\u3001\u30aa\u30d7\u30b7\u30e7\u30f3\u5909\u66f4\u30a4\u30d9\u30f3\u30c8\u3092\u4e00\u62ec\u767b\u9332\r\n    OPTION_SELECTORS.forEach(sel => {\r\n      document.querySelectorAll(sel).forEach(el => {\r\n        const evType = (el.tagName === 'SELECT' || el.type === 'checkbox') ? 'change' : 'input';\r\n        el.addEventListener(evType, saveOptions);\r\n      });\r\n    });\r\n  });\r\n\r\n\r\n  \/\/ \u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2\u306e\u5185\u5bb9\u304c\u5909\u66f4\u3055\u308c\u305f\u3089\u4fdd\u5b58\r\n  document.getElementById('encodeArea').addEventListener('input', function () {\r\n    localStorage.setItem(LS_KEY_TEXT, this.value);\r\n  });\r\n<\/script>","protected":false},"excerpt":{"rendered":"HTML\u30bf\u30b0\u3092\u4e00\u62ec\u5909\u63db\u3067\u304d\u308b\u30aa\u30f3\u30e9\u30a4\u30f3\u5909\u63db\u30b5\u30a4\u30c8\u3002div\u2192section\u3001span\u2192em\u8a18\u6cd5\u306a\u3069\u6307\u5b9a\u30bf\u30b0\u3092\u4efb\u610f\u30bf\u30b0\u306b\u5909\u63db\u3002\u30d6\u30e9\u30a6\u30b6\u4e0a\u3067Web\u5236\u4f5c\u3092\u52b9\u7387\u5316\u3002","protected":false},"author":1,"featured_media":7370,"parent":173,"menu_order":6,"comment_status":"closed","ping_status":"closed","template":"templates\/page-converter.php","meta":{"sns_share_botton_hide":"","vkExUnit_sns_title":"","_vk_print_noindex":"","_exclude_from_list_pages":"","footnotes":"","vk-ltc-link":"","vk-ltc-target":"0"},"categories":[21,11],"tags":[],"class_list":["post-7362","page","type-page","status-publish","has-post-thumbnail","category-tool","category-html-css"],"veu_head_title_object":{"title":"","add_site_title":""},"_links":{"self":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages\/7362","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/comments?post=7362"}],"version-history":[{"count":4,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages\/7362\/revisions"}],"predecessor-version":[{"id":12801,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages\/7362\/revisions\/12801"}],"up":[{"embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages\/173"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/media\/7370"}],"wp:attachment":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/media?parent=7362"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/categories?post=7362"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/tags?post=7362"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}