From 1719153006d5246e3a3548ebae6df92e1ca0d909 Mon Sep 17 00:00:00 2001 From: Vitaly Puzrin Date: Mon, 29 Sep 2014 23:08:49 +0400 Subject: [PATCH] Added entities generator script --- support/entities.js | 51 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100755 support/entities.js diff --git a/support/entities.js b/support/entities.js new file mode 100755 index 0000000..111f2a8 --- /dev/null +++ b/support/entities.js @@ -0,0 +1,51 @@ +#!/usr/bin/env node + +// +// Markdown entities generator (from html5 entities) +// +'use strict'; + +/*eslint no-console:0*/ + + +var http = require('http'); + +function codeToUni(code) { + var result = code.toString(16).toUpperCase(); + while (result.length < 4) { result = '0' + result; } + return '\\u' + result; +} + +function strToUni(str) { + var result = codeToUni(str.charCodeAt(0)); + if (str.length > 1) { + result += codeToUni(str.charCodeAt(1)); + } + return result; +} + +http.get('http://www.w3.org/TR/html5/entities.json', function (res) { + var body = ''; + res.on('data', function(chunk) { + body += chunk; + }); + res.on('end', function() { + var entities = JSON.parse(body); + var out = {}; + + Object.keys(entities).forEach(function (entity) { + // Skip legacy - not allosed in markdown + if (entity[entity.length - 1] !== ';') { return; } + + out[entity.slice(1, -1)] = strToUni(entities[entity].characters); + }); + + var result = [] + + Object.keys(out).forEach(function (key) { + result.push(' "' + key + '":"' + out[key] + '"'); + }); + + console.log('{\n' + result.join(',\n') + '\n}'); + }); +});