{"id":12124,"date":"2026-05-21T13:29:21","date_gmt":"2026-05-21T04:29:21","guid":{"rendered":"https:\/\/code-plus.jp\/gp\/?page_id=12124"},"modified":"2026-06-04T22:12:28","modified_gmt":"2026-06-04T13:12:28","slug":"markdown-converter","status":"publish","type":"page","link":"https:\/\/code-plus.jp\/gp\/tools\/en\/markdown-converter\/","title":{"rendered":"Markdown \u21c4 HTML Online Converter | Bidirectional Conversion Tool"},"content":{"rendered":"<!-- \u25bc.page-Markdown \u21c4 HTML Online Converter Tool (\/tools\/en\/markdown-converter\/)\r\n* Page class: pg-saracnvtvkaa (WordPress outputs lowercase only)\r\n* Identifier: cnvtVkaA (used for section\/dept class names and image names)\r\n====================================== -->\r\n\r\n<div class=\"pg-saracnvtvkaa\">\r\n\r\n  <!-- .mezzala (top page padding) -->\r\n  <hr class=\"spacer-mezzala\" \/>\r\n\r\n  <hr id=\"ch-TextConverter\" anchor \/>\r\n  <header class=\"page-header mx-auto\">\r\n    <!-- Breadcrumb --><div><!-- breadcrumb.php -->\n<style>\n\/* .breadcrumb.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\u2500\u2500\u2500\u2500\u2500 *\/\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><a href=\"https:\/\/code-plus.jp\/gp\/tools\/en\/\">TOOLS\/EN<\/a><\/li><li class=\"current_page_item\"><a>PDF\u30fb\u6587\u66f8\u7de8\u96c6<\/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  <!-- .section -->\r\n  <section class=\"sect-cnvtVkaA-Intro\" style=\"contain-intrinsic-size:1000px;\">\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>Markdown \u21c4 HTML Online Converter | Bidirectional Conversion Tool<\/span><\/h1>\r\n        <p class=\"page-foreword fz-ss\">Free online tool to convert Markdown to HTML instantly. Supports tables, lists, and code blocks. Bidirectional: HTML \u2192 Markdown reverse conversion also available.<\/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>How to use<\/span>\r\n      <\/a>\r\n    <\/header><!-- \/\/\/.inheader -->\r\n  <\/section>\r\n\r\n\r\n  <!-- .section -->\r\n  <hr id=\"ch-Converter\" anchor \/>\r\n  <section class=\"sect-cnvtVkaA-Converter\" style=\"contain-intrinsic-size:1000px;\">\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 Enter your text here<\/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=\"Paste your Markdown here\"><\/textarea>\r\n          <ins id=\"decodedMessage\"><\/ins>\r\n        <\/div><!-- \/\/\/.chest -->\r\n\r\n        <!-- Options -->\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\">Options\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>Uncheck all<\/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>Reset to default<\/span>\r\n            <\/a>\r\n          <\/h4>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertMd2Html\" checked>Convert Markdown \u2192 HTML<\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"fixAiWriting\" checked>Fix AI-generated writing style<\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"removeMultiWords\">Delete strings (JSON array)&nbsp;\r\n            <hr class=\"fxbr\" \/>\r\n            <input type=\"text\" id=\"removeTxts\" class=\"input w-11e\" value='\u300e,\u300f'>&nbsp;>&nbsp;delete\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertMultiWords\">Replace strings (JSON array)&nbsp;\r\n            <hr class=\"fxbr\" \/>\r\n            <input type=\"text\" id=\"beforeTxts\" class=\"input w-11e\" value='[\u300e,\u300f]'>&nbsp;\u2192&nbsp;\r\n            <input type=\"text\" id=\"afterTxts\" class=\"input w-11e\" value='[\u300c,\u300d]'>&nbsp;>&nbsp;convert\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"mergeCells\" checked>Cell merge (&lt; &gt; horizontal \/ ^ vertical)<\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertTagTd2Ths\" checked>Convert first cell of each &lt;tr&gt; \u2192 &lt;th&gt;<\/label>\r\n\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"encloseTagImgPictures\" checked>Wrap &lt;img \/&gt; with &lt;picture&gt;<\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAddClase1s\" checked>\r\n            <input type=\"text\" id=\"targetAddClase1\" class=\"input w-8e\" value='picture'>&nbsp;tag, add class&nbsp;\r\n            <input type=\"text\" id=\"afterAddClase1\" class=\"input w-11e\" value='bd-bounds'>&nbsp;>&nbsp;add\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertTagBreaks_inP\" checked>Convert line breaks inside &lt;p&gt; \u2192 &lt;br \/&gt;<\/label>\r\n\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertUListStyles\" checked>\r\n            Set &lt;ul&gt; list-style-type to&nbsp;<select class=\"select w-10e placeholder-shown\">\r\n              <option value=\"none\">none<\/option>\r\n              <option value=\"indent\">indent<\/option>\r\n              <option value=\"bullet\" selected>bullet<\/option>\r\n              <option value=\"white-bullet\">white-bullet<\/option>\r\n              <option value=\"trigon-bullet\">trigon-bullet<\/option>\r\n              <option value=\"white-trigon-bullet\">white-trigon-bullet<\/option>\r\n              <option value=\"trigon-right\">trigon-right<\/option>\r\n              <option value=\"white-trigon-right\">white-trigon-right<\/option>\r\n              <option value=\"disc\">disc<\/option>\r\n              <option value=\"circle\">circle<\/option>\r\n              <option value=\"square\">square<\/option>\r\n              <option value=\"box\">box<\/option>\r\n              <option value=\"check\">check<\/option>\r\n              <option value=\"diamond\">diamond<\/option>\r\n            <\/select>&nbsp;>&nbsp;convert\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertOListStyles\" checked>\r\n            Set &lt;ol&gt; list-style-type to&nbsp;<select class=\"select w-10e placeholder-shown\">\r\n              <option value=\"none\">none<\/option>\r\n              <option value=\"indent\">indent<\/option>\r\n              <option value=\"decimal\" selected>decimal<\/option>\r\n              <option value=\"decimal-leading-zero\">decimal-leading-zero<\/option>\r\n              <option value=\"lower-alpha\">lower-alpha<\/option>\r\n              <option value=\"upper-alpha\">upper-alpha<\/option>\r\n              <option value=\"lower-roman\">lower-roman<\/option>\r\n              <option value=\"upper-roman\">upper-roman<\/option>\r\n              <option value=\"parenthesized-decimal\">parenthesized-decimal<\/option>\r\n              <option value=\"parenthesized-lower-alpha\">parenthesized-lower-alpha<\/option>\r\n              <option value=\"parenthesized-lower-roman\">parenthesized-lower-roman<\/option>\r\n              <option value=\"circled-decimal\">circled-decimal<\/option>\r\n              <option value=\"circled-upper-alpha\">circled-upper-alpha<\/option>\r\n              <option value=\"circled-upper-roman\">circled-upper-roman<\/option>\r\n              <option value=\"boxed-decimal\">boxed-decimal<\/option>\r\n              <option value=\"boxed-upper-alpha\">boxed-upper-alpha<\/option>\r\n              <option value=\"boxed-upper-roman\">boxed-upper-roman<\/option>\r\n              <option value=\"filled-circled-decimal\">filled-circled-decimal<\/option>\r\n              <option value=\"filled-circled-upper-alpha\">filled-circled-upper-alpha<\/option>\r\n              <option value=\"filled-circled-upper-roman\">filled-circled-upper-roman<\/option>\r\n              <option value=\"filled-boxed-decimal\">filled-boxed-decimal<\/option>\r\n              <option value=\"filled-boxed-upper-alpha\">filled-boxed-upper-alpha<\/option>\r\n              <option value=\"filled-boxed-upper-roman\">filled-boxed-upper-roman<\/option>\r\n            <\/select>&nbsp;>&nbsp;convert\r\n          \r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAddClase11s\" checked>\r\n            <input type=\"text\" id=\"targetAddClase11\" class=\"input w-8e\" value='a'>&nbsp;tag, add class&nbsp;\r\n            <input type=\"text\" id=\"afterAddClase11\" class=\"input w-11e\" value='link'>&nbsp;>&nbsp;add\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAddClase12s\" checked>\r\n            <input type=\"text\" id=\"targetAddClase12\" class=\"input w-8e\" value='b'>&nbsp;tag, add class&nbsp;\r\n            <input type=\"text\" id=\"afterAddClase12\" class=\"input w-11e\" value='bold'>&nbsp;>&nbsp;add\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAddClase13s\" checked>\r\n            <input type=\"text\" id=\"targetAddClase13\" class=\"input w-8e\" value='s'>&nbsp;tag, add class&nbsp;\r\n            <input type=\"text\" id=\"afterAddClase13\" class=\"input w-11e\" value='strike'>&nbsp;>&nbsp;add\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAddClase14s\" checked>\r\n            <input type=\"text\" id=\"targetAddClase14\" class=\"input w-8e\" value='u'>&nbsp;tag, add class&nbsp;\r\n            <input type=\"text\" id=\"afterAddClase14\" class=\"input w-11e\" value='underline'>&nbsp;>&nbsp;add\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAddClase15s\" checked>\r\n            <input type=\"text\" id=\"targetAddClase15\" class=\"input w-8e\" value='mark'>&nbsp;tag, add class&nbsp;\r\n            <input type=\"text\" id=\"afterAddClase15\" class=\"input w-11e\" value='mk-1'>&nbsp;>&nbsp;add\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAddClase16s\" checked>\r\n            <input type=\"text\" id=\"targetAddClase16\" class=\"input w-8e\" value='hr'>&nbsp;tag, add class&nbsp;\r\n            <input type=\"text\" id=\"afterAddClase16\" class=\"input w-11e\" value='separator mt-3r'>&nbsp;>&nbsp;add\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAddClase17s\" checked>\r\n            <input type=\"text\" id=\"targetAddClase17\" class=\"input w-8e\" value='h2'>&nbsp;tag, add class&nbsp;\r\n            <input type=\"text\" id=\"afterAddClase17\" class=\"input w-11e\" value='fz-xl'>&nbsp;>&nbsp;add\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAddClase18s\" checked>\r\n            <input type=\"text\" id=\"targetAddClase18\" class=\"input w-8e\" value='h3'>&nbsp;tag, add class&nbsp;\r\n            <input type=\"text\" id=\"afterAddClase18\" class=\"input w-11e\" value='fz-ml'>&nbsp;>&nbsp;add\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAddClase19s\" checked>\r\n            <input type=\"text\" id=\"targetAddClase19\" class=\"input w-8e\" value='h4'>&nbsp;tag, add class&nbsp;\r\n            <input type=\"text\" id=\"afterAddClase19\" class=\"input w-11e\" value='fz-md'>&nbsp;>&nbsp;add\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAddClase20s\" checked>\r\n            <input type=\"text\" id=\"targetAddClase20\" class=\"input w-8e\" value='h5'>&nbsp;tag, add class&nbsp;\r\n            <input type=\"text\" id=\"afterAddClase20\" class=\"input w-11e\" value='fz-ss'>&nbsp;>&nbsp;add\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAddClase21s\" checked>\r\n            <input type=\"text\" id=\"targetAddClase21\" class=\"input w-8e\" value='h6'>&nbsp;tag, add class&nbsp;\r\n            <input type=\"text\" id=\"afterAddClase21\" class=\"input w-11e\" value='fz-xs'>&nbsp;>&nbsp;add\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAddClase31s\" checked>\r\n            <input type=\"text\" id=\"targetAddClase31\" class=\"input w-8e\" value='ul'>&nbsp;tag, add class&nbsp;\r\n            <input type=\"text\" id=\"afterAddClase31\" class=\"input w-11e\" value='my-0.5r'>&nbsp;>&nbsp;add\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAddClase32s\" checked>\r\n            <input type=\"text\" id=\"targetAddClase32\" class=\"input w-8e\" value='ol'>&nbsp;tag, add class&nbsp;\r\n            <input type=\"text\" id=\"afterAddClase32\" class=\"input w-11e\" value='my-0.5r'>&nbsp;>&nbsp;add\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAddClase33s\" checked>\r\n            <input type=\"text\" id=\"targetAddClase33\" class=\"input w-8e\" value='table'>&nbsp;tag, add class&nbsp;\r\n            <input type=\"text\" id=\"afterAddClase33\" class=\"input w-11e\" value='table my-0.5r'>&nbsp;>&nbsp;add\r\n          <\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAddClase34s\" checked>\r\n            <input type=\"text\" id=\"targetAddClase34\" class=\"input w-8e\" value='tr'>&nbsp;tag, add class&nbsp;\r\n            <input type=\"text\" id=\"afterAddClase34\" class=\"input w-11e\" value='rung'>&nbsp;>&nbsp;add\r\n          <\/label>\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;tag \u2192&nbsp;\r\n            <input type=\"text\" id=\"afterUpdateTag1\" class=\"input w-11e\" value='&lt;b class=\"bold\"&gt;'>&nbsp;>&nbsp;convert\r\n          <\/label>\r\n        <\/div><!-- \/\/\/.colgroup -->\r\n\r\n        <!-- Advanced Options -->\r\n        <dl class=\"dion-details clickdion\">\r\n          <dt class=\"dion-summary\">\r\n            <h4 class=\"title is-outlined fz-sm\">Advanced Options<i class=\"dion-switch\"><\/i><\/h4>\r\n          <\/dt>\r\n          <dd class=\"dion-content colgroup is-full\">\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"removeTags\">Remove all HTML tags<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertEntityLtGts\">Convert &lt; &gt; \u2192 &amp;lt; &amp;gt;<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"removeLineBreaks\">Remove all line breaks<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"adjustLineBreaks\">Remove single line breaks; reduce consecutive ones by one<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertTagBreaks\">Convert line breaks \u2192 &lt;br \/&gt;<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertEntityNewLines\">Convert line breaks \u2192 &amp;#13;&amp;#10;<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertULineFeeds\">Convert line breaks \u2192 \\A<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertNthBreak2Tabs\">\r\n              <input type=\"text\" id=\"nthBreakCount\" class=\"w-4e\" value=\"n+1\">&nbsp;>&nbsp;\u756a\u76ee\u306e\u6539\u884c\u3092 \u2192 \u30bf\u30d6 th line break \u2192 Tab\r\n            <\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertEntityTabs\">Convert tabs \u2192 &amp;#9;<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convert2spacesTabs\">\r\n              <input type=\"number\" id=\"spaceCount\" class=\"w-4e\" value=\"2\" min=\"2\">&nbsp;>&nbsp;\u3064\u4ee5\u4e0a\u306e\u9023\u7d9a\u3059\u308b\u30b9\u30da\u30fc\u30b9\u3092 \u2192 \u30bf\u30d6 or more consecutive spaces \u2192 Tab\r\n            <\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertFullWidths\">Convert full-width chars \u2192 \u303c<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAlphaUppers\">Convert uppercase letters \u2192 \u2341<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertAlphaLowers\">Convert lowercase letters \u2192 \u29c4<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertNumber0s\">Convert digits \u2192 \u00f8<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertNumberRandoms\">Convert digits \u2192 random numbers<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertFullParenthesis\">Convert half-width () \u2192 full-width \uff08\uff09<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertHalfParenthesis\">Convert full-width \uff08\uff09 \u2192 half-width ()<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertRenumbers\">Re-number Markdown list items sequentially<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertList2Trees\">Convert + list format \u2192 tree structure<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertPipe2Bounds\">\u30d1\u30a4\u30d7(|)\u30ea\u30b9\u30c8\u3092 \u2192 \u7f6b\u7dda\u56f2\u307f\u306b\u5909\u63db<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertTagDelimits\">&nbsp;<input type=\"text\" id=\"targetDelimiterDl\" class=\"input w-4e\" value='|'>&nbsp;>&nbsp;\u3092 \u2192 &lt;dl&gt;\u30bf\u30b0 \u306b\u5909\u63db<nbsp;\u2192 >&nbsp;\u3092 \u2192 &lt;dl&gt;\u30bf\u30b0 \u306b\u5909\u63db<lt;dl>&nbsp;\u3092 \u2192 &lt;dl&gt;\u30bf\u30b0 \u306b\u5909\u63db<gt; tag<\/label>\r\n            <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"convertTagTables\">&nbsp;<input type=\"text\" id=\"targetDelimiterTable\" class=\"input w-4e\" value='|'>&nbsp;>&nbsp;\u3092 \u2192 &lt;table&gt;\u30bf\u30b0 \u306b\u5909\u63db<nbsp;\u2192 >&nbsp;\u3092 \u2192 &lt;table&gt;\u30bf\u30b0 \u306b\u5909\u63db<lt;table>&nbsp;\u3092 \u2192 &lt;table&gt;\u30bf\u30b0 \u306b\u5909\u63db<gt; tag<\/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;'> tag \u2192 \r\n              <input type=\"text\" id=\"afterUpdateTag2\" class=\"input w-11e\" value='&lt;thead&gt;'>&nbsp;>&nbsp;convert\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;'> tag \u2192 \r\n              <input type=\"text\" id=\"afterUpdateTag3\" class=\"input w-11e\" value='&lt;dl class=\"delimit\"&gt;'>&nbsp;>&nbsp;convert\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;'> tag \u2192 \r\n              <input type=\"text\" id=\"afterUpdateTag4\" class=\"input w-11e\" value='&lt;div class=\"rung\"&gt;'>&nbsp;>&nbsp;convert\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;'> tag \u2192 \r\n              <input type=\"text\" id=\"afterUpdateTag5\" class=\"input w-11e\" value='&lt;dt&gt;'>&nbsp;>&nbsp;convert\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;'> tag \u2192 \r\n              <input type=\"text\" id=\"afterUpdateTag6\" class=\"input w-11e\" value='&lt;dd&gt;'>&nbsp;>&nbsp;convert\r\n            <\/label>\r\n          <\/dd>\r\n        <\/dl><!-- \/\/\/.clickdion -->\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>Convert&nbsp;\u00bb<\/span><\/a>\r\n          <a class=\"button is-solided is-primary mt-2r\" href=\"#ch-Converter\" onclick=\"decodeText()\"><span>\u00ab&nbsp;Convert<\/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 Converted text<\/span><\/h3>\r\n          <textarea class=\"textarea\" id=\"decodeArea\" style=\"height:17.5pc;\" placeholder=\"Converted text will appear here\"><\/textarea>\r\n          <ins id=\"encodedMessage\"><\/ins>\r\n        <\/div><!-- \/\/\/.chest -->\r\n\r\n        <div class=\"colgroup w-full mt-1r\">\r\n          <!-- Options -->\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"decodeHtml2Md\" checked>Decode HTML \u2192 Markdown<\/label>\r\n          <label class=\"label is-outlined fz-sm\"><input type=\"checkbox\" class=\"checkbox\" id=\"decodeTagTables\" checked(>&lt;table&gt;\u30bf\u30b0\u3092 \u2192 &nbsp;lt;\/code>&lt;table&gt;\u30bf\u30b0\u3092 \u2192 &nbsp;gt; tag) \u2192 |\uff08\u30d1\u30a4\u30d7\uff09 \u306b\u30c7\u30b3\u30fc\u30c9<\/label>\r\n        <\/div><!-- \/\/\/.colgroup -->\r\n      <\/figure><!-- \/\/\/.rightlane -->\r\n    <\/div><!-- \/\/\/.interior.fxd-row -->\r\n  <\/section>\r\n\r\n\r\n  <!-- .section -->\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\">How to Use<\/h4>\r\n\r\n        <p class=\"fz-ss mb-1r\">\r\n          Enter your Markdown text in the left textarea and click the \u201cConvert \u00bb\u201d button to see the converted HTML on the right.<br class=\"d-none_sp\" \/>Use the \u201c\u00ab Convert\u201d button for reverse conversion: HTML \u2192 Markdown.\r\n        <\/p>\r\n\r\n        <hr class=\"separator my-1.5r\">\r\n\r\n        <h5 class=\"hdg-subexplanation fz-rg mb-0.5r\">\ud83d\udca1 \u57fa\u672c\u306eHow to Use<\/h5>\r\n        <ol class=\"fz-ss mb-1.5r\">\r\n          <li>Paste your Markdown into the left textarea<\/li>\r\n          <li>Configure options as needed<\/li>\r\n          <li>Click \u201cConvert \u00bb\u201d \u2192 HTML is output on the right &amp; auto-copied to clipboard<\/li>\r\n        <\/ol>\r\n\r\n        <hr class=\"separator my-1.5r\">\r\n\r\n        <h5 class=\"hdg-subexplanation fz-rg mb-0.5r\">\u2699\ufe0f Key Options<\/h5>\r\n        <table class=\"table tbl-responsive fz-ss mb-1.5r\">\r\n          <thead>\r\n            <tr class=\"rung\">\r\n              <th style=\"min-width:12em;\">Option<\/th>\r\n              <td>Description &amp; When to Use<\/td>\r\n            <\/tr>\r\n          <\/thead>\r\n          <tbody>\r\n            <tr class=\"rung\">\r\n              <th>Convert Markdown \u2192 HTML<\/th>\r\n              <td>Automatically converts headings (#), lists (-\/*), links, tables, and code blocks to HTML. Leave ON for standard use.<\/td>\r\n            <\/tr>\r\n            <tr class=\"rung\">\r\n              <th>Fix AI-generated writing style<\/th>\r\n              <td>Smooths out repetitive patterns and unnatural connectors common in AI-generated text. Great for polishing AI-drafted blog posts.<\/td>\r\n            <\/tr>\r\n            <tr class=\"rung\">\r\n              <th>Convert line breaks inside &lt;p&gt; \u2192 &lt;br \/&gt;<\/th>\r\n              <td>Preserves line breaks within paragraphs as &lt;br \/&gt; tags. Turn ON if line breaks disappear when pasting into the WordPress block editor.<\/td>\r\n            <\/tr>\r\n            <tr class=\"rung\">\r\n              <th>| \u2192 &lt;table&gt; tag conversion<br>+ Cell merging<\/th>\r\n              <td>Converts pipe (|) separated Markdown tables to HTML. Use <code>&lt;<\/code>\/<code>&gt;<\/code> for horizontal merge and <code>^<\/code> for vertical merge.<\/td>\r\n            <\/tr>\r\n            <tr class=\"rung\">\r\n              <th>Wrap &lt;img \/&gt; with &lt;picture&gt;<\/th>\r\n              <td>When converting Markdown images (<code>![alt](url)<\/code>), wraps the resulting img tag with a picture element. Useful for responsive themes.<\/td>\r\n            <\/tr>\r\n            <tr class=\"rung\">\r\n              <th>Auto-add class attributes to tags<br>(a \/ b \/ s \/ h2\u2013h6, etc.)<\/th>\r\n              <td>Automatically adds your theme\u2019s class names to converted tags. For example, add <code>link<\/code> to <code>a<\/code> tags or <code>bold<\/code> to <code>b<\/code> tags \u2014 customize to match your theme.<\/td>\r\n            <\/tr>\r\n            <tr class=\"rung\">\r\n              <th>Set list-style-type for &lt;ul&gt; \/ &lt;ol&gt;<\/th>\r\n              <td>Choose a list style from the dropdown. Supports theme-specific types such as bullet, check, and diamond.<\/td>\r\n            <\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <hr class=\"separator my-1.5r\">\r\n\r\n        <h5 class=\"hdg-subexplanation fz-rg mb-0.5r\">\ud83c\udfaf Use Cases<\/h5>\r\n        <table class=\"table tbl-responsive fz-ss mb-1.5r\">\r\n          <thead>\r\n            <tr class=\"rung\">\r\n              <th style=\"min-width:10em;\">Scenario<\/th>\r\n              <td>How to Use<\/td>\r\n            <\/tr>\r\n          <\/thead>\r\n          <tbody>\r\n            <tr class=\"rung\">\r\n              <th>WordPress Publishing<\/th>\r\n              <td>Convert a Markdown-written article to HTML and paste it into the WordPress block editor\u2019s \u201cCustom HTML\u201d block. Auto class assignment preserves all styling.<\/td>\r\n            <\/tr>\r\n            <tr class=\"rung\">\r\n              <th>Cleaning Up AI-Generated Content<\/th>\r\n              <td>Convert Markdown output from ChatGPT \/ Claude to HTML while simultaneously using the AI writing fix option to produce natural-sounding prose.<\/td>\r\n            <\/tr>\r\n            <tr class=\"rung\">\r\n              <th>GitHub README \u2192 Web Page<\/th>\r\n              <td>Paste your README Markdown directly and convert to HTML. Code blocks and tables are converted as-is.<\/td>\r\n            <\/tr>\r\n            <tr class=\"rung\">\r\n              <th>HTML \u2192 Markdown Reverse Conversion<\/th>\r\n              <td>To convert existing HTML back to Markdown, use the \u201c\u00ab Convert\u201d button. Paste HTML into the right textarea and convert.<\/td>\r\n            <\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <hr class=\"separator my-1.5r\">\r\n\r\n        <h5 class=\"hdg-subexplanation fz-rg mb-0.5r\">\ud83d\udccb About Advanced Options<\/h5>\r\n        <p class=\"fz-ss\">\r\n          The \u201cAdvanced Options\u201d section contains more granular controls: special character conversion, detailed line break handling, batch text replacement, and more.<br class=\"d-none_sp\" \/>For most use cases, the basic options are sufficient. Advanced options are there for edge cases, conflict testing, or specialized format conversions.\r\n        <\/p>\r\n\r\n      <\/div><!-- \/\/\/.box -->\r\n    <\/div><!-- \/\/\/.interior -->\r\n  <\/section><!-- \/\/\/.section -->\r\n\r\n\r\n  <!-- .department -->\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>Related Tools<\/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\/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=20260604221228\" alt=\"Thumbnail Image Generator with Title Text\" loading=\"lazy\" \/>\r\n            <\/picture>\r\n            <h4 class=\"linkbox-title\">Thumbnail Image Generator with Title Text<\/h4>\r\n            <span class=\"linkbox-excerpt\">\r\n              Convert text to images. Perfect for social media posts and banner creation.\r\n              <u class=\"linkbox-more\">Learn more<\/u>\r\n            <\/span>\r\n          <\/a>\r\n        <\/li>\r\n        <li class=\"slide\">\r\n          <a href=\"https:\/\/code-plus.jp\/gp\/tools\/updatetags-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\/70f9700c6f6883a60f60277286884e28.png?ver=20260604221228\" alt=\"Bulk HTML Tag Converter\" loading=\"lazy\" \/>\r\n            <\/picture>\r\n            <h4 class=\"linkbox-title\">Bulk HTML Tag Converter<\/h4>\r\n            <span class=\"linkbox-excerpt\">\r\n              Batch-convert HTML tags to any other tag. e.g. div\u2192section, span\u2192em.\r\n              <u class=\"linkbox-more\">Learn more<\/u>\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  <!-- .department -->\r\n  <hr id=\"ch-Relation2\" anchor \/>\r\n  <section class=\"sect-cnvtVkaA-Relation2 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>All Tools<\/span><\/h5>\r\n      <\/div><!-- \/\/\/.hgroup -->\r\n\r\n      <div class=\"pt-cv-wrapper\"><div class=\"pt-cv-view pt-cv-grid pt-cv-colsys\" id=\"pt-cv-view-2f67d27xgo\"><div data-id=\"pt-cv-page-1\" class=\"pt-cv-page\" data-cvc=\"3\"><div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"5957\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/markdown-converter\/\" class=\"_self\" target=\"_self\" >Markdown\u8a18\u6cd5\u21c4HTML \u30aa\u30f3\u30e9\u30a4\u30f3\u5909\u63db\u30c4\u30fc\u30eb | \u53cc\u65b9\u5411\u5909\u63db\u30b5\u30a4\u30c8<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"12124\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/en\/markdown-converter\/\" class=\"_self\" target=\"_self\" >Markdown \u21c4 HTML Online Converter | Bidirectional Conversion Tool<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"12223\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/colorpalette-generator\/\" class=\"_self\" target=\"_self\" >colorpalette-generator<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"12542\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/imageupscale-converter\/\" class=\"_self\" target=\"_self\" >\u753b\u50cfLanczos\u62e1\u5927\u30c4\u30fc\u30eb | AI\u3092\u4f7f\u308f\u305a Lanczos\u3067\u62e1\u5927\u3057\u3001\u30a8\u30c3\u30b8\u3092\u7de0\u3081\u3066\u304f\u3063\u304d\u308a\u4ed5\u4e0a\u3052\u307e\u3059<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"12198\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/imagetone-converter\/\" class=\"_self\" target=\"_self\" >\u753b\u50cf\u30c8\u30fc\u30f3\u88dc\u6b63\u30c4\u30fc\u30eb | \u660e\u5ea6\u30fb\u30b3\u30f3\u30c8\u30e9\u30b9\u30c8\u30fb\u8272\u8abf\u30fb\u5f69\u5ea6\u3092\u4e00\u62ec\u8abf\u6574<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"12171\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/imageext-converter\/\" class=\"_self\" target=\"_self\" >\u753b\u50cf\u5f62\u5f0f\u5909\u63db\u30c4\u30fc\u30eb | JPG \/ PNG \/ WebP \/ SVG \u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u3001\u6307\u5b9a\u3057\u305f\u5f62\u5f0f\u306b\u4e00\u62ec\u5909\u63db<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"11549\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/responsive-clamp-calculator\/\" class=\"_self\" target=\"_self\" >\u30ec\u30b9\u30dd\u30f3\u30b7\u30d6\u306a\u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u30fc - \u8907\u6570\u30d7\u30ed\u30d1\u30c6\u30a3\/\u30b9\u30de\u30db\u306e\u65b9\u304c\u6587\u5b57\u30b5\u30a4\u30ba\u304c\u5927\u304d\u3044\u5834\u5408\u306b\u3082\u5bfe\u5fdc<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"11746\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/specificity-calculator\/\" class=\"_self\" target=\"_self\" >CSS\u30bb\u30ec\u30af\u30bf \u8a73\u7d30\u5ea6\u8a08\u7b97\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"11509\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/textchar-encoder\/\" class=\"_self\" target=\"_self\" >\u6587\u5b57\u30b3\u30fc\u30c9\u5909\u63db\u30c4\u30fc\u30eb | Shift_JIS \/ EUC-JP \u306e\u30c6\u30ad\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3092 UTF-8 \u306b\u4e00\u62ec\u5909\u63db<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"10981\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/colorcode-converter\/\" class=\"_self\" target=\"_self\" >\u30ab\u30e9\u30fc\u30b3\u30fc\u30c9\u4e00\u62ec\u5909\u63db\u30c4\u30fc\u30eb | RGBA, HSL\u21c4HEX\u5909\u63db\u30b5\u30a4\u30c8<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"9062\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/dirtree-generator\/\" class=\"_self\" target=\"_self\" >DirTree Generator\uff08\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30c4\u30ea\u30fc\u751f\u6210\u30c4\u30fc\u30eb\uff09 -\u30d5\u30a9\u30eb\u30c0\u69cb\u9020\u3092\u8996\u899a\u5316-<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"6032\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/eyecatch-generator\/\" class=\"_self\" target=\"_self\" >\u30bf\u30a4\u30c8\u30eb\u4ed8\u304d\u306e\u30a2\u30a4\u30ad\u30e3\u30c3\u30c1\u753b\u50cf\u751f\u6210\u30c4\u30fc\u30eb | \u30aa\u30f3\u30e9\u30a4\u30f3\u4e0a\u3067\u6587\u5b57\u3092\u753b\u50cf\u306b\u5909\u63db<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"10460\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/markitdown-converter\/\" class=\"_self\" target=\"_self\" >pptx\/docx\/pdf\u2192Markdown \u5909\u63db\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"6384\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/breaks-converter\/\" class=\"_self\" target=\"_self\" >\u6539\u884c\u30fb\u30bf\u30d6\u5909\u63db\u30c4\u30fc\u30eb - &amp;#13;&amp;#10; &lt;br&gt; \\A HTML\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30fbbr\u30bf\u30b0\u4e00\u62ec\u5909\u63db<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"6207\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/text-replacer-rem-calc\/\" class=\"_self\" target=\"_self\" >\u8907\u6570\u30eb\u30fc\u30eb\u304b\u3089\u30c6\u30ad\u30b9\u30c8\u4e00\u62ec\u7f6e\u63db\u30c4\u30fc\u30eb\u3010rem \u2194 calc\u3011<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"10814\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/text-replacer-em-rem\/\" class=\"_self\" target=\"_self\" >\u8907\u6570\u30eb\u30fc\u30eb\u304b\u3089\u30c6\u30ad\u30b9\u30c8\u4e00\u62ec\u7f6e\u63db\u30c4\u30fc\u30eb\u3010em \u2194 rem\u3011<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"6140\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/text-replacer-pc-rem\/\" class=\"_self\" target=\"_self\" >\u8907\u6570\u30eb\u30fc\u30eb\u304b\u3089\u30c6\u30ad\u30b9\u30c8\u4e00\u62ec\u7f6e\u63db\u30c4\u30fc\u30eb\u3010pc \u2194 rem\u3011<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"7055\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/text-replacer-px-em\/\" class=\"_self\" target=\"_self\" >\u8907\u6570\u30eb\u30fc\u30eb\u304b\u3089\u30c6\u30ad\u30b9\u30c8\u4e00\u62ec\u7f6e\u63db\u30c4\u30fc\u30eb\u3010px \u2194 em\u3011<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"6124\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/text-replacer-px-rem\/\" class=\"_self\" target=\"_self\" >\u8907\u6570\u30eb\u30fc\u30eb\u304b\u3089\u30c6\u30ad\u30b9\u30c8\u4e00\u62ec\u7f6e\u63db\u30c4\u30fc\u30eb\u3010px \u2194 rem\u3011<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"10161\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/linebounds-converter\/\" class=\"_self\" target=\"_self\" >\u30d1\u30a4\u30d7\u8a18\u53f7(|)\u968e\u5c64\u30ea\u30b9\u30c8\u3092 \u2192 \u7f6b\u7dda\u56f2\u307f\u306b\u5909\u63db\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"6964\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/table-converter\/\" class=\"_self\" target=\"_self\" >&nbsp;|\uff08\u30d1\u30a4\u30d7\uff09\u3092Table\u30bf\u30b0\u306b\u5909\u63db\u30c4\u30fc\u30eb | Markdown\u8868\u5f62\u5f0f\u2192HTML\u81ea\u52d5\u5909\u63db<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"7062\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/deline-converter\/\" class=\"_self\" target=\"_self\" >&nbsp;|\uff08\u30d1\u30a4\u30d7\uff09\u3092Dl\u30bf\u30b0\u306b\u5909\u63db\u30c4\u30fc\u30eb - \u5b9a\u7fa9\u30ea\u30b9\u30c8\u30fb\u7528\u8a9e\u96c6HTML\u81ea\u52d5\u751f\u6210<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"10028\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/font-metrics-analyzer\/\" class=\"_self\" target=\"_self\" >\u30d5\u30a9\u30f3\u30c8\u30e1\u30c8\u30ea\u30af\u30b9\u89e3\u6790\u30c4\u30fc\u30eb - 2\u3064\u306e\u30d5\u30a9\u30f3\u30c8\u3092\u6bd4\u8f03\u3057\u3066\u3001size-adjust\u306e\u6700\u9069\u5024\u3092\u8a08\u7b97<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"8636\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/imgtag-converter\/\" class=\"_self\" target=\"_self\" >\u753b\u50cf\u2192img\u30bf\u30b0\u5909\u63db\u30c4\u30fc\u30eb | \u753b\u50cf\u30b5\u30a4\u30ba\u30fb\u30a2\u30b9\u30da\u30af\u30c8\u6bd4\u81ea\u52d5\u8a08\u7b97\u30b5\u30a4\u30c8<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"9036\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/svg2gif-converter\/\" class=\"_self\" target=\"_self\" >svg2gif-converter<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"7615\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/charbase36-converter\/\" class=\"_self\" target=\"_self\" >10\u9032\u6570\u3092 26\u9032\u6570\u306b\u3001\u30a8\u30f3\u30b3\u30fc\u30c9 \u2194 \u30c7\u30b3\u30fc\u30c9\u3059\u308b\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"9585\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/list2trees-converter\/\" class=\"_self\" target=\"_self\" >\u30d7\u30e9\u30b9\u8a18\u53f7(+)\u968e\u5c64\u30ea\u30b9\u30c8\u3092 \u2192 \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30c4\u30ea\u30fc\u306b\u5909\u63db\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"8005\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/page-8005\/\" class=\"_self\" target=\"_self\" >\u884c\u3092 \u2192 \u6307\u5b9a\u5217\u306e\u30bf\u30d6\u533a\u5207\u308a\u884c\u306b\u5909\u63db\u3059\u308b\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"7816\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/lines-converter\/\" class=\"_self\" target=\"_self\" >\u884c\u3092\u9006\u9806\u306b\u4e26\u3073\u66ff\u3048\u308b\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"7187\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/charurl-converter\/\" class=\"_self\" target=\"_self\" >\u30c6\u30ad\u30b9\u30c8\u3092 URL\u30a8\u30f3\u30b3\u30fc\u30c9\u306b\u3001\u30a8\u30f3\u30b3\u30fc\u30c9 \u2194 \u30c7\u30b3\u30fc\u30c9\u3059\u308b\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"7362\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/updatetags-converter\/\" class=\"_self\" target=\"_self\" >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<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"7151\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/addclases-converter\/\" class=\"_self\" target=\"_self\" >\u6307\u5b9a\u306e\u30bf\u30b0\u306b \u2192 \u4efb\u610f\u306e\u30af\u30e9\u30b9\u3092\u8ffd\u52a0\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"7178\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/renumber-converter\/\" class=\"_self\" target=\"_self\" >Markdown\u5f62\u5f0f\u306e\u756a\u53f7\u3092\u4e0a\u304b\u3089\u4ed8\u3051\u76f4\u3059\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"7148\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/multiwords-converter\/\" class=\"_self\" target=\"_self\" >JSON\u5f62\u5f0f\u3067\u8907\u6570\u306e\u8a9e\u53e5\u3092\u307e\u3068\u3081\u3066\u5909\u63db\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"7107\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/multiwords-remover\/\" class=\"_self\" target=\"_self\" >JSON\u5f62\u5f0f\u3067\u8907\u6570\u306e\u8a9e\u53e5\u3092\u307e\u3068\u3081\u3066\u524a\u9664\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"7127\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/zenkakumasu-converter\/\" class=\"_self\" target=\"_self\" >\u5168\u89d2\u6587\u5b57\u3092 \u2192 \u303c \u306b\u5909\u63db\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"7079\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/number0-converter\/\" class=\"_self\" target=\"_self\" >\u3059\u3079\u3066\u306e\u6570\u5b57\u3092 \u2192 \u00f8 \u306b\u5909\u63db\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"6766\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/imagemap-converter\/\" class=\"_self\" target=\"_self\" >SVG\u304b\u3089ImageMap\uff08\u30a4\u30e1\u30fc\u30b8\u30de\u30c3\u30d7\uff09\u306b\u5909\u63db\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"6747\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/fullparenthesis-converter\/\" class=\"_self\" target=\"_self\" >\u534a\u89d2\u62ec\u5f27()\u3092\u3001\u5168\u89d2\u62ec\u5f27\uff08\uff09\u306b\u5909\u63db\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"6691\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/tags-remover\/\" class=\"_self\" target=\"_self\" >\u3059\u3079\u3066\u306eHTML\u30bf\u30b0\u3092\u524a\u9664\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"6019\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/ltgt-converter\/\" class=\"_self\" target=\"_self\" >&lt; &gt; \u3092 &amp;lt; &amp;gt; \u306b\u5909\u63db\u30c4\u30fc\u30eb<\/a><\/h5><\/div><\/div>\n<div class=\"col-md-4 col-sm-6 col-xs-12 pt-cv-content-item pt-cv-2-col\"  data-pid=\"170\"><div class='pt-cv-ifield'><h5 class=\"pt-cv-title\"><a href=\"https:\/\/code-plus.jp\/gp\/tools\/deepl-charcounter\/\" class=\"_self\" target=\"_self\" >DeepL\u7ffb\u8a33 &#038; \u6587\u5b57\u6570\u30ab\u30a6\u30f3\u30bf\u30fc<\/a><\/h5><\/div><\/div><\/div><\/div><\/div>\t\t\t<style type=\"text\/css\" id=\"pt-cv-inline-style-a0e8da21sz\">#pt-cv-view-2f67d27xgo .pt-cv-title a, #pt-cv-view-2f67d27xgo  .panel-title { font-weight: 600 !important; }\n#pt-cv-view-2f67d27xgo .pt-cv-carousel-caption  { background-color: rgba(51,51,51,.6) !important; }\n#pt-cv-view-2f67d27xgo .pt-cv-specialp { background-color: #CC3333 !important }\n#pt-cv-view-2f67d27xgo .pt-cv-specialp * { color: #fff !important; }\n#pt-cv-view-2f67d27xgo .pt-cv-pficon  { color: #bbb !important; }\n#pt-cv-view-2f67d27xgo .pt-cv-readmore  { color: #ffffff !important; background-color: #00aeef !important; }\n#pt-cv-view-2f67d27xgo .pt-cv-readmore:hover  { color: #ffffff !important; background-color: #00aeef !important; }\n#pt-cv-view-2f67d27xgo  + .pt-cv-pagination-wrapper .pt-cv-more , #pt-cv-view-2f67d27xgo  + .pt-cv-pagination-wrapper .pagination .active a, .pt-cv-pagination[data-sid='2f67d27xgo'] .active a { color: #ffffff !important; background-color: #00aeef !important; }<\/style>\r\n\t\t\t\r\n    <\/div><!-- \/\/\/.interior -->\r\n  <\/section><!-- \/\/\/.section -->\r\n\r\n\r\n\r\n\r\n  <!-- .mediano (bottom page padding) -->\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    \/\/ \u30c4\u30ea\u30fc\u5909\u63db\u3068\u30d1\u30a4\u30d7\u2192\u7f6b\u7dda\u56f2\u307f\u5909\u63db\u306fMarkdown\u5909\u63db\u3088\u308a\u524d\u306b\u5b9f\u884c\r\n    if (document.getElementById('convertList2Trees').checked) { text = convertList2Trees(text); }\r\n    if (document.getElementById('convertPipe2Bounds').checked) { text = convertPipe2Bounds(text); }\r\n\r\n    \/\/ AI\u6587\u7ae0\u4fee\u6b63\u306fMarkdown\u5909\u63db\u3088\u308a\u524d\u306b\u5b9f\u884c\r\n    if (document.getElementById('fixAiWriting').checked) { text = fixAiWriting(text); }\r\n\r\n    if (document.getElementById('convertMd2Html').checked) { text = convertMd2Html(text); }\r\n    if (document.getElementById('removeTags').checked) { text = removeTags(text); }\r\n    if (document.getElementById('convertEntityLtGts').checked) { text = convertEntityLtGts(text); }\r\n    if (document.getElementById('removeLineBreaks').checked) { text = removeLineBreaks(text); }\r\n    if (document.getElementById('adjustLineBreaks').checked) { text = adjustLineBreaks(text); }\r\n    if (document.getElementById('convertTagBreaks').checked) { text = convertTagBreaks(text); }\r\n    if (document.getElementById('convertEntityNewLines').checked) { text = convertEntityNewLines(text); }\r\n    if (document.getElementById('convertULineFeeds').checked) { text = convertULineFeeds(text); }\r\n    if (document.getElementById('convertNthBreak2Tabs').checked) { text = convertNthBreak2Tabs(text); }\r\n    if (document.getElementById('convertEntityTabs').checked) { text = convertEntityTabs(text); }\r\n    if (document.getElementById('convert2spacesTabs').checked) { text = convert2spacesTabs(text); }\r\n    if (document.getElementById('convertFullWidths').checked) { text = convertFullWidths(text); }\r\n    if (document.getElementById('convertAlphaUppers').checked) { text = convertAlphaUppers(text); }\r\n    if (document.getElementById('convertAlphaLowers').checked) { text = convertAlphaLowers(text); }\r\n    if (document.getElementById('convertNumber0s').checked) { text = convertNumber0s(text); }\r\n    if (document.getElementById('convertNumberRandoms').checked) { text = convertNumberRandoms(text); }\r\n    if (document.getElementById('convertFullParenthesis').checked) { text = convertFullParenthesis(text); }\r\n    if (document.getElementById('convertHalfParenthesis').checked) { text = convertHalfParenthesis(text); }\r\n    if (document.getElementById('convertRenumbers').checked) { text = convertRenumbers(text); }\r\n    if (document.getElementById('removeMultiWords').checked) { text = removeMultiWords(text); }\r\n    if (document.getElementById('convertMultiWords').checked) { text = convertMultiWords(text); }\r\n\r\n    \/\/ \u533a\u5207\u308a\u6587\u5b57\u3092 | \u306b\u7d71\u4e00\uff08\u30c6\u30fc\u30d6\u30eb\u30fbDL\u5909\u63db\u524d\u306b\u5b9f\u884c\uff09\r\n    const useDl = document.getElementById('convertTagDelimits').checked;\r\n    const useTable = document.getElementById('convertTagTables').checked;\r\n    if (useDl) {\r\n      const dlDelimiter = document.getElementById('targetDelimiterDl').value;\r\n      if (dlDelimiter && dlDelimiter !== '|') { text = replaceDelimiter(text, dlDelimiter); }\r\n    }\r\n    if (useTable) {\r\n      const tableDelimiter = document.getElementById('targetDelimiterTable').value;\r\n      if (tableDelimiter && tableDelimiter !== '|') { text = replaceDelimiter(text, tableDelimiter); }\r\n    }\r\n\r\n    \/\/ \u30bb\u30eb\u7d50\u5408\uff1a\u30d1\u30a4\u30d7\u30c6\u30fc\u30d6\u30eb\u5185\u306e < > ^ \u3092\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u306b\u7f6e\u63db\uff08HTML\u5909\u63db\u524d\u306b\u5b9f\u884c\uff09\r\n    const useMergeCells = document.getElementById('mergeCells').checked;\r\n    if (useMergeCells) { text = preMergeCells(text); }\r\n\r\n    if (useDl) { text = convertTagDelimits(text); }\r\n    if (useTable) { text = convertTagTables(text); }\r\n    if (document.getElementById('convertTagTd2Ths').checked) { text = convertTagTd2Ths(text); }\r\n\r\n    \/\/ \u30bb\u30eb\u7d50\u5408\uff1a\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u3092\u691c\u51fa\u3057\u3066colspan\/rowspan\u3092\u9069\u7528\uff08HTML\u5909\u63db\u5f8c\u306b\u5b9f\u884c\uff09\r\n    if (useMergeCells) { text = mergeCells(text); }\r\n\r\n    if (document.getElementById('encloseTagImgPictures').checked) { text = encloseTagImgPictures(text); }\r\n    if (document.getElementById('convertTagBreaks_inP').checked) { text = convertTagBreaks_inP(text); }\r\n\r\n    if (document.getElementById('convertUListStyles').checked ||\r\n      document.getElementById('convertOListStyles').checked) { text = convertListStyles(text); }\r\n\r\n    \/\/\u6307\u5b9a\u306e\u30bf\u30b0\u306b\u3001\u4efb\u610f\u306e\u30af\u30e9\u30b9\u3092\u8ffd\u52a0\r\n    if (document.getElementById('convertAddClase1s').checked ||\r\n      document.getElementById('convertAddClase11s').checked ||\r\n      document.getElementById('convertAddClase12s').checked ||\r\n      document.getElementById('convertAddClase13s').checked ||\r\n      document.getElementById('convertAddClase14s').checked ||\r\n      document.getElementById('convertAddClase15s').checked ||\r\n      document.getElementById('convertAddClase16s').checked ||\r\n      document.getElementById('convertAddClase17s').checked ||\r\n      document.getElementById('convertAddClase18s').checked ||\r\n      document.getElementById('convertAddClase19s').checked ||\r\n      document.getElementById('convertAddClase20s').checked ||\r\n      document.getElementById('convertAddClase21s').checked ||\r\n      document.getElementById('convertAddClase31s').checked ||\r\n      document.getElementById('convertAddClase32s').checked ||\r\n      document.getElementById('convertAddClase33s').checked ||\r\n      document.getElementById('convertAddClase34s').checked) {\r\n      text = processAllTagClasses(text);\r\n    }\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  \/\/Fix AI-generated writing style\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  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    if (document.getElementById('decodeTagTables').checked) { text = decodeTagTables(text); }\r\n    if (document.getElementById('decodeHtml2Md').checked) { text = decodeHtml2Md(text); }\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  \/\/ Decode table tags \u2192 | (pipe)\r\n  function decodeTagTables(text) {\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        let pipeRows = '';\r\n\r\n        \/\/\u5404\u884c\uff08tr\uff09\u3092\u51e6\u7406\r\n        const rowMatches = tableContent.match(\/<tr[^>]*>([\\s\\S]*?)<\\\/tr>\/g);\r\n\r\n        if (!rowMatches) return tableMatch; \/\/\u30c6\u30fc\u30d6\u30eb\u884c\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u5143\u306e\u307e\u307e\r\n\r\n        rowMatches.forEach(rowMatch => {\r\n          const rowContent = rowMatch.replace(\/<\\\/?tr[^>]*>\/g, ''); \/\/tr \u30bf\u30b0\u3092\u9664\u53bb\r\n          let pipeRow = '|';\r\n\r\n          \/\/\u30bb\u30eb\uff08th, td\uff09\u3092\u51e6\u7406\r\n          const cellMatches = rowContent.match(\/<(th|td)[^>]*>([\\s\\S]*?)<\\\/(th|td)>\/g);\r\n\r\n          if (cellMatches) {\r\n            cellMatches.forEach(cellMatch => {\r\n              \/\/\u30bb\u30eb\u306e\u5185\u5bb9\u3092\u62bd\u51fa\uff08HTML\u30bf\u30b0\u306f\u4fdd\u6301\uff09\r\n              const cellContent = cellMatch.replace(\/<\\\/(th|td)>$\/, '').replace(\/^<(th|td)[^>]*>\/, '');\r\n\r\n              \/\/\u30bb\u30eb\u5185\u5bb9\u3092\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\uff08\u524d\u5f8c\u306e\u7a7a\u767d\u3092\u524a\u9664\uff09\r\n              const cleanContent = cellContent.trim();\r\n\r\n              pipeRow += cleanContent + '|';\r\n            });\r\n          }\r\n\r\n          \/\/\u884c\u304c\u7a7a\u3067\u306a\u3044\u5834\u5408\u306e\u307f\u8ffd\u52a0\r\n          if (pipeRow.length > 1) {\r\n            pipeRows += pipeRow + '\\n';\r\n          }\r\n        });\r\n\r\n        \/\/\u6700\u5f8c\u306e\u6539\u884c\u3092\u524a\u9664\r\n        return pipeRows.replace(\/\\n$\/, '');\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  \/\/ Decode HTML \u2192 Markdown\r\n  function decodeHtml2Md(text) {\r\n    const turndownService = new TurndownService();\r\n    let result = turndownService.turndown(text);\r\n\r\n    \/\/ Separate each table row with a line break\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    \/\/ Pattern 2: detect table row patterns and add line breaks\r\n    \/\/ |xxx|yyy|zzz| |aaa|bbb|ccc| \u306e\u3088\u3046\u306a\u9023\u7d9a\u3092\u5206\u5272\r\n    \/\/ Note: preserve spaces within cells\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  \/\/ Copy to clipboard\r\n  function copyToClipboard(text, isDecode = false) {\r\n    navigator.clipboard.writeText(text).then(function () {\r\n      if (isDecode) {\r\n        \/\/ Right-to-left conversion: show message on left (decodedMessage)\r\n        showMessage(\"Text copied to clipboard!\", true, 'decodedMessage');\r\n      } else {\r\n        \/\/ Left-to-right conversion: show message on right (encodedMessage)\r\n        showMessage(\"Text copied to clipboard!\", true, 'encodedMessage');\r\n      }\r\n    }, function (err) {\r\n      if (isDecode) {\r\n        showMessage(\"Failed to copy to clipboard: \" + err, false, 'decodedMessage');\r\n      } else {\r\n        showMessage(\"Failed to copy to clipboard: \" + err, false, 'encodedMessage');\r\n      }\r\n    });\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/ Show message\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  \/\/ Uncheck all checkboxes\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('All options unchecked', true, 'decodedMessage');\r\n  }\r\n\r\n\r\n  \/\/ Reset to default (uses HTML defaultChecked \/ defaultSelected)\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('Reset to default settings', true, 'decodedMessage');\r\n  }\r\n\r\n\r\n\r\n\r\n  \/\/ =========================================\r\n  \/\/ localStorage: save and restore text + option state\r\n  \/\/ =========================================\r\n\r\n  const LS_KEY_TEXT = 'encodedText';\r\n  const LS_KEY_OPTIONS = 'cnvtVkaA_options';\r\n\r\n  \/\/ Selectors to save (elements with id attribute only)\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  \/\/ Save option state\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  \/\/ Restore option state\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  \/\/ Restore on page load\r\n  window.addEventListener('load', function () {\r\n\r\n    \/\/ Restore textarea\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    \/\/ Restore option state\r\n    loadOptions();\r\n\r\n    \/\/ Register option change events after restore\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  \/\/ Save textarea content on change\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":"Free online tool to instantly convert Markdown to HTML \u2014 no installation needed, works entirely in your browser. Supports tables, lists, and code blocks. Reverse HTML\u2192Markdown conversion also available. Rich options including auto class assignment and AI writing style fix.","protected":false},"author":1,"featured_media":6524,"parent":12121,"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":[24,21],"tags":[],"class_list":["post-12124","page","type-page","status-publish","has-post-thumbnail","category-textedit","category-tool"],"veu_head_title_object":{"title":"","add_site_title":""},"_links":{"self":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages\/12124","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=12124"}],"version-history":[{"count":11,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages\/12124\/revisions"}],"predecessor-version":[{"id":12702,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages\/12124\/revisions\/12702"}],"up":[{"embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages\/12121"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/media\/6524"}],"wp:attachment":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/media?parent=12124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/categories?post=12124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/tags?post=12124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}