/* * libreevent - build.js * * Created by Janis Hutz 03/09/2023, Licensed under the GPL V3 License * https://janishutz.com, development@janishutz.com * * */ const markdownIt = require( 'markdown-it' ); const md2html = new markdownIt(); const fs = require( 'fs' ); const path = require( 'path' ); console.log( ` _ _ _ _ | (_) | | | | |_| |__ _ __ ___ _____ _____ _ __ | |_ | | | '_ \\| '__/ _ \\/ _ \\ \\ / / _ \\ '_ \\| __| | | | |_) | | | __/ __/\\ V / __/ | | | |_ |_|_|_.__/|_| \\___|\\___| \\_/ \\___|_| |_|\\__| ------------------------------------------------------- ==> Building the libreevent documentation! ` ); buildNav( buildDocs() ); function buildNav ( pathObject ) { let html = `
Home`; let groups = {}; for ( let item in pathObject ) { if ( groups[ pathObject[ item ][ 'group' ] ] ) { groups[ pathObject[ item ][ 'group' ] ].push( pathObject[ item ] ); } else { groups[ pathObject[ item ][ 'group' ] ] = [ pathObject[ item ] ]; } } for ( let group in groups ) { if ( Object.keys( groups[ group ] ).length > 1 ) { html += `${ group.slice( 0, 1 ).toUpperCase() + group.substring( 1 ) }
\n`; for ( let entry in groups[ group ] ) { html += `${ groups[ group ][ entry ][ 'title' ] }\n`; } html += '
\n'; } else { html += `${ groups[ group ][ 0 ][ 'title' ] }\n`; } } html += `
`; fs.writeFileSync( path.join( __dirname + '/dist/docs/side-bar.html' ), html ); console.log( ' ==> Successfully built documentation! \n\n' ); } function buildDocs () { let allFiles = []; let directoriesToScan = []; let files = fs.readdirSync( path.join( __dirname + '/src/' ) ); for ( let file in files ) { if ( files[ file ].substring( files[ file ].length - 3 ) == '.md' ) { allFiles.push( handleMD( path.join( __dirname + '/src/' + files[ file ] ) ) ); } else { directoriesToScan.push( files[ file ] ); } } let count = directoriesToScan.length; while ( count > 0 ) { for ( let missing in directoriesToScan ) { let files = fs.readdirSync( path.join( __dirname + '/src/' + directoriesToScan[ missing ] ) ); count -= 1; for ( let file in files ) { if ( files[ file ].substring( files[ file ].length - 3 ) == '.md' ) { allFiles.push( handleMD( path.join( __dirname + '/src/' + directoriesToScan[ missing ] + '/' + files[ file ] ) ) ); } else { directoriesToScan.push( directoriesToScan[ missing ] + '/' + files[ file ] ); count += 1; } } } } return allFiles; } function handleMD ( filepath ) { let fileContent = md2html.render( fs.readFileSync( filepath ).toString() ); for ( let letter in fileContent ) { if ( fileContent[ letter ] == '<' ) { if ( fileContent.slice( parseInt( letter ), parseInt( letter ) + 9 ) === ''; } else if ( link.slice( 0, 2 ) == '&/' ) { newLink = ''; } else if ( link.slice( 0, 6 ) == '&/' ) { newLink = ''; } else if ( link.slice( 0, 2 ) == '//' ) { if ( link.includes( '.' ) ) { newLink = ''; } else { newLink = ''; } } else { console.error( 'Unsupported link: ' + link ); throw 'INVALID LINK FOUND IN PLUGINS README! Please fix and rerun the script'; } fileContent = fileContent.slice( 0, parseInt( letter ) ) + newLink + fileContent.slice( parseInt( letter ) + i + 2, parseInt( fileContent.length ) ); } } else if ( fileContent[ letter ] === '&' ) { if ( fileContent.slice( letter, parseInt( letter ) + 7 ) === '<!--' ) { fileContent.slice( letter, parseInt( letter ) + 7 ); let newLink = ''; let i = 7; let ok = false; while ( !ok ) { if ( fileContent.slice( parseInt( letter ) + i, parseInt( letter ) + i + 1 ) === '-' ) { if ( fileContent.slice( parseInt( letter ) + i, parseInt( letter ) + i + 6 ) === '-->' ) { break; } } i++; } fileContent = fileContent.slice( 0, parseInt( letter ) ) + newLink + fileContent.slice( parseInt( letter ) + i + 6, parseInt( fileContent.length ) ); } } } return storeHTML( fileContent, filepath ); } function guessTitle( html ) { return html.substring( parseInt( html.indexOf( '

' ) ) + 4, html.indexOf( '

' ) ); } function storeHTML( html, filepath ) { let title = guessTitle( html ); let data = ` ${ title } :: docs - libreevent
${ html }
`; /* Transform file path into correct file structure and output file to dist/docs folder */ let fileOutputPath = path.join( __dirname + '/dist/docs' ); let pos = filepath.indexOf( 'src' ); let category = filepath.substring( parseInt( pos ) + 4, filepath.length - 3 ); fileOutputPath += '/' + category; let group = ''; if ( category.lastIndexOf( '/' ) >= 0 ) { group = category.slice( 0, category.lastIndexOf( '/' ) ); } else { group = category; } try { fs.mkdirSync( fileOutputPath, { recursive: true } ); } catch ( error ) { null; } fileOutputPath += '/index.html'; fs.writeFileSync( fileOutputPath, data ); let id = ''; for ( let letter in category ) { if ( category[ letter ] == '/' ) { id += '-'; } else { id += category[ letter ]; } } return { 'filePath': '/docs/' + category, 'title': title, 'group': group, 'id': id }; }