bigwolfe commited on
Commit
432b500
·
unverified ·
2 Parent(s): 88e1541b0e12b6

Merge pull request #7 from bigwolfeman/fix-markdown-bold-reading

Browse files
frontend/package-lock.json CHANGED
@@ -125,7 +125,6 @@
125
  "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
126
  "dev": true,
127
  "license": "MIT",
128
- "peer": true,
129
  "dependencies": {
130
  "@babel/code-frame": "^7.27.1",
131
  "@babel/generator": "^7.28.5",
@@ -717,7 +716,6 @@
717
  "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
718
  "dev": true,
719
  "license": "MIT",
720
- "peer": true,
721
  "engines": {
722
  "node": ">=12"
723
  },
@@ -1743,7 +1741,6 @@
1743
  "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==",
1744
  "dev": true,
1745
  "license": "MIT",
1746
- "peer": true,
1747
  "engines": {
1748
  "node": "^14.21.3 || >=16"
1749
  },
@@ -3423,7 +3420,6 @@
3423
  "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
3424
  "devOptional": true,
3425
  "license": "MIT",
3426
- "peer": true,
3427
  "dependencies": {
3428
  "undici-types": "~7.16.0"
3429
  }
@@ -3433,7 +3429,6 @@
3433
  "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.5.tgz",
3434
  "integrity": "sha512-keKxkZMqnDicuvFoJbzrhbtdLSPhj/rZThDlKWCDbgXmUg0rEUFtRssDXKYmtXluZlIqiC5VqkCgRwzuyLHKHw==",
3435
  "license": "MIT",
3436
- "peer": true,
3437
  "dependencies": {
3438
  "csstype": "^3.0.2"
3439
  }
@@ -3444,7 +3439,6 @@
3444
  "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
3445
  "devOptional": true,
3446
  "license": "MIT",
3447
- "peer": true,
3448
  "peerDependencies": {
3449
  "@types/react": "^19.2.0"
3450
  }
@@ -3508,7 +3502,6 @@
3508
  "integrity": "sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==",
3509
  "dev": true,
3510
  "license": "MIT",
3511
- "peer": true,
3512
  "dependencies": {
3513
  "@typescript-eslint/scope-manager": "8.46.4",
3514
  "@typescript-eslint/types": "8.46.4",
@@ -3790,7 +3783,6 @@
3790
  "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
3791
  "dev": true,
3792
  "license": "MIT",
3793
- "peer": true,
3794
  "bin": {
3795
  "acorn": "bin/acorn"
3796
  },
@@ -4125,7 +4117,6 @@
4125
  }
4126
  ],
4127
  "license": "MIT",
