From 5fd757076c5658e68fd3dc12154e560d4c0a3c06 Mon Sep 17 00:00:00 2001 From: Roman Hotsiy Date: Sun, 31 Jan 2016 19:37:35 +0200 Subject: [PATCH] Add prism.js pipe --- lib/utils/pipes.js | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/lib/utils/pipes.js b/lib/utils/pipes.js index 664f70c7..65184212 100644 --- a/lib/utils/pipes.js +++ b/lib/utils/pipes.js @@ -5,6 +5,30 @@ import {isString, stringify, isBlank} from 'angular2/src/facade/lang'; import {BaseException} from 'angular2/src/facade/exceptions'; import {JsonPointer} from './JsonPointer'; import marked from 'marked'; +import Prism from 'prismjs'; +import 'prismjs/components/prism-actionscript.js'; +import 'prismjs/components/prism-c.js'; +import 'prismjs/components/prism-cpp.js'; +import 'prismjs/components/prism-csharp.js'; +import 'prismjs/components/prism-php.js'; +import 'prismjs/components/prism-coffeescript.js'; +import 'prismjs/components/prism-go.js'; +import 'prismjs/components/prism-haskell.js'; +import 'prismjs/components/prism-scala.js'; +import 'prismjs/components/prism-java.js'; +import 'prismjs/components/prism-lua.js'; +import 'prismjs/components/prism-matlab.js'; +import 'prismjs/components/prism-objectivec.js'; +import 'prismjs/components/prism-perl.js'; +import 'prismjs/components/prism-python.js'; +import 'prismjs/components/prism-r.js'; +import 'prismjs/components/prism-ruby.js'; + +import 'prismjs/components/prism-bash.js'; +import 'prismjs/components/prism-swift.js'; +import 'prismjs/components/prism-vim.js'; + +import 'prismjs/themes/prism-dark.css!css'; marked.setOptions({ renderer: new marked.Renderer(), @@ -65,3 +89,31 @@ export class MarkedPipe { return `${marked(value)}`; } } + +const langMap = { + 'c++': 'cpp', + 'c#': 'csharp', + 'objective-c': 'objectivec', + 'shell': 'bash', + 'viml': 'vim' +}; + +@Pipe({ name: 'prism' }) +export class PrismPipe { + transform(value, args) { + if (isBlank(args) || args.length === 0) { + throw new BaseException('Prism pipe requires one argument'); + } + if (isBlank(value)) return value; + if (!isString(value)) { + throw new InvalidPipeArgumentException(JsonPointerEscapePipe, value); + } + let lang = args[0].toString().trim().toLowerCase(); + if (langMap[lang]) lang = langMap[lang]; + + let grammar = Prism.languages[lang]; + //fallback to clike + if (!grammar) grammar = Prism.languages.clike; + return Prism.highlight(value, grammar); + } +}