diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-08-15 10:00:12 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-08-15 10:00:12 +0100 |
| commit | 57299a40f7517ac4934ac391b44656500bac024d (patch) | |
| tree | e7028502e2e2f5450266ca90fc0942898417000a /lib | |
| parent | 1507381c0afbd2c2aaefe4fba8970c4a875886e9 (diff) | |
Generate warnings for not-understood style mappings and continue
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/index.js | 18 | ||||
| -rw-r--r-- | lib/results.js | 5 | ||||
| -rw-r--r-- | lib/style-reader.js | 20 |
3 files changed, 33 insertions, 10 deletions
diff --git a/lib/index.js b/lib/index.js index a988745..983a32a 100644 --- a/lib/index.js +++ b/lib/index.js @@ -4,6 +4,7 @@ var DocumentConverter = require("./document-to-html").DocumentConverter; var readStyle = require("./style-reader").readStyle; var readOptions = require("./options-reader").readOptions; var unzip = require("./unzip"); +var Result = require("./results").Result; exports.convertToHtml = convertToHtml; exports.convertToMarkdown = convertToMarkdown; @@ -50,13 +51,26 @@ function convert(input, options) { function convertDocumentToHtml(documentResult, options) { var parsedOptions = Object.create(options); - parsedOptions.styleMap = (options.styleMap || []).map(readStyle); + var styleMapResult = parseStyleMap(options.styleMap); + parsedOptions.styleMap = styleMapResult.value; var documentConverter = new DocumentConverter(parsedOptions); + return documentResult.flatMapThen(function(document) { - return documentConverter.convertToHtml(document); + return styleMapResult.flatMapThen(function(styleMap) { + return documentConverter.convertToHtml(document); + }); }); } +function parseStyleMap(styleMap) { + return Result.combine((styleMap || []).map(readStyle)) + .map(function(styleMap) { + return styleMap.filter(function(styleMapping) { + return !!styleMapping; + }); + }); +} + function extractRawText(input) { return unzip.openZip(input) diff --git a/lib/results.js b/lib/results.js index bd66430..e86d171 100644 --- a/lib/results.js +++ b/lib/results.js @@ -2,6 +2,7 @@ var _ = require("underscore"); exports.Result = Result; +exports.success = success; exports.warning = warning; @@ -32,6 +33,10 @@ Result.combine = function(results) { return new Result(values, messages); }; +function success(value) { + return new Result(value, []); +} + function warning(message) { return { type: "warning", diff --git a/lib/style-reader.js b/lib/style-reader.js index 6a86eab..6d36c42 100644 --- a/lib/style-reader.js +++ b/lib/style-reader.js @@ -4,6 +4,7 @@ var RegexTokeniser = lop.RegexTokeniser; var documentMatchers = require("./document-matchers"); var htmlPaths = require("./html-paths"); +var results = require("../lib/results"); exports.readHtmlPath = readHtmlPath; exports.readDocumentMatcher = readDocumentMatcher; @@ -195,18 +196,21 @@ function parseString(rule, string) { var tokens = tokenise(string); var parser = lop.Parser(); var parseResult = parser.parseTokens(rule, tokens); - if (!parseResult.isSuccess()) { - throw new Error("Failed to parse: " + describeFailure(parseResult)); + if (parseResult.isSuccess()) { + return results.success(parseResult.value()); + } else { + return new results.Result(null, [results.warning(describeFailure(string, parseResult))]); } - return parseResult.value(); } -function describeFailure(parseResult) { - return parseResult.errors().map(describeError).join("\n"); +function describeFailure(input, parseResult) { + return "Did not understand this style mapping, so ignored it: " + input + "\n" + + parseResult.errors().map(describeError).join("\n"); +} - function describeError(error) { - return error.describe(); - } +function describeError(error) { + return "Error was at character number " + error.characterNumber() + ": " + + "Expected " + error.expected + " but got " + error.actual; } function tokenise(string) { |