4128
- "peer": true,
4129
  "dependencies": {
4130
  "baseline-browser-mapping": "^2.8.25",
4131
  "caniuse-lite": "^1.0.30001754",
@@ -4825,7 +4816,6 @@
4825
  "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
4826
  "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
4827
  "license": "ISC",
4828
- "peer": true,
4829
  "engines": {
4830
  "node": ">=12"
4831
  }
@@ -5243,7 +5233,6 @@
5243
  "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==",
5244
  "dev": true,
5245
  "license": "MIT",
5246
- "peer": true,
5247
  "dependencies": {
5248
  "@eslint-community/eslint-utils": "^4.8.0",
5249
  "@eslint-community/regexpp": "^4.12.1",
@@ -5512,7 +5501,6 @@
5512
  "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==",
5513
  "dev": true,
5514
  "license": "MIT",
5515
- "peer": true,
5516
  "dependencies": {
5517
  "accepts": "^2.0.0",
5518
  "body-parser": "^2.2.0",
@@ -6638,7 +6626,6 @@
6638
  "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
6639
  "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
6640
  "license": "MIT",
6641
- "peer": true,
6642
  "bin": {
6643
  "jiti": "bin/jiti.js"
6644
  }
@@ -8508,7 +8495,6 @@
8508
  }
8509
  ],
8510
  "license": "MIT",
8511
- "peer": true,
8512
  "dependencies": {
8513
  "nanoid": "^3.3.11",
8514
  "picocolors": "^1.1.1",
@@ -8824,7 +8810,6 @@
8824
  "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz",
8825
  "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==",
8826
  "license": "MIT",
8827
- "peer": true,
8828
  "engines": {
8829
  "node": ">=0.10.0"
8830
  }
@@ -8834,7 +8819,6 @@
8834
  "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz",
8835
  "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==",
8836
  "license": "MIT",
8837
- "peer": true,
8838
  "dependencies": {
8839
  "scheduler": "^0.27.0"
8840
  },
@@ -9925,7 +9909,6 @@
9925
  "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
9926
  "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
9927
  "license": "MIT",
9928
- "peer": true,
9929
  "dependencies": {
9930
  "@alloc/quick-lru": "^5.2.0",
9931
  "arg": "^5.0.2",
@@ -10063,7 +10046,6 @@
10063
  "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
10064
  "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
10065
  "license": "MIT",
10066
- "peer": true,
10067
  "engines": {
10068
  "node": ">=12"
10069
  },
@@ -10243,7 +10225,6 @@
10243
  "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
10244
  "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
10245
  "license": "Apache-2.0",
10246
- "peer": true,
10247
  "bin": {
10248
  "tsc": "bin/tsc",
10249
  "tsserver": "bin/tsserver"
@@ -10646,7 +10627,6 @@
10646
  "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
10647
  "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
10648
  "license": "MIT",
10649
- "peer": true,
10650
  "engines": {
10651
  "node": ">=12"
10652
  },
@@ -10837,7 +10817,6 @@
10837
  "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz",
10838
  "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==",
10839
  "license": "ISC",
10840
- "peer": true,
10841
  "bin": {
10842
  "yaml": "bin.mjs"
10843
  },
@@ -10964,7 +10943,6 @@
10964
  "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
10965
  "dev": true,
10966
  "license": "MIT",
10967
- "peer": true,
10968
  "funding": {
10969
  "url": "https://github.com/sponsors/colinhacks"
10970
  }
 
125
  "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
126
  "dev": true,
127
  "license": "MIT",
 
128
  "dependencies": {
129
  "@babel/code-frame": "^7.27.1",
130
  "@babel/generator": "^7.28.5",
 
716
  "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
717
  "dev": true,
718
  "license": "MIT",
 
719
  "engines": {
720
  "node": ">=12"
721
  },
 
1741
  "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==",
1742
  "dev": true,
1743
  "license": "MIT",
 
1744
  "engines": {
1745
  "node": "^14.21.3 || >=16"
1746
  },
 
3420
  "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
3421
  "devOptional": true,
3422
  "license": "MIT",
 
3423
  "dependencies": {
3424
  "undici-types": "~7.16.0"
3425
  }
 
3429
  "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.5.tgz",
3430
  "integrity": "sha512-keKxkZMqnDicuvFoJbzrhbtdLSPhj/rZThDlKWCDbgXmUg0rEUFtRssDXKYmtXluZlIqiC5VqkCgRwzuyLHKHw==",
3431
  "license": "MIT",
 
3432
  "dependencies": {
3433
  "csstype": "^3.0.2"
3434
  }
 
3439
  "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
3440
  "devOptional": true,
3441
  "license": "MIT",
 
3442
  "peerDependencies": {
3443
  "@types/react": "^19.2.0"
3444
  }
 
3502
  "integrity": "sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==",
3503
  "dev": true,
3504
  "license": "MIT",
 
3505
  "dependencies": {
3506
  "@typescript-eslint/scope-manager": "8.46.4",
3507
  "@typescript-eslint/types": "8.46.4",
 
3783
  "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
3784
  "dev": true,
3785
  "license": "MIT",
 
3786
  "bin": {
3787
  "acorn": "bin/acorn"
3788
  },
 
4117
  }
4118
  ],
4119
  "license": "MIT",
 
4120
  "dependencies": {
4121
  "baseline-browser-mapping": "^2.8.25",
4122
  "caniuse-lite": "^1.0.30001754",
 
4816
  "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
4817
  "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
4818
  "license": "ISC",
 
4819
  "engines": {
4820
  "node": ">=12"
4821
  }
 
5233
  "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==",
5234
  "dev": true,
5235
  "license": "MIT",
 
5236
  "dependencies": {
5237
  "@eslint-community/eslint-utils": "^4.8.0",
5238
  "@eslint-community/regexpp": "^4.12.1",
 
5501
  "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==",
5502
  "dev": true,
5503
  "license": "MIT",
 
5504
  "dependencies": {
5505
  "accepts": "^2.0.0",
5506
  "body-parser": "^2.2.0",
 
6626
  "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
6627
  "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
6628
  "license": "MIT",
 
6629
  "bin": {
6630
  "jiti": "bin/jiti.js"
6631
  }
 
8495
  }
8496
  ],
8497
  "license": "MIT",
 
8498
  "dependencies": {
8499
  "nanoid": "^3.3.11",
8500
  "picocolors": "^1.1.1",
 
8810
  "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz",
8811
  "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==",
8812
  "license": "MIT",
 
8813
  "engines": {
8814
  "node": ">=0.10.0"
8815
  }
 
8819
  "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz",
8820
  "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==",
8821
  "license": "MIT",
 
8822
  "dependencies": {
8823
  "scheduler": "^0.27.0"
8824
  },
 
9909
  "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
9910
  "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
9911
  "license": "MIT",
 
9912
  "dependencies": {
9913
  "@alloc/quick-lru": "^5.2.0",
9914
  "arg": "^5.0.2",
 
10046
  "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
10047
  "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
10048
  "license": "MIT",
 
10049
  "engines": {
10050
  "node": ">=12"
10051
  },
 
10225
  "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
10226
  "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
10227
  "license": "Apache-2.0",
 
10228
  "bin": {
10229
  "tsc": "bin/tsc",
10230
  "tsserver": "bin/tsserver"
 
10627
  "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
10628
  "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
10629
  "license": "MIT",
 
10630
  "engines": {
10631
  "node": ">=12"
10632
  },
 
10817
  "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz",
10818
  "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==",
10819
  "license": "ISC",
 
10820
  "bin": {
10821
  "yaml": "bin.mjs"
10822
  },
 
10943
  "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
10944
  "dev": true,
10945
  "license": "MIT",
 
10946
  "funding": {
10947
  "url": "https://github.com/sponsors/colinhacks"
10948
  }
frontend/src/lib/markdownToText.ts CHANGED
@@ -8,19 +8,24 @@ export function markdownToPlainText(markdown: string): string {
8
  let text = markdown;
9
 
10
  // Remove fenced code blocks
11
- text = text.replace(/```[\\s\\S]*?```/g, '');
12
  // Remove inline code
13
  text = text.replace(/`([^`]*)`/g, '$1');
14
  // Remove images: ![alt](url)
15
  text = text.replace(/!\[[^\]]*\]\([^)]+\)/g, '');
16
  // Replace markdown links with link text
17
  text = text.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1');
 
 
 
 
 
18
  // Replace headings with emphasized text
19
  text = text.replace(/^(#{1,6})\s*(.*)$/gm, '$2');
20
  // Replace list markers with dash
21
  text = text.replace(/^\s*[-*+]\s+/gm, '- ');
22
  // Normalize whitespace
23
- text = text.replace(/\\s+\\n/g, '\\n').replace(/\\n{3,}/g, '\\n\\n');
24
 
25
  return text.trim();
26
  }
 
8
  let text = markdown;
9
 
10
  // Remove fenced code blocks
11
+ text = text.replace(/```[\s\S]*?```/g, '');
12
  // Remove inline code
13
  text = text.replace(/`([^`]*)`/g, '$1');
14
  // Remove images: ![alt](url)
15
  text = text.replace(/!\[[^\]]*\]\([^)]+\)/g, '');
16
  // Replace markdown links with link text
17
  text = text.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1');
18
+ // Strip emphasis markers (**bold**, __bold__, *italics*, _italics_)
19
+ text = text.replace(/(\*\*|__)(.*?)\1/g, '$2');
20
+ text = text.replace(/(\*|_)(.*?)\1/g, '$2');
21
+ // Remove stray asterisks/underscores that might remain
22
+ text = text.replace(/[*_]+/g, '');
23
  // Replace headings with emphasized text
24
  text = text.replace(/^(#{1,6})\s*(.*)$/gm, '$2');
25
  // Replace list markers with dash
26
  text = text.replace(/^\s*[-*+]\s+/gm, '- ');
27
  // Normalize whitespace
28
+ text = text.replace(/\s+\n/g, '\n').replace(/\n{3,}/g, '\n\n');
29
 
30
  return text.trim();
31
  }