aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-07-07 20:44:20 +0100
committerMichael Williamson <mike@zwobble.org>2016-07-07 20:44:20 +0100
commitbaf9808eae3441de70a00cd043e10e0ebf06b7c0 (patch)
tree869bcc8376caf7b730f501472d507e816733e565
parentb5768bced10c6dafe8bc621c6ef01aa0bd9d975c (diff)
Add HTML path for ignoring elements
-rw-r--r--lib/html-paths.js5
-rw-r--r--lib/style-reader.js28
-rw-r--r--test/mammoth.tests.js6
-rw-r--r--test/style-reader.tests.js4
4 files changed, 29 insertions, 14 deletions
diff --git a/lib/html-paths.js b/lib/html-paths.js
index 4021887..5a00cd8 100644
--- a/lib/html-paths.js
+++ b/lib/html-paths.js
@@ -67,3 +67,8 @@ Element.prototype.wrapNodes = function wrapNodes(nodes) {
};
exports.empty = elements([]);
+exports.ignore = {
+ wrap: function() {
+ return [];
+ }
+};
diff --git a/lib/style-reader.js b/lib/style-reader.js
index ab9a171..fe60930 100644
--- a/lib/style-reader.js
+++ b/lib/style-reader.js
@@ -177,16 +177,21 @@ function htmlPathRule() {
return htmlPaths.element(tagName, attributes, options);
});
- return lop.rules.then(
- lop.rules.zeroOrMoreWithSeparator(
- styleElementRule,
- lop.rules.sequence(
- whitespaceRule,
- lop.rules.tokenOfType("gt"),
- whitespaceRule
- )
- ),
- htmlPaths.elements
+ return lop.rules.firstOf("html path",
+ lop.rules.then(lop.rules.tokenOfType("bang"), function() {
+ return htmlPaths.ignore;
+ }),
+ lop.rules.then(
+ lop.rules.zeroOrMoreWithSeparator(
+ styleElementRule,
+ lop.rules.sequence(
+ whitespaceRule,
+ lop.rules.tokenOfType("gt"),
+ whitespaceRule
+ )
+ ),
+ htmlPaths.elements
+ )
);
}
@@ -234,7 +239,8 @@ function tokenise(string) {
{name: "close-square-bracket", regex: /\]/},
{name: "string", regex: /'([^']*)'/},
{name: "integer", regex: /([0-9]+)/},
- {name: "choice", regex: /\|/}
+ {name: "choice", regex: /\|/},
+ {name: "bang", regex: /(!)/}
]);
return tokeniser.tokenise(string);
}
diff --git a/test/mammoth.tests.js b/test/mammoth.tests.js
index 1a82014..12bee96 100644
--- a/test/mammoth.tests.js
+++ b/test/mammoth.tests.js
@@ -114,12 +114,12 @@ describe('mammoth', function() {
test('warning if style mapping is not understood', function() {
var docxPath = path.join(__dirname, "test-data/single-paragraph.docx");
var options = {
- styleMap: "!!!!\np => h1"
+ styleMap: "????\np => h1"
};
return mammoth.convertToHtml({path: docxPath}, options).then(function(result) {
assert.equal("<h1>Walking on imported air</h1>", result.value);
- var warning = "Did not understand this style mapping, so ignored it: !!!!\n" +
- 'Error was at character number 1: Expected element type but got unrecognisedCharacter "!"';
+ var warning = "Did not understand this style mapping, so ignored it: ????\n" +
+ 'Error was at character number 1: Expected element type but got unrecognisedCharacter "?"';
assert.deepEqual(result.messages, [results.warning(warning)]);
});
});
diff --git a/test/style-reader.tests.js b/test/style-reader.tests.js
index 7265e8f..46a9fa1 100644
--- a/test/style-reader.tests.js
+++ b/test/style-reader.tests.js
@@ -54,6 +54,10 @@ describe('styleReader.readHtmlPath', function() {
assertHtmlPath("p:fresh", expected);
});
+ test('reads ignore element', function() {
+ assertHtmlPath("!", htmlPaths.ignore);
+ });
+
function assertHtmlPath(input, expected) {
assert.deepEqual(readHtmlPath(input), results.success(expected));
}