remark-break-line 0.0.8 → 0.0.9

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/lib/index.d.ts CHANGED
@@ -1,10 +1,17 @@
1
1
  /**
2
2
  * Turn gemoji shortcodes (`:+1:`) into emoji (`👍`).
3
- *
3
+ * @param {Object} [param0={}]
4
+ * @param {number} [param0.maxLineLength=80]
5
+ * @param {boolean} [param0.removeLinebreaks=false]
6
+ * @param {string[]} [param0.mergableElements=[]]
7
+ * @param {boolean}[param0.removeMultpleSpaces=false]
4
8
  * @returns
5
9
  * Transform.
6
10
  */
7
- export default function remarkBreakLongLines({ maxLineLength }?: {
11
+ export default function remarkBreakLongLines({ maxLineLength, removeLinebreaks: removeLinebreaksAndMultipleSpaces, mergableElements }?: {
8
12
  maxLineLength?: number | undefined;
9
- }): (tree: Root) => undefined;
13
+ removeLinebreaks?: boolean | undefined;
14
+ mergableElements?: string[] | undefined;
15
+ removeMultpleSpaces?: boolean | undefined;
16
+ } | undefined): (tree: Root) => undefined;
10
17
  export type Root = import("mdast").Root;
package/lib/index.js CHANGED
@@ -29,11 +29,15 @@ const elementSize = {
29
29
 
30
30
  /**
31
31
  * Turn gemoji shortcodes (`:+1:`) into emoji (`👍`).
32
- *
32
+ * @param {Object} [param0={}]
33
+ * @param {number} [param0.maxLineLength=80]
34
+ * @param {boolean} [param0.removeLinebreaks=false]
35
+ * @param {string[]} [param0.mergableElements=[]]
36
+ * @param {boolean}[param0.removeMultpleSpaces=false]
33
37
  * @returns
34
38
  * Transform.
35
39
  */
36
- export default function remarkBreakLongLines({ maxLineLength = 80, removeLinebreaks = false } = {}) {
40
+ export default function remarkBreakLongLines({ maxLineLength = 80, removeLinebreaks: removeLinebreaksAndMultipleSpaces = false, mergableElements = [] } = {}) {
37
41
  /**
38
42
  * Transform.
39
43
  *
@@ -52,19 +56,59 @@ export default function remarkBreakLongLines({ maxLineLength = 80, removeLinebre
52
56
  *
53
57
  * @param {typeof node.children[number]} n
54
58
  */
55
- const prepare = (n) => {
59
+ const removeLineBrakesWalker = (n) => {
60
+ if (n.type === 'text' && n.value.length > 0) {
61
+ n.value = n.value.replaceAll(/[\r\n]+/g, ' ').replaceAll(/ {2,}/g, ' ');
62
+ } else if ('children' in n) {
63
+ for (let i = 0; i < n.children.length; i++) {
64
+ const element = n.children[i]
65
+ if (element.type in elementSize) {
66
+ removeLineBrakesWalker(element);
67
+ }
68
+ }
69
+ }
70
+ };
71
+
72
+ /**
73
+ *
74
+ * @param {typeof node.children[number]|typeof node} n
75
+ */
76
+ const mergeElements = (n) => {
56
77
  if (n.type === 'text' && n.value.length > 0) {
57
- n.value = n.value.replaceAll(/[\r\n]+/g, ' ').replaceAll(/ {2..}/g, ' ');
78
+ // n.value = n.value.replaceAll(/[\r\n]+/g, ' ').replaceAll(/ {2,}/g, ' ');
58
79
  } else if ('children' in n) {
59
80
  for (let i = 0; i < n.children.length; i++) {
60
81
  const element = n.children[i]
82
+ if (mergableElements.includes(element.type) && i - 1 >= 0 && n.children[i - 1].type == element.type) {
83
+ const first = n.children[i - 1];
84
+ const last = element;
85
+ if ('children' in first && 'children' in last) {
86
+ first.children.push(...last.children);
87
+ n.children.splice(i, 1);
88
+ i--;
89
+ }
90
+ }
91
+ if (mergableElements.includes(element.type) && i - 2 >= 0 && n.children[i - 2].type == element.type) {
92
+ const first = n.children[i - 2];
93
+ const middel = n.children[i - 1];
94
+ const last = element;
95
+ if ('children' in first && 'children' in last && middel.type == 'text' && /^[\s\n\r]*$/.test(middel.value)) {
96
+ middel.value = middel.value.replaceAll(/\r\n|\r|\n/g, ' ')
97
+ first.children.push(middel);
98
+ first.children.push(...last.children);
99
+ n.children.splice(i - 1, 2);
100
+ i -= 2;
101
+ }
102
+ }
103
+
61
104
  if (element.type in elementSize) {
62
- prepare(element);
105
+ mergeElements(element);
63
106
  }
64
107
  }
65
108
  }
66
109
  };
67
110
 
111
+
68
112
  /**
69
113
  *
70
114
  * @param {typeof node.children[number]} n
@@ -254,11 +298,13 @@ export default function remarkBreakLongLines({ maxLineLength = 80, removeLinebre
254
298
 
255
299
  return { type: 'nothing' };
256
300
  }
257
-
301
+ if (mergableElements.length > 0)
302
+ mergeElements(node);
258
303
  for (let i = 0; i < node.children.length; i++) {
259
304
  const element = node.children[i];
260
- if (removeLinebreaks)
261
- prepare(element);
305
+ if (removeLinebreaksAndMultipleSpaces)
306
+ removeLineBrakesWalker(element);
307
+
262
308
  const result = walk(element, [element.type])
263
309
  if (result.type == 'split') {
264
310
  currentLine = 0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remark-break-line",
3
- "version": "0.0.8",
3
+ "version": "0.0.9",
4
4
  "type": "module",
5
5
  "description": "",
6
6
  "keywords": [