@@ -109,12 +109,13 @@ <h2 id="main-documentation-generation-functions">Main Documentation Generation F
109
109
110
110
callback < span class ="hljs-function "> < span class ="hljs-title "> or</ span > = < span class ="hljs-params "> (error)</ span > -></ span > < span class ="hljs-keyword "> throw</ span > error < span class ="hljs-keyword "> if</ span > error
111
111
< span class ="hljs-function "> < span class ="hljs-title "> copyAsset</ span > = < span class ="hljs-params "> (file, callback)</ span > -></ span >
112
+ < span class ="hljs-keyword "> return</ span > callback() < span class ="hljs-keyword "> unless</ span > fs.existsSync file
112
113
fs.copy file, path.join(config.output, path.basename(file)), callback
113
114
< span class ="hljs-function "> < span class ="hljs-title "> complete</ span > = -></ span >
114
115
copyAsset config.css, < span class ="hljs-function "> < span class ="hljs-params "> (error)</ span > -></ span >
115
- < span class ="hljs-keyword "> if </ span > error < span class ="hljs-keyword "> then </ span > callback error
116
- < span class ="hljs-keyword "> else </ span > < span class =" hljs-keyword " > if </ span > fs.existsSync config.public < span class ="hljs-keyword "> then </ span > copyAsset config.public, callback
117
- < span class =" hljs-keyword " > else </ span > callback()
116
+ < span class ="hljs-keyword "> return </ span > callback error < span class ="hljs-keyword "> if </ span > error
117
+ < span class ="hljs-keyword "> return </ span > copyAsset config.public, callback < span class ="hljs-keyword "> if </ span > fs.existsSync config.public
118
+ callback()
118
119
119
120
files = config.sources.slice()
120
121
@@ -192,6 +193,19 @@ <h2 id="main-documentation-generation-functions">Main Documentation Generation F
192
193
193
194
194
195
196
+ < p > Pass any user defined options to Marked if specified via command line option</ p >
197
+
198
+
199
+ < div class ='highlight '> < pre > markedOptions =
200
+ < span class ="hljs-attribute "> smartypants</ span > : < span class ="hljs-literal "> true</ span >
201
+
202
+ < span class ="hljs-keyword "> if</ span > config.marked
203
+ markedOptions = config.marked
204
+
205
+ marked.setOptions markedOptions</ pre > </ div >
206
+
207
+
208
+
195
209
< p > Tell Marked how to highlight code blocks within comments, treating that code
196
210
as either the language specified in the code block or the language of the file
197
211
if not specified.</ p >
@@ -224,15 +238,17 @@ <h2 id="main-documentation-generation-functions">Main Documentation Generation F
224
238
< div class ='highlight '> < pre > < span class ="hljs-function "> < span class ="hljs-title "> write</ span > = < span class ="hljs-params "> (source, sections, config)</ span > -></ span >
225
239
226
240
< span class ="hljs-function "> < span class ="hljs-title "> destination</ span > = < span class ="hljs-params "> (file)</ span > -></ span >
227
- path.join(config.output, path.basename( file, path.extname(file)) + < span class ="hljs-string "> '.html'</ span > )</ pre > </ div >
241
+ path.join(config.output, file + < span class ="hljs-string "> '.html'</ span > )</ pre > </ div >
228
242
229
243
230
244
231
245
< p > The < strong > title</ strong > of the file is either the first heading in the prose, or the
232
246
name of the source file.</ p >
233
247
234
248
235
- < div class ='highlight '> < pre > first = marked.lexer(sections[< span class ="hljs-number "> 0</ span > ].docsText)[< span class ="hljs-number "> 0</ span > ]
249
+ < div class ='highlight '> < pre > firstSection = _.find sections, < span class ="hljs-function "> < span class ="hljs-params "> (section)</ span > -></ span >
250
+ section.docsText.length > < span class ="hljs-number "> 0</ span >
251
+ first = marked.lexer(firstSection.docsText)[< span class ="hljs-number "> 0</ span > ] < span class ="hljs-keyword "> if</ span > firstSection
236
252
hasTitle = first < span class ="hljs-keyword "> and</ span > first.type < span class ="hljs-keyword "> is</ span > < span class ="hljs-string "> 'heading'</ span > < span class ="hljs-keyword "> and</ span > first.depth < span class ="hljs-keyword "> is</ span > < span class ="hljs-number "> 1</ span >
237
253
title = < span class ="hljs-keyword "> if</ span > hasTitle < span class ="hljs-keyword "> then</ span > first.text < span class ="hljs-keyword "> else</ span > path.basename source
238
254
@@ -259,7 +275,8 @@ <h2 id="configuration">Configuration</h2>
259
275
< span class ="hljs-attribute "> template</ span > : < span class ="hljs-literal "> null</ span >
260
276
< span class ="hljs-attribute "> css</ span > : < span class ="hljs-literal "> null</ span >
261
277
< span class ="hljs-attribute "> extension</ span > : < span class ="hljs-literal "> null</ span >
262
- < span class ="hljs-attribute "> languages</ span > : {}</ pre > </ div >
278
+ < span class ="hljs-attribute "> languages</ span > : {}
279
+ < span class ="hljs-attribute "> marked</ span > : < span class ="hljs-literal "> null</ span > </ pre > </ div >
263
280
264
281
265
282
@@ -271,8 +288,19 @@ <h2 id="configuration">Configuration</h2>
271
288
< div class ='highlight '> < pre > < span class ="hljs-function "> < span class ="hljs-title "> configure</ span > = < span class ="hljs-params "> (options)</ span > -></ span >
272
289
config = _.extend {}, defaults, _.pick(options, _.keys(defaults)...)
273
290
274
- config.languages = buildMatchers config.languages
275
- < span class ="hljs-keyword "> if</ span > options.template
291
+ config.languages = buildMatchers config.languages</ pre > </ div >
292
+
293
+
294
+
295
+ < p > The user is able to override the layout file used with the < code > --template</ code > parameter.
296
+ In this case, it is also neccessary to explicitly specify a stylesheet file.
297
+ These custom templates are compiled exactly like the predefined ones, but the < code > public</ code > folder
298
+ is only copied for the latter.</ p >
299
+
300
+
301
+ < div class ='highlight '> < pre > < span class ="hljs-keyword "> if</ span > options.template
302
+ < span class ="hljs-keyword "> unless</ span > options.css
303
+ < span class ="hljs-built_in "> console</ span > .warn < span class ="hljs-string "> "docco: no stylesheet file specified"</ span >
276
304
config.layout = < span class ="hljs-literal "> null</ span >
277
305
< span class ="hljs-keyword "> else</ span >
278
306
dir = config.layout = path.join __dirname, < span class ="hljs-string "> 'resources'</ span > , config.layout
@@ -281,6 +309,9 @@ <h2 id="configuration">Configuration</h2>
281
309
config.css = options.css < span class ="hljs-keyword "> or</ span > path.join dir, < span class ="hljs-string "> 'resources/linear/docco.css'</ span >
282
310
config.template = _.template fs.readFileSync(config.template).toString()
283
311
312
+ < span class ="hljs-keyword "> if</ span > options.marked
313
+ config.marked = JSON.parse fs.readFileSync(options.marked)
314
+
284
315
config.sources = options.args.filter< span class ="hljs-function "> < span class ="hljs-params "> ((source) ->
285
316
lang = getLanguage source, config
286
317
< span class ="hljs-built_in "> console</ span > .warn < span class ="hljs-string "> "docco: skipped unknown type (< span class ="hljs-subst "> #{path.basename source}</ span > )"</ span > < span class ="hljs-keyword "> unless</ span > lang
@@ -311,13 +342,6 @@ <h2 id="helpers-initial-setup">Helpers & Initial Setup</h2>
311
342
312
343
313
344
314
- < p > Enable nicer typography with marked.</ p >
315
-
316
-
317
- < div class ='highlight '> < pre > marked.setOptions < span class ="hljs-attribute "> smartypants</ span > : < span class ="hljs-literal "> yes</ span > </ pre > </ div >
318
-
319
-
320
-
321
345
< p > Languages are stored in JSON in the file < code > resources/languages.json</ code > .
322
346
Each item maps the file extension to the name of the language and the
323
347
< code > symbol</ code > that indicates a line comment. To add support for a new programming
@@ -358,7 +382,7 @@ <h2 id="helpers-initial-setup">Helpers & Initial Setup</h2>
358
382
359
383
< div class ='highlight '> < pre > < span class ="hljs-function "> < span class ="hljs-title "> getLanguage</ span > = < span class ="hljs-params "> (source, config)</ span > -></ span >
360
384
ext = config.extension < span class ="hljs-keyword "> or</ span > path.extname(source) < span class ="hljs-keyword "> or</ span > path.basename(source)
361
- lang = config.languages[ext] < span class ="hljs-keyword "> or</ span > languages[ext]
385
+ lang = config.languages? [ext] < span class ="hljs-keyword "> or</ span > languages[ext]
362
386
< span class ="hljs-keyword "> if</ span > lang < span class ="hljs-keyword "> and</ span > lang.name < span class ="hljs-keyword "> is</ span > < span class ="hljs-string "> 'markdown'</ span >
363
387
codeExt = path.extname(path.basename(source, ext))
364
388
< span class ="hljs-keyword "> if</ span > codeExt < span class ="hljs-keyword "> and</ span > codeLang = languages[codeExt]
@@ -393,6 +417,7 @@ <h2 id="command-line-interface">Command Line Interface</h2>
393
417
.option(< span class ="hljs-string "> '-c, --css [file]'</ span > , < span class ="hljs-string "> 'use a custom css file'</ span > , c.css)
394
418
.option(< span class ="hljs-string "> '-t, --template [file]'</ span > , < span class ="hljs-string "> 'use a custom .jst template'</ span > , c.template)
395
419
.option(< span class ="hljs-string "> '-e, --extension [ext]'</ span > , < span class ="hljs-string "> 'assume a file extension for all inputs'</ span > , c.extension)
420
+ .option(< span class ="hljs-string "> '-m, --marked [file]'</ span > , < span class ="hljs-string "> 'use custom marked options'</ span > , c.marked)
396
421
.parse(args)
397
422
.name = < span class ="hljs-string "> "docco"</ span >
398
423
< span class ="hljs-keyword "> if</ span > commander.args.length
0 commit comments