Skip to content

Commit

Permalink
tools: parse types into links in doc html gen
Browse files Browse the repository at this point in the history
Changes the parsing of parameter types in the doc html gen
Links to either MDN or nodejs docs depending on type
See #4350

PR-URL: #4741
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
Reviewed-By: Chris Dickinson <chris@neversaw.us>
Reviewed-By: Roman Reiss <me@silverwind.io>
  • Loading branch information
claudiorodriguez authored and Myles Borins committed Feb 22, 2016
1 parent 5dae60e commit cdf18c2
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 3 deletions.
13 changes: 10 additions & 3 deletions tools/doc/html.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ var fs = require('fs');
var marked = require('marked');
var path = require('path');
var preprocess = require('./preprocess.js');
var typeParser = require('./type-parser.js');

module.exports = toHTML;

Expand Down Expand Up @@ -118,7 +119,8 @@ function parseLists(input) {
output.push({ type: 'html', text: tok.text });
return;
}
if (state === null) {
if (state === null ||
(state === 'AFTERHEADING' && tok.type === 'heading')) {
if (tok.type === 'heading') {
state = 'AFTERHEADING';
}
Expand Down Expand Up @@ -168,9 +170,15 @@ function parseLists(input) {
function parseListItem(text) {
var parts = text.split('`');
var i;
var typeMatches;

for (i = 0; i < parts.length; i += 2) {
parts[i] = parts[i].replace(/\{([^\}]+)\}/, '<span class="type">$1</span>');
typeMatches = parts[i].match(/\{([^\}]+)\}/g);
if (typeMatches) {
typeMatches.forEach(function(typeMatch) {
parts[i] = parts[i].replace(typeMatch, typeParser.toLink(typeMatch));
});
}
}

//XXX maybe put more stuff here?
Expand Down Expand Up @@ -229,4 +237,3 @@ function getId(text) {
}
return text;
}

59 changes: 59 additions & 0 deletions tools/doc/type-parser.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
'use strict';
const nodeDocUrl = '';
const jsDocUrl = 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/' +
'Reference/Global_Objects/';
const jsPrimitiveUrl = 'https://developer.mozilla.org/en-US/docs/Web/' +
'JavaScript/Data_structures';
const jsPrimitives = [
'Number', 'String', 'Boolean', 'Null', 'Symbol'
]
const jsGlobalTypes = [
'Error', 'Object', 'Function', 'Array', 'Uint8Array',
'Uint16Array', 'Uint32Array', 'Int8Array', 'Int16Array', 'Int32Array',
'Uint8ClampedArray', 'Float32Array', 'Float64Array', 'Date', 'RegExp',
'ArrayBuffer', 'DataView', 'Promise'
];
const typeMap = {
'Buffer': 'buffer.html#buffer_class_buffer',
'Handle': 'net.html#net_server_listen_handle_backlog_callback',
'Stream': 'stream.html#stream_stream',
'stream.Writable': 'stream.html#stream_class_stream_writable',
'stream.Readable': 'stream.html#stream_class_stream_readable',
'ChildProcess': 'child_process.html#child_process_class_childprocess',
'cluster.Worker': 'cluster.html#cluster_class_worker',
'dgram.Socket': 'dgram.html#dgram_class_dgram_socket',
'net.Socket': 'net.html#net_class_net_socket',
'EventEmitter': 'events.html#events_class_events_eventemitter',
'Timer': 'timers.html#timers_timers'
};

module.exports = {
toLink: function (typeInput) {
let typeLinks = [];
typeInput = typeInput.replace('{', '').replace('}', '');
let typeTexts = typeInput.split('|');

typeTexts.forEach(function (typeText) {
typeText = typeText.trim();
if (typeText) {
let typeUrl = null;
if (jsPrimitives.indexOf(typeText) !== -1) {
typeUrl = jsPrimitiveUrl + '#' + typeText + '_type';
} else if (jsGlobalTypes.indexOf(typeText) !== -1) {
typeUrl = jsDocUrl + typeText;
} else if (typeMap[typeText]) {
typeUrl = nodeDocUrl + typeMap[typeText];
}

if (typeUrl) {
typeLinks.push('<a href="' + typeUrl + '" class="type">&lt;' +
typeText + '&gt;</a>');
} else {
typeLinks.push('<span class="type">&lt;' + typeText + '&gt;</span>');
}
}
});

return typeLinks.length ? typeLinks.join(' | ') : typeInput;
}
}

0 comments on commit cdf18c2

Please sign in to comment.