From f591ba16f48a7978e60cbc37d3da345ca616c2c0 Mon Sep 17 00:00:00 2001 From: Dominik Kundel Date: Thu, 29 Sep 2016 12:22:30 +0200 Subject: [PATCH] Add support for better highlighting --- README.md | 11 ++++++++++- index.js | 42 ++++++++++++++++++++++++++++++++++++------ package.json | 3 +++ 3 files changed, 49 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index c761f21..eb2ead9 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ you will notice that this README.mb is a valid tslide markdown presentation. --- -## crude js syntax highlighting +## Advanced syntax highlighting ```md # tslide @@ -38,6 +38,15 @@ function fibonacci (n) { ‘‘‘ ``` + +## JavaScript Example + +```js +function fibonacci (n) { + return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2) +} +``` + --- ![Demo Code](demo-code.png) diff --git a/index.js b/index.js index 675a3bf..b348e22 100755 --- a/index.js +++ b/index.js @@ -3,14 +3,17 @@ require('colors') var charm = require('charm')(process.stdout) -var keypress = require('keypress')(process.stdin) -var opts = require('optimist').default('images', true).argv +var chalk = require('chalk') +var emojis = require('node-emoji') var fs = require('fs') -var path = require('path') +var imgcat = require('ansi-escapes').image var iq = require('insert-queue') var js = require('hipster/highlight/javascript') -var imgcat = require('ansi-escapes').image -var emojis = require('node-emoji') +var keypress = require('keypress')(process.stdin) +var marked = require('marked') +var opts = require('optimist').default('images', true).default('legacy', false).argv +var path = require('path') +var TerminalRenderer = require('marked-terminal') var file = opts._[0] if (!file) { @@ -18,9 +21,24 @@ if (!file) { console.error() console.error('--highlight Apply syntax highlighting (default true)') console.error('--images Inline images if supported (default true)') + console.error('--legacy Resets to legacy rendering (default false)') process.exit(1) } +marked.setOptions({ + renderer: new TerminalRenderer({ + heading: function (text) { + return chalk.green.bold(text) + '\n'; + }, + firstHeading: function (text) { + return chalk.magenta.underline.bold(text) + '\n'; + }, + highlightOptions: { + theme: 'tomorrow-night' + } + }) +}) + var text = require('fs').readFileSync(file, 'utf-8') var slides = text.split(/---+\n/) if(slides.length <= 1) { @@ -123,6 +141,18 @@ function indent(slide, indent) { while (indent--) space += ' ' + if (opts.legacy) + return legacyStyling(slide, space) + + if (highlight) + slide = marked(slide); + + return slide.split('\n').map(function (l) { + return space + l + }).join('\n') +} + +function legacyStyling(slide, space) { var code = false var inlineBold = /\*\*(.*)\*\*/g return slide.split('\n').map(function (l) { @@ -140,4 +170,4 @@ function indent(slide, indent) { } return space + l }).join('\n') -} +} \ No newline at end of file diff --git a/package.json b/package.json index e222a05..806826c 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ }, "dependencies": { "ansi-escapes": "^1.3.0", + "chalk": "^1.1.3", "charm": "~0.1.0", "color": "~0.4.1", "colors": "~0.6.0-1", @@ -15,6 +16,8 @@ "insert-queue": "0.0.4", "keypress": "~0.1.0", "markdown-sections": "~1.0.1", + "marked": "^0.3.6", + "marked-terminal": "^1.6.2", "node-emoji": "^1.3.1", "optimist": "~0.3.4" },