@@ -18,12 +18,30 @@ export function formatFromDiscordToIRC(text) {
18
18
}
19
19
20
20
export function formatFromIRCToDiscord ( text ) {
21
- const blocks = ircFormatting . parse ( text ) ;
22
- return blocks . map ( ( block ) => {
23
- let mdText = block . text ;
24
- if ( block . italic || block . reverse ) mdText = `*${ mdText } *` ;
25
- if ( block . bold ) mdText = `**${ mdText } **` ;
26
- if ( block . underline ) mdText = `__${ mdText } __` ;
27
- return mdText ;
28
- } ) . join ( '' ) ;
21
+ const blocks = ircFormatting . parse ( text ) . map ( block =>
22
+ // Consider reverse as italic, some IRC clients use that
23
+ _ . assign ( { } , block , { italic : block . italic || block . reverse } )
24
+ ) ;
25
+ let mdText = '' ;
26
+
27
+ for ( let i = 0 ; i <= blocks . length ; i += 1 ) {
28
+ // Default to unstyled blocks when index out of range
29
+ const block = blocks [ i ] || { } ;
30
+ const prevBlock = blocks [ i - 1 ] || { } ;
31
+
32
+ // Add start markers when style turns from false to true
33
+ if ( ! prevBlock . italic && block . italic ) mdText += '*' ;
34
+ if ( ! prevBlock . bold && block . bold ) mdText += '**' ;
35
+ if ( ! prevBlock . underline && block . underline ) mdText += '__' ;
36
+
37
+ // Add end markers when style turns from true to false
38
+ // (and apply in reverse order to maintain nesting)
39
+ if ( prevBlock . underline && ! block . underline ) mdText += '__' ;
40
+ if ( prevBlock . bold && ! block . bold ) mdText += '**' ;
41
+ if ( prevBlock . italic && ! block . italic ) mdText += '*' ;
42
+
43
+ mdText += block . text || '' ;
44
+ }
45
+
46
+ return mdText ;
29
47
}
0 commit comments