@mdgate/docx 0.1.0 → 0.4.0
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.
- package/README.md +1 -1
- package/dist/index.js +5 -5
- package/package.json +6 -6
package/README.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import{detectZipDoc as VZ}from"@mdgate/containers";import{documentToMarkdown as DZ}from"@mdgate/document";import{fileExtension as UZ}from"@mdgate/utils";import{ns as N,Package as jZ,probeOle as CZ,readRels as c,relsPartFor as T8,relType as S,resolve as i}from"@mdgate/containers";import{ConvertError as FZ}from"@mdgate/core";import{AssetSink as MZ}from"@mdgate/office-common";import{warn as AZ}from"@mdgate/utils";import{ns as
|
|
1
|
+
import{detectZipDoc as VZ}from"@mdgate/containers";import{documentToMarkdown as DZ}from"@mdgate/document";import{fileExtension as UZ}from"@mdgate/utils";import{ns as N,Package as jZ,probeOle as CZ,readRels as c,relsPartFor as T8,relType as S,resolve as i}from"@mdgate/containers";import{ConvertError as FZ}from"@mdgate/core";import{AssetSink as MZ}from"@mdgate/office-common";import{warn as AZ}from"@mdgate/utils";import{ns as $,parseXml as Y8,relTargetBytes as i8}from"@mdgate/containers";import{ConvertError as $8}from"@mdgate/core";import{cellSpanning as a8,GridBuilder as r8,inlinesAreEmpty as n8,markerIsOrdered as C8,markerLabel as t8,PLAIN as F8,resolveHeaderRows as l8}from"@mdgate/document";import{alternateBranch as p,applyDelta as s8,chartBlocks as e8,classifyRelTarget as ZZ,diagramBlocks as qZ,emptyFieldFrame as zZ,fieldResult as KZ,flushList as M8,rebaseEmphasis as QZ,relImageSource as YZ,StyledRun as $Z}from"@mdgate/office-common";import{cleanText as G8,debug as GZ,isXmlSpace as J8,trim as m,warn as H8}from"@mdgate/utils";import{ns as C}from"@mdgate/containers";import{ConvertError as g8}from"@mdgate/core";import{markerIsOrdered as y8}from"@mdgate/document";import{compositeLabel as v8,emptyNumberPattern as u8,parsePercentPattern as k8}from"@mdgate/office-common";import{warn as b8}from"@mdgate/utils";import{ns as W}from"@mdgate/containers";import{PLAIN as s}from"@mdgate/document";import{fromStyleName as R8,resolveDelta as P8,StyleChains as e}from"@mdgate/office-common";import{trim as f8}from"@mdgate/utils";//! WordprocessingML style table.
|
|
2
2
|
//!
|
|
3
3
|
//! Bold/italic/strike are *toggle properties* (ECMA-376 §17.7.3): within the
|
|
4
4
|
//! style hierarchy a `true` specification toggles the inherited value and a
|
|
5
5
|
//! `false` specification leaves it unchanged, so the style layers contribute
|
|
6
6
|
//! a true-count *parity* XORed over the `docDefaults` base. Direct run
|
|
7
7
|
//! formatting is absolute on/off.
|
|
8
|
-
function P(){return{bold:!1,italic:!1,strike:!1}}function x8(
|
|
8
|
+
function P(){return{bold:!1,italic:!1,strike:!1}}function x8(z,Z){return{bold:z.bold!==Z.bold,italic:z.italic!==Z.italic,strike:z.strike!==Z.strike}}function u(z,Z){return{bold:Z.bold!==z.bold,italic:Z.italic!==z.italic,strike:Z.strike!==z.strike,code:Z.code}}class B{chains;docDefaults;constructor(z,Z){this.chains=z,this.docDefaults=Z}static parseOpt(z){return z!==void 0?B.parse(z):new B(new e,s)}static parse(z){let Z=new e;for(let Q of z.findAll(W.W,"style")){let Y=Q.attr(W.W,"styleId");if(Y===void 0)continue;let J=Q.find(W.W,"basedOn")?.attr(W.W,"val");Z.insert(Y,Q,J)}let q=z.find(W.W,"docDefaults")?.find(W.W,"rPrDefault")?.find(W.W,"rPr"),K=q!==void 0?P8(k(q)):s;return new B(Z,K)}runToggles(z){let Z=P();return this.chains.walk(z,(q)=>{let K=q.find(W.W,"rPr");if(K!==void 0)Z=x8(Z,{bold:U(K,"b")===!0,italic:U(K,"i")===!0,strike:U(K,"strike")===!0||U(K,"dstrike")===!0});return}),Z}headingLevel(z){return this.chains.walk(z,(Z)=>{let q=I8(Z.find(W.W,"name")?.attr(W.W,"val")??"");if(q.startsWith("heading ")){let Y=R(f8(q.slice(8)));if(Y!==void 0)return{level:Y}}if(q==="title")return{level:1};let K=Z.find(W.W,"pPr")?.find(W.W,"outlineLvl")?.attr(W.W,"val");if(K===void 0)return;let Q=R(K);if(Q===void 0)return;return{level:Q<9?Q+1:void 0}})}blockStyle(z){return this.chains.walk(z,(Z)=>{let q=Z.find(W.W,"name")?.attr(W.W,"val");if(q===void 0)return;return R8(q)})}styleNumPr(z){return this.chains.walk(z,(Z)=>{let q=Z.find(W.W,"pPr")?.find(W.W,"numPr")?.find(W.W,"numId")?.attr(W.W,"val");if(q===void 0)return;return O(q)})}styleNumberingLevel(z,Z){return this.chains.walk(z,(q)=>{let K=q.attr(W.W,"styleId");if(K===void 0)return;return Z.styleLevel(K)})}directNumId(z){let Z=this.chains.definition(z);if(Z===void 0)return;let q=Z.find(W.W,"pPr")?.find(W.W,"numPr")?.find(W.W,"numId")?.attr(W.W,"val");if(q===void 0)return;return O(q)}}function k(z){let Z=U(z,"strike"),q=U(z,"dstrike");return{bold:U(z,"b"),italic:U(z,"i"),strike:Z!==void 0||q!==void 0?(Z??!1)||(q??!1):void 0,code:void 0}}function U(z,Z){let q=z.find(W.W,Z);if(q===void 0)return;let K=q.attr(W.W,"val");return K!=="0"&&K!=="false"&&K!=="off"&&K!=="none"}function I8(z){let Z="";for(let q of z)Z+=q>="A"&&q<="Z"?String.fromCharCode(q.charCodeAt(0)+32):q;return Z}function R(z){if(!/^\d+$/.test(z))return;let Z=Number(z);if(!Number.isInteger(Z)||Z>255)return;return Z}function O(z){if(!/^\d+$/.test(z))return;let Z=Number(z);if(!Number.isSafeInteger(Z))return;return Z}//! WordprocessingML numbering: `numId -> w:num` (with level overrides) `->
|
|
9
9
|
//! abstractNum` (with `numStyleLink` indirection) `-> level`, plus the
|
|
10
10
|
//! document-order counters that produce each paragraph's effective number.
|
|
11
|
-
var V=9;function m8(){return{marker:"bullet",start:1,restart:void 0,pattern:u8()}}class
|
|
12
|
-
var o=[z.W,z.A,z.PIC,z.WP,z.MC,z.CHART,z.DGM,z.VML,z.O_VML,z.WPS,z.WPG];function A8(K,Z,q){return{pkg:K.pkg,rels:Z,basePart:q,styles:K.styles,numbering:K.numbering,counters:K.counters,assets:K.assets}}function h(K,Z){return i8(K.pkg,K.rels,K.basePart,Z)}class V8{list=[];styled=new zZ;flush(K){this.styled.flush(K),M8(K,this.list)}}function E(K,Z){let q=[],Q=new V8;return x(K,Z,q,Q),Q.flush(q),q}function x(K,Z,q,Q){for(let Y of K.childElems()){if(Y.is(z.MC,"AlternateContent")){let $=p(Y,o);if($!==void 0)x($,Z,q,Q);continue}if(Y.ns!==z.W)continue;switch(Y.local){case"p":{let{kind:$,pieces:J}=HZ(Y,Z);JZ($,J,q,Q);break}case"tbl":{Q.flush(q),q.push(...WZ(Y,Z));break}case"sdt":{let $=Y.find(z.W,"sdtContent");if($!==void 0)x($,Z,q,Q);break}case"customXml":x(Y,Z,q,Q);break;default:break}}}function JZ(K,Z,q,Q){switch(K.type){case"listItem":{Q.styled.flush(q);let Y=_8(Z);Q.list.push({level:K.ilvl,key:K.key,number:K.number,label:K.label,blocks:Y});break}case"styled":{M8(q,Q.list);for(let Y of Z)if(Y.type==="inlines")Q.styled.push(K.style,Y.inlines,q);else Q.styled.flush(q),q.push(...Y.blocks);break}case"heading":{Q.flush(q);let Y=K.label,$=!1;for(let J of Z)if(J.type==="inlines"){if(n8(J.inlines))continue;let X=J.inlines;if(YZ(X,K.base),!$){if(Y!==void 0)X.unshift({type:"text",text:Y,style:{...F8}}),Y=void 0;q.push({type:"heading",level:K.level,anchor:void 0,content:X}),$=!0}else q.push({type:"paragraph",inlines:X})}else q.push(...J.blocks);break}case"plain":{Q.flush(q),q.push(..._8(Z));break}}}function HZ(K,Z){let q=K.find(z.W,"pPr"),Q=q?.find(z.W,"pStyle")?.attr(z.W,"val"),Y=q?.find(z.W,"outlineLvl")?.attr(z.W,"val"),$=Y!==void 0?R(Y):void 0,J=$!==void 0?{level:$<9?$+1:void 0}:void 0,X=Q!==void 0?Z.styles.headingLevel(Q):void 0,G=(J??X)?.level,_=Q!==void 0?Z.styles.blockStyle(Q):void 0,H=XZ(q,Q,Z),F=Q!==void 0?Z.styles.runToggles(Q):P(),M=u(F,Z.styles.docDefaults),j;if(G!==void 0){let D;if(H!==void 0&&C8(H.key.marker))D=`${H.label??t8(H.key.marker,H.number)} `;j={type:"heading",level:G,label:D,base:M}}else if(H!==void 0)j={type:"listItem",ilvl:H.ilvl,key:H.key,number:H.number,label:H.label};else if(_!==void 0)j={type:"styled",style:_};else j={type:"plain"};let A=new I(Z,M);return A.walk(K),{kind:j,pieces:A.finish()}}function XZ(K,Z,q){let Q=K?.find(z.W,"numPr"),Y=Q?.find(z.W,"numId")?.attr(z.W,"val"),$=Y!==void 0?O(Y):void 0,J=Q?.find(z.W,"ilvl")?.attr(z.W,"val"),X=J!==void 0?O(J):void 0,G=$!==void 0?$:Z!==void 0?q.styles.styleNumPr(Z):void 0;if(G===void 0)return;if(G===0)return;let _=q.numbering.instance(G);if(_===void 0){GZ(`paragraph references undefined numbering instance ${G}`);return}let H;if(X!==void 0)H=X;else if(Z!==void 0)H=q.styles.styleNumberingLevel(Z,_)??0;else H=0;let M=_.levels[Math.min(H,V-1)].marker;if(M===void 0)return;let j=0,A;if(C8(M)){let D=q.counters.next(G,H,_);j=D.value,A=D.label}return{ilvl:H,key:{instance:G,marker:M},number:j,label:A}}class I{ctx;base;pieces=[];current=[];fields=[];constructor(K,Z){this.ctx=K,this.base=Z}push(K){let Z=this.fields[this.fields.length-1];if(Z?.inResult)Z.inlines.push(K);else if(Z!==void 0);else this.current.push(K)}pushBlocks(K){if(K.length===0)return;if(this.current.length>0)this.pieces.push({type:"inlines",inlines:this.current}),this.current=[];this.pieces.push({type:"blocks",blocks:K})}walk(K){for(let Z of K.childElems()){if(Z.is(z.MC,"AlternateContent")){let q=p(Z,o);if(q!==void 0)this.walk(q);continue}if(Z.ns!==z.W)continue;switch(Z.local){case"pPr":break;case"r":this.walkRun(Z);break;case"hyperlink":{let q=this.hyperlinkLinkTarget(Z),Q=new I(this.ctx,this.base);Q.walk(Z);let{content:Y,attachments:$}=X8(Q.finish());if(q!==void 0)this.push({type:"link",content:Y,target:q});else for(let J of Y)this.push(J);this.pushBlocks($);break}case"fldSimple":{let q=Z.attr(z.W,"instr")??"",Q=new I(this.ctx,this.base);Q.walk(Z);let{content:Y,attachments:$}=X8(Q.finish());this.pushFieldResult(q,Y),this.pushBlocks($);break}case"bookmarkStart":{let q=Z.attr(z.W,"name");if(q!==void 0&&q!=="_GoBack")this.push({type:"anchor",id:q});break}case"sdt":{let q=Z.find(z.W,"sdtContent");if(q!==void 0)this.walk(q);break}case"smartTag":case"ins":case"bdo":case"dir":case"moveTo":case"customXml":this.walk(Z);break;default:break}}}hyperlinkLinkTarget(K){let Z=K.attrQualified(z.R,"id");if(Z!==void 0){let Q=this.ctx.rels.get(Z);if(Q!==void 0)return ZZ(Q.mode==="external",Q.target)}let q=K.attr(z.W,"anchor");return q!==void 0?{type:"anchor",id:q}:void 0}walkRun(K){let Z=K.find(z.W,"rPr"),q;if(Z!==void 0){let Q=Z.find(z.W,"rStyle")?.attr(z.W,"val"),Y=Q!==void 0?this.ctx.styles.runToggles(Q):P(),$=u(Y,this.base);q=s8(k(Z),$)}else q=this.base;this.walkRunContent(K,q)}walkRunContent(K,Z){for(let q of K.childElems()){if(q.is(z.MC,"AlternateContent")){let Q=p(q,o);if(Q!==void 0)this.walkRunContent(Q,Z);continue}if(q.ns!==z.W)continue;switch(q.local){case"t":{let Q=q.attrQualified(z.XML,"space")==="preserve",Y=q.text(),$=G8(Q?Y:_Z(Y));if($.length>0)this.push({type:"text",text:$,style:{...Z}});break}case"tab":case"ptab":this.push({type:"text",text:" ",style:{...F8}});break;case"br":case"cr":this.push({type:"lineBreak"});break;case"footnoteReference":{let Q=q.attr(z.W,"id");if(Q!==void 0)this.push({type:"noteRef",id:`fn${Q}`});break}case"endnoteReference":{let Q=q.attr(z.W,"id");if(Q!==void 0)this.push({type:"noteRef",id:`en${Q}`});break}case"drawing":case"pict":case"object":this.walkDrawing(q);break;case"fldChar":{switch(q.attr(z.W,"fldCharType")){case"begin":this.fields.push(KZ());break;case"separate":{let Q=this.fields[this.fields.length-1];if(Q!==void 0)Q.inResult=!0;break}case"end":{let Q=this.fields.pop();if(Q!==void 0)this.pushFieldResult(Q.instr,Q.inlines);break}default:break}break}case"instrText":{let Q=this.fields[this.fields.length-1];if(Q!==void 0)Q.instr+=q.text();break}default:break}}}walkDrawing(K){let Z=[];if(D8(K,Z),Z.length>0){let H=[];for(let F of Z)H.push(...E(F,this.ctx));this.pushBlocks(H);return}let q={};U8(K,q);let Q=q.docPr?.attr(z.WP,"descr"),Y=Q!==void 0?G8(Q):"",$=q.chart?.attrQualified(z.R,"id");if($!==void 0){this.pushBlocks(this.chartBlocks($));return}let J=q.relIds?.attrQualified(z.R,"dm");if(J!==void 0){this.pushBlocks(this.diagramBlocks(J));return}let X=q.ole;if(X!==void 0){let H=X.attr(z.O_VML,"ProgID")??"object",F=m(Y).length===0?`Embedded object: ${H}`:Y,M=X.attrQualified(z.R,"id"),j={type:"unavailable"};if(M!==void 0){let A=h(this.ctx,M);if(A!==void 0){let[D,w]=A;j={type:"asset",id:this.ctx.assets.add("application/vnd.ms-ole-object",D,w)}}}this.push({type:"image",alt:F,source:j});return}let G=q.blip,_=G?.attrQualified(z.R,"embed")??G?.attrQualified(z.R,"link")??q.imagedata?.attrQualified(z.R,"id");if(_!==void 0){let H=$Z(this.ctx.pkg,this.ctx.rels,this.ctx.basePart,this.ctx.assets,_);if(H!==void 0)this.push({type:"image",alt:Y,source:H});else if(m(Y).length>0)this.push({type:"image",alt:Y,source:{type:"unavailable"}});return}if(m(Y).length>0)this.push({type:"image",alt:Y,source:{type:"unavailable"}})}chartBlocks(K){let Z=h(this.ctx,K);if(Z===void 0)return[];let[q,Q]=Z;try{return e8($8(Q))}catch(Y){if(Y instanceof z8&&Y.isFatal())throw Y;return H8(`skipping corrupt chart part ${q}: ${Y instanceof Error?Y.message:String(Y)}`),[]}}diagramBlocks(K){let Z=h(this.ctx,K);if(Z===void 0)return[];let[q,Q]=Z;try{return qZ($8(Q))}catch(Y){if(Y instanceof z8&&Y.isFatal())throw Y;return H8(`skipping corrupt diagram part ${q}: ${Y instanceof Error?Y.message:String(Y)}`),[]}}pushFieldResult(K,Z){for(let q of QZ(K,Z))this.push(q)}finish(){while(this.fields.length>0){let K=this.fields.pop();for(let Z of K.inlines)this.push(Z)}if(this.current.length>0)this.pieces.push({type:"inlines",inlines:this.current});return this.pieces}}function X8(K){let Z=[],q=[];for(let Q of K)if(Q.type==="inlines")Z.push(...Q.inlines);else q.push(...Q.blocks);return{content:Z,attachments:q}}function _8(K){let Z=[];for(let q of K)if(q.type==="inlines")Z.push({type:"paragraph",inlines:q.inlines});else Z.push(...q.blocks);return Z}function D8(K,Z){for(let q of K.childElems()){if(q.is(z.MC,"Fallback"))continue;if(q.is(z.W,"txbxContent"))Z.push(q);else D8(q,Z)}}function U8(K,Z){let q=K.childElems();for(let Q=0;Q<q.length;Q+=1){let Y=q[Q];if(Z.docPr===void 0&&Y.is(z.WP,"docPr"))Z.docPr=Y;else if(Z.chart===void 0&&Y.is(z.CHART,"chart"))Z.chart=Y;else if(Z.relIds===void 0&&Y.is(z.DGM,"relIds"))Z.relIds=Y;else if(Z.ole===void 0&&Y.is(z.O_VML,"OLEObject"))Z.ole=Y;else if(Z.blip===void 0&&Y.is(z.A,"blip"))Z.blip=Y;else if(Z.imagedata===void 0&&Y.is(z.VML,"imagedata"))Z.imagedata=Y;if(Z.docPr!==void 0&&Z.chart!==void 0&&Z.relIds!==void 0&&Z.ole!==void 0&&Z.blip!==void 0&&Z.imagedata!==void 0)return;if(U8(Y,Z),Z.docPr!==void 0&&Z.chart!==void 0&&Z.relIds!==void 0&&Z.ole!==void 0&&Z.blip!==void 0&&Z.imagedata!==void 0)return}}function _Z(K){let Z=0,q=K.length;while(Z<q&&J8(K[Z]))Z+=1;while(q>Z&&J8(K[q-1]))q-=1;return K.slice(Z,q)}function W8(){return{elem:void 0,merged:[],colSpan:1,rowSpan:1,covered:!1}}function j8(K,Z){let q=K?.find(z.W,Z)?.attr(z.W,"val"),Q=q!==void 0?O(q):void 0;return Math.min(Q??0,1000)}function WZ(K,Z){let q=[];for(let X of K.findAll(z.W,"tr")){let G=X.find(z.W,"trPr"),_=[];for(let H=0;H<j8(G,"gridBefore");H+=1)_.push(W8());d(X,_);for(let H=0;H<j8(G,"gridAfter");H+=1)_.push(W8());q.push(_)}let Q=new Map;for(let X=0;X<q.length;X+=1){let G=0,_=[];for(let H=0;H<q[X].length;H+=1){let F=q[X][H].covered,M=q[X][H].colSpan;if(F){let j=Q.get(G);if(j!==void 0){q[j[0]][j[1]].rowSpan+=1;for(let A=G;A<G+M;A+=1)_.push([A,j])}else q[X][H].covered=!1}else for(let j=G;j<G+M;j+=1)_.push([j,[X,H]]);G+=M}Q=new Map(_)}let Y=0;for(let X of K.findAll(z.W,"tr")){let G=X.find(z.W,"trPr");if(G!==void 0&&U(G,"tblHeader")===!0)Y+=1;else break}let $=new r8;for(let X of q){$.nextRow();for(let G of X)if(G.covered)for(let _=0;_<G.colSpan;_+=1)$.covered();else{let _=G.elem!==void 0?E(G.elem,Z):[];for(let H of G.merged)_.push(...E(H,Z));$.place(a8(_,G.colSpan,G.rowSpan))}}let J=$.finish("data");if(J.grid.length===0)return[];return J.headerRows=l8(J,Y),[{type:"table",table:J}]}function d(K,Z){for(let q of K.childElems()){if(q.ns!==z.W)continue;switch(q.local){case"tc":{let Q=q.find(z.W,"tcPr"),Y=Q?.find(z.W,"vMerge"),$=Y!==void 0&&Y.attr(z.W,"val")!=="restart",J=Q?.find(z.W,"gridSpan")?.attr(z.W,"val"),X=J!==void 0?O(J):void 0,G=Math.min(Math.max(X??1,1),1000),_=Q?.find(z.W,"hMerge");if(_!==void 0&&_.attr(z.W,"val")!=="restart"){let F=Z[Z.length-1];if(F!==void 0&&!F.covered){F.colSpan+=G,F.merged.push(q);break}}Z.push({elem:q,merged:[],colSpan:G,rowSpan:1,covered:$});break}case"sdt":{let Q=q.find(z.W,"sdtContent");if(Q!==void 0)d(Q,Z);break}case"customXml":d(q,Z);break;default:break}}}//! OOXML WordprocessingML (.docx / .docm).
|
|
11
|
+
var V=9;function m8(){return{marker:"bullet",start:1,restart:void 0,pattern:u8()}}class z8{levels;pstyles;constructor(z,Z){this.levels=z,this.pstyles=Z}styleLevel(z){let Z=this.pstyles.indexOf(z);return Z>=0?Z:void 0}}class f{instances=new Map;instance(z){return this.instances.get(z)}setInstance(z,Z){this.instances.set(z,Z)}}function K8(z,Z){let q=new Map;for(let Y of z.findAll(C.W,"abstractNum")){let J=Y.attr(C.W,"abstractNumId");if(J===void 0)continue;let X=Array.from({length:V},()=>m8()),G=Array.from({length:V},()=>{return});for(let H of Y.findAll(C.W,"lvl")){let F=O(H.attr(C.W,"ilvl")??"")??0;if(F<V)X[F]=q8(H),G[F]=Z8(H)}let _=Y.find(C.W,"numStyleLink")?.attr(C.W,"val");q.set(J,{levels:X,pstyles:G,numStyleLink:_})}let K=new Map;for(let Y of z.findAll(C.W,"num")){let J=O(Y.attr(C.W,"numId")??""),X=Y.find(C.W,"abstractNumId")?.attr(C.W,"val");if(J===void 0||X===void 0)continue;K.set(J,{absId:X,numElem:Y})}let Q=new f;for(let[Y,{absId:J,numElem:X}]of K){let G=h8(J,q,K,Z);if(G===void 0){b8(`numbering instance ${Y} references unknown abstract ${JSON.stringify(J)}`);continue}let _=o8(G.levels),H=G.pstyles.slice();for(let F of X.findAll(C.W,"lvlOverride")){let M=O(F.attr(C.W,"ilvl")??"")??0;if(M>=V)continue;let j=F.find(C.W,"lvl");if(j!==void 0)_[M]=q8(j),H[M]=Z8(j);let A=F.find(C.W,"startOverride")?.attr(C.W,"val"),D=A!==void 0?Q8(A):void 0;if(D!==void 0)_[M].start=D}Q.setInstance(Y,new z8(_,H))}return Q}function h8(z,Z,q,K){let Q=[],Y=z;for(;;){if(Q.includes(Y))throw g8.malformed(`numbering indirection cycle at ${JSON.stringify(Y)}`);Q.push(Y);let J=Z.get(Y);if(J===void 0)return;if(J.numStyleLink===void 0)return J;let X=K(J.numStyleLink),G=X!==void 0?q.get(X)?.absId:void 0;if(G===void 0)return J;Y=G}}function Z8(z){return z.find(C.W,"pStyle")?.attr(C.W,"val")}function Q8(z){if(!/^[+-]?\d+$/.test(z))return;let Z;try{Z=BigInt(z)}catch{return}let q=-9223372036854775808n,K=9223372036854775807n;if(Z<q||Z>K)return;let Q=2147483647n;if(Z<0n)return 0;if(Z>Q)return 2147483647;return Number(Z)}function q8(z){let Z=z.find(C.W,"numFmt")?.attr(C.W,"val")??"bullet",q;switch(Z){case"none":q=void 0;break;case"bullet":q="bullet";break;case"lowerLetter":q="lowerAlpha";break;case"upperLetter":q="upperAlpha";break;case"lowerRoman":q="lowerRoman";break;case"upperRoman":q="upperRoman";break;default:q="decimal";break}let K=z.find(C.W,"start")?.attr(C.W,"val"),Q=K!==void 0?Q8(K)??1:1,Y=z.find(C.W,"lvlRestart")?.attr(C.W,"val"),J=Y!==void 0?p8(Y):void 0,X=q!==void 0&&y8(q)?k8(z.find(C.W,"lvlText")?.attr(C.W,"val")??""):[],G=U(z,"isLgl")===!0;return{marker:q,start:Q,restart:J,pattern:{text:X,legal:G}}}function p8(z){if(!/^\d+$/.test(z))return;let Z;try{Z=BigInt(z)}catch{return}if(Z>0xffffffffn)return;return Number(Z)}function o8(z){return z.map((Z)=>({marker:Z.marker,start:Z.start,restart:Z.restart,pattern:{text:Z.pattern.text.slice(),legal:Z.pattern.legal}}))}class b{state=new Map;next(z,Z,q){let K=Math.min(Z,V-1),Q=this.state.get(z);if(Q===void 0)Q=d8(),this.state.set(z,Q);let Y=q.levels[K];if(!Q.initialized[K]||Q.restartPending[K])Q.value[K]=Y.start,Q.initialized[K]=!0,Q.restartPending[K]=!1;else Q.value[K]=c8(Q.value[K]);for(let G=K+1;G<V;G+=1){let _=q.levels[G];if(_.restart===void 0?!0:_.restart===0?!1:K<_.restart)Q.restartPending[G]=!0}let J=Q.value[K],X=Y.marker!==void 0?v8(Y.pattern,Y.marker,J,(G)=>q.levels[Math.min(G,V-1)].marker??"decimal",(G)=>{let _=Math.min(G,V-1);if(Q.initialized[_]&&!Q.restartPending[_])return Q.value[_];return q.levels[_].start}):void 0;return{value:J,label:X}}}function d8(){return{value:Array.from({length:V},()=>0),initialized:Array.from({length:V},()=>!1),restartPending:Array.from({length:V},()=>!1)}}function c8(z){return z>=Number.MAX_SAFE_INTEGER?z:z+1}//! Block and inline walking for WordprocessingML parts.
|
|
12
|
+
var o=[$.W,$.A,$.PIC,$.WP,$.MC,$.CHART,$.DGM,$.VML,$.O_VML,$.WPS,$.WPG];function A8(z,Z,q){return{pkg:z.pkg,rels:Z,basePart:q,styles:z.styles,numbering:z.numbering,counters:z.counters,assets:z.assets}}function h(z,Z){return i8(z.pkg,z.rels,z.basePart,Z)}class V8{list=[];styled=new $Z;flush(z){this.styled.flush(z),M8(z,this.list)}}function E(z,Z){let q=[],K=new V8;return x(z,Z,q,K),K.flush(q),q}function x(z,Z,q,K){for(let Q of z.childElems()){if(Q.is($.MC,"AlternateContent")){let Y=p(Q,o);if(Y!==void 0)x(Y,Z,q,K);continue}if(Q.ns!==$.W)continue;switch(Q.local){case"p":{let{kind:Y,pieces:J}=HZ(Q,Z);JZ(Y,J,q,K);break}case"tbl":{K.flush(q),q.push(...WZ(Q,Z));break}case"sdt":{let Y=Q.find($.W,"sdtContent");if(Y!==void 0)x(Y,Z,q,K);break}case"customXml":x(Q,Z,q,K);break;default:break}}}function JZ(z,Z,q,K){switch(z.type){case"listItem":{K.styled.flush(q);let Q=_8(Z);K.list.push({level:z.ilvl,key:z.key,number:z.number,label:z.label,blocks:Q});break}case"styled":{M8(q,K.list);for(let Q of Z)if(Q.type==="inlines")K.styled.push(z.style,Q.inlines,q);else K.styled.flush(q),q.push(...Q.blocks);break}case"heading":{K.flush(q);let Q=z.label,Y=!1;for(let J of Z)if(J.type==="inlines"){if(n8(J.inlines))continue;let X=J.inlines;if(QZ(X,z.base),!Y){if(Q!==void 0)X.unshift({type:"text",text:Q,style:{...F8}}),Q=void 0;q.push({type:"heading",level:z.level,anchor:void 0,content:X}),Y=!0}else q.push({type:"paragraph",inlines:X})}else q.push(...J.blocks);break}case"plain":{K.flush(q),q.push(..._8(Z));break}}}function HZ(z,Z){let q=z.find($.W,"pPr"),K=q?.find($.W,"pStyle")?.attr($.W,"val"),Q=q?.find($.W,"outlineLvl")?.attr($.W,"val"),Y=Q!==void 0?R(Q):void 0,J=Y!==void 0?{level:Y<9?Y+1:void 0}:void 0,X=K!==void 0?Z.styles.headingLevel(K):void 0,G=(J??X)?.level,_=K!==void 0?Z.styles.blockStyle(K):void 0,H=XZ(q,K,Z),F=K!==void 0?Z.styles.runToggles(K):P(),M=u(F,Z.styles.docDefaults),j;if(G!==void 0){let D;if(H!==void 0&&C8(H.key.marker))D=`${H.label??t8(H.key.marker,H.number)} `;j={type:"heading",level:G,label:D,base:M}}else if(H!==void 0)j={type:"listItem",ilvl:H.ilvl,key:H.key,number:H.number,label:H.label};else if(_!==void 0)j={type:"styled",style:_};else j={type:"plain"};let A=new I(Z,M);return A.walk(z),{kind:j,pieces:A.finish()}}function XZ(z,Z,q){let K=z?.find($.W,"numPr"),Q=K?.find($.W,"numId")?.attr($.W,"val"),Y=Q!==void 0?O(Q):void 0,J=K?.find($.W,"ilvl")?.attr($.W,"val"),X=J!==void 0?O(J):void 0,G=Y!==void 0?Y:Z!==void 0?q.styles.styleNumPr(Z):void 0;if(G===void 0)return;if(G===0)return;let _=q.numbering.instance(G);if(_===void 0){GZ(`paragraph references undefined numbering instance ${G}`);return}let H;if(X!==void 0)H=X;else if(Z!==void 0)H=q.styles.styleNumberingLevel(Z,_)??0;else H=0;let M=_.levels[Math.min(H,V-1)].marker;if(M===void 0)return;let j=0,A;if(C8(M)){let D=q.counters.next(G,H,_);j=D.value,A=D.label}return{ilvl:H,key:{instance:G,marker:M},number:j,label:A}}class I{ctx;base;pieces=[];current=[];fields=[];constructor(z,Z){this.ctx=z,this.base=Z}push(z){let Z=this.fields[this.fields.length-1];if(Z?.inResult)Z.inlines.push(z);else if(Z!==void 0);else this.current.push(z)}pushBlocks(z){if(z.length===0)return;if(this.current.length>0)this.pieces.push({type:"inlines",inlines:this.current}),this.current=[];this.pieces.push({type:"blocks",blocks:z})}walk(z){for(let Z of z.childElems()){if(Z.is($.MC,"AlternateContent")){let q=p(Z,o);if(q!==void 0)this.walk(q);continue}if(Z.ns!==$.W)continue;switch(Z.local){case"pPr":break;case"r":this.walkRun(Z);break;case"hyperlink":{let q=this.hyperlinkLinkTarget(Z),K=new I(this.ctx,this.base);K.walk(Z);let{content:Q,attachments:Y}=X8(K.finish());if(q!==void 0)this.push({type:"link",content:Q,target:q});else for(let J of Q)this.push(J);this.pushBlocks(Y);break}case"fldSimple":{let q=Z.attr($.W,"instr")??"",K=new I(this.ctx,this.base);K.walk(Z);let{content:Q,attachments:Y}=X8(K.finish());this.pushFieldResult(q,Q),this.pushBlocks(Y);break}case"bookmarkStart":{let q=Z.attr($.W,"name");if(q!==void 0&&q!=="_GoBack")this.push({type:"anchor",id:q});break}case"sdt":{let q=Z.find($.W,"sdtContent");if(q!==void 0)this.walk(q);break}case"smartTag":case"ins":case"bdo":case"dir":case"moveTo":case"customXml":this.walk(Z);break;default:break}}}hyperlinkLinkTarget(z){let Z=z.attrQualified($.R,"id");if(Z!==void 0){let K=this.ctx.rels.get(Z);if(K!==void 0)return ZZ(K.mode==="external",K.target)}let q=z.attr($.W,"anchor");return q!==void 0?{type:"anchor",id:q}:void 0}walkRun(z){let Z=z.find($.W,"rPr"),q;if(Z!==void 0){let K=Z.find($.W,"rStyle")?.attr($.W,"val"),Q=K!==void 0?this.ctx.styles.runToggles(K):P(),Y=u(Q,this.base);q=s8(k(Z),Y)}else q=this.base;this.walkRunContent(z,q)}walkRunContent(z,Z){for(let q of z.childElems()){if(q.is($.MC,"AlternateContent")){let K=p(q,o);if(K!==void 0)this.walkRunContent(K,Z);continue}if(q.ns!==$.W)continue;switch(q.local){case"t":{let K=q.attrQualified($.XML,"space")==="preserve",Q=q.text(),Y=G8(K?Q:_Z(Q));if(Y.length>0)this.push({type:"text",text:Y,style:{...Z}});break}case"tab":case"ptab":this.push({type:"text",text:" ",style:{...F8}});break;case"br":case"cr":this.push({type:"lineBreak"});break;case"footnoteReference":{let K=q.attr($.W,"id");if(K!==void 0)this.push({type:"noteRef",id:`fn${K}`});break}case"endnoteReference":{let K=q.attr($.W,"id");if(K!==void 0)this.push({type:"noteRef",id:`en${K}`});break}case"drawing":case"pict":case"object":this.walkDrawing(q);break;case"fldChar":{switch(q.attr($.W,"fldCharType")){case"begin":this.fields.push(zZ());break;case"separate":{let K=this.fields[this.fields.length-1];if(K!==void 0)K.inResult=!0;break}case"end":{let K=this.fields.pop();if(K!==void 0)this.pushFieldResult(K.instr,K.inlines);break}default:break}break}case"instrText":{let K=this.fields[this.fields.length-1];if(K!==void 0)K.instr+=q.text();break}default:break}}}walkDrawing(z){let Z=[];if(D8(z,Z),Z.length>0){let H=[];for(let F of Z)H.push(...E(F,this.ctx));this.pushBlocks(H);return}let q={};U8(z,q);let K=q.docPr?.attr($.WP,"descr"),Q=K!==void 0?G8(K):"",Y=q.chart?.attrQualified($.R,"id");if(Y!==void 0){this.pushBlocks(this.chartBlocks(Y));return}let J=q.relIds?.attrQualified($.R,"dm");if(J!==void 0){this.pushBlocks(this.diagramBlocks(J));return}let X=q.ole;if(X!==void 0){let H=X.attr($.O_VML,"ProgID")??"object",F=m(Q).length===0?`Embedded object: ${H}`:Q,M=X.attrQualified($.R,"id"),j={type:"unavailable"};if(M!==void 0){let A=h(this.ctx,M);if(A!==void 0){let[D,w]=A;j={type:"asset",id:this.ctx.assets.add("application/vnd.ms-ole-object",D,w)}}}this.push({type:"image",alt:F,source:j});return}let G=q.blip,_=G?.attrQualified($.R,"embed")??G?.attrQualified($.R,"link")??q.imagedata?.attrQualified($.R,"id");if(_!==void 0){let H=YZ(this.ctx.pkg,this.ctx.rels,this.ctx.basePart,this.ctx.assets,_);if(H!==void 0)this.push({type:"image",alt:Q,source:H});else if(m(Q).length>0)this.push({type:"image",alt:Q,source:{type:"unavailable"}});return}if(m(Q).length>0)this.push({type:"image",alt:Q,source:{type:"unavailable"}})}chartBlocks(z){let Z=h(this.ctx,z);if(Z===void 0)return[];let[q,K]=Z;try{return e8(Y8(K))}catch(Q){if(Q instanceof $8&&Q.isFatal())throw Q;return H8(`skipping corrupt chart part ${q}: ${Q instanceof Error?Q.message:String(Q)}`),[]}}diagramBlocks(z){let Z=h(this.ctx,z);if(Z===void 0)return[];let[q,K]=Z;try{return qZ(Y8(K))}catch(Q){if(Q instanceof $8&&Q.isFatal())throw Q;return H8(`skipping corrupt diagram part ${q}: ${Q instanceof Error?Q.message:String(Q)}`),[]}}pushFieldResult(z,Z){for(let q of KZ(z,Z))this.push(q)}finish(){while(this.fields.length>0){let z=this.fields.pop();for(let Z of z.inlines)this.push(Z)}if(this.current.length>0)this.pieces.push({type:"inlines",inlines:this.current});return this.pieces}}function X8(z){let Z=[],q=[];for(let K of z)if(K.type==="inlines")Z.push(...K.inlines);else q.push(...K.blocks);return{content:Z,attachments:q}}function _8(z){let Z=[];for(let q of z)if(q.type==="inlines")Z.push({type:"paragraph",inlines:q.inlines});else Z.push(...q.blocks);return Z}function D8(z,Z){for(let q of z.childElems()){if(q.is($.MC,"Fallback"))continue;if(q.is($.W,"txbxContent"))Z.push(q);else D8(q,Z)}}function U8(z,Z){let q=z.childElems();for(let K=0;K<q.length;K+=1){let Q=q[K];if(Z.docPr===void 0&&Q.is($.WP,"docPr"))Z.docPr=Q;else if(Z.chart===void 0&&Q.is($.CHART,"chart"))Z.chart=Q;else if(Z.relIds===void 0&&Q.is($.DGM,"relIds"))Z.relIds=Q;else if(Z.ole===void 0&&Q.is($.O_VML,"OLEObject"))Z.ole=Q;else if(Z.blip===void 0&&Q.is($.A,"blip"))Z.blip=Q;else if(Z.imagedata===void 0&&Q.is($.VML,"imagedata"))Z.imagedata=Q;if(Z.docPr!==void 0&&Z.chart!==void 0&&Z.relIds!==void 0&&Z.ole!==void 0&&Z.blip!==void 0&&Z.imagedata!==void 0)return;if(U8(Q,Z),Z.docPr!==void 0&&Z.chart!==void 0&&Z.relIds!==void 0&&Z.ole!==void 0&&Z.blip!==void 0&&Z.imagedata!==void 0)return}}function _Z(z){let Z=0,q=z.length;while(Z<q&&J8(z[Z]))Z+=1;while(q>Z&&J8(z[q-1]))q-=1;return z.slice(Z,q)}function W8(){return{elem:void 0,merged:[],colSpan:1,rowSpan:1,covered:!1}}function j8(z,Z){let q=z?.find($.W,Z)?.attr($.W,"val"),K=q!==void 0?O(q):void 0;return Math.min(K??0,1000)}function WZ(z,Z){let q=[];for(let X of z.findAll($.W,"tr")){let G=X.find($.W,"trPr"),_=[];for(let H=0;H<j8(G,"gridBefore");H+=1)_.push(W8());d(X,_);for(let H=0;H<j8(G,"gridAfter");H+=1)_.push(W8());q.push(_)}let K=new Map;for(let X=0;X<q.length;X+=1){let G=0,_=[];for(let H=0;H<q[X].length;H+=1){let F=q[X][H].covered,M=q[X][H].colSpan;if(F){let j=K.get(G);if(j!==void 0){q[j[0]][j[1]].rowSpan+=1;for(let A=G;A<G+M;A+=1)_.push([A,j])}else q[X][H].covered=!1}else for(let j=G;j<G+M;j+=1)_.push([j,[X,H]]);G+=M}K=new Map(_)}let Q=0;for(let X of z.findAll($.W,"tr")){let G=X.find($.W,"trPr");if(G!==void 0&&U(G,"tblHeader")===!0)Q+=1;else break}let Y=new r8;for(let X of q){Y.nextRow();for(let G of X)if(G.covered)for(let _=0;_<G.colSpan;_+=1)Y.covered();else{let _=G.elem!==void 0?E(G.elem,Z):[];for(let H of G.merged)_.push(...E(H,Z));Y.place(a8(_,G.colSpan,G.rowSpan))}}let J=Y.finish("data");if(J.grid.length===0)return[];return J.headerRows=l8(J,Q),[{type:"table",table:J}]}function d(z,Z){for(let q of z.childElems()){if(q.ns!==$.W)continue;switch(q.local){case"tc":{let K=q.find($.W,"tcPr"),Q=K?.find($.W,"vMerge"),Y=Q!==void 0&&Q.attr($.W,"val")!=="restart",J=K?.find($.W,"gridSpan")?.attr($.W,"val"),X=J!==void 0?O(J):void 0,G=Math.min(Math.max(X??1,1),1000),_=K?.find($.W,"hMerge");if(_!==void 0&&_.attr($.W,"val")!=="restart"){let F=Z[Z.length-1];if(F!==void 0&&!F.covered){F.colSpan+=G,F.merged.push(q);break}}Z.push({elem:q,merged:[],colSpan:G,rowSpan:1,covered:Y});break}case"sdt":{let K=q.find($.W,"sdtContent");if(K!==void 0)d(K,Z);break}case"customXml":d(q,Z);break;default:break}}}//! OOXML WordprocessingML (.docx / .docm).
|
|
13
13
|
//!
|
|
14
14
|
//! Resolution pipeline: package parts -> style/numbering models ->
|
|
15
15
|
//! spec-order property resolution -> document model.
|
|
16
|
-
function O8(
|
|
16
|
+
function O8(z){let Z;try{Z=jZ.open(z)}catch(T){let L=CZ(z);if(L!==void 0)throw L;throw T}let K=c(Z,"_rels/.rels").firstOfType(S.OFFICE_DOCUMENT),Q="word/document.xml";if(K!==void 0)try{Q=i("",K.target).path}catch{Q="word/document.xml"}let Y=c(Z,T8(Q)),J=g(Y,Q,S.STYLES,"styles.xml"),X=Z.optionalXmlPart(J),G=B.parseOpt(X?.find(N.W,"styles")),_=g(Y,Q,S.NUMBERING,"numbering.xml"),F=Z.optionalXmlPart(_)?.find(N.W,"numbering"),M=F!==void 0?K8(F,(T)=>G.directNumId(T)):new f,A=Z.requiredXmlPart(Q).find(N.W,"document")?.find(N.W,"body");if(A===void 0)throw FZ.malformedPart(Q,"no document body");let D=new b,w=new MZ,N8=g(Y,Q,S.FOOTNOTES,"footnotes.xml"),B8=g(Y,Q,S.ENDNOTES,"endnotes.xml"),r={pkg:Z,rels:Y,basePart:Q,styles:G,numbering:M,counters:D,assets:w},E8=E(A,r),n=[],L8=[{part:N8,rootName:"footnotes",elemName:"footnote",prefix:"fn",kind:"footnote"},{part:B8,rootName:"endnotes",elemName:"endnote",prefix:"en",kind:"endnote"}];for(let T of L8){let L=Z.optionalXmlPart(T.part);if(L===void 0)continue;let t=L.find(N.W,T.rootName);if(t===void 0)continue;let S8=c(Z,T8(T.part)),w8=A8(r,S8,T.part);for(let y of t.findAll(N.W,T.elemName)){let v=y.attr(N.W,"type");if(v==="separator"||v==="continuationSeparator"||v==="continuationNotice")continue;let l=y.attr(N.W,"id");if(l===void 0)continue;n.push({id:`${T.prefix}${l}`,kind:T.kind,blocks:E(y,w8)})}}return{blocks:E8,notes:n,assets:w.assets}}function g(z,Z,q,K){let Q=z.firstOfType(q)?.target??K;try{return i(Z,Q).path}catch(Y){let J=Y instanceof Error?Y.message:String(Y);AZ(`skipping unresolvable related-part target ${JSON.stringify(Q)}: ${J}`);try{return i(Z,K).path}catch{return K}}}var TZ=new Set(["docx","docm","dotx","dotm"]);function a(){return{id:"docx",sniff(z,Z){if(VZ(z)==="docx")return 2;if(Z?.path!==void 0&&TZ.has(UZ(Z.path)??""))return 1;return 0},convert(z){return{markdown:DZ(O8(z))}}}}import{create as OZ}from"@mdgate/core";var NZ=OZ([a()]);function BZ(z,Z){return NZ(z,Z)}export{BZ as toMarkdown,a as docx};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mdgate/docx",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "mdgate Word converter (docx/docm)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -22,11 +22,11 @@
|
|
|
22
22
|
"prepublishOnly": "bun run build"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@mdgate/containers": "0.
|
|
26
|
-
"@mdgate/core": "0.
|
|
27
|
-
"@mdgate/document": "0.
|
|
28
|
-
"@mdgate/office-common": "0.
|
|
29
|
-
"@mdgate/utils": "0.
|
|
25
|
+
"@mdgate/containers": "0.4.0",
|
|
26
|
+
"@mdgate/core": "0.4.0",
|
|
27
|
+
"@mdgate/document": "0.4.0",
|
|
28
|
+
"@mdgate/office-common": "0.4.0",
|
|
29
|
+
"@mdgate/utils": "0.4.0"
|
|
30
30
|
},
|
|
31
31
|
"publishConfig": {
|
|
32
32
|
"access": "public"
|