/**
* Converts a colon formatted string to a object with properties.
*
* This is process a provided string and look for any tokens in the format
* of `:name[=value]` and then convert it to a object and return.
* An example of this is ':include :type=code :fragment=demo' is taken and
* then converted to:
*
* ```
* {
* include: '',
* type: 'code',
* fragment: 'demo'
* }
* ```
*
* @param {string} str The string to parse.
*
* @return {{str: string, config: object}} The original string formatted, and parsed object, { str, config }.
*/
export function getAndRemoveConfig(str = '') {
const config = {};
if (str) {
str = str
.replace(/^('|")/, '')
.replace(/('|")$/, '')
.replace(/(?:^|\s):([\w-]+:?)=?([\w-%]+)?/g, (m, key, value) => {
if (key.indexOf(':') === -1) {
config[key] = (value && value.replace(/"/g, '')) || true;
return '';
}
return m;
})
.trim();
}
return { str, config };
}
/**
* Remove the tag from sidebar when the header with link, details see issue 1069
* @param {string} str The string to deal with.
*
* @return {string} The string after delete the element.
*/
export function removeAtag(str = '') {
return str.replace(/(<\/?a.*?>)/gi, '');
}
/**
* Remove the docsifyIgnore configs and return the str
* @param {string} content The string to deal with.
*
* @return {{content: string, ignoreAllSubs: boolean, ignoreSubHeading: boolean}} The string after delete the docsifyIgnore configs, and whether to ignore some or all.
*/
export function getAndRemoveDocisfyIgnoreConfig(content = '') {
let ignoreAllSubs, ignoreSubHeading;
if (//g.test(content)) {
content = content.replace('', '');
ignoreSubHeading = true;
}
if (/{docsify-ignore}/g.test(content)) {
content = content.replace('{docsify-ignore}', '');
ignoreSubHeading = true;
}
if (//g.test(content)) {
content = content.replace('', '');
ignoreAllSubs = true;
}
if (/{docsify-ignore-all}/g.test(content)) {
content = content.replace('{docsify-ignore-all}', '');
ignoreAllSubs = true;
}
return { content, ignoreAllSubs, ignoreSubHeading };
}