Son CV dans un terminal web en Javascript! https://terminal-cv.gregandev.fr
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

163 lines
3.0 KiB

'use strict'
var chalk = require('chalk')
var lowlight = require('lowlight/lib/core.js')
var high = lowlight.highlight
var auto = lowlight.highlightAuto
// Inherit.
function Lowlight() {}
Lowlight.prototype = lowlight
var emphasize = new Lowlight()
// Expose.
module.exports = emphasize
emphasize.highlight = highlight
emphasize.highlightAuto = highlightAuto
// Default style sheet.
var defaultSheet = {
comment: chalk.gray,
quote: chalk.gray,
keyword: chalk.green,
'selector-tag': chalk.green,
addition: chalk.green,
number: chalk.cyan,
string: chalk.cyan,
'meta meta-string': chalk.cyan,
literal: chalk.cyan,
doctag: chalk.cyan,
regexp: chalk.cyan,
title: chalk.blue,
section: chalk.blue,
name: chalk.blue,
'selector-id': chalk.blue,
'selector-class': chalk.blue,
attribute: chalk.yellow,
attr: chalk.yellow,
variable: chalk.yellow,
'template-variable': chalk.yellow,
'class title': chalk.yellow,
type: chalk.yellow,
symbol: chalk.magenta,
bullet: chalk.magenta,
subst: chalk.magenta,
meta: chalk.magenta,
'meta keyword': chalk.magenta,
'selector-attr': chalk.magenta,
'selector-pseudo': chalk.magenta,
link: chalk.magenta,
/* eslint-disable camelcase */
built_in: chalk.red,
/* eslint-enable camelcase */
deletion: chalk.red,
emphasis: chalk.italic,
strong: chalk.bold,
formula: chalk.inverse
}
// Highlight `value` as `language`.
function highlight(language, value, sheet) {
var result = high.call(this, language, value)
result.value = all(sheet || defaultSheet, result.value)
return result
}
// Highlight `value` and guess its syntax.
function highlightAuto(value, options) {
var result
var sheet
var config
if (options) {
if (options.subset) {
sheet = options.sheet
config = {subset: options.subset}
} else {
sheet = options
}
}
if (!sheet) {
sheet = defaultSheet
}
result = auto.call(this, value, config)
result.value = all(sheet, result.value)
if (result.secondBest) {
result.secondBest.value = all(sheet, result.secondBest.value)
}
return result
}
// Visit one `node`.
function visit(sheet, node) {
var name = (node.properties || {}).className
var scoped = {}
var key
var parts
var color
var style
var content
// Always just one class.
name = name ? name[0].replace(/hljs-/, '') : ''
for (key in sheet) {
parts = key.split(' ')
color = sheet[key]
if (parts[0] === name) {
if (parts.length === 1) {
style = color
} else {
scoped[parts.slice(1).join(' ')] = color
}
} else {
scoped[key] = color
}
}
content = ''
if ('value' in node) {
content = node.value
}
if ('children' in node) {
content = all(scoped, node.children)
}
if (style) {
content = style(content)
}
return content
}
// Visit children in `node`.
function all(sheet, nodes) {
var result = []
var length = nodes.length
var index = -1
while (++index < length) {
result.push(visit(sheet, nodes[index]))
}
return result.join('')
}