react-mammoth
Version:
mammoth for React
2 lines • 693 kB
JavaScript
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.mammoth=f()}})(function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r}()({1:[function(require,module,exports){var promises=require("../../lib/promises");exports.Files=Files;function Files(){function read(uri){return promises.reject(new Error("could not open external image: '"+uri+"'\ncannot open linked files from a web browser"))}return{read:read}}},{"../../lib/promises":23}],2:[function(require,module,exports){var promises=require("../lib/promises");var zipfile=require("../lib/zipfile");exports.openZip=openZip;function openZip(options){if(options.arrayBuffer){return promises.resolve(zipfile.openArrayBuffer(options.arrayBuffer))}else{return promises.reject(new Error("Could not find file in options"))}}},{"../lib/promises":23,"../lib/zipfile":39}],3:[function(require,module,exports){var _=require("underscore");var promises=require("./promises");var documents=require("./documents");var htmlPaths=require("./styles/html-paths");var results=require("./results");var images=require("./images");var Html=require("./html");var writers=require("./writers");exports.DocumentConverter=DocumentConverter;function DocumentConverter(options){return{convertToHtml:function(element){var comments=_.indexBy(element.type===documents.types.document?element.comments:[],"commentId");var conversion=new DocumentConversion(options,comments);return conversion.convertToHtml(element)}}}function DocumentConversion(options,comments){var noteNumber=1;var noteReferences=[];var referencedComments=[];options=_.extend({ignoreEmptyParagraphs:true},options);var idPrefix=options.idPrefix===undefined?"":options.idPrefix;var ignoreEmptyParagraphs=options.ignoreEmptyParagraphs;var styleMap=options.styleMap||[];function converStyleForaAtributes(element,options){var styleMap=[];if(!options){options={}}if(element.alignment&&element.alignment!=="both"){styleMap.push({key:"text-align",value:element.alignment})}if(element.color){styleMap.push({key:"color",value:element.color})}if(element.bgColor){styleMap.push({key:"background-color",value:element.bgColor})}if(element.fontSize){styleMap.push({key:"font-size",value:element.fontSize+"px"})}if(element.isUnderline){styleMap.push({key:"text-decoration",value:"underline"})}var styleStr=styleMap.map(function(item){return item.key+":"+item.value}).join(";");if(styleStr){options.style=styleStr+";"+(options.style||"")}return options}function convertToHtml(document){var messages=[];var html=elementToHtml(document,messages,{});var deferredNodes=[];walkHtml(html,function(node){if(node.type==="deferred"){deferredNodes.push(node)}});var deferredValues={};return promises.mapSeries(deferredNodes,function(deferred){return deferred.value().then(function(value){deferredValues[deferred.id]=value})}).then(function(){function replaceDeferred(nodes){return flatMap(nodes,function(node){if(node.type==="deferred"){return deferredValues[node.id]}else if(node.children){return[_.extend({},node,{children:replaceDeferred(node.children)})]}else{return[node]}})}var writer=writers.writer({prettyPrint:options.prettyPrint,outputFormat:options.outputFormat});Html.write(writer,Html.simplify(replaceDeferred(html)));return new results.Result(writer.asString(),messages)})}function convertElements(elements,messages,options){return flatMap(elements,function(element){return elementToHtml(element,messages,options)})}function elementToHtml(element,messages,options){if(!options){throw new Error("options not set")}var handler=elementConverters[element.type];if(handler){return handler(element,messages,options)}else{return[]}}function convertParagraph(element,messages,options){return htmlPathForParagraph(element,messages).wrap(function(){var content=convertElements(element.children,messages,options);if(ignoreEmptyParagraphs){return content}else{return[Html.forceWrite].concat(content)}})}function htmlPathForParagraph(element,messages){var style=findStyle(element);if(style){return style.to}else{if(element.styleId){messages.push(unrecognisedStyleWarning("paragraph",element))}return htmlPaths.topLevelElement("p",converStyleForaAtributes(element))}}function convertRun(run,messages,options){var nodes=function(){return convertElements(run.children,messages,options)};var paths=[];var tagNumber=0;var attributes=converStyleForaAtributes(run);if(run.isSmallCaps){paths.push(findHtmlPathForRunProperty("smallCaps"))}if(run.isAllCaps){paths.push(findHtmlPathForRunProperty("allCaps"))}if(run.isStrikethrough){paths.push(findHtmlPathForRunProperty("strikethrough","s",attributes));tagNumber++}if(run.verticalAlignment===documents.verticalAlignment.subscript){paths.push(htmlPaths.element("sub",attributes,{fresh:false}));tagNumber++}if(run.verticalAlignment===documents.verticalAlignment.superscript){paths.push(htmlPaths.element("sup",attributes,{fresh:false}));tagNumber++}if(run.isItalic){paths.push(findHtmlPathForRunProperty("italic","em",attributes));tagNumber++}if(run.isBold){paths.push(findHtmlPathForRunProperty("bold","strong",attributes));tagNumber++}var stylePath=htmlPaths.empty;var style=findStyle(run);if(style){stylePath=style.to}else if(run.styleId){messages.push(unrecognisedStyleWarning("run",run))}if(attributes&&attributes.style&&tagNumber==0){paths.push(htmlPaths.element("span",attributes,{fresh:false}))}paths.push(stylePath);paths.forEach(function(path){nodes=path.wrap.bind(path,nodes)});return nodes()}function findHtmlPathForRunProperty(elementType,defaultTagName,attributes){var path=findHtmlPath({type:elementType});if(path){return path}else if(defaultTagName){return htmlPaths.element(defaultTagName,attributes||{},{fresh:false})}else{return htmlPaths.empty}}function findHtmlPath(element,defaultPath){var style=findStyle(element);return style?style.to:defaultPath}function findStyle(element){for(var i=0;i<styleMap.length;i++){if(styleMap[i].from.matches(element)){return styleMap[i]}}}function recoveringConvertImage(convertImage){return function(image,messages){return promises.attempt(function(){return convertImage(image,messages)}).caught(function(error){messages.push(results.error(error));return[]})}}function noteHtmlId(note){return referentHtmlId(note.noteType,note.noteId)}function noteRefHtmlId(note){return referenceHtmlId(note.noteType,note.noteId)}function referentHtmlId(referenceType,referenceId){return htmlId(referenceType+"-"+referenceId)}function referenceHtmlId(referenceType,referenceId){return htmlId(referenceType+"-ref-"+referenceId)}function htmlId(suffix){return idPrefix+suffix}var defaultTablePath=htmlPaths.elements([htmlPaths.element("table",{},{fresh:true})]);function convertTable(element,messages,options){return findHtmlPath(element,defaultTablePath).wrap(function(){return convertTableChildren(element,messages,options)})}function convertTableChildren(element,messages,options){var bodyIndex=_.findIndex(element.children,function(child){return!child.type===documents.types.tableRow||!child.isHeader});if(bodyIndex===-1){bodyIndex=element.children.length}var children;if(bodyIndex===0){children=convertElements(element.children,messages,_.extend({},options,{isTableHeader:false}))}else{var headRows=convertElements(element.children.slice(0,bodyIndex),messages,_.extend({},options,{isTableHeader:true}));var bodyRows=convertElements(element.children.slice(bodyIndex),messages,_.extend({},options,{isTableHeader:false}));children=[Html.freshElement("thead",{},headRows),Html.freshElement("tbody",{},bodyRows)]}return[Html.forceWrite].concat(children)}function convertTableRow(element,messages,options){var children=convertElements(element.children,messages,options);return[Html.freshElement("tr",{},[Html.forceWrite].concat(children))]}function convertTableCell(element,messages,options){var tagName=options.isTableHeader?"th":"td";var children=convertElements(element.children,messages,options);var attributes={};if(element.colSpan!==1){attributes.colspan=element.colSpan.toString()}if(element.rowSpan!==1){attributes.rowspan=element.rowSpan.toString()}return[Html.freshElement(tagName,attributes,[Html.forceWrite].concat(children))]}function convertCommentReference(reference,messages,options){return findHtmlPath(reference,htmlPaths.ignore).wrap(function(){var comment=comments[reference.commentId];var count=referencedComments.length+1;var label="["+commentAuthorLabel(comment)+count+"]";referencedComments.push({label:label,comment:comment});return[Html.freshElement("a",{href:"#"+referentHtmlId("comment",reference.commentId),id:referenceHtmlId("comment",reference.commentId)},[Html.text(label)])]})}function convertComment(referencedComment,messages,options){var label=referencedComment.label;var comment=referencedComment.comment;var body=convertElements(comment.body,messages,options).concat([Html.nonFreshElement("p",{},[Html.text(" "),Html.freshElement("a",{href:"#"+referenceHtmlId("comment",comment.commentId)},[Html.text("↑")])])]);return[Html.freshElement("dt",{id:referentHtmlId("comment",comment.commentId)},[Html.text("Comment "+label)]),Html.freshElement("dd",{},body)]}function convertBreak(element,messages,options){return htmlPathForBreak(element).wrap(function(){return[]})}function htmlPathForBreak(element){var style=findStyle(element);if(style){return style.to}else if(element.breakType==="line"){return htmlPaths.topLevelElement("br")}else{return htmlPaths.empty}}var elementConverters={document:function(document,messages,options){var children=convertElements(document.children,messages,options);var notes=noteReferences.map(function(noteReference){return document.notes.resolve(noteReference)});var notesNodes=convertElements(notes,messages,options);return children.concat([Html.freshElement("ol",{},notesNodes),Html.freshElement("dl",{},flatMap(referencedComments,function(referencedComment){return convertComment(referencedComment,messages,options)}))])},paragraph:convertParagraph,run:convertRun,text:function(element,messages,options){return[Html.text(element.value)]},tab:function(element,messages,options){return[Html.text(" ")]},hyperlink:function(element,messages,options){var href=element.anchor?"#"+htmlId(element.anchor):element.href;var attributes={href:href};if(element.targetFrame!=null){attributes.target=element.targetFrame}var children=convertElements(element.children,messages,options);return[Html.nonFreshElement("a",attributes,children)]},bookmarkStart:function(element,messages,options){var anchor=Html.freshElement("a",{id:htmlId(element.name)},[Html.forceWrite]);return[anchor]},noteReference:function(element,messages,options){noteReferences.push(element);var anchor=Html.freshElement("a",{href:"#"+noteHtmlId(element),id:noteRefHtmlId(element)},[Html.text("["+noteNumber++ +"]")]);return[Html.freshElement("sup",{},[anchor])]},note:function(element,messages,options){var children=convertElements(element.body,messages,options);var backLink=Html.elementWithTag(htmlPaths.element("p",{},{fresh:false}),[Html.text(" "),Html.freshElement("a",{href:"#"+noteRefHtmlId(element)},[Html.text("↑")])]);var body=children.concat([backLink]);return Html.freshElement("li",{id:noteHtmlId(element)},body)},commentReference:convertCommentReference,comment:convertComment,image:deferredConversion(recoveringConvertImage(options.convertImage||images.dataUri)),table:convertTable,tableRow:convertTableRow,tableCell:convertTableCell,"break":convertBreak};return{convertToHtml:convertToHtml}}var deferredId=1;function deferredConversion(func){return function(element,messages,options){return[{type:"deferred",id:deferredId++,value:function(){return func(element,messages,options)}}]}}function unrecognisedStyleWarning(type,element){return results.warning("Unrecognised "+type+" style: '"+element.styleName+"'"+" (Style ID: "+element.styleId+")")}function flatMap(values,func){return _.flatten(values.map(func),true)}function walkHtml(nodes,callback){nodes.forEach(function(node){callback(node);if(node.children){walkHtml(node.children,callback)}})}var commentAuthorLabel=exports.commentAuthorLabel=function commentAuthorLabel(comment){return comment.authorInitials||""}},{"./documents":4,"./html":18,"./images":20,"./promises":23,"./results":25,"./styles/html-paths":28,"./writers":33,underscore:120}],4:[function(require,module,exports){var _=require("underscore");var types=exports.types={document:"document",paragraph:"paragraph",run:"run",text:"text",tab:"tab",hyperlink:"hyperlink",noteReference:"noteReference",image:"image",note:"note",commentReference:"commentReference",comment:"comment",table:"table",tableRow:"tableRow",tableCell:"tableCell","break":"break",bookmarkStart:"bookmarkStart"};function Document(children,options){options=options||{};return{type:types.document,children:children,notes:options.notes||new Notes({}),comments:options.comments||[]}}function Paragraph(children,properties){properties=properties||{};var indent=properties.indent||{};return{type:types.paragraph,children:children,styleId:properties.styleId||null,styleName:properties.styleName||null,numbering:properties.numbering||null,alignment:properties.alignment||null,indent:{start:indent.start||null,end:indent.end||null,firstLine:indent.firstLine||null,hanging:indent.hanging||null},bgColor:properties.bgColor||null}}function Run(children,properties){properties=properties||{};return{type:types.run,children:children,styleId:properties.styleId||null,styleName:properties.styleName||null,isBold:properties.isBold,isUnderline:properties.isUnderline,isItalic:properties.isItalic,isStrikethrough:properties.isStrikethrough,isAllCaps:properties.isAllCaps,isSmallCaps:properties.isSmallCaps,verticalAlignment:properties.verticalAlignment||verticalAlignment.baseline,font:properties.font||null,fontSize:properties.fontSize||null,bgColor:properties.bgColor||null,color:properties.color}}var verticalAlignment={baseline:"baseline",superscript:"superscript",subscript:"subscript"};function Text(value){return{type:types.text,value:value}}function Tab(){return{type:types.tab}}function Hyperlink(children,options){return{type:types.hyperlink,children:children,href:options.href,anchor:options.anchor,targetFrame:options.targetFrame}}function NoteReference(options){return{type:types.noteReference,noteType:options.noteType,noteId:options.noteId}}function Notes(notes){this._notes=_.indexBy(notes,function(note){return noteKey(note.noteType,note.noteId)})}Notes.prototype.resolve=function(reference){return this.findNoteByKey(noteKey(reference.noteType,reference.noteId))};Notes.prototype.findNoteByKey=function(key){return this._notes[key]||null};function Note(options){return{type:types.note,noteType:options.noteType,noteId:options.noteId,body:options.body}}function commentReference(options){return{type:types.commentReference,commentId:options.commentId}}function comment(options){return{type:types.comment,commentId:options.commentId,body:options.body,authorName:options.authorName,authorInitials:options.authorInitials}}function noteKey(noteType,id){return noteType+"-"+id}function Image(options){return{type:types.image,read:options.readImage,altText:options.altText,contentType:options.contentType}}function Table(children,properties){properties=properties||{};return{type:types.table,children:children,styleId:properties.styleId||null,styleName:properties.styleName||null}}function TableRow(children,options){options=options||{};return{type:types.tableRow,children:children,isHeader:options.isHeader||false}}function TableCell(children,options){options=options||{};return{type:types.tableCell,children:children,colSpan:options.colSpan==null?1:options.colSpan,rowSpan:options.rowSpan==null?1:options.rowSpan}}function Break(breakType){return{type:types["break"],breakType:breakType}}function BookmarkStart(options){return{type:types.bookmarkStart,name:options.name}}exports.document=exports.Document=Document;exports.paragraph=exports.Paragraph=Paragraph;exports.run=exports.Run=Run;exports.Text=Text;exports.tab=exports.Tab=Tab;exports.Hyperlink=Hyperlink;exports.noteReference=exports.NoteReference=NoteReference;exports.Notes=Notes;exports.Note=Note;exports.commentReference=commentReference;exports.comment=comment;exports.Image=Image;exports.Table=Table;exports.TableRow=TableRow;exports.TableCell=TableCell;exports.lineBreak=Break("line");exports.pageBreak=Break("page");exports.columnBreak=Break("column");exports.BookmarkStart=BookmarkStart;exports.verticalAlignment=verticalAlignment},{underscore:120}],5:[function(require,module,exports){exports.createBodyReader=createBodyReader;exports._readNumberingProperties=readNumberingProperties;var dingbatToUnicode=require("dingbat-to-unicode");var _=require("underscore");var documents=require("../documents");var Result=require("../results").Result;var warning=require("../results").warning;var uris=require("./uris");function createBodyReader(options){return{readXmlElement:function(element){return new BodyReader(options).readXmlElement(element)},readXmlElements:function(elements){return new BodyReader(options).readXmlElements(elements)}}}function BodyReader(options){var complexFieldStack=[];var currentInstrText=[];var relationships=options.relationships;var contentTypes=options.contentTypes;var docxFile=options.docxFile;var files=options.files;var numbering=options.numbering;var styles=options.styles;function readXmlElements(elements){var results=elements.map(readXmlElement);return combineResults(results)}function readXmlElement(element){if(element.type==="element"){var handler=xmlElementReaders[element.name];if(handler){return handler(element)}else if(!Object.prototype.hasOwnProperty.call(ignoreElements,element.name)){var message=warning("An unrecognised element was ignored: "+element.name);return emptyResultWithMessages([message])}}return emptyResult()}function readParagraphIndent(element){return{start:element.attributes["w:start"]||element.attributes["w:left"],end:element.attributes["w:end"]||element.attributes["w:right"],firstLine:element.attributes["w:firstLine"],hanging:element.attributes["w:hanging"]}}function readRunProperties(element){return readRunStyle(element).map(function(style){var fontSizeString=element.firstOrEmpty("w:sz").attributes["w:val"];var fontSize=/^[0-9]+$/.test(fontSizeString)?parseInt(fontSizeString,10)/2:null;return{type:"runProperties",styleId:style.styleId,styleName:style.name,verticalAlignment:element.firstOrEmpty("w:vertAlign").attributes["w:val"],font:element.firstOrEmpty("w:rFonts").attributes["w:ascii"],fontSize:fontSize,isBold:readBooleanElement(element.first("w:b")),isUnderline:readUnderline(element.first("w:u")),isItalic:readBooleanElement(element.first("w:i")),isStrikethrough:readBooleanElement(element.first("w:strike")),isAllCaps:readBooleanElement(element.first("w:caps")),isSmallCaps:readBooleanElement(element.first("w:smallCaps")),color:readColor(element.firstOrEmpty("w:color")),bgColor:readColor(element.firstOrEmpty("w:highlight"))}})}function readUnderline(element){if(element){var value=element.attributes["w:val"];return value!==undefined&&value!=="false"&&value!=="0"&&value!=="none"}else{return false}}function readBooleanElement(element){if(element){var value=element.attributes["w:val"];return value!=="false"&&value!=="0"}else{return false}}function readParagraphStyle(element){return readStyle(element,"w:pStyle","Paragraph",styles.findParagraphStyleById)}function readRunStyle(element){return readStyle(element,"w:rStyle","Run",styles.findCharacterStyleById)}function readTableStyle(element){return readStyle(element,"w:tblStyle","Table",styles.findTableStyleById)}function readStyle(element,styleTagName,styleType,findStyleById){var messages=[];var styleElement=element.first(styleTagName);var styleId=null;var name=null;if(styleElement){styleId=styleElement.attributes["w:val"];if(styleId){var style=findStyleById(styleId);if(style){name=style.name}else{messages.push(undefinedStyleWarning(styleType,styleId))}}}return elementResultWithMessages({styleId:styleId,name:name},messages)}var unknownComplexField={type:"unknown"};function readFldChar(element){var type=element.attributes["w:fldCharType"];if(type==="begin"){complexFieldStack.push(unknownComplexField);currentInstrText=[]}else if(type==="end"){complexFieldStack.pop()}else if(type==="separate"){var hyperlinkOptions=parseHyperlinkFieldCode(currentInstrText.join(""));var complexField=hyperlinkOptions===null?unknownComplexField:{type:"hyperlink",options:hyperlinkOptions};complexFieldStack.pop();complexFieldStack.push(complexField)}return emptyResult()}function currentHyperlinkOptions(){var topHyperlink=_.last(complexFieldStack.filter(function(complexField){return complexField.type==="hyperlink"}));return topHyperlink?topHyperlink.options:null}function parseHyperlinkFieldCode(code){var externalLinkResult=/\s*HYPERLINK "(.*)"/.exec(code);if(externalLinkResult){return{href:externalLinkResult[1]}}var internalLinkResult=/\s*HYPERLINK\s+\\l\s+"(.*)"/.exec(code);if(internalLinkResult){return{anchor:internalLinkResult[1]}}return null}function readInstrText(element){currentInstrText.push(element.text());return emptyResult()}function readSymbol(element){var font=element.attributes["w:font"];var char=element.attributes["w:char"];var unicodeCharacter=dingbatToUnicode.hex(font,char);if(unicodeCharacter==null&&/^F0..$/.test(char)){unicodeCharacter=dingbatToUnicode.hex(font,char.substring(2))}if(unicodeCharacter==null){return emptyResultWithMessages([warning("A w:sym element with an unsupported character was ignored: char "+char+" in font "+font)])}else{return elementResult(new documents.Text(unicodeCharacter.string))}}function noteReferenceReader(noteType){return function(element){var noteId=element.attributes["w:id"];return elementResult(new documents.NoteReference({noteType:noteType,noteId:noteId}))}}function readCommentReference(element){return elementResult(documents.commentReference({commentId:element.attributes["w:id"]}))}function readChildElements(element){return readXmlElements(element.children)}var xmlElementReaders={"w:p":function(element){return readXmlElements(element.children).map(function(children){var properties=_.find(children,isParagraphProperties);return new documents.Paragraph(children.filter(negate(isParagraphProperties)),properties)}).insertExtra()},"w:pPr":function(element){return readParagraphStyle(element).map(function(style){return{type:"paragraphProperties",styleId:style.styleId,styleName:style.name,alignment:element.firstOrEmpty("w:jc").attributes["w:val"],numbering:readNumberingProperties(style.styleId,element.firstOrEmpty("w:numPr"),numbering),indent:readParagraphIndent(element.firstOrEmpty("w:ind")),bgColor:readColor(element.firstOrEmpty("w:shd"))}})},"w:r":function(element){return readXmlElements(element.children).map(function(children){var properties=_.find(children,isRunProperties);children=children.filter(negate(isRunProperties));var hyperlinkOptions=currentHyperlinkOptions();if(hyperlinkOptions!==null){children=[new documents.Hyperlink(children,hyperlinkOptions)]}return new documents.Run(children,properties)})},"w:rPr":readRunProperties,"w:fldChar":readFldChar,"w:instrText":readInstrText,"w:t":function(element){return elementResult(new documents.Text(element.text()))},"w:tab":function(element){return elementResult(new documents.Tab)},"w:noBreakHyphen":function(){return elementResult(new documents.Text("‑"))},"w:softHyphen":function(element){return elementResult(new documents.Text(""))},"w:sym":readSymbol,"w:hyperlink":function(element){var relationshipId=element.attributes["r:id"];var anchor=element.attributes["w:anchor"];return readXmlElements(element.children).map(function(children){function create(options){var targetFrame=element.attributes["w:tgtFrame"]||null;return new documents.Hyperlink(children,_.extend({targetFrame:targetFrame},options))}if(relationshipId){var href=relationships.findTargetByRelationshipId(relationshipId);if(anchor){href=uris.replaceFragment(href,anchor)}return create({href:href})}else if(anchor){return create({anchor:anchor})}else{return children}})},"w:tbl":readTable,"w:tr":readTableRow,"w:tc":readTableCell,"w:footnoteReference":noteReferenceReader("footnote"),"w:endnoteReference":noteReferenceReader("endnote"),"w:commentReference":readCommentReference,"w:br":function(element){var breakType=element.attributes["w:type"];if(breakType==null||breakType==="textWrapping"){return elementResult(documents.lineBreak)}else if(breakType==="page"){return elementResult(documents.pageBreak)}else if(breakType==="column"){return elementResult(documents.columnBreak)}else{return emptyResultWithMessages([warning("Unsupported break type: "+breakType)])}},"w:bookmarkStart":function(element){var name=element.attributes["w:name"];if(name==="_GoBack"){return emptyResult()}else{return elementResult(new documents.BookmarkStart({name:name}))}},"mc:AlternateContent":function(element){return readChildElements(element.first("mc:Fallback"))},"w:sdt":function(element){return readXmlElements(element.firstOrEmpty("w:sdtContent").children)},"w:ins":readChildElements,"w:object":readChildElements,"w:smartTag":readChildElements,"w:drawing":readChildElements,"w:pict":function(element){return readChildElements(element).toExtra()},"v:roundrect":readChildElements,"v:shape":readChildElements,"v:textbox":readChildElements,"w:txbxContent":readChildElements,"wp:inline":readDrawingElement,"wp:anchor":readDrawingElement,"v:imagedata":readImageData,"v:group":readChildElements,"v:rect":readChildElements};return{readXmlElement:readXmlElement,readXmlElements:readXmlElements};function readColor(element){var value=element.attributes["w:fill"]||element.attributes["w:val"];if(!value||value==="none"){return null}return/^([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/.test(value)?"#"+value:value}function readTable(element){var propertiesResult=readTableProperties(element.firstOrEmpty("w:tblPr"));return readXmlElements(element.children).flatMap(calculateRowSpans).flatMap(function(children){return propertiesResult.map(function(properties){return documents.Table(children,properties)})})}function readTableProperties(element){return readTableStyle(element).map(function(style){return{styleId:style.styleId,styleName:style.name}})}function readTableRow(element){var properties=element.firstOrEmpty("w:trPr");var isHeader=!!properties.first("w:tblHeader");return readXmlElements(element.children).map(function(children){return documents.TableRow(children,{isHeader:isHeader})})}function readTableCell(element){return readXmlElements(element.children).map(function(children){var properties=element.firstOrEmpty("w:tcPr");var gridSpan=properties.firstOrEmpty("w:gridSpan").attributes["w:val"];var colSpan=gridSpan?parseInt(gridSpan,10):1;var cell=documents.TableCell(children,{colSpan:colSpan});cell._vMerge=readVMerge(properties);return cell})}function readVMerge(properties){var element=properties.first("w:vMerge");if(element){var val=element.attributes["w:val"];return val==="continue"||!val}else{return null}}function calculateRowSpans(rows){var unexpectedNonRows=_.any(rows,function(row){return row.type!==documents.types.tableRow});if(unexpectedNonRows){return elementResultWithMessages(rows,[warning("unexpected non-row element in table, cell merging may be incorrect")])}var unexpectedNonCells=_.any(rows,function(row){return _.any(row.children,function(cell){return cell.type!==documents.types.tableCell})});if(unexpectedNonCells){return elementResultWithMessages(rows,[warning("unexpected non-cell element in table row, cell merging may be incorrect")])}var columns={};rows.forEach(function(row){var cellIndex=0;row.children.forEach(function(cell){if(cell._vMerge&&columns[cellIndex]){columns[cellIndex].rowSpan++}else{columns[cellIndex]=cell;cell._vMerge=false}cellIndex+=cell.colSpan})});rows.forEach(function(row){row.children=row.children.filter(function(cell){return!cell._vMerge});row.children.forEach(function(cell){delete cell._vMerge})});return elementResult(rows)}function readDrawingElement(element){var blips=element.getElementsByTagName("a:graphic").getElementsByTagName("a:graphicData").getElementsByTagName("pic:pic").getElementsByTagName("pic:blipFill").getElementsByTagName("a:blip");return combineResults(blips.map(readBlip.bind(null,element)))}function readBlip(element,blip){var properties=element.first("wp:docPr").attributes;var altText=isBlank(properties.descr)?properties.title:properties.descr;var blipImageFile=findBlipImageFile(blip);if(blipImageFile===null){return emptyResultWithMessages([warning("Could not find image file for a:blip element")])}else{return readImage(blipImageFile,altText)}}function isBlank(value){return value==null||/^\s*$/.test(value)}function findBlipImageFile(blip){var embedRelationshipId=blip.attributes["r:embed"];var linkRelationshipId=blip.attributes["r:link"];if(embedRelationshipId){return findEmbeddedImageFile(embedRelationshipId)}else if(linkRelationshipId){var imagePath=relationships.findTargetByRelationshipId(linkRelationshipId);return{path:imagePath,read:files.read.bind(files,imagePath)}}else{return null}}function readImageData(element){var relationshipId=element.attributes["r:id"];if(relationshipId){return readImage(findEmbeddedImageFile(relationshipId),element.attributes["o:title"])}else{return emptyResultWithMessages([warning("A v:imagedata element without a relationship ID was ignored")])}}function findEmbeddedImageFile(relationshipId){var path=uris.uriToZipEntryName("word",relationships.findTargetByRelationshipId(relationshipId));return{path:path,read:docxFile.read.bind(docxFile,path)}}function readImage(imageFile,altText){var contentType=contentTypes.findContentType(imageFile.path);var image=documents.Image({readImage:imageFile.read,altText:altText,contentType:contentType});var warnings=supportedImageTypes[contentType]?[]:warning("Image of type "+contentType+" is unlikely to display in web browsers");return elementResultWithMessages(image,warnings)}function undefinedStyleWarning(type,styleId){return warning(type+" style with ID "+styleId+" was referenced but not defined in the document")}}function readNumberingProperties(styleId,element,numbering){if(styleId!=null){var levelByStyleId=numbering.findLevelByParagraphStyleId(styleId);if(levelByStyleId!=null){return levelByStyleId}}var level=element.firstOrEmpty("w:ilvl").attributes["w:val"];var numId=element.firstOrEmpty("w:numId").attributes["w:val"];if(level===undefined||numId===undefined){return null}else{return numbering.findLevel(numId,level)}}var supportedImageTypes={"image/png":true,"image/gif":true,"image/jpeg":true,"image/svg+xml":true,"image/tiff":true};var ignoreElements={"office-word:wrap":true,"v:shadow":true,"v:shapetype":true,"w:annotationRef":true,"w:bookmarkEnd":true,"w:sectPr":true,"w:proofErr":true,"w:lastRenderedPageBreak":true,"w:commentRangeStart":true,"w:commentRangeEnd":true,"w:del":true,"w:footnoteRef":true,"w:endnoteRef":true,"w:tblPr":true,"w:tblGrid":true,"w:trPr":true,"w:tcPr":true};function isParagraphProperties(element){return element.type==="paragraphProperties"}function isRunProperties(element){return element.type==="runProperties"}function negate(predicate){return function(value){return!predicate(value)}}function emptyResultWithMessages(messages){return new ReadResult(null,null,messages)}function emptyResult(){return new ReadResult(null)}function elementResult(element){return new ReadResult(element)}function elementResultWithMessages(element,messages){
return new ReadResult(element,null,messages)}function ReadResult(element,extra,messages){this.value=element||[];this.extra=extra;this._result=new Result({element:this.value,extra:extra},messages);this.messages=this._result.messages}ReadResult.prototype.toExtra=function(){return new ReadResult(null,joinElements(this.extra,this.value),this.messages)};ReadResult.prototype.insertExtra=function(){var extra=this.extra;if(extra&&extra.length){return new ReadResult(joinElements(this.value,extra),null,this.messages)}else{return this}};ReadResult.prototype.map=function(func){var result=this._result.map(function(value){return func(value.element)});return new ReadResult(result.value,this.extra,result.messages)};ReadResult.prototype.flatMap=function(func){var result=this._result.flatMap(function(value){return func(value.element)._result});return new ReadResult(result.value.element,joinElements(this.extra,result.value.extra),result.messages)};function combineResults(results){var result=Result.combine(_.pluck(results,"_result"));return new ReadResult(_.flatten(_.pluck(result.value,"element")),_.filter(_.flatten(_.pluck(result.value,"extra")),identity),result.messages)}function joinElements(first,second){return _.flatten([first,second])}function identity(value){return value}},{"../documents":4,"../results":25,"./uris":16,"dingbat-to-unicode":80,underscore:120}],6:[function(require,module,exports){var documents=require("../documents");var Result=require("../results").Result;function createCommentsReader(bodyReader){function readCommentsXml(element){return Result.combine(element.getElementsByTagName("w:comment").map(readCommentElement))}function readCommentElement(element){var id=element.attributes["w:id"];function readOptionalAttribute(name){return(element.attributes[name]||"").trim()||null}return bodyReader.readXmlElements(element.children).map(function(body){return documents.comment({commentId:id,body:body,authorName:readOptionalAttribute("w:author"),authorInitials:readOptionalAttribute("w:initials")})})}return readCommentsXml}exports.createCommentsReader=createCommentsReader},{"../documents":4,"../results":25}],7:[function(require,module,exports){exports.readContentTypesFromXml=readContentTypesFromXml;var fallbackContentTypes={png:"png",gif:"gif",jpeg:"jpeg",jpg:"jpeg",tif:"tiff",tiff:"tiff",bmp:"bmp"};exports.defaultContentTypes=contentTypes({},{});function readContentTypesFromXml(element){var extensionDefaults={};var overrides={};element.children.forEach(function(child){if(child.name==="content-types:Default"){extensionDefaults[child.attributes.Extension]=child.attributes.ContentType}if(child.name==="content-types:Override"){var name=child.attributes.PartName;if(name.charAt(0)==="/"){name=name.substring(1)}overrides[name]=child.attributes.ContentType}});return contentTypes(overrides,extensionDefaults)}function contentTypes(overrides,extensionDefaults){return{findContentType:function(path){var overrideContentType=overrides[path];if(overrideContentType){return overrideContentType}else{var pathParts=path.split(".");var extension=pathParts[pathParts.length-1];if(extensionDefaults.hasOwnProperty(extension)){return extensionDefaults[extension]}else{var fallback=fallbackContentTypes[extension.toLowerCase()];if(fallback){return"image/"+fallback}else{return null}}}}}}},{}],8:[function(require,module,exports){exports.DocumentXmlReader=DocumentXmlReader;var documents=require("../documents");var Result=require("../results").Result;function DocumentXmlReader(options){var bodyReader=options.bodyReader;function convertXmlToDocument(element){var body=element.first("w:body");var result=bodyReader.readXmlElements(body.children).map(function(children){return new documents.Document(children,{notes:options.notes,comments:options.comments})});return new Result(result.value,result.messages)}return{convertXmlToDocument:convertXmlToDocument}}},{"../documents":4,"../results":25}],9:[function(require,module,exports){exports.read=read;exports._findPartPaths=findPartPaths;var path=require("path");var promises=require("../promises");var documents=require("../documents");var Result=require("../results").Result;var zipfile=require("../zipfile");var readXmlFromZipFile=require("./office-xml-reader").readXmlFromZipFile;var createBodyReader=require("./body-reader").createBodyReader;var DocumentXmlReader=require("./document-xml-reader").DocumentXmlReader;var relationshipsReader=require("./relationships-reader");var contentTypesReader=require("./content-types-reader");var numberingXml=require("./numbering-xml");var stylesReader=require("./styles-reader");var notesReader=require("./notes-reader");var commentsReader=require("./comments-reader");var Files=require("./files").Files;function read(docxFile,input){input=input||{};return promises.props({contentTypes:readContentTypesFromZipFile(docxFile),partPaths:findPartPaths(docxFile),docxFile:docxFile,files:new Files(input.path?path.dirname(input.path):null)}).also(function(result){return{styles:readStylesFromZipFile(docxFile,result.partPaths.styles)}}).also(function(result){return{numbering:readNumberingFromZipFile(docxFile,result.partPaths.numbering,result.styles)}}).also(function(result){return{footnotes:readXmlFileWithBody(result.partPaths.footnotes,result,function(bodyReader,xml){if(xml){return notesReader.createFootnotesReader(bodyReader)(xml)}else{return new Result([])}}),endnotes:readXmlFileWithBody(result.partPaths.endnotes,result,function(bodyReader,xml){if(xml){return notesReader.createEndnotesReader(bodyReader)(xml)}else{return new Result([])}}),comments:readXmlFileWithBody(result.partPaths.comments,result,function(bodyReader,xml){if(xml){return commentsReader.createCommentsReader(bodyReader)(xml)}else{return new Result([])}})}}).also(function(result){return{notes:result.footnotes.flatMap(function(footnotes){return result.endnotes.map(function(endnotes){return new documents.Notes(footnotes.concat(endnotes))})})}}).then(function(result){return readXmlFileWithBody(result.partPaths.mainDocument,result,function(bodyReader,xml){return result.notes.flatMap(function(notes){return result.comments.flatMap(function(comments){var reader=new DocumentXmlReader({bodyReader:bodyReader,notes:notes,comments:comments});return reader.convertXmlToDocument(xml)})})})})}function findPartPaths(docxFile){return readPackageRelationships(docxFile).then(function(packageRelationships){var mainDocumentPath=findPartPath({docxFile:docxFile,relationships:packageRelationships,relationshipType:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",basePath:"",fallbackPath:"word/document.xml"});if(!docxFile.exists(mainDocumentPath)){throw new Error("Could not find main document part. Are you sure this is a valid .docx file?")}return xmlFileReader({filename:relationshipsFilename(mainDocumentPath),readElement:relationshipsReader.readRelationships,defaultValue:relationshipsReader.defaultValue})(docxFile).then(function(documentRelationships){function findPartRelatedToMainDocument(name){return findPartPath({docxFile:docxFile,relationships:documentRelationships,relationshipType:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/"+name,basePath:zipfile.splitPath(mainDocumentPath).dirname,fallbackPath:"word/"+name+".xml"})}return{mainDocument:mainDocumentPath,comments:findPartRelatedToMainDocument("comments"),endnotes:findPartRelatedToMainDocument("endnotes"),footnotes:findPartRelatedToMainDocument("footnotes"),numbering:findPartRelatedToMainDocument("numbering"),styles:findPartRelatedToMainDocument("styles")}})})}function findPartPath(options){var docxFile=options.docxFile;var relationships=options.relationships;var relationshipType=options.relationshipType;var basePath=options.basePath;var fallbackPath=options.fallbackPath;var targets=relationships.findTargetsByType(relationshipType);var normalisedTargets=targets.map(function(target){return stripPrefix(zipfile.joinPath(basePath,target),"/")});var validTargets=normalisedTargets.filter(function(target){return docxFile.exists(target)});if(validTargets.length===0){return fallbackPath}else{return validTargets[0]}}function stripPrefix(value,prefix){if(value.substring(0,prefix.length)===prefix){return value.substring(prefix.length)}else{return value}}function xmlFileReader(options){return function(zipFile){return readXmlFromZipFile(zipFile,options.filename).then(function(element){return element?options.readElement(element):options.defaultValue})}}function readXmlFileWithBody(filename,options,func){var readRelationshipsFromZipFile=xmlFileReader({filename:relationshipsFilename(filename),readElement:relationshipsReader.readRelationships,defaultValue:relationshipsReader.defaultValue});return readRelationshipsFromZipFile(options.docxFile).then(function(relationships){var bodyReader=new createBodyReader({relationships:relationships,contentTypes:options.contentTypes,docxFile:options.docxFile,numbering:options.numbering,styles:options.styles,files:options.files});return readXmlFromZipFile(options.docxFile,filename).then(function(xml){return func(bodyReader,xml)})})}function relationshipsFilename(filename){var split=zipfile.splitPath(filename);return zipfile.joinPath(split.dirname,"_rels",split.basename+".rels")}var readContentTypesFromZipFile=xmlFileReader({filename:"[Content_Types].xml",readElement:contentTypesReader.readContentTypesFromXml,defaultValue:contentTypesReader.defaultContentTypes});function readNumberingFromZipFile(zipFile,path,styles){return xmlFileReader({filename:path,readElement:function(element){return numberingXml.readNumberingXml(element,{styles:styles})},defaultValue:numberingXml.defaultNumbering})(zipFile)}function readStylesFromZipFile(zipFile,path){return xmlFileReader({filename:path,readElement:stylesReader.readStylesXml,defaultValue:stylesReader.defaultStyles})(zipFile)}var readPackageRelationships=xmlFileReader({filename:"_rels/.rels",readElement:relationshipsReader.readRelationships,defaultValue:relationshipsReader.defaultValue})},{"../documents":4,"../promises":23,"../results":25,"../zipfile":39,"./body-reader":5,"./comments-reader":6,"./content-types-reader":7,"./document-xml-reader":8,"./files":1,"./notes-reader":10,"./numbering-xml":11,"./office-xml-reader":12,"./relationships-reader":13,"./styles-reader":15,path:98}],10:[function(require,module,exports){var documents=require("../documents");var Result=require("../results").Result;exports.createFootnotesReader=createReader.bind(this,"footnote");exports.createEndnotesReader=createReader.bind(this,"endnote");function createReader(noteType,bodyReader){function readNotesXml(element){return Result.combine(element.getElementsByTagName("w:"+noteType).filter(isFootnoteElement).map(readFootnoteElement))}function isFootnoteElement(element){var type=element.attributes["w:type"];return type!=="continuationSeparator"&&type!=="separator"}function readFootnoteElement(footnoteElement){var id=footnoteElement.attributes["w:id"];return bodyReader.readXmlElements(footnoteElement.children).map(function(body){return documents.Note({noteType:noteType,noteId:id,body:body})})}return readNotesXml}},{"../documents":4,"../results":25}],11:[function(require,module,exports){var _=require("underscore");exports.readNumberingXml=readNumberingXml;exports.Numbering=Numbering;exports.defaultNumbering=new Numbering({},{});function Numbering(nums,abstractNums,styles){var allLevels=_.flatten(_.values(abstractNums).map(function(abstractNum){return _.values(abstractNum.levels)}));var levelsByParagraphStyleId=_.indexBy(allLevels.filter(function(level){return level.paragraphStyleId!=null}),"paragraphStyleId");function findLevel(numId,level){var num=nums[numId];if(num){var abstractNum=abstractNums[num.abstractNumId];if(!abstractNum){return null}else if(abstractNum.numStyleLink==null){return abstractNums[num.abstractNumId].levels[level]}else{var style=styles.findNumberingStyleById(abstractNum.numStyleLink);return findLevel(style.numId,level)}}else{return null}}function findLevelByParagraphStyleId(styleId){return levelsByParagraphStyleId[styleId]||null}return{findLevel:findLevel,findLevelByParagraphStyleId:findLevelByParagraphStyleId}}function readNumberingXml(root,options){if(!options||!options.styles){throw new Error("styles is missing")}var abstractNums=readAbstractNums(root);var nums=readNums(root,abstractNums);return new Numbering(nums,abstractNums,options.styles)}function readAbstractNums(root){var abstractNums={};root.getElementsByTagName("w:abstractNum").forEach(function(element){var id=element.attributes["w:abstractNumId"];abstractNums[id]=readAbstractNum(element)});return abstractNums}function readAbstractNum(element){var levels={};element.getElementsByTagName("w:lvl").forEach(function(levelElement){var levelIndex=levelElement.attributes["w:ilvl"];var numFmt=levelElement.first("w:numFmt").attributes["w:val"];var paragraphStyleId=levelElement.firstOrEmpty("w:pStyle").attributes["w:val"];levels[levelIndex]={isOrdered:numFmt!=="bullet",level:levelIndex,paragraphStyleId:paragraphStyleId}});var numStyleLink=element.firstOrEmpty("w:numStyleLink").attributes["w:val"];return{levels:levels,numStyleLink:numStyleLink}}function readNums(root){var nums={};root.getElementsByTagName("w:num").forEach(function(element){var numId=element.attributes["w:numId"];var abstractNumId=element.first("w:abstractNumId").attributes["w:val"];nums[numId]={abstractNumId:abstractNumId}});return nums}},{underscore:120}],12:[function(require,module,exports){var _=require("underscore");var promises=require("../promises");var xml=require("../xml");exports.read=read;exports.readXmlFromZipFile=readXmlFromZipFile;var xmlNamespaceMap={"http://schemas.openxmlformats.org/wordprocessingml/2006/main":"w","http://schemas.openxmlformats.org/officeDocument/2006/relationships":"r","http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing":"wp","http://schemas.openxmlformats.org/drawingml/2006/main":"a","http://schemas.openxmlformats.org/drawingml/2006/picture":"pic","http://schemas.openxmlformats.org/package/2006/content-types":"content-types","urn:schemas-microsoft-com:vml":"v","http://schemas.openxmlformats.org/markup-compatibility/2006":"mc","urn:schemas-microsoft-com:office:word":"office-word"};function read(xmlString){return xml.readString(xmlString,xmlNamespaceMap).then(function(document){return collapseAlternateContent(document)[0]})}function readXmlFromZipFile(docxFile,path){if(docxFile.exists(path)){return docxFile.read(path,"utf-8").then(stripUtf8Bom).then(read)}else{return promises.resolve(null)}}function stripUtf8Bom(xmlString){return xmlString.replace(/^\uFEFF/g,"")}function collapseAlternateContent(node){if(node.type==="element"){if(node.name==="mc:AlternateContent"){return node.first("mc:Fallback").children}else{node.children=_.flatten(node.children.map(collapseAlternateContent,true));return[node]}}else{return[node]}}},{"../promises":23,"../xml":35,underscore:120}],13:[function(require,module,exports){exports.readRelationships=readRelationships;exports.defaultValue=new Relationships([]);exports.Relationships=Relationships;function readRelationships(element){var relationships=[];element.children.forEach(function(child){if(child.name==="{http://schemas.openxmlformats.org/package/2006/relationships}Relationship"){var relationship={relationshipId:child.attributes.Id,target:child.attributes.Target,type:child.attributes.Type};relationships.push(relationship)}});return new Relationships(relationships)}function Relationships(relationships){var targetsByRelationshipId={};relationships.forEach(function(relationship){targetsByRelationshipId[relationship.relationshipId]=relationship.target});var targetsByType={};relationships.forEach(function(relationship){if(!targetsByType[relationship.type]){targetsByType[relationship.type]=[]}targetsByType[relationship.type].push(relationship.target)});return{findTargetByRelationshipId:function(relationshipId){return targetsByRelationshipId[relationshipId]},findTargetsByType:function(type){return targetsByType[type]||[]}}}},{}],14:[function(require,module,exports){var _=require("underscore");var promises=require("../promises");var xml=require("../xml");exports.writeStyleMap=writeStyleMap;exports.readStyleMap=readStyleMap;var schema="http://schemas.zwobble.org/mammoth/style-map";var styleMapPath="mammoth/style-map";var styleMapAbsolutePath="/"+styleMapPath;function writeStyleMap(docxFile,styleMap){docxFile.write(styleMapPath,styleMap);return updateRelationships(docxFile).then(function(){return updateContentTypes(docxFile)})}function updateRelationships(docxFile){var path="word/_rels/document.xml.rels";var relationshipsUri="http://schemas.openxmlformats.org/package/2006/relationships";var relationshipElementName="{"+relationshipsUri+"}Relationship";return docxFile.read(path,"utf8").then(xml.readString).then(function(relationshipsContainer){var relationships=relationshipsContainer.children;addOrUpdateElement(relationships,relationshipElementName,"Id",{Id:"rMammothStyleMap",Type:schema,Target:styleMapAbsolutePath});var namespaces={"":relationshipsUri};return docxFile.write(path,xml.writeString(relationshipsContainer,namespaces))})}function updateContentTypes(docxFile){var path="[Content_Types].xml";var contentTypesUri="http://schemas.openxmlformats.org/package/2006/content-types";var overrideName="{"+contentTypesUri+"}Override";return docxFile.read(path,"utf8").then(xml.readString).then(function(typesElement){var children=typesElement.children;addOrUpdateElement(children,overrideName,"PartName",{PartName:styleMapAbsolutePath,ContentType:"text/prs.mammoth.style-map"});var namespaces={"":contentTypesUri};return docxFile.write(path,xml.writeString(typesElement,namespaces))})}function addOrUpdateElement(elements,name,identifyingAttribute,attributes){var existingElement=_.find(elements,function(element){return element.name===name&&element.attributes[identifyingAttribute]===attributes[identifyingAttribute]});if(existingElement){existingElement.attributes=att