aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-08-15 10:00:12 +0100
committerMichael Williamson <mike@zwobble.org>2015-08-15 10:00:12 +0100
commit57299a40f7517ac4934ac391b44656500bac024d (patch)
treee7028502e2e2f5450266ca90fc0942898417000a /lib
parent1507381c0afbd2c2aaefe4fba8970c4a875886e9 (diff)
Generate warnings for not-understood style mappings and continue
Diffstat (limited to 'lib')
-rw-r--r--lib/index.js18
-rw-r--r--lib/results.js5
-rw-r--r--lib/style-reader.js20
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) {