fs = require 'fs'
path = require 'path'
fsTools = require 'fs-tools'
StyleHelpers = require '../utils/style_helpers'
Utils = require '../utils'
module.exports = class Base
constructor: (project) ->
@project = project
@log = project.log
@files = []
@docs = []
@outline = {} # Keyed on target path
renderFile: (data, fileInfo, callback) ->
@log.trace 'BaseStyle#renderFile(..., %j, ...)', fileInfo
@files.push fileInfo
segments = Utils.splitSource data, fileInfo.language,
requireWhitespaceAfterToken: !!@project.options.requireWhitespaceAfterToken
markdown: fileInfo.markdown ? null
@log.debug 'Split %s into %d segments', fileInfo.sourcePath, segments.length
Utils.parseDocTags segments, @project, fileInfo, (error) =>
if error
@log.error 'Failed to parse doc tags %s: %s\n', fileInfo.sourcePath, error.message, error.stack
return callback error
Utils.markdownDocTags segments, @project, fileInfo, (error) =>
if error
@log.error 'Failed to markdown doc tags %s: %s\n', fileInfo.sourcePath, error.message, error.stack
return callback error
@renderDocTags segments, fileInfo
Utils.highlightCode segments, fileInfo.language, (error) =>
if error
if error.failedHighlights
for highlight, i in error.failedHighlights
@log.debug "highlight #{i}:"
@log.warn segments[i]?.code.join '\n'
@log.error highlight
@log.error 'Failed to highlight %s as %s: %s', fileInfo.sourcePath, fileInfo.language.name, error.message or error
return callback error
Utils.markdownComments segments, @project, (error) =>
if error
@log.error 'Failed to markdown %s: %s', fileInfo.sourcePath, error.message
return callback error
@outline[fileInfo.targetPath] = StyleHelpers.outlineHeaders segments
We also prefer to split out solo headers