1+ class MarkdownConverter {
2+ parse ( markdown ) {
3+ let result = '' ;
4+ let currentContent = '' ;
5+ const lines = markdown . split ( '\n' ) ;
6+ let i = 0 ;
7+
8+ while ( i < lines . length ) {
9+ const line = lines [ i ] ;
10+
11+ if ( line . startsWith ( '---os:' ) ) {
12+ if ( currentContent ) {
13+ result += this . convertToHTML ( currentContent ) ;
14+ currentContent = '' ;
15+ }
16+
17+ const osType = line . replace ( '---os:' , '' ) . trim ( ) ;
18+ let osContent = '' ;
19+ i ++ ;
20+
21+ while ( i < lines . length && ! lines [ i ] . includes ( '---end---' ) ) {
22+ osContent += lines [ i ] + '\n' ;
23+ i ++ ;
24+ }
25+
26+ result += `
27+ <div class="OSSpesific">
28+ <div class="os-content" data-os="windows">${ osType === 'windows' ? this . convertToHTML ( osContent ) : '' } </div>
29+ <div class="os-content" data-os="mac">${ osType === 'mac' ? this . convertToHTML ( osContent ) : '' } </div>
30+ <div class="os-content" data-os="linux">${ osType === 'linux' ? this . convertToHTML ( osContent ) : '' } </div>
31+ </div>
32+ ` ;
33+ } else {
34+ currentContent += line + '\n' ;
35+ }
36+
37+ i ++ ;
38+ }
39+
40+ if ( currentContent ) {
41+ result += this . convertToHTML ( currentContent ) ;
42+ }
43+
44+ return result ;
45+ }
46+ convertToHTML ( markdown ) {
47+ let html = markdown
48+ . replace ( / ^ # ( .* $ ) / gm, '<h1>$1</h1>' )
49+ . replace ( / ^ # # ( .* $ ) / gm, '<h2>$1</h2>' )
50+ . replace ( / ^ # # # ( .* $ ) / gm, '<h3>$1</h3>' )
51+ . replace ( / \* \* ( .* ?) \* \* / g, '<strong>$1</strong>' )
52+ . replace ( / \* ( .* ?) \* / g, '<em>$1</em>' )
53+ . replace ( / ! \[ ( [ ^ \] ] * ) \] \( ( [ ^ ) ] + ) \s * " ( .* ?) " \) / g, ( match , alt , src , size ) => {
54+ const sizeStyle = size ? ` style="${ size } "` : '' ;
55+ return `<img src="${ src } " alt="${ alt } "${ sizeStyle } />` ;
56+ } )
57+ . replace ( / \[ ( [ ^ \] ] + ) \] \( ( [ ^ ) ] + ) \) / g, '<a href="$2" target="_blank">$1</a>' )
58+ . replace ( / ` ` ` ( [ ^ ` ] + ) ` ` ` / gs, '<pre><code>$1</code></pre>' ) ;
59+
60+ if ( html . includes ( '<li>' ) ) {
61+ html = html . replace ( / ( < l i > .* ?< \/ l i > ) / gs, '<ul>$1</ul>' ) ;
62+ html = html . replace ( / < \/ u l > \s * < u l > / g, '' ) ; // Merge consecutive <ul>
63+ }
64+ return html . replace ( / \n / g, '<br>' ) ;
65+ }
66+ }
67+ export default MarkdownConverter ;
0 commit comments