mirror of
https://github.com/Funkoala14/knowledgebase_law.git
synced 2025-06-08 20:48:15 +08:00
243 lines
4.8 KiB
JavaScript
243 lines
4.8 KiB
JavaScript
'use strict'
|
||
|
||
/* global window, self */
|
||
|
||
// istanbul ignore next - Don't allow Prism to run on page load in browser or
|
||
// to start messaging from workers.
|
||
var ctx =
|
||
typeof globalThis === 'object'
|
||
? globalThis
|
||
: typeof self === 'object'
|
||
? self
|
||
: typeof window === 'object'
|
||
? window
|
||
: typeof global === 'object'
|
||
? global
|
||
: {}
|
||
|
||
var restore = capture()
|
||
|
||
ctx.Prism = {manual: true, disableWorkerMessageHandler: true}
|
||
|
||
// Load all stuff in `prism.js` itself, except for `prism-file-highlight.js`.
|
||
// The wrapped non-leaky grammars are loaded instead of Prism’s originals.
|
||
var h = require('hastscript')
|
||
var decode = require('parse-entities')
|
||
var Prism = require('prismjs/components/prism-core')
|
||
var markup = require('./lang/markup')
|
||
var css = require('./lang/css')
|
||
var clike = require('./lang/clike')
|
||
var js = require('./lang/javascript')
|
||
|
||
restore()
|
||
|
||
var own = {}.hasOwnProperty
|
||
|
||
// Inherit.
|
||
function Refractor() {}
|
||
|
||
Refractor.prototype = Prism
|
||
|
||
// Construct.
|
||
var refract = new Refractor()
|
||
|
||
// Expose.
|
||
module.exports = refract
|
||
|
||
// Create.
|
||
refract.highlight = highlight
|
||
refract.register = register
|
||
refract.alias = alias
|
||
refract.registered = registered
|
||
refract.listLanguages = listLanguages
|
||
|
||
// Register bundled grammars.
|
||
register(markup)
|
||
register(css)
|
||
register(clike)
|
||
register(js)
|
||
|
||
refract.util.encode = encode
|
||
refract.Token.stringify = stringify
|
||
|
||
function register(grammar) {
|
||
if (typeof grammar !== 'function' || !grammar.displayName) {
|
||
throw new Error('Expected `function` for `grammar`, got `' + grammar + '`')
|
||
}
|
||
|
||
// Do not duplicate registrations.
|
||
if (refract.languages[grammar.displayName] === undefined) {
|
||
grammar(refract)
|
||
}
|
||
}
|
||
|
||
function alias(name, alias) {
|
||
var languages = refract.languages
|
||
var map = name
|
||
var key
|
||
var list
|
||
var length
|
||
var index
|
||
|
||
if (alias) {
|
||
map = {}
|
||
map[name] = alias
|
||
}
|
||
|
||
for (key in map) {
|
||
list = map[key]
|
||
list = typeof list === 'string' ? [list] : list
|
||
length = list.length
|
||
index = -1
|
||
|
||
while (++index < length) {
|
||
languages[list[index]] = languages[key]
|
||
}
|
||
}
|
||
}
|
||
|
||
function highlight(value, name) {
|
||
var sup = Prism.highlight
|
||
var grammar
|
||
|
||
if (typeof value !== 'string') {
|
||
throw new Error('Expected `string` for `value`, got `' + value + '`')
|
||
}
|
||
|
||
// `name` is a grammar object.
|
||
if (refract.util.type(name) === 'Object') {
|
||
grammar = name
|
||
name = null
|
||
} else {
|
||
if (typeof name !== 'string') {
|
||
throw new Error('Expected `string` for `name`, got `' + name + '`')
|
||
}
|
||
|
||
if (own.call(refract.languages, name)) {
|
||
grammar = refract.languages[name]
|
||
} else {
|
||
throw new Error('Unknown language: `' + name + '` is not registered')
|
||
}
|
||
}
|
||
|
||
return sup.call(this, value, grammar, name)
|
||
}
|
||
|
||
function registered(language) {
|
||
if (typeof language !== 'string') {
|
||
throw new Error('Expected `string` for `language`, got `' + language + '`')
|
||
}
|
||
|
||
return own.call(refract.languages, language)
|
||
}
|
||
|
||
function listLanguages() {
|
||
var languages = refract.languages
|
||
var list = []
|
||
var language
|
||
|
||
for (language in languages) {
|
||
if (
|
||
own.call(languages, language) &&
|
||
typeof languages[language] === 'object'
|
||
) {
|
||
list.push(language)
|
||
}
|
||
}
|
||
|
||
return list
|
||
}
|
||
|
||
function stringify(value, language, parent) {
|
||
var env
|
||
|
||
if (typeof value === 'string') {
|
||
return {type: 'text', value: value}
|
||
}
|
||
|
||
if (refract.util.type(value) === 'Array') {
|
||
return stringifyAll(value, language)
|
||
}
|
||
|
||
env = {
|
||
type: value.type,
|
||
content: refract.Token.stringify(value.content, language, parent),
|
||
tag: 'span',
|
||
classes: ['token', value.type],
|
||
attributes: {},
|
||
language: language,
|
||
parent: parent
|
||
}
|
||
|
||
if (value.alias) {
|
||
env.classes = env.classes.concat(value.alias)
|
||
}
|
||
|
||
refract.hooks.run('wrap', env)
|
||
|
||
return h(
|
||
env.tag + '.' + env.classes.join('.'),
|
||
attributes(env.attributes),
|
||
env.content
|
||
)
|
||
}
|
||
|
||
function stringifyAll(values, language) {
|
||
var result = []
|
||
var length = values.length
|
||
var index = -1
|
||
var value
|
||
|
||
while (++index < length) {
|
||
value = values[index]
|
||
|
||
if (value !== '' && value !== null && value !== undefined) {
|
||
result.push(value)
|
||
}
|
||
}
|
||
|
||
index = -1
|
||
length = result.length
|
||
|
||
while (++index < length) {
|
||
value = result[index]
|
||
result[index] = refract.Token.stringify(value, language, result)
|
||
}
|
||
|
||
return result
|
||
}
|
||
|
||
function encode(tokens) {
|
||
return tokens
|
||
}
|
||
|
||
function attributes(attrs) {
|
||
var key
|
||
|
||
for (key in attrs) {
|
||
attrs[key] = decode(attrs[key])
|
||
}
|
||
|
||
return attrs
|
||
}
|
||
|
||
function capture() {
|
||
var defined = 'Prism' in ctx
|
||
/* istanbul ignore next */
|
||
var current = defined ? ctx.Prism : undefined
|
||
|
||
return restore
|
||
|
||
function restore() {
|
||
/* istanbul ignore else - Clean leaks after Prism. */
|
||
if (defined) {
|
||
ctx.Prism = current
|
||
} else {
|
||
delete ctx.Prism
|
||
}
|
||
|
||
defined = undefined
|
||
current = undefined
|
||
}
|
||
}
|