markdown-it-any-block 3.2.10-beta5 → 3.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,6 +10,8 @@ markdown-it 版本的入口
10
10
 
11
11
  ```bash
12
12
  $ pnpm install -D markdown-it-any-block@latest
13
+
14
+ # 或beta/测试版 (供开发者测试使用,不建议) pnpm install -D markdown-it-any-block@beta
13
15
  ```
14
16
 
15
17
  使用 (vuepress为例,其他使用markdown-it插件的类似)
@@ -46,106 +46,6 @@ async function jsdom_init() {
46
46
  dom.window.scrollTo = () => {
47
47
  };
48
48
  }
49
- function container_plugin(md, name2, options) {
50
- function validateDefault(params) {
51
- return params.trim().split(" ", 2)[0] === name2;
52
- }
53
- function renderDefault(tokens, idx, _options, env, slf) {
54
- if (tokens[idx].nesting === 1) {
55
- tokens[idx].attrJoin("class", name2);
56
- }
57
- return slf.renderToken(tokens, idx, _options, env, slf);
58
- }
59
- options = options || {};
60
- const min_markers = 3;
61
- const marker_str = options.marker || ":";
62
- const marker_char = marker_str.charCodeAt(0);
63
- const marker_len = marker_str.length;
64
- const validate = options.validate || validateDefault;
65
- const render2 = options.render || renderDefault;
66
- function container(state, startLine, endLine, silent) {
67
- let pos;
68
- let auto_closed = false;
69
- let start = state.bMarks[startLine] + state.tShift[startLine];
70
- let max = state.eMarks[startLine];
71
- if (marker_char !== state.src.charCodeAt(start)) {
72
- return false;
73
- }
74
- for (pos = start + 1; pos <= max; pos++) {
75
- if (marker_str[(pos - start) % marker_len] !== state.src[pos]) {
76
- break;
77
- }
78
- }
79
- const marker_count = Math.floor((pos - start) / marker_len);
80
- if (marker_count < min_markers) {
81
- return false;
82
- }
83
- pos -= (pos - start) % marker_len;
84
- const markup = state.src.slice(start, pos);
85
- const params = state.src.slice(pos, max);
86
- if (!validate(params, markup)) {
87
- return false;
88
- }
89
- if (silent) {
90
- return true;
91
- }
92
- let nextLine = startLine;
93
- for (; ; ) {
94
- nextLine++;
95
- if (nextLine >= endLine) {
96
- break;
97
- }
98
- start = state.bMarks[nextLine] + state.tShift[nextLine];
99
- max = state.eMarks[nextLine];
100
- if (start < max && state.sCount[nextLine] < state.blkIndent) {
101
- break;
102
- }
103
- if (marker_char !== state.src.charCodeAt(start)) {
104
- continue;
105
- }
106
- if (state.sCount[nextLine] - state.blkIndent >= 4) {
107
- continue;
108
- }
109
- for (pos = start + 1; pos <= max; pos++) {
110
- if (marker_str[(pos - start) % marker_len] !== state.src[pos]) {
111
- break;
112
- }
113
- }
114
- if (Math.floor((pos - start) / marker_len) < marker_count) {
115
- continue;
116
- }
117
- pos -= (pos - start) % marker_len;
118
- pos = state.skipSpaces(pos);
119
- if (pos < max) {
120
- continue;
121
- }
122
- auto_closed = true;
123
- break;
124
- }
125
- const old_parent = state.parentType;
126
- const old_line_max = state.lineMax;
127
- state.parentType = "container";
128
- state.lineMax = nextLine;
129
- const token_o = state.push("container_" + name2 + "_open", "div", 1);
130
- token_o.markup = markup;
131
- token_o.block = true;
132
- token_o.info = params;
133
- token_o.map = [startLine, nextLine];
134
- state.md.block.tokenize(state, startLine + 1, nextLine);
135
- const token_c = state.push("container_" + name2 + "_close", "div", -1);
136
- token_c.markup = state.src.slice(start, pos);
137
- token_c.block = true;
138
- state.parentType = old_parent;
139
- state.lineMax = old_line_max;
140
- state.line = nextLine + (auto_closed ? 1 : 0);
141
- return true;
142
- }
143
- md.block.ruler.before("fence", "container_" + name2, container, {
144
- alt: ["paragraph", "reference", "blockquote", "list"]
145
- });
146
- md.renderer.rules["container_" + name2 + "_open"] = render2;
147
- md.renderer.rules["container_" + name2 + "_close"] = render2;
148
- }
149
49
  var ABConvert_IOEnum = /* @__PURE__ */ ((ABConvert_IOEnum2) => {
150
50
  ABConvert_IOEnum2["text"] = "string";
151
51
  ABConvert_IOEnum2["el"] = "HTMLElement";
@@ -2033,13 +1933,16 @@ class DirProcess {
2033
1933
  * 第一列等级为0、没有分叉
2034
1934
  */
2035
1935
  static dtdata2dt(list_tableInfo, div, modeT, is_folder = false) {
1936
+ const div2 = document.createElement("div");
1937
+ div.appendChild(div2);
1938
+ div2.classList.add("ab-list-table-parent");
1939
+ let table, thead, tbody;
2036
1940
  {
2037
- const table = document.createElement("table");
2038
- div.appendChild(table);
1941
+ table = document.createElement("table");
1942
+ div2.appendChild(table);
2039
1943
  table.classList.add("ab-table", "ab-list-table");
2040
1944
  if (is_folder) table.classList.add("ab-table-folder");
2041
1945
  if (modeT) table.setAttribute("modeT", "true");
2042
- let thead, tbody;
2043
1946
  {
2044
1947
  if (list_tableInfo[0].content.indexOf("< ") == 0) {
2045
1948
  thead = document.createElement("thead");
@@ -2095,10 +1998,12 @@ class DirProcess {
2095
1998
  td_cell.classList.add("ab-list-table-witharrow");
2096
1999
  ABConvertManager.getInstance().m_renderMarkdownFn(cell_item.content, td_cell);
2097
2000
  }
2001
+ }
2002
+ {
2098
2003
  const l_tr = tbody.querySelectorAll("tr");
2099
2004
  for (let i = 0; i < l_tr.length; i++) {
2100
- let targetEl = l_tr[i];
2101
- targetEl = targetEl.querySelector(":scope>td:first-child") ?? targetEl;
2005
+ const tr = l_tr[i];
2006
+ const targetEl = tr.querySelector(":scope>td:first-child") ?? tr;
2102
2007
  if (ABCSetting.env == "obsidian" || ABCSetting.env == "obsidian-min") {
2103
2008
  targetEl.onclick = () => {
2104
2009
  const tr_level = Number(tr.getAttribute("tr_level"));
@@ -2117,57 +2022,106 @@ class DirProcess {
2117
2022
  if (flag_do_fold) tr.setAttribute("is_fold", tr_isfold == "true" ? "false" : "true");
2118
2023
  };
2119
2024
  } else {
2120
- targetEl.setAttribute("onclick", `
2121
- const tr = (this.tagName == "TD") ? this.parentNode : this
2122
- const l_tr = tr.parentNode.querySelectorAll("tr")
2123
- const i = ${i}
2124
- const tr_level = Number(tr.getAttribute("tr_level"))
2125
- if (isNaN(tr_level)) return
2126
- const tr_isfold = tr.getAttribute("is_fold")
2127
- if (!tr_isfold) return
2128
- let flag_do_fold = false // 防止折叠最小层
2129
- for (let j=i+1; j<l_tr.length; j++){
2130
- const tr2 = l_tr[j]
2131
- const tr_level2 = Number(tr2.getAttribute("tr_level"))
2132
- if (isNaN(tr_level2)) break
2133
- if (tr_level2<=tr_level) break
2134
- (tr_isfold == "true") ? tr2.style.display = "" : tr2.style.display = "none"
2135
- flag_do_fold = true
2136
- }
2137
- if (flag_do_fold) tr.setAttribute("is_fold", tr_isfold=="true"?"false":"true")
2025
+ targetEl.setAttribute("onclick", ` const tr = (this.tagName == "TD") ? this.parentNode : this
2026
+ const l_tr = tr.parentNode.querySelectorAll("tr")
2027
+ const i = ${i}
2028
+
2029
+ const tr_level = Number(tr.getAttribute("tr_level"))
2030
+ if (isNaN(tr_level)) return
2031
+ const tr_isfold = tr.getAttribute("is_fold")
2032
+ if (!tr_isfold) return
2033
+ let flag_do_fold = false // 防止折叠最小层
2034
+ for (let j=i+1; j<l_tr.length; j++){
2035
+ const tr2 = l_tr[j]
2036
+ const tr_level2 = Number(tr2.getAttribute("tr_level"))
2037
+ if (isNaN(tr_level2)) break
2038
+ if (tr_level2<=tr_level) break
2039
+ (tr_isfold == "true") ? tr2.style.display = "" : tr2.style.display = "none"
2040
+ flag_do_fold = true
2041
+ }
2042
+ if (flag_do_fold) tr.setAttribute("is_fold", tr_isfold=="true"?"false":"true")
2138
2043
  `);
2139
2044
  }
2140
2045
  }
2046
+ }
2047
+ {
2141
2048
  const btn = document.createElement("button");
2142
- table.appendChild(btn);
2049
+ div2.appendChild(btn);
2143
2050
  btn.classList.add("ab-table-fold");
2144
- btn.textContent = "全部折叠/展开";
2051
+ const svgStr_fold = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-fold-vertical-icon lucide-fold-vertical"><path d="M12 22v-6"/><path d="M12 8V2"/><path d="M4 12H2"/><path d="M10 12H8"/><path d="M16 12h-2"/><path d="M22 12h-2"/><path d="m15 19-3-3-3 3"/><path d="m15 5-3 3-3-3"/></svg>`;
2052
+ const svgStr_unfold = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-unfold-vertical-icon lucide-unfold-vertical"><path d="M12 22v-6"/><path d="M12 8V2"/><path d="M4 12H2"/><path d="M10 12H8"/><path d="M16 12h-2"/><path d="M22 12h-2"/><path d="m15 19-3 3-3-3"/><path d="m15 5-3-3-3 3"/></svg>`;
2145
2053
  btn.setAttribute("is_fold", "false");
2146
- btn.onclick = () => {
2147
- const l_tr2 = table.querySelectorAll("tr");
2148
- for (let i = 0; i < l_tr2.length; i++) {
2149
- const tr2 = l_tr2[i];
2150
- (() => {
2151
- const tr_level = Number(tr2.getAttribute("tr_level"));
2152
- if (isNaN(tr_level)) return;
2153
- const tr_isfold = btn.getAttribute("is_fold");
2154
- if (!tr_isfold) return;
2155
- let flag_do_fold = false;
2156
- for (let j = i + 1; j < l_tr2.length; j++) {
2157
- const tr22 = l_tr2[j];
2158
- const tr_level2 = Number(tr22.getAttribute("tr_level"));
2159
- if (isNaN(tr_level2)) break;
2160
- if (tr_level2 <= tr_level) break;
2161
- tr_isfold == "true" ? tr22.style.display = "" : tr22.style.display = "none";
2162
- flag_do_fold = true;
2163
- }
2164
- if (flag_do_fold) tr2.setAttribute("is_fold", tr_isfold == "true" ? "false" : "true");
2165
- })();
2166
- }
2167
- if (btn.getAttribute("is_fold")) {
2168
- btn.setAttribute("is_fold", btn.getAttribute("is_fold") == "true" ? "false" : "true");
2169
- }
2170
- };
2054
+ btn.innerHTML = svgStr_fold;
2055
+ if (ABCSetting.env == "obsidian" || ABCSetting.env == "obsidian-min") {
2056
+ btn.onclick = () => {
2057
+ const l_tr = table.querySelectorAll("tr");
2058
+ for (let i = 0; i < l_tr.length; i++) {
2059
+ const tr = l_tr[i];
2060
+ (() => {
2061
+ const tr_level = Number(tr.getAttribute("tr_level"));
2062
+ if (isNaN(tr_level)) return;
2063
+ const tr_isfold = btn.getAttribute("is_fold");
2064
+ if (!tr_isfold) return;
2065
+ let flag_do_fold = false;
2066
+ for (let j = i + 1; j < l_tr.length; j++) {
2067
+ const tr2 = l_tr[j];
2068
+ const tr_level2 = Number(tr2.getAttribute("tr_level"));
2069
+ if (isNaN(tr_level2)) break;
2070
+ if (tr_level2 <= tr_level) break;
2071
+ tr_isfold == "true" ? tr2.style.display = "" : tr2.style.display = "none";
2072
+ flag_do_fold = true;
2073
+ }
2074
+ if (flag_do_fold) tr.setAttribute("is_fold", tr_isfold == "true" ? "false" : "true");
2075
+ })();
2076
+ }
2077
+ const is_all_fold = btn.getAttribute("is_fold");
2078
+ if (is_all_fold == "true") {
2079
+ btn.setAttribute("is_fold", "false");
2080
+ btn.innerHTML = svgStr_fold;
2081
+ } else {
2082
+ btn.setAttribute("is_fold", "true");
2083
+ btn.innerHTML = svgStr_unfold;
2084
+ }
2085
+ };
2086
+ } else {
2087
+ btn.setAttribute(
2088
+ "onclick",
2089
+ ` const btn = this;
2090
+ const svgStr_fold = \`${svgStr_fold}\`;
2091
+ const svgStr_unfold = \`${svgStr_unfold}\`;
2092
+ const table = btn.parentNode?.querySelector("table");
2093
+ if (!table) return;
2094
+
2095
+ const l_tr = table.querySelectorAll("tr");
2096
+ for (let i=0; i<l_tr.length; i++) {
2097
+ const tr = l_tr[i]
2098
+ ;(()=>{
2099
+ const tr_level = Number(tr.getAttribute("tr_level"))
2100
+ if (isNaN(tr_level)) return
2101
+ const tr_isfold = btn.getAttribute("is_fold"); // [!code] tr->btn
2102
+ if (!tr_isfold) return
2103
+ let flag_do_fold = false // 防止折叠最小层
2104
+ for (let j=i+1; j<l_tr.length; j++){
2105
+ const tr2 = l_tr[j]
2106
+ const tr_level2 = Number(tr2.getAttribute("tr_level"))
2107
+ if (isNaN(tr_level2)) break
2108
+ if (tr_level2<=tr_level) break
2109
+ (tr_isfold == "true") ? tr2.style.display = "" : tr2.style.display = "none"
2110
+ flag_do_fold = true
2111
+ }
2112
+ if (flag_do_fold) tr.setAttribute("is_fold", tr_isfold=="true"?"false":"true")
2113
+ })()
2114
+ }
2115
+ const is_all_fold = btn.getAttribute("is_fold")
2116
+ if (is_all_fold=="true") {
2117
+ btn.setAttribute("is_fold", "false"); btn.innerHTML = svgStr_fold;
2118
+ }
2119
+ else {
2120
+ btn.setAttribute("is_fold", "true"); btn.innerHTML = svgStr_unfold;
2121
+ }
2122
+ `
2123
+ );
2124
+ }
2171
2125
  }
2172
2126
  return div;
2173
2127
  }
@@ -2438,36 +2392,32 @@ ABConvert.factory({
2438
2392
  const args = matchs[1].split(",").map(
2439
2393
  (arg) => /^\d*\.?\d+$/.test(arg.trim()) ? `${arg.trim()}%` : arg.trim()
2440
2394
  );
2441
- switch (true) {
2442
- case content.children[0].classList.contains("ab-col"): {
2443
- const sub_els = content.children[0].children;
2444
- if (sub_els.length == 0) return content;
2445
- for (let i = 0; i < Math.min(sub_els.length, args.length); i++) {
2446
- const sub_el = sub_els[i];
2447
- if (args[i].endsWith("%")) sub_el.style.flex = `0 1 ${args[i]}`;
2448
- else {
2449
- sub_el.style.width = args[i];
2450
- sub_el.style.flex = `0 0 auto`;
2451
- }
2395
+ if (content.children[0].classList.contains("ab-col")) {
2396
+ const sub_els = content.children[0].children;
2397
+ if (sub_els.length == 0) return content;
2398
+ for (let i = 0; i < Math.min(sub_els.length, args.length); i++) {
2399
+ const sub_el = sub_els[i];
2400
+ if (args[i].endsWith("%")) sub_el.style.flex = `0 1 ${args[i]}`;
2401
+ else {
2402
+ sub_el.style.width = args[i];
2403
+ sub_el.style.flex = `0 0 auto`;
2452
2404
  }
2453
- return content;
2454
- }
2455
- case content.children[0].querySelector("table") !== null: {
2456
- const table = content.children[0].querySelector("table");
2457
- if (!table) return content;
2458
- table.style.tableLayout = "fixed";
2459
- table.style.width = args.some((arg) => arg.endsWith("%")) ? "100%" : "fit-content";
2460
- table.querySelectorAll("tr").forEach((row) => {
2461
- for (let i = 0; i < Math.min(row.children.length, args.length); i++) {
2462
- const cell = row.children[i];
2463
- cell.style.width = cell.style.minWidth = cell.style.maxWidth = args[i];
2464
- }
2465
- });
2466
- return content;
2467
2405
  }
2468
- default:
2469
- return content;
2406
+ return content;
2470
2407
  }
2408
+ const table = content.children[0].querySelector("table");
2409
+ if (table !== null) {
2410
+ table.style.tableLayout = "fixed";
2411
+ table.style.width = args.some((arg) => arg.endsWith("%")) ? "100%" : "fit-content";
2412
+ table.querySelectorAll("tr").forEach((row) => {
2413
+ for (let i = 0; i < Math.min(row.children.length, args.length); i++) {
2414
+ const cell = row.children[i];
2415
+ cell.style.width = cell.style.minWidth = cell.style.maxWidth = args[i];
2416
+ }
2417
+ });
2418
+ return content;
2419
+ }
2420
+ return content;
2471
2421
  }
2472
2422
  });
2473
2423
  ABConvert.factory({
@@ -2599,9 +2549,7 @@ ABConvert.factory({
2599
2549
  const origi_rowCount = origi_rows.length;
2600
2550
  const origi_colCount = origi_rows[0].cells.length;
2601
2551
  const trans_table = document.createElement("table");
2602
- content.appendChild(trans_table);
2603
- origi_table.classList.add("ab-transposition");
2604
- origi_table.classList.add("ab-table");
2552
+ origi_table.classList.add("ab-transposition", "ab-table");
2605
2553
  origi_table.classList.forEach((className) => {
2606
2554
  trans_table.classList.add(className);
2607
2555
  });
@@ -2616,7 +2564,7 @@ ABConvert.factory({
2616
2564
  newCell.innerHTML = oldCell.innerHTML;
2617
2565
  }
2618
2566
  }
2619
- origi_table.remove();
2567
+ origi_table.innerHTML = trans_table.innerHTML;
2620
2568
  return content;
2621
2569
  }
2622
2570
  });
@@ -2706,9 +2654,7 @@ ABConvert.factory({
2706
2654
  }
2707
2655
  }
2708
2656
  const trans_table = document.createElement("table");
2709
- content.appendChild(trans_table);
2710
- origi_table.classList.add("ab-transposition");
2711
- origi_table.classList.add("ab-table");
2657
+ origi_table.classList.add("ab-transposition", "ab-table");
2712
2658
  origi_table.classList.forEach((className) => {
2713
2659
  trans_table.classList.add(className);
2714
2660
  });
@@ -2728,7 +2674,7 @@ ABConvert.factory({
2728
2674
  newCell.setAttribute("colIndex", String(cell.colIndex));
2729
2675
  }
2730
2676
  }
2731
- origi_table.remove();
2677
+ origi_table.innerHTML = trans_table.innerHTML;
2732
2678
  return content;
2733
2679
  }
2734
2680
  });
@@ -2824,9 +2770,7 @@ ABConvert.factory({
2824
2770
  }
2825
2771
  const map_table2 = map_table;
2826
2772
  const trans_table = document.createElement("table");
2827
- content.appendChild(trans_table);
2828
- origi_table.classList.add("ab-transposition");
2829
- origi_table.classList.add("ab-table");
2773
+ origi_table.classList.add("ab-transposition", "ab-table");
2830
2774
  origi_table.classList.forEach((className) => {
2831
2775
  trans_table.classList.add(className);
2832
2776
  });
@@ -2846,7 +2790,7 @@ ABConvert.factory({
2846
2790
  newCell.setAttribute("colIndex", String(cell.colIndex));
2847
2791
  }
2848
2792
  }
2849
- origi_table.remove();
2793
+ origi_table.innerHTML = trans_table.innerHTML;
2850
2794
  return content;
2851
2795
  }
2852
2796
  });
@@ -42576,19 +42520,63 @@ function abSelector_squareInline(md, options) {
42576
42520
  }
42577
42521
  });
42578
42522
  }
42579
- function abSelector_container_vuepress(md, options) {
42580
- md.use(container_plugin, "AnyBlockContainer", {
42581
- validate: function(params) {
42582
- return params.trim().toLowerCase().match(/^anyblock(.*)$/);
42583
- },
42584
- render: function(tokens, idx) {
42585
- var m = tokens[idx].info.trim().toLowerCase().match(/^anyblock(.*)$/);
42586
- if (tokens[idx].nesting === 1) {
42587
- return '<details class="any-block-debug"><summary>' + md.utils.escapeHtml(m[1]).trimStart() + "</summary>\n";
42588
- } else {
42589
- return "</details>\n";
42523
+ function abSelector_container(md, options) {
42524
+ md.block.ruler.before("fence", "AnyBlockMditContainer", (state, startLine, endLine, silent) => {
42525
+ const typeNames = ["mditABDemo"];
42526
+ let start = state.bMarks[startLine];
42527
+ let max = state.eMarks[startLine];
42528
+ if (state.src[start] !== ":") return false;
42529
+ let pos = start + 1;
42530
+ while (pos <= max) {
42531
+ if (state.src[pos] !== ":") break;
42532
+ pos++;
42533
+ }
42534
+ const markerCount = pos - start;
42535
+ if (markerCount < 3) return false;
42536
+ const markup = state.src.slice(start, pos);
42537
+ const ab_mdit_header = state.src.slice(pos, max);
42538
+ if (!typeNames.includes(ab_mdit_header.split("|")[0].trim())) return false;
42539
+ if (silent) return true;
42540
+ const ab_startLine = startLine;
42541
+ let nextLine = startLine;
42542
+ let autoClosed = false;
42543
+ let ab_content = "";
42544
+ while (
42545
+ // unclosed block should be auto closed by end of document.
42546
+ // also block seems to be auto closed by end of parent
42547
+ nextLine < endLine
42548
+ ) {
42549
+ nextLine++;
42550
+ start = state.bMarks[nextLine];
42551
+ max = state.eMarks[nextLine];
42552
+ if (start < max && state.sCount[nextLine] < state.blkIndent)
42553
+ break;
42554
+ if (
42555
+ // match start
42556
+ state.src[start] === ":" && // closing fence should be indented less than 4 spaces
42557
+ state.sCount[nextLine] - state.blkIndent < 4
42558
+ ) {
42559
+ for (pos = start + 1; pos <= max; pos++)
42560
+ if (state.src[pos] !== ":") break;
42561
+ if (pos - start >= markerCount) {
42562
+ pos = state.skipSpaces(pos);
42563
+ if (pos >= max) {
42564
+ autoClosed = true;
42565
+ break;
42566
+ }
42567
+ }
42590
42568
  }
42569
+ ab_content += "\n" + state.src.substring(start, max);
42591
42570
  }
42571
+ state.line = nextLine + (autoClosed ? 1 : 0);
42572
+ const token = state.push("fence", "code", 0);
42573
+ token.info = "AnyBlock";
42574
+ token.content = `[${ab_mdit_header}]
42575
+ ${ab_content}`;
42576
+ token.map = [ab_startLine, nextLine];
42577
+ token.markup = markup;
42578
+ token.nesting = 0;
42579
+ return true;
42592
42580
  });
42593
42581
  }
42594
42582
  function abRender_fence(md, options) {
@@ -42652,7 +42640,7 @@ function ab_mdit(md, options) {
42652
42640
  });
42653
42641
  ABCSetting.env = "vuepress";
42654
42642
  md.use(abSelector_squareInline);
42655
- md.use(abSelector_container_vuepress);
42643
+ md.use(abSelector_container);
42656
42644
  md.use(abRender_fence);
42657
42645
  }
42658
42646
  exports.abConvertEvent = abConvertEvent;