arredemo
Version:
Instantly build a static site for your package
258 lines (224 loc) • 5.82 kB
JavaScript
const _removeDoubledEmptyLines = (md) => {
const findReg= new RegExp('\n\n\n', 'g')
const replWith= ' \n\n'
return md.replace(findReg, replWith)
}
const _groupBySections= (lines, h1ChTag= 'section', h2ChTag= 'article') => {
/**
* converts:
*
* ```
* # Head 1
* Text here
*
* ## Head 2
* More text here
* ```
*
* To:
*
*
* ```
* # Head 1
* <section>
* Text here
*
* ## Head 2
* <article>
* More text here
* </article>
* </section>
* ```
*/
const output= []
let openedl1= false, openedl2= false
for (const line of lines) {
if (line.indexOf('#')==0) {
if (line.indexOf('# ')==0) {
if (openedl2) {
output.push(`</${h2ChTag}>`)
openedl2= false
}
if (openedl1) {
output.push(`</${h1ChTag}>`)
}
output.push(`<${h1ChTag}>`)
openedl1= true
}
if (line.indexOf('## ')==0) {
if (openedl2) {
output.push(`</${h2ChTag}>`)
}
output.push(`<${h2ChTag}>`)
openedl2= true
}
}
output.push(line)
}
return output
}
const _removeBadgesAndLogo= (lines) => {
/**
* Remove logos and famous badges from the readme
* Like this ones:
*
* ```
*  * [](https://www.npmjs.com/package/reactstrap-date-picker)
* [](https://david-dm.org/afialapis/reactstrap-date-picker)
* [](https://www.npmjs.com/package/reactstrap-date-picker)
* ```
*/
const unwantedWords= [
['logo', '.png'],
['badge.fury.io'],
['david-dm'],
['img.shields.io']
]
const output= []
for (const line of lines) {
let append=true
const seemsALine= (line.indexOf('[!')==0 || line.indexOf('!')==0)
if (seemsALine) {
unwantedWords.map((group) => {
const matches= Math.min(
...group.map(w => line.indexOf(w)>=0)
)
if (matches) {
append= false
}
})
}
if (append) {
output.push(line)
}
}
return output
}
const _removeSummaryTags= (lines, keepSummary) => {
/**
* converts:
*
* ```
* <details>
* <summary>
* Some summary text resume
* </summary>
* Bla bla bla bla bla bla
* </details>
* ```
*
* to:
*
* ```
* Some summary text resume # This line only if keepSummary=True
* Bla bla bla bla bla bla
* ```
*/
const output= []
let inSummary= false
for (const l of lines) {
let append= true
if (l.indexOf('<details>')>=0 || l.indexOf('</details>')>=0) {
append= false
} else if (l.indexOf('<summary>')>=0) {
append= false
inSummary= true
} else if (l.indexOf('</summary>')>=0) {
append= false
inSummary= false
}
if (inSummary) {
if (keepSummary) {
output.push(l)
}
} else if (append) {
output.push(l)
}
}
return output
}
const preparseMd= (md, packageName, arreConfig) => {
let parsed= _removeDoubledEmptyLines(md)
let lines= parsed.split('\n')
lines= _groupBySections(lines)
lines= _removeBadgesAndLogo(lines)
if (arreConfig.md_strip_details_tag) {
lines= _removeSummaryTags(lines, arreConfig.md_keep_summary_content)
}
return lines.join('\n')
}
export default preparseMd
/*
const _wrapImages= (lines) => {
const output= []
for (const line of lines) {
let append= []
if (line.indexOf('[!')==0 || line.indexOf('!')==0) {
let className= ''
if (line.indexOf('logo')>=0 && line.indexOf('png')>=0) {
className= 'logo'
} else if (line.indexOf('badge.fury.io')>=0 || line.indexOf('david-dm')>=0 || line.indexOf('img.shields.io')>=0) {
className= 'badge'
}
append= [
`<span class="${className}">`,
line,
'</span>'
]
} else {
append= [line]
}
append.map(a => output.push(a))
}
return output
}
const _removeImages= (lines) => {
const output= []
for (const line of lines) {
let append= []
if (line.indexOf('[!')<0 && line.indexOf('!')<0) {
append= [line]
}
append.map(a => output.push(a))
}
return output
}
*/
// const _wrapPackageName= (md, packageName) => {
// /**
// * converts:
// *
// * ```
// * Text text text packageName text text text
// * ```
// *
// * To:
// *
// *
// * ```
// * Text text text <span class="package-name">packageName</span> text text text
// * ```
// */
// // const _replIfSurroundedBy = (str, sep1, sep2= undefined) => {
// // const find= `${sep1}${packageName}${sep2 || sep1}`
// // const regFind = new RegExp(find, 'g')
// // const replWith= `${sep1}<span class="package-name">${packageName}</span>${sep2 || sep1}`
// // return str.replace(regFind, replWith)
// // }
// //
// // let out= _replIfSurroundedBy(md, ' ')
// // out= _replIfSurroundedBy(out, '`')
// // out= _replIfSurroundedBy(out, '"')
// // out= _replIfSurroundedBy(out, "'")
// // out= _replIfSurroundedBy(out, ' ', '.')
// // out= _replIfSurroundedBy(out, ' ', ',')
// // out= _replIfSurroundedBy(out, ' ', "'")
// // out= _replIfSurroundedBy(out, '>', "<")
//
// // return out
//
//
// const regFind = new RegExp(packageName, 'g')
// const replWith= `<i >${packageName}</i>`
// return md.replace(regFind, replWith)
// }