Сегодня я столкнулся с проблемой с кодом @ Pumbaa80. Я пытаюсь применить подсветку синтаксиса JSON к данным, которые я представляю в представлении Mithril , поэтому мне нужно создать узлы DOM для всего, что есть на выходе JSON.stringify
.
Я разделил действительно длинное регулярное выражение на его составные части.
render_json = (data) ->
# wraps JSON data in span elements so that syntax highlighting may be
# applied. Should be placed in a `whitespace: pre` context
if typeof(data) isnt 'string'
data = JSON.stringify(data, undefined, 2)
unicode = /"(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?/
keyword = /\b(true|false|null)\b/
whitespace = /\s+/
punctuation = /[,.}{\[\]]/
number = /-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/
syntax = '(' + [unicode, keyword, whitespace,
punctuation, number].map((r) -> r.source).join('|') + ')'
parser = new RegExp(syntax, 'g')
nodes = data.match(parser) ? []
select_class = (node) ->
if punctuation.test(node)
return 'punctuation'
if /^\s+$/.test(node)
return 'whitespace'
if /^\"/.test(node)
if /:$/.test(node)
return 'key'
return 'string'
if /true|false/.test(node)
return 'boolean'
if /null/.test(node)
return 'null'
return 'number'
return nodes.map (node) ->
cls = select_class(node)
return Mithril('span', {class: cls}, node)
Код в контексте Github здесь
Я знаю, как его создать, например, проект demo5
используется для создания библиотеки.
Сначала выберите demo5 (правый прямоугольник на изображении ниже)
Во-вторых, Run-> build
Выполните следующие действия: