@hyperlex/mammoth 1.4.9-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/.eslintrc.json +77 -0
  2. package/.github/ISSUE_TEMPLATE.md +12 -0
  3. package/.idea/mammoth.js.iml +12 -0
  4. package/.idea/modules.xml +8 -0
  5. package/.idea/vcs.xml +6 -0
  6. package/.travis.yml +10 -0
  7. package/LICENSE +22 -0
  8. package/NEWS +373 -0
  9. package/README.md +883 -0
  10. package/bin/mammoth +38 -0
  11. package/browser/docx/files.js +14 -0
  12. package/browser/unzip.js +12 -0
  13. package/lib/document-to-html.js +453 -0
  14. package/lib/documents.js +238 -0
  15. package/lib/docx/body-reader.js +636 -0
  16. package/lib/docx/comments-reader.js +31 -0
  17. package/lib/docx/content-types-reader.js +58 -0
  18. package/lib/docx/document-xml-reader.js +26 -0
  19. package/lib/docx/docx-reader.js +222 -0
  20. package/lib/docx/files.js +67 -0
  21. package/lib/docx/notes-reader.js +28 -0
  22. package/lib/docx/numbering-xml.js +69 -0
  23. package/lib/docx/office-xml-reader.js +58 -0
  24. package/lib/docx/relationships-reader.js +43 -0
  25. package/lib/docx/style-map.js +75 -0
  26. package/lib/docx/styles-reader.js +70 -0
  27. package/lib/docx/uris.js +21 -0
  28. package/lib/html/ast.js +50 -0
  29. package/lib/html/index.js +41 -0
  30. package/lib/html/simplify.js +88 -0
  31. package/lib/images.js +29 -0
  32. package/lib/index.js +115 -0
  33. package/lib/main.js +63 -0
  34. package/lib/options-reader.js +98 -0
  35. package/lib/promises.js +42 -0
  36. package/lib/results.js +72 -0
  37. package/lib/style-reader.js +321 -0
  38. package/lib/styles/document-matchers.js +74 -0
  39. package/lib/styles/html-paths.js +81 -0
  40. package/lib/styles/parser/tokeniser.js +30 -0
  41. package/lib/transforms.js +61 -0
  42. package/lib/underline.js +11 -0
  43. package/lib/unzip.js +22 -0
  44. package/lib/writers/html-writer.js +160 -0
  45. package/lib/writers/index.js +14 -0
  46. package/lib/writers/markdown-writer.js +163 -0
  47. package/lib/xml/index.js +7 -0
  48. package/lib/xml/nodes.js +69 -0
  49. package/lib/xml/reader.js +83 -0
  50. package/lib/xml/writer.js +61 -0
  51. package/lib/zipfile.js +77 -0
  52. package/mammoth.browser.js +32950 -0
  53. package/mammoth.browser.min.js +18 -0
  54. package/package.json +65 -0
  55. package/test/.eslintrc.json +7 -0
  56. package/test/document-to-html.tests.js +834 -0
  57. package/test/docx/body-reader.tests.js +1342 -0
  58. package/test/docx/comments-reader.tests.js +52 -0
  59. package/test/docx/content-types-reader.tests.js +45 -0
  60. package/test/docx/document-matchers.js +37 -0
  61. package/test/docx/docx-reader.tests.js +179 -0
  62. package/test/docx/files.tests.js +94 -0
  63. package/test/docx/notes-reader.tests.js +35 -0
  64. package/test/docx/numbering-xml.tests.js +65 -0
  65. package/test/docx/office-xml-reader.tests.js +24 -0
  66. package/test/docx/relationships-reader.tests.js +65 -0
  67. package/test/docx/style-map.tests.js +112 -0
  68. package/test/docx/styles-reader.tests.js +133 -0
  69. package/test/docx/uris.tests.js +22 -0
  70. package/test/html/simplify.tests.js +134 -0
  71. package/test/html/write.tests.js +42 -0
  72. package/test/images.tests.js +34 -0
  73. package/test/main.tests.js +89 -0
  74. package/test/mammoth.tests.js +429 -0
  75. package/test/mocha.opts +1 -0
  76. package/test/options-reader.tests.js +63 -0
  77. package/test/results.tests.js +15 -0
  78. package/test/style-reader.tests.js +256 -0
  79. package/test/styles/document-matchers.tests.js +71 -0
  80. package/test/styles/html-paths.tests.js +20 -0
  81. package/test/styles/parser/tokeniser.tests.js +104 -0
  82. package/test/test-data/comments.docx +0 -0
  83. package/test/test-data/embedded-style-map.docx +0 -0
  84. package/test/test-data/empty.docx +0 -0
  85. package/test/test-data/empty.zip +0 -0
  86. package/test/test-data/endnotes.docx +0 -0
  87. package/test/test-data/external-picture.docx +0 -0
  88. package/test/test-data/footnote-hyperlink.docx +0 -0
  89. package/test/test-data/footnotes.docx +0 -0
  90. package/test/test-data/hello.zip +0 -0
  91. package/test/test-data/hyperlinks/word/_rels/document.xml.rels +10 -0
  92. package/test/test-data/hyperlinks/word/document.xml +18 -0
  93. package/test/test-data/simple/word/document.xml +18 -0
  94. package/test/test-data/simple-list.docx +0 -0
  95. package/test/test-data/single-paragraph.docx +0 -0
  96. package/test/test-data/strikethrough.docx +0 -0
  97. package/test/test-data/tables.docx +0 -0
  98. package/test/test-data/text-box.docx +0 -0
  99. package/test/test-data/tiny-picture-target-base-relative.docx +0 -0
  100. package/test/test-data/tiny-picture.docx +0 -0
  101. package/test/test-data/tiny-picture.png +0 -0
  102. package/test/test-data/underline.docx +0 -0
  103. package/test/test-data/utf8-bom.docx +0 -0
  104. package/test/test.js +11 -0
  105. package/test/testing.js +55 -0
  106. package/test/transforms.tests.js +125 -0
  107. package/test/unzip.tests.js +38 -0
  108. package/test/writers/html-writer.tests.js +133 -0
  109. package/test/writers/markdown-writer.tests.js +304 -0
  110. package/test/xml/reader.tests.js +85 -0
  111. package/test/xml/writer.tests.js +81 -0
  112. package/test/zipfile.tests.js +59 -0
@@ -0,0 +1,81 @@
1
+ var assert = require("assert");
2
+
3
+ var xml = require("../../lib/xml");
4
+ var writer = require("../../lib/xml/writer");
5
+ var test = require("../test")(module);
6
+
7
+
8
+ test('writing empty root element writes out xml declaration and empty root element', function() {
9
+ assertXmlString(xml.element("root"), {}, '<root/>');
10
+ });
11
+
12
+ test('can write empty child elements', function() {
13
+ assertXmlString(xml.element("root", {}, [xml.element("album"), xml.element("single")]), {},
14
+ '<root><album/><single/></root>');
15
+ });
16
+
17
+ test('can write empty descendant elements', function() {
18
+ var element = xml.element("root", {}, [
19
+ xml.element("album", {}, [
20
+ xml.element("year"),
21
+ xml.element("song")
22
+ ])
23
+ ]);
24
+ assertXmlString(element, {},
25
+ '<root><album><year/><song/></album></root>');
26
+ });
27
+
28
+ test('can write element attributes', function() {
29
+ var element = xml.element("root", {}, [
30
+ xml.element("album", {"title": "Everything in Transit"})
31
+ ]);
32
+ assertXmlString(element, {},
33
+ '<root><album title="Everything in Transit"/></root>');
34
+ });
35
+
36
+ test('can write text nodes', function() {
37
+ var element = xml.element("root", {}, [
38
+ xml.element("album", {}, [
39
+ xml.text("Everything in Transit")
40
+ ])
41
+ ]);
42
+ assertXmlString(element, {},
43
+ '<root><album>Everything in Transit</album></root>');
44
+ });
45
+
46
+ test('can write root element with long-form prefix when URI is namespace', function() {
47
+ var element = xml.element("{music}root");
48
+ assertXmlString(element, {"m": "music"},
49
+ '<m:root xmlns:m="music"/>');
50
+ });
51
+
52
+ test('can write child elements with long-form prefix when URI is namespace', function() {
53
+ var element = xml.element("root", {}, [
54
+ xml.element("{music}album")
55
+ ]);
56
+ assertXmlString(element, {"m": "music"},
57
+ '<root xmlns:m="music"><m:album/></root>');
58
+ });
59
+
60
+ test('can write child elements with short-form prefix when URI is namespace', function() {
61
+ var element = xml.element("root", {}, [
62
+ xml.element("m:album")
63
+ ]);
64
+ assertXmlString(element, {"m": "music"},
65
+ '<root xmlns:m="music"><m:album/></root>');
66
+ });
67
+
68
+ test('default namespace has key of empty string', function() {
69
+ var element = xml.element("root", {}, [
70
+ xml.element("{music}album")
71
+ ]);
72
+ assertXmlString(element, {"": "music"},
73
+ '<root xmlns="music"><album/></root>');
74
+ });
75
+
76
+
77
+ function assertXmlString(element, namespaces, expectedString) {
78
+ assert.equal(writer.writeString(element, namespaces),
79
+ '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' +
80
+ expectedString);
81
+ }
@@ -0,0 +1,59 @@
1
+ var assert = require("assert");
2
+
3
+ var JSZip = require("jszip");
4
+
5
+ var zipfile = require("../lib/zipfile");
6
+ var test = require("./test")(module);
7
+
8
+ test('file in zip can be read after being written', function() {
9
+ var zip = emptyZipFile();
10
+ assert(!zip.exists("song/title"));
11
+
12
+ zip.write("song/title", "Dark Blue");
13
+
14
+ assert(zip.exists("song/title"));
15
+ return zip.read("song/title", "utf8").then(function(contents) {
16
+ assert.equal(contents, "Dark Blue");
17
+ });
18
+ });
19
+
20
+ function emptyZipFile() {
21
+ var zip = new JSZip();
22
+ var buffer = zip.generate({type: "arraybuffer"});
23
+ return zipfile.openArrayBuffer(buffer);
24
+ }
25
+
26
+
27
+ test("splitPath splits zip paths on last forward slash", function() {
28
+ assert.deepEqual(zipfile.splitPath("a/b"), {dirname: "a", basename: "b"});
29
+ assert.deepEqual(zipfile.splitPath("a/b/c"), {dirname: "a/b", basename: "c"});
30
+ assert.deepEqual(zipfile.splitPath("/a/b/c"), {dirname: "/a/b", basename: "c"});
31
+ });
32
+
33
+
34
+ test("when path has no forward slashes then splitPath returns empty dirname", function() {
35
+ assert.deepEqual(zipfile.splitPath("name"), {dirname: "", basename: "name"});
36
+ });
37
+
38
+
39
+ test("joinPath joins arguments with forward slashes", function() {
40
+ assert.equal(zipfile.joinPath("a", "b"), "a/b");
41
+ assert.equal(zipfile.joinPath("a/b", "c"), "a/b/c");
42
+ assert.equal(zipfile.joinPath("a", "b/c"), "a/b/c");
43
+ assert.equal(zipfile.joinPath("/a/b", "c"), "/a/b/c");
44
+ });
45
+
46
+
47
+ test("empty parts are ignored when joining paths", function() {
48
+ assert.equal(zipfile.joinPath("a", ""), "a");
49
+ assert.equal(zipfile.joinPath("", "b"), "b");
50
+ assert.equal(zipfile.joinPath("a", "", "b"), "a/b");
51
+ });
52
+
53
+
54
+ test("when joining paths then absolute paths ignore earlier paths", function() {
55
+ assert.equal(zipfile.joinPath("a", "/b"), "/b");
56
+ assert.equal(zipfile.joinPath("a", "/b", "c"), "/b/c");
57
+ assert.equal(zipfile.joinPath("/a", "/b"), "/b");
58
+ assert.equal(zipfile.joinPath("/a"), "/a");
59
+ });