@ -11,18 +11,20 @@ const greentextRegex = /^>((?!>).+)/gm
, spoilerRegex = /\|\|([\s\S]+?)\|\|/gm
, detectedRegex = /(\(\(\(.+?\)\)\))/gm
, linkRegex = /https?\://[^\s<>\[\]{}|\\^]+/g
, codeRegex = /```([\s\S]+?)```/gm
, codeRegex = /(?:(?<language>[a-z+]{1,10})\r?\n)?(?<code>[\s\S]+)/i
, splitRegex = /```([\s\S]+?)```/gm
, trimNewlineRegex = /^\s*(\r?\n)*|(\r?\n)*$/g
, diceRegex = /##(?<numdice>\d+)d(?<numsides>\d+)(?:(?<operator>[+-])(?<modifier>\d+))?/gmi
, getDomain = ( string ) => string . split ( /\/\/|\// ) [ 1 ] //unused atm
, diceRoll = require ( _ _dirname + '/diceroll.js' )
, escape = require ( _ _dirname + '/escape.js' )
, { highlightAuto } = require ( 'highlight.js' )
, { highlight , highlight Auto } = require ( 'highlight.js' )
, { highlightOptions } = require ( _ _dirname + '/../../configs/main.json' ) ;
module . exports = {
markdown : ( text ) => {
const chunks = text . split ( code Regex) ;
const chunks = text . split ( split Regex) ;
for ( let i = 0 ; i < chunks . length ; i ++ ) {
//every other chunk will be a code block
if ( i % 2 === 0 ) {
@ -37,13 +39,22 @@ module.exports = {
} ,
processCodeChunk : ( text ) => {
const trimFix = text . replace ( /^\s*(\r?\n)*|(\r?\n)*$/g , '' ) ; //remove extra whitespace/newlines at ends
const { language , relevance , value } = highlightAuto ( trimFix , highlightOptions . languageSubset ) ;
if ( relevance > highlightOptions . threshold ) {
return ` <span class='code hljs'><small>possible language: ${ language } , relevance: ${ relevance } </small> \n ${ value } </span> ` ;
} else {
return ` <span class='code'> ${ escape ( trimFix ) } </span> ` ;
const matches = text . match ( codeRegex ) ;
const trimFix = matches . groups . code . replace ( trimNewlineRegex , '' ) ;
let lang ;
if ( matches . groups . language && matches . groups . language . length > 0 ) {
lang = matches . groups . language . toLowerCase ( ) ;
}
if ( ! lang ) {
const { language , relevance , value } = highlightAuto ( trimFix , highlightOptions . languageSubset ) ;
if ( relevance > highlightOptions . threshold ) {
return ` <span class='code hljs'><small>possible language: ${ language } , relevance: ${ relevance } </small> \n ${ value } </span> ` ;
}
} else if ( lang !== 'plain' && highlightOptions . languageSubset . includes ( lang ) ) {
const { value } = highlight ( lang , trimFix ) ;
return ` <span class='code hljs'><small>language: ${ lang } </small> \n ${ value } </span> ` ;
}
return ` <span class='code'> ${ escape ( trimFix ) } </span> ` ;
} ,
processRegularChunk : ( text ) => {