mirror of
https://github.com/docsifyjs/docsify.git
synced 2025-12-08 19:55:52 +00:00
BREAKING: The new project layout might break in some tooling setups. We've added an exports field to `package.json` to specify where statements like `import ... from 'docsify'` will import from, and left the `main` and `unpkg` fields as-is for backwards compatibility with the global <script> import method. Most people who use a non-module `<script>` tag to import Docsify will not notice a difference. Anyone else who is importing Docsify into a specilized build setup using `import` statements has a chance of being broken, so we've marked this as BREAKING.
56 lines
1.2 KiB
JavaScript
56 lines
1.2 KiB
JavaScript
/**
|
|
* Fork https://github.com/egoist/docute/blob/master/src/utils/front-matter.js
|
|
*/
|
|
/* eslint-disable */
|
|
import parser from './yaml.js'
|
|
|
|
var optionalByteOrderMark = '\\ufeff?'
|
|
var pattern =
|
|
'^(' +
|
|
optionalByteOrderMark +
|
|
'(= yaml =|---)' +
|
|
'$([\\s\\S]*?)' +
|
|
'(?:\\2|\\.\\.\\.)' +
|
|
'$' +
|
|
'' +
|
|
'(?:\\n)?)'
|
|
// NOTE: If this pattern uses the 'g' flag the `regex` variable definition will
|
|
// need to be moved down into the functions that use it.
|
|
var regex = new RegExp(pattern, 'm')
|
|
|
|
function extractor(string) {
|
|
string = string || ''
|
|
|
|
var lines = string.split(/(\r?\n)/)
|
|
if (lines[0] && /= yaml =|---/.test(lines[0])) {
|
|
return parse(string)
|
|
} else {
|
|
return { attributes: {}, body: string }
|
|
}
|
|
}
|
|
|
|
function parse(string) {
|
|
var match = regex.exec(string)
|
|
|
|
if (!match) {
|
|
return {
|
|
attributes: {},
|
|
body: string
|
|
}
|
|
}
|
|
|
|
var yaml = match[match.length - 1].replace(/^\s+|\s+$/g, '')
|
|
var attributes = parser(yaml) || {}
|
|
var body = string.replace(match[0], '')
|
|
|
|
return { attributes: attributes, body: body, frontmatter: yaml }
|
|
}
|
|
|
|
function test(string) {
|
|
string = string || ''
|
|
|
|
return regex.test(string)
|
|
}
|
|
|
|
export default extractor
|