From f7c472d762a895383c8de7af5993580b74122532 Mon Sep 17 00:00:00 2001 From: Buddy Sandidge Date: Mon, 27 Apr 2015 23:13:02 -0700 Subject: [PATCH] Add syntax highlighting for c and bash --- assets/app/config.js | 11 ++++++++++- assets/app/lib/syntax.js | 8 +++++--- assets/app/widgets/slide/view.js | 17 +++++++++++++---- data/slide/08.md | 4 ++++ test/app/lib/syntax.js | 8 +++++--- 5 files changed, 37 insertions(+), 11 deletions(-) diff --git a/assets/app/config.js b/assets/app/config.js index a99675c..badb8c0 100644 --- a/assets/app/config.js +++ b/assets/app/config.js @@ -12,7 +12,7 @@ return function (prefix) { prefix = prefix || ''; - + var langPrefix = prefix + '/vendor/prism/components/prism-'; return { paths: { backbone: prefix + '/vendor/backbone/backbone', @@ -21,11 +21,20 @@ jquery: prefix + '/vendor/jquery/dist/jquery', marionette: prefix + '/vendor/marionette/lib/backbone.marionette', prism: prefix + '/vendor/prism/prism', + 'prism-bash': langPrefix + 'bash', + 'prism-c': langPrefix + 'c', + 'prism-clike': langPrefix + 'clike', + 'prism-javascript': langPrefix + 'javascript', underscore: prefix + '/vendor/underscore/underscore' }, + shim: { handlebars: {exports: 'Handlebars'}, prism: {exports: 'Prism'}, + 'prism-bash': {deps: ['prism', 'prism-clike'], exports: 'Prism'}, + 'prism-c': {deps: ['prism', 'prism-clike'], exports: 'Prism'}, + 'prism-clike': {deps: ['prism'], exports: 'Prism'}, + 'prism-javascript': {deps: ['prism', 'prism-clike'], exports: 'Prism'}, underscore: {exports: '_'} } }; diff --git a/assets/app/lib/syntax.js b/assets/app/lib/syntax.js index 3826113..a934edc 100644 --- a/assets/app/lib/syntax.js +++ b/assets/app/lib/syntax.js @@ -1,6 +1,8 @@ -define(['prism'], function (Prism) { - return function (text, language) { +define(['prism', 'prism-javascript'], function (Prism) { + return function (text, language, cb) { language = language || 'javascript'; - return Prism.highlight(text, Prism.languages[language]); + require(['prism-' + language], function () { + return cb(Prism.highlight(text, Prism.languages[language])); + }); }; }); diff --git a/assets/app/widgets/slide/view.js b/assets/app/widgets/slide/view.js index 10b734c..87e5e8c 100644 --- a/assets/app/widgets/slide/view.js +++ b/assets/app/widgets/slide/view.js @@ -39,10 +39,19 @@ define([ if (copy) { this.ui.copy.html(markdown(copy)); } - var code = this.model.get('code'); - if (code) { - this.ui.code.html(syntax(code)); - } + + this.ui.copy.find('pre > code').each(function (index, el) { + var language = _.reduce(el.classList, function (memo, className) { + if (/language-/.test(className)) { + return className.replace('language-', ''); + } + return memo; + }, ''); + var $el = $(el); + syntax($el.text(), language, function (html) { + $el.html(html); + }); + }); }, onRequestResult: function onRequestResult(event) { diff --git a/data/slide/08.md b/data/slide/08.md index 4941e60..c0a4dfd 100644 --- a/data/slide/08.md +++ b/data/slide/08.md @@ -2,6 +2,8 @@ ```bash $ gcc -xc - < int main() { int *p = NULL; @@ -10,6 +12,8 @@ int main() { printf("After pointer dereference\n"); return 0; } +``` +```bash APP $ ./a.out Before pointer dereference diff --git a/test/app/lib/syntax.js b/test/app/lib/syntax.js index 6991432..c8b6e3a 100644 --- a/test/app/lib/syntax.js +++ b/test/app/lib/syntax.js @@ -1,9 +1,11 @@ define(['jquery', 'lib/syntax'], function ($, syntax) { describe('syntax', function () { - it('→ converts javascript to html', function () { + it('→ converts javascript to html', function (done) { var src = 'function () {console.log("hi");}'; - var actual = syntax(src); - expect($(actual).text()).toBe(src); + syntax(src, null, function (actual) { + expect($(actual).text()).toBe(src); + done(); + }); }); }); });