@mdgate/odf 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 CHANGED
@@ -1,9 +1,9 @@
1
1
  # @mdgate/odf
2
2
 
3
- Convert OpenDocument text, spreadsheets, and presentations to Markdown. Outputs GitHub-Flavored Markdown. Works in Node, Edge, and
3
+ Convert OpenDocument text, spreadsheets, presentations, and drawings to Markdown. Outputs GitHub-Flavored Markdown. Works in Node, Edge, and
4
4
  browsers. No native addons.
5
5
 
6
- Handles: `.odt`, `.ods`, `.odp`
6
+ Handles: `.odt`, `.ods`, `.odp`, `.odg`, templates (`.ott`, `.ots`, `.otp`, `.otg`), and flat XML (`.fodt`, `.fods`, `.fodp`, `.fodg`)
7
7
 
8
8
  ## Usage
9
9
 
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{detectZipDoc as UZ}from"@mdgate/containers";import{documentToMarkdown as MZ}from"@mdgate/document";import{fileExtension as VZ}from"@mdgate/utils";import{ns as V,Package as WZ}from"@mdgate/containers";import{ConvertError as n}from"@mdgate/core";import{inlinesAreEmpty as a,inlinesToPlainText as YZ}from"@mdgate/document";import{AssetSink as GZ}from"@mdgate/office-common";import{ns as j}from"@mdgate/containers";import{ConvertError as B8}from"@mdgate/core";import{emptyDelta as Z8,fromStyleName as I8,mergeDelta as T8}from"@mdgate/office-common";var F=10;function q8(){return{marker:"bullet",start:1,prefix:"",suffix:void 0,displayLevels:1}}function h(z,Z){let q=[];if(z.prefix.length>0)q.push({type:"literal",text:z.prefix});let J=E8(z.displayLevels,1,Z+1),Q=Z+1-J,$=0;for(let K=Q;K<=Z;K+=1){if($>0)q.push({type:"literal",text:"."});q.push({type:"level",level:K}),$+=1}if(z.suffix!==void 0&&z.suffix.length>0)q.push({type:"literal",text:z.suffix});return{text:q,legal:!1}}class b{raw=new Map;memo=new Map;listStyles=new Map;outline;defaults=new Map;collect(z){for(let Z of z.childElems())for(let q of Z.childElems()){if(!(q.is(j.OFFICE,"automatic-styles")||q.is(j.OFFICE,"styles")))continue;for(let J of q.childElems()){if(J.is(j.STYLE,"default-style")){let Q=J.attr(j.STYLE,"family");if(Q!==void 0)this.defaults.set(Q,e(J))}if(J.is(j.STYLE,"style")){let Q=J.attr(j.STYLE,"name");if(Q!==void 0){let $=J.attr(j.STYLE,"family")??"",K=J.attr(j.STYLE,"parent-style-name"),H=K!==void 0?S($,K):void 0;this.raw.set(S($,Q),{def:J,parent:H})}}if(J.is(j.TEXT,"list-style")){let Q=J.attr(j.STYLE,"name");if(Q!==void 0)this.listStyles.set(Q,t(J))}if(J.is(j.TEXT,"outline-style"))this.outline=t(J)}}}delta(z,Z){let q=S(z,Z),J=this.memo.get(q);if(J!==void 0)return{...J};let Q=[],$=new Set,K=this.raw.has(q)?q:void 0;while(K!==void 0){if($.has(K))throw B8.malformed(`style inheritance cycle at ${JSON.stringify(K)}`);$.add(K),Q.push(K);let Y=this.raw.get(K)?.parent;K=Y!==void 0&&this.raw.has(Y)?Y:void 0}let H=this.defaults.get(z);H=H!==void 0?{...H}:Z8();for(let Y=Q.length-1;Y>=0;Y-=1){let G=Q[Y],X=this.raw.get(G).def;H=T8(H,e(X)),this.memo.set(G,{...H})}return H}blockStyle(z){let Z=S("paragraph",z),q=new Set;while(!q.has(Z)){q.add(Z);let J=this.raw.get(Z);if(J===void 0)return;let Q=J.def.attr(j.STYLE,"name");if(Q!==void 0){let $=I8(Q);if($!==void 0)return $}if(J.parent===void 0)return;Z=J.parent}return}listLevel(z,Z){let J=this.listStyles.get(z)?.[Z];return J!==void 0?{...J}:q8()}listLevels(z){return this.listStyles.get(z)}outlineLevels(){return this.outline}}function L(z){let Z=I(z);if(Z===void 0)return;return Math.min(Z,4294967295)}function t(z){let Z=Array.from({length:F},()=>q8());for(let q of z.childElems()){let J=q.attr(j.TEXT,"level");if(J===void 0)continue;let Q=I(J);if(Q===void 0||Q<1||Q>F)continue;let $=Z[Q-1];if(q.is(j.TEXT,"list-level-style-number")||q.is(j.TEXT,"outline-level-style")){let K=q.attr(j.STYLE,"num-format");if(K==="a")$.marker="lowerAlpha";else if(K==="A")$.marker="upperAlpha";else if(K==="i")$.marker="lowerRoman";else if(K==="I")$.marker="upperRoman";else if(K==="")$.marker="bullet";else $.marker="decimal";let H=q.attr(j.TEXT,"start-value");$.start=H!==void 0?L(H)??1:1,$.prefix=q.attr(j.STYLE,"num-prefix")??"";let Y=q.attr(j.STYLE,"num-suffix");$.suffix=Y!==void 0?Y:void 0;let G=q.attr(j.TEXT,"display-levels"),X=G!==void 0?I(G):void 0;$.displayLevels=X??1}}return Z}function e(z){let Z=z.find(j.STYLE,"text-properties");if(Z===void 0)return Z8();let q=Z.attr(j.FO,"font-weight"),J;if(q!==void 0){let Y=S8(q);J=q==="bold"||Y!==void 0&&Y>=600}let Q=Z.attr(j.FO,"font-style"),$=Q!==void 0?Q==="italic"||Q==="oblique":void 0,K=Z.attr(j.STYLE,"text-line-through-style");return{bold:J,italic:$,strike:K!==void 0?K!=="none":void 0,code:void 0}}function S(z,Z){return`${z}\x00${Z}`}function E8(z,Z,q){return Math.min(q,Math.max(Z,z))}function I(z){if(z.length===0||!/^[0-9]+$/.test(z))return;let Z;try{Z=BigInt(z)}catch{return}if(Z>0xffff_ffff_ffff_ffffn)return;if(Z>BigInt(Number.MAX_SAFE_INTEGER))return Number.MAX_SAFE_INTEGER;return Number(Z)}function S8(z){if(z.length===0||!/^[0-9]+$/.test(z))return;let Z;try{Z=BigInt(z)}catch{return}if(Z>0xffff_ffffn)return;return Number(Z)}import{ns as U}from"@mdgate/containers";import{ConvertError as V8}from"@mdgate/core";import{cellSpanning as o8,GridBuilder as i8,heading as r8,inlinesAreEmpty as c8,MAX_EXPANSION as n8,MAX_EXPANSION_TEXT_BYTES as a8,plain as P8,resolveHeaderRows as s8}from"@mdgate/document";import{debug as l8}from"@mdgate/utils";import{decodeFragment as L8,ns as O,resolve as w8}from"@mdgate/containers";import{inlinesAreEmpty as Q8,inlinesToPlainText as f8,markerIsOrdered as x,markerLabel as g8}from"@mdgate/document";import{compositeLabel as $8,mediaTypeFor as k8,mergeDelta as y8,rebaseEmphasis as v8,resolveDelta as H8,StyledRun as K8}from"@mdgate/office-common";import{cleanText as W8,collapseWs as h8,isAbsoluteUri as Y8,warn as z8}from"@mdgate/utils";var u={bold:!1,italic:!1,strike:!1,code:!1};class d{styles;pkg;assets;notes=[];listCounters=new Map;listIds=new Map;headingValues=Array.from({length:F},()=>0);headingStarted=Array.from({length:F},()=>!1);constructor(z,Z,q){this.styles=z,this.pkg=Z,this.assets=q}}function R(z,Z){let q=[],J=new K8;for(let Q of z.childElems())G8(Q,Z,q,J);return J.flush(q),q}function G8(z,Z,q,J){if(z.ns===O.TEXT){if(!z.is(O.TEXT,"p"))J.flush(q);switch(z.local){case"h":{let $=z.attr(O.TEXT,"outline-level"),H=($!==void 0?d8($):void 0)??1,[Y,G]=J8(z,Z);if(!Q8(Y)){let X=Y;v8(X,H8(O8(z,Z)));let W=f8(X),M=u8(z,H,Z);if(M!==void 0)X.unshift({type:"text",text:M,style:{...u}});q.push({type:"heading",level:H,anchor:W,content:X})}q.push(...G);return}case"p":{let[$,K]=J8(z,Z),H=z.attr(O.TEXT,"style-name"),Y=H!==void 0?Z.styles.blockStyle(H):void 0;if(Y!==void 0)J.push(Y,$,q);else J.flush(q),q.push({type:"paragraph",inlines:$});if(K.length>0)J.flush(q),q.push(...K);return}case"list":q.push(...X8(z,Z,0,void 0,[]));return;case"section":case"index-body":case"index-title":q.push(...R(z,Z));return;case"table-of-content":case"alphabetical-index":case"bibliography":case"illustration-index":q.push(...R(z,Z));return;default:return}}if(z.is(O.TABLE,"table"))J.flush(q),q.push(...T(z,Z))}function X8(z,Z,q,J,Q){let $=z.attr(O.TEXT,"style-name")??J,K=Z.styles.listLevel($??"",q),H=x(K.marker),Y=`${$??""}\x00${q}`,G=K.start;if(H){let _=z.attr(O.TEXT,"continue-list");if(_!==void 0){let D=Z.listIds.get(_);if(D!==void 0)G=D}else if(z.attr(O.TEXT,"continue-numbering")==="true"){let D=Z.listCounters.get(Y);if(D!==void 0)G=D}}let X=[],W={marker:K.marker,start:G,items:[]},M=G,P=!0,A=(_)=>{let D=W;if(W={marker:W.marker,start:_,items:[]},D.items.length>0)X.push({type:"list",list:D})};for(let _ of z.childElems()){let D=_.is(O.TEXT,"list-header");if(!(D||_.is(O.TEXT,"list-item")))continue;if(!D&&H){let N=_.attr(O.TEXT,"start-value"),v=N!==void 0?L(N):void 0;if(v!==void 0)if(P)W.start=v;else A(v)}let C8=p(W.start,W.items.length),l=Q.concat(C8),C=[],y=new K8;for(let N of _.childElems())if(N.is(O.TEXT,"list"))y.flush(C),C.push(...X8(N,Z,q+1,$,l));else G8(N,Z,C,y);if(y.flush(C),D){A(M),X.push(...C);continue}P=!1;let N8=b8(Z,$,q,l);W.items.push({blocks:C,checked:void 0,markerLabel:N8}),M=p(W.start,W.items.length)}if(A(M),H&&X.length>0){Z.listCounters.set(Y,M);let _=z.attrQualified(O.XML,"id");if(_!==void 0)Z.listIds.set(_,M)}return X}function b8(z,Z,q,J){if(Z===void 0)return;let Q=z.styles.listLevels(Z);if(Q===void 0)return;let $=Math.min(q,F-1),K=Q[$];if(!x(K.marker))return;return $8(h(K,$),K.marker,J[J.length-1]??1,(H)=>Q[Math.min(H,F-1)].marker,(H)=>J[H]??Q[Math.min(H,F-1)].start)}function u8(z,Z,q){let J=q.styles.outlineLevels();if(J===void 0)return;let Q=Math.min(Math.max(Z,1)-1,F-1),$=J[Q];if(!x($.marker))return;if(z.attr(O.TEXT,"is-list-header")==="true")return;let{headingValues:K,headingStarted:H}=q,Y=z.attr(O.TEXT,"restart-numbering")==="true",G=z.attr(O.TEXT,"start-value"),X=G!==void 0?L(G):void 0,W;if(X!==void 0)W=X;else if(H[Q]&&!Y)W=p(K[Q],1);else W=$.start;K[Q]=W,H[Q]=!0;for(let P=Q+1;P<H.length;P+=1)H[P]=!1;return`${$8(h($,Q),$.marker,W,(P)=>J[Math.min(P,F-1)].marker,(P)=>{let A=Math.min(P,F-1);return H[A]?K[A]:J[A].start})??g8($.marker,W)} `}function J8(z,Z){let q=O8(z,Z),J=[],Q=[];return w(z,Z,q,J,Q),[J,Q]}function O8(z,Z){return Z.styles.delta("paragraph",z.attr(O.TEXT,"style-name")??"")}function w(z,Z,q,J,Q){let $=H8(q);for(let K of z.children){if(K.type==="text"){let G=h8(W8(K.text));if(G.length>0)J.push({type:"text",text:G,style:{...$}});continue}let H=K.elem;if(H.ns===O.TEXT)switch(H.local){case"span":{let G=H.attr(O.TEXT,"style-name"),X=G!==void 0?y8(q,Z.styles.delta("text",G)):q;w(H,Z,X,J,Q);continue}case"a":{let G=H.attr(O.XLINK,"href")??"",X=[];w(H,Z,q,X,Q);let W=x8(G);if(W!==void 0&&!Q8(X))J.push({type:"link",content:X,target:W});else J.push(...X);continue}case"s":{let G=H.attr(O.TEXT,"c"),X=G!==void 0?m8(G):void 0,W=Math.min(X??1,20);J.push({type:"text",text:" ".repeat(W),style:{...u}});continue}case"tab":J.push({type:"text",text:" ",style:{...u}});continue;case"line-break":J.push({type:"lineBreak"});continue;case"bookmark":case"bookmark-start":{let G=H.attr(O.TEXT,"name");if(G!==void 0)J.push({type:"anchor",id:G});continue}case"note":{let G=Z.notes.length,X=H.attr(O.TEXT,"id")??`odt${G}`,W=H.attr(O.TEXT,"note-class")==="endnote"?"endnote":"footnote",M=H.find(O.TEXT,"note-body"),P=M!==void 0?R(M,Z):[];Z.notes.push({id:X,kind:W,blocks:P}),J.push({type:"noteRef",id:X});continue}case"annotation":case"tracked-changes":case"soft-page-break":continue;default:break}if(H.is(O.DRAW,"frame")){m(H,Z,J,Q);continue}w(H,Z,q,J,Q)}}function m(z,Z,q,J){let Q=z.find(O.DRAW,"text-box");if(Q!==void 0){J.push(...R(Q,Z));return}let $=z.firstDescendant(O.SVG_COMPAT,"title"),K=$===void 0?z.firstDescendant(O.SVG_COMPAT,"desc"):void 0,H=($??K)?.text()??"",Y=W8(H.trim()),G=z.firstDescendant(O.DRAW,"image");if(G!==void 0){let X=G.attr(O.XLINK,"href")??"",W=p8(Z,X);if(W!==void 0||Y.length>0)q.push({type:"image",alt:Y,source:W??{type:"unavailable"}});return}if(Y.length>0)q.push({type:"image",alt:Y,source:{type:"unavailable"}})}function p8(z,Z){if(Z.length===0)return;if(Y8(Z))return{type:"external",url:Z};let q;try{q=w8("content.xml",Z)}catch(Q){z8(`skipping unresolvable image reference ${JSON.stringify(Z)}: ${Q instanceof Error?Q.message:String(Q)}`);return}let J=z.pkg.optionalPart(q.path);if(J!==void 0){let Q=k8(q.path);return{type:"asset",id:z.assets.add(Q,q.path,J)}}z8(`image part ${q.path} is missing`);return}function x8(z){if(z.length===0)return;if(z.startsWith("#")){let Z=z.slice(1),q=Z.split("|")[0]??Z;if(q.length===0)return;return{type:"anchor",id:L8(q)}}if(Y8(z))return{type:"external",url:z};return{type:"relative",url:z}}function d8(z){if(z.length===0||!/^[0-9]+$/.test(z))return;let Z=Number(z);if(!Number.isInteger(Z)||Z>255)return;return Z}function m8(z){if(z.length===0||!/^[0-9]+$/.test(z))return;let Z;try{Z=BigInt(z)}catch{return}if(Z>0xffff_ffff_ffff_ffffn)return;if(Z>BigInt(Number.MAX_SAFE_INTEGER))return Number.MAX_SAFE_INTEGER;return Number(Z)}function p(z,Z){let q=z+Z;if(!Number.isFinite(q)||q>Number.MAX_SAFE_INTEGER)return Number.MAX_SAFE_INTEGER;return q}function T(z,Z){let q={builder:new i8,expansion:0,expansionBytes:0,pendingRows:0,headerRows:0,rowsEmitted:0};r(z,Z,q,!0);let J=q.builder.finish("data");if(J.grid.length===0)return[];return J.headerRows=s8(J,q.headerRows),[{type:"table",table:J}]}function E(z,Z){if(z.expansion=k(z.expansion,Z),z.expansion>n8)throw V8.resourceLimit("max_expansion","table repeat expansion exceeds the content budget")}function t8(z,Z){if(z.expansionBytes=k(z.expansionBytes,Z),z.expansionBytes>a8)throw V8.resourceLimit("max_expansion_text_bytes","table repeat expansion duplicates more text than the budget")}function i(z){let Z=0;for(let q of z)switch(q.type){case"text":Z+=q.text.length;break;case"link":{let J=q.target.type==="external"||q.target.type==="relative"?q.target.url.length:q.target.id.length;Z+=i(q.content)+J;break}case"image":Z+=q.alt.length;break;case"anchor":case"noteRef":Z+=q.id.length;break;case"lineBreak":Z+=1;break}return Z}function g(z){let Z=0;for(let q of z)switch(q.type){case"paragraph":Z+=i(q.inlines);break;case"heading":Z+=i(q.content);break;case"list":for(let J of q.list.items)Z+=g(J.blocks);break;case"table":for(let J of q.table.grid)for(let Q of J)if(Q.type==="origin")Z+=g(Q.cell.blocks);break;case"blockQuote":Z+=g(q.blocks);break;case"codeBlock":Z+=q.text.length;break;case"rule":break}return Z}function r(z,Z,q,J){for(let Q of z.childElems()){if(Q.ns!==U.TABLE)continue;switch(Q.local){case"table-header-rows":{let $=q.rowsEmitted;if(r(Q,Z,q,!1),J&&q.headerRows===0)q.headerRows=q.rowsEmitted-$;break}case"table-rows":case"table-row-group":r(Q,Z,q,!1);break;case"table-row":{let $=D8(Q.attr(U.TABLE,"number-rows-repeated"));e8(Q,Z,q,$);break}default:break}}}function e8(z,Z,q,J){if($Z(z)){q.pendingRows=k(q.pendingRows,J);return}if(q.pendingRows>0)E(q,q.pendingRows),q.builder.nextRows(q.pendingRows),q.rowsEmitted+=q.pendingRows,q.pendingRows=0;let Q=ZZ(z,Z);E(q,M8(J,1));for(let $ of Q)if($.kind==="cell"){let K=M8(c(J,$.repeat),1);t8(q,c($.bytes,K))}for(let $=0;$<J;$+=1)q.builder.nextRow(),q.rowsEmitted+=1,qZ(Q,q)}function ZZ(z,Z){let q=[];for(let J of z.childElems()){let Q=D8(J.attr(U.TABLE,"number-columns-repeated"));if(J.is(U.TABLE,"covered-table-cell")){q.push({kind:"covered",repeat:Q});continue}if(!J.is(U.TABLE,"table-cell"))continue;let $=U8(J.attr(U.TABLE,"number-columns-spanned")),K=U8(J.attr(U.TABLE,"number-rows-spanned")),H=zZ(J,Z),Y=g(H);q.push({kind:"cell",repeat:Q,colSpan:$,rowSpan:K,blocks:H,bytes:Y})}return q}function qZ(z,Z){let q=0;for(let J of z)if(J.kind==="covered"){j8(Z,q),q=0,E(Z,J.repeat);for(let Q=0;Q<J.repeat;Q+=1)if(!Z.builder.covered())l8("covered table cell without a spanning origin")}else{if(J.blocks.length===0&&J.colSpan===1&&J.rowSpan===1){q=k(q,J.repeat);continue}j8(Z,q),q=0,E(Z,c(J.repeat,J.colSpan));for(let Q=0;Q<J.repeat;Q+=1){let $=J.repeat===1?J.blocks:KZ(J.blocks);Z.builder.place(o8($,J.colSpan,J.rowSpan))}}}function j8(z,Z){if(Z===0)return;E(z,Z),z.builder.placeEmptyRun(Z)}function zZ(z,Z){let q=R(z,Z);if(q.some(($)=>$.type==="paragraph"?!c8($.inlines):!0))return q;let Q=JZ(z);if(Q!==void 0)return[{type:"paragraph",inlines:[P8(Q)]}];return[]}function JZ(z){let Z=z.attr(U.OFFICE,"value-type");if(Z===void 0)return;switch(Z){case"percentage":{let q=z.attr(U.OFFICE,"value");if(q===void 0)return;let J=B(q);if(J===void 0)return;return`${f(J*100)}%`}case"currency":{let q=z.attr(U.OFFICE,"value");if(q===void 0)return;let J=B(q);if(J===void 0)return;let Q=z.attr(U.OFFICE,"currency")??"";return Q.length===0?f(J):`${f(J)} ${Q}`}case"float":{let q=z.attr(U.OFFICE,"value");if(q===void 0)return;let J=B(q);if(J===void 0)return;return f(J)}case"date":return z.attr(U.OFFICE,"date-value");case"time":{let q=z.attr(U.OFFICE,"time-value");return q!==void 0?QZ(q):void 0}case"boolean":{let q=z.attr(U.OFFICE,"boolean-value");if(q===void 0)return;return q==="true"?"TRUE":"FALSE"}case"string":return z.attr(U.OFFICE,"string-value");default:return}}function f(z){if(Number.isNaN(z))return"NaN";if(z===Number.POSITIVE_INFINITY)return"inf";if(z===Number.NEGATIVE_INFINITY)return"-inf";return HZ(z)}function QZ(z){let Z=0,q="",J=!1,Q=!1;for(let W of z)if(W==="-"&&Z===0&&q.length===0)Q=!0;else if(W==="P");else if(W==="T")J=!0,q="";else if((W==="Y"||W==="M")&&!J){let M=B(q);if(M!==void 0&&M!==0)return z;q=""}else if((W==="W"||W==="D")&&!J){let M=W==="W"?604800:86400;Z+=(B(q)??0)*M,q=""}else if((W==="H"||W==="M"||W==="S")&&J){let M=W==="H"?3600:W==="M"?60:1;Z+=(B(q)??0)*M,q=""}else if(W>="0"&&W<="9"||W===".")q+=W;else q="";let $=Math.round(Z*1000);if(!($>=0&&$<1000000000000000000))return z;let K=Q?"-":"",H=Math.floor($/3600000),Y=$%3600000,G=Math.floor(Y/60000),X=Y%60000;if(X%1000!==0){let W=(X/1000).toFixed(3).padStart(6,"0");return`${K}${H}:${o(G)}:${W}`}return`${K}${H}:${o(G)}:${o(Math.floor(X/1000))}`}function $Z(z){return z.childElems().every((Z)=>{if(Z.is(U.TABLE,"covered-table-cell"))return!1;if(!Z.is(U.TABLE,"table-cell"))return!0;return Z.attr(U.TABLE,"number-columns-spanned")===void 0&&Z.attr(U.TABLE,"number-rows-spanned")===void 0&&Z.attr(U.OFFICE,"value-type")===void 0&&Z.children.length===0})}function _8(z,Z){let q=z.childElems().filter(($)=>$.is(U.TABLE,"table")),J=q.length>1,Q=[];for(let $ of q){let K=$.attr(U.TABLE,"name")??"",H=T($,Z);if(H.length===0)continue;if(J)Q.push(r8(2,[P8(K)]));Q.push(...H)}return Q}function D8(z){if(z===void 0)return 1;let Z=I(z);if(Z===void 0)return 1;return Math.max(Z,1)}function U8(z){if(z===void 0)return 1;if(!/^[0-9]+$/.test(z))return 1;let Z;try{Z=BigInt(z)}catch{return 1}if(Z>0xffff_ffffn)return 1;if(Z<1n)return 1;return Number(Z)}function B(z){let Z=z.toLowerCase();if(Z==="inf"||Z==="infinity"||Z==="+inf"||Z==="+infinity")return Number.POSITIVE_INFINITY;if(Z==="-inf"||Z==="-infinity")return Number.NEGATIVE_INFINITY;if(Z==="nan"||Z==="+nan"||Z==="-nan")return Number.NaN;if(!/^[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?$/.test(z))return;let q=Number(z);return Number.isFinite(q)?q:void 0}function HZ(z){if(Object.is(z,-0))return"-0";return String(z)}function o(z){return z<10?`0${z}`:String(z)}function KZ(z){return structuredClone(z)}function k(z,Z){let q=z+Z;if(!Number.isFinite(q)||q>Number.MAX_SAFE_INTEGER)return Number.MAX_SAFE_INTEGER;return q}function M8(z,Z){let q=z-Z;return q<0?0:q}function c(z,Z){let q=z*Z;if(!Number.isFinite(q)||q>Number.MAX_SAFE_INTEGER)return Number.MAX_SAFE_INTEGER;return q}function F8(z){let Z=WZ.open(z);if(XZ(Z))throw n.encrypted();let q=Z.optionalXmlPart("styles.xml"),J=Z.requiredXmlPart("content.xml"),Q=new b;if(q!==void 0)Q.collect(q);Q.collect(J);let $=J.find(V.OFFICE,"document-content")?.find(V.OFFICE,"body");if($===void 0)throw n.malformedPart("content.xml","no office:body");let K=new GZ,H=new d(Q,Z,K),Y=$.find(V.OFFICE,"text"),G=Y===void 0?$.find(V.OFFICE,"spreadsheet"):void 0,X=Y===void 0&&G===void 0?$.find(V.OFFICE,"presentation"):void 0,W;if(Y!==void 0)W=R(Y,H);else if(G!==void 0)W=_8(G,H);else if(X!==void 0)W=OZ(X,H);else throw n.malformedPart("content.xml","no recognized office body (text, spreadsheet, or presentation)");return{blocks:W,notes:H.notes,assets:K.assets}}function XZ(z){let Z=z.optionalXmlPart("META-INF/manifest.xml");if(Z===void 0)return!1;return Z.firstDescendant(V.MANIFEST,"encryption-data")!==void 0}function OZ(z,Z){let q=[];for(let J of z.findAll(V.DRAW,"page")){let Q=[],$=[],K=[];if(R8(J,Z,Q,$,K),q.push(...Q),q.push(...$),K.length>0)q.push({type:"blockQuote",blocks:K})}return q}function R8(z,Z,q,J,Q){for(let $ of z.childElems()){if($.is(V.PRESENTATION,"notes")){for(let K of $.descendants(V.DRAW,"frame")){let H=K.find(V.DRAW,"text-box");if(H!==void 0)Q.push(...R(H,Z))}continue}if($.ns!==V.DRAW)continue;switch($.local){case"frame":{let K=$.attr(V.PRESENTATION,"class")??"";if(K==="page-number"||K==="date-time"||K==="footer"||K==="header")continue;let H=[];for(let Y of $.childElems())if(Y.is(V.DRAW,"text-box"))H.push(...R(Y,Z));else if(Y.is(V.TABLE,"table"))H.push(...T(Y,Z));else if(Y.is(V.DRAW,"image")){let G=[],X=[];if(m($,Z,G,X),!a(G))H.push({type:"paragraph",inlines:G});H.push(...X);break}if(K==="title")jZ(H,q);else J.push(...H);break}case"g":R8($,Z,q,J,Q);break;case"custom-shape":case"rect":case"ellipse":case"polygon":case"path":case"line":case"connector":case"caption":{for(let K of $.childElems())if(K.is(V.TEXT,"p")||K.is(V.TEXT,"list")){J.push(...R($,Z));break}break}default:break}}}function jZ(z,Z){let q=[];for(let J of z){if(J.type!=="paragraph")continue;if(a(J.inlines))continue;if(q.length>0)q.push({type:"lineBreak"});q.push(...J.inlines)}if(!a(q))Z.push({type:"heading",level:2,anchor:YZ(q),content:q})}var A8=new Set(["odt","ods","odp"]);function s(){return{id:"odf",sniff(z,Z){if(A8.has(UZ(z)??""))return 2;if(Z?.path!==void 0&&A8.has(VZ(Z.path)??""))return 1;return 0},convert(z){return{markdown:MZ(F8(z))}}}}import{create as PZ}from"@mdgate/core";var _Z=PZ([s()]);function DZ(z,Z){return _Z(z,Z)}export{DZ as toMarkdown,s as odf};
1
+ import{detectZipDoc as Cq,hasOleMagic as CQ}from"@mdgate/containers";import{ConvertError as s}from"@mdgate/core";import{documentToMarkdown as IQ}from"@mdgate/document";import{fileExtension as TQ}from"@mdgate/utils";import{ns as O,Package as OQ,parseXml as MQ}from"@mdgate/containers";import{ConvertError as I}from"@mdgate/core";import{inlinesAreEmpty as l,inlinesToPlainText as _Q}from"@mdgate/document";import{AssetSink as RQ}from"@mdgate/office-common";import{ns as U}from"@mdgate/containers";import{ConvertError as Sq}from"@mdgate/core";import{emptyDelta as $q,fromStyleName as wq,mergeDelta as kq}from"@mdgate/office-common";var F=10;function Jq(){return{marker:"bullet",start:1,prefix:"",suffix:void 0,displayLevels:1}}function p(q,Q){let $=[];if(q.prefix.length>0)$.push({type:"literal",text:q.prefix});let J=fq(q.displayLevels,1,Q+1),Y=Q+1-J,z=0;for(let G=Y;G<=Q;G+=1){if(z>0)$.push({type:"literal",text:"."});$.push({type:"level",level:G}),z+=1}if(q.suffix!==void 0&&q.suffix.length>0)$.push({type:"literal",text:q.suffix});return{text:$,legal:!1}}class w{raw=new Map;memo=new Map;listStyles=new Map;outline;defaults=new Map;collect(q){for(let Q of q.childElems())for(let $ of Q.childElems()){if(!($.is(U.OFFICE,"automatic-styles")||$.is(U.OFFICE,"styles")))continue;for(let J of $.childElems()){if(J.is(U.STYLE,"default-style")){let Y=J.attr(U.STYLE,"family");if(Y!==void 0)this.defaults.set(Y,Qq(J))}if(J.is(U.STYLE,"style")){let Y=J.attr(U.STYLE,"name");if(Y!==void 0){let z=J.attr(U.STYLE,"family")??"",G=J.attr(U.STYLE,"parent-style-name"),H=G!==void 0?S(z,G):void 0;this.raw.set(S(z,Y),{def:J,parent:H})}}if(J.is(U.TEXT,"list-style")){let Y=J.attr(U.STYLE,"name");if(Y!==void 0)this.listStyles.set(Y,qq(J))}if(J.is(U.TEXT,"outline-style"))this.outline=qq(J)}}}delta(q,Q){let $=S(q,Q),J=this.memo.get($);if(J!==void 0)return{...J};let Y=[],z=new Set,G=this.raw.has($)?$:void 0;while(G!==void 0){if(z.has(G))throw Sq.malformed(`style inheritance cycle at ${JSON.stringify(G)}`);z.add(G),Y.push(G);let K=this.raw.get(G)?.parent;G=K!==void 0&&this.raw.has(K)?K:void 0}let H=this.defaults.get(q);H=H!==void 0?{...H}:$q();for(let K=Y.length-1;K>=0;K-=1){let Z=Y[K],j=this.raw.get(Z).def;H=kq(H,Qq(j)),this.memo.set(Z,{...H})}return H}blockStyle(q){let Q=S("paragraph",q),$=new Set;while(!$.has(Q)){$.add(Q);let J=this.raw.get(Q);if(J===void 0)return;let Y=J.def.attr(U.STYLE,"name");if(Y!==void 0){let z=wq(Y);if(z!==void 0)return z}if(J.parent===void 0)return;Q=J.parent}return}listLevel(q,Q){let J=this.listStyles.get(q)?.[Q];return J!==void 0?{...J}:Jq()}listLevels(q){return this.listStyles.get(q)}outlineLevels(){return this.outline}}function k(q){let Q=T(q);if(Q===void 0)return;return Math.min(Q,4294967295)}function qq(q){let Q=Array.from({length:F},()=>Jq());for(let $ of q.childElems()){let J=$.attr(U.TEXT,"level");if(J===void 0)continue;let Y=T(J);if(Y===void 0||Y<1||Y>F)continue;let z=Q[Y-1];if($.is(U.TEXT,"list-level-style-number")||$.is(U.TEXT,"outline-level-style")){let G=$.attr(U.STYLE,"num-format");if(G==="a")z.marker="lowerAlpha";else if(G==="A")z.marker="upperAlpha";else if(G==="i")z.marker="lowerRoman";else if(G==="I")z.marker="upperRoman";else if(G==="")z.marker="bullet";else z.marker="decimal";let H=$.attr(U.TEXT,"start-value");z.start=H!==void 0?k(H)??1:1,z.prefix=$.attr(U.STYLE,"num-prefix")??"";let K=$.attr(U.STYLE,"num-suffix");z.suffix=K!==void 0?K:void 0;let Z=$.attr(U.TEXT,"display-levels"),j=Z!==void 0?T(Z):void 0;z.displayLevels=j??1}}return Q}function Qq(q){let Q=q.find(U.STYLE,"text-properties");if(Q===void 0)return $q();let $=Q.attr(U.FO,"font-weight"),J;if($!==void 0){let K=gq($);J=$==="bold"||K!==void 0&&K>=600}let Y=Q.attr(U.FO,"font-style"),z=Y!==void 0?Y==="italic"||Y==="oblique":void 0,G=Q.attr(U.STYLE,"text-line-through-style");return{bold:J,italic:z,strike:G!==void 0?G!=="none":void 0,code:void 0}}function S(q,Q){return`${q}\x00${Q}`}function fq(q,Q,$){return Math.min($,Math.max(Q,q))}function T(q){if(q.length===0||!/^[0-9]+$/.test(q))return;let Q;try{Q=BigInt(q)}catch{return}if(Q>0xffff_ffff_ffff_ffffn)return;if(Q>BigInt(Number.MAX_SAFE_INTEGER))return Number.MAX_SAFE_INTEGER;return Number(Q)}function gq(q){if(q.length===0||!/^[0-9]+$/.test(q))return;let Q;try{Q=BigInt(q)}catch{return}if(Q>0xffff_ffffn)return;return Number(Q)}import{ns as V}from"@mdgate/containers";import{ConvertError as _q}from"@mdgate/core";import{cellSpanning as sq,GridBuilder as tq,heading as eq,inlinesAreEmpty as qQ,MAX_EXPANSION as QQ,MAX_EXPANSION_TEXT_BYTES as $Q,plain as Rq,resolveHeaderRows as JQ}from"@mdgate/document";import{debug as YQ}from"@mdgate/utils";import{decodeFragment as vq,ns as X,resolve as hq}from"@mdgate/containers";import{inlinesAreEmpty as zq,inlinesToPlainText as uq,markerIsOrdered as b,markerLabel as xq}from"@mdgate/document";import{compositeLabel as Gq,mediaTypeFor as pq,mergeDelta as yq,rebaseEmphasis as mq,resolveDelta as Hq,StyledRun as Kq}from"@mdgate/office-common";import{cleanText as Wq,collapseWs as dq,isAbsoluteUri as Zq,warn as y}from"@mdgate/utils";var m={bold:!1,italic:!1,strike:!1,code:!1};class o{styles;pkg;assets;notes=[];listCounters=new Map;listIds=new Map;headingValues=Array.from({length:F},()=>0);headingStarted=Array.from({length:F},()=>!1);constructor(q,Q,$){this.styles=q,this.pkg=Q,this.assets=$}}function P(q,Q){let $=[],J=new Kq;for(let Y of q.childElems())jq(Y,Q,$,J);return J.flush($),$}function jq(q,Q,$,J){if(q.ns===X.TEXT){if(!q.is(X.TEXT,"p"))J.flush($);switch(q.local){case"h":{let z=q.attr(X.TEXT,"outline-level"),H=(z!==void 0?aq(z):void 0)??1,[K,Z]=Yq(q,Q);if(!zq(K)){let j=K;mq(j,Hq(Uq(q,Q)));let W=uq(j),M=oq(q,H,Q);if(M!==void 0)j.unshift({type:"text",text:M,style:{...m}});$.push({type:"heading",level:H,anchor:W,content:j})}$.push(...Z);return}case"p":{let[z,G]=Yq(q,Q),H=q.attr(X.TEXT,"style-name"),K=H!==void 0?Q.styles.blockStyle(H):void 0;if(K!==void 0)J.push(K,z,$);else J.flush($),$.push({type:"paragraph",inlines:z});if(G.length>0)J.flush($),$.push(...G);return}case"list":$.push(...Xq(q,Q,0,void 0,[]));return;case"section":case"index-body":case"index-title":$.push(...P(q,Q));return;case"table-of-content":case"alphabetical-index":case"bibliography":case"illustration-index":$.push(...P(q,Q));return;default:return}}if(q.is(X.TABLE,"table"))J.flush($),$.push(...E(q,Q))}function Xq(q,Q,$,J,Y){let z=q.attr(X.TEXT,"style-name")??J,G=Q.styles.listLevel(z??"",$),H=b(G.marker),K=`${z??""}\x00${$}`,Z=G.start;if(H){let R=q.attr(X.TEXT,"continue-list");if(R!==void 0){let D=Q.listIds.get(R);if(D!==void 0)Z=D}else if(q.attr(X.TEXT,"continue-numbering")==="true"){let D=Q.listCounters.get(K);if(D!==void 0)Z=D}}let j=[],W={marker:G.marker,start:Z,items:[]},M=Z,_=!0,A=(R)=>{let D=W;if(W={marker:W.marker,start:R,items:[]},D.items.length>0)j.push({type:"list",list:D})};for(let R of q.childElems()){let D=R.is(X.TEXT,"list-header");if(!(D||R.is(X.TEXT,"list-item")))continue;if(!D&&H){let B=R.attr(X.TEXT,"start-value"),x=B!==void 0?k(B):void 0;if(x!==void 0)if(_)W.start=x;else A(x)}let Eq=d(W.start,W.items.length),e=Y.concat(Eq),N=[],u=new Kq;for(let B of R.childElems())if(B.is(X.TEXT,"list"))u.flush(N),N.push(...Xq(B,Q,$+1,z,e));else jq(B,Q,N,u);if(u.flush(N),D){A(M),j.push(...N);continue}_=!1;let Lq=bq(Q,z,$,e);W.items.push({blocks:N,checked:void 0,markerLabel:Lq}),M=d(W.start,W.items.length)}if(A(M),H&&j.length>0){Q.listCounters.set(K,M);let R=q.attrQualified(X.XML,"id");if(R!==void 0)Q.listIds.set(R,M)}return j}function bq(q,Q,$,J){if(Q===void 0)return;let Y=q.styles.listLevels(Q);if(Y===void 0)return;let z=Math.min($,F-1),G=Y[z];if(!b(G.marker))return;return Gq(p(G,z),G.marker,J[J.length-1]??1,(H)=>Y[Math.min(H,F-1)].marker,(H)=>J[H]??Y[Math.min(H,F-1)].start)}function oq(q,Q,$){let J=$.styles.outlineLevels();if(J===void 0)return;let Y=Math.min(Math.max(Q,1)-1,F-1),z=J[Y];if(!b(z.marker))return;if(q.attr(X.TEXT,"is-list-header")==="true")return;let{headingValues:G,headingStarted:H}=$,K=q.attr(X.TEXT,"restart-numbering")==="true",Z=q.attr(X.TEXT,"start-value"),j=Z!==void 0?k(Z):void 0,W;if(j!==void 0)W=j;else if(H[Y]&&!K)W=d(G[Y],1);else W=z.start;G[Y]=W,H[Y]=!0;for(let _=Y+1;_<H.length;_+=1)H[_]=!1;return`${Gq(p(z,Y),z.marker,W,(_)=>J[Math.min(_,F-1)].marker,(_)=>{let A=Math.min(_,F-1);return H[A]?G[A]:J[A].start})??xq(z.marker,W)} `}function Yq(q,Q){let $=Uq(q,Q),J=[],Y=[];return f(q,Q,$,J,Y),[J,Y]}function Uq(q,Q){return Q.styles.delta("paragraph",q.attr(X.TEXT,"style-name")??"")}function f(q,Q,$,J,Y){let z=Hq($);for(let G of q.children){if(G.type==="text"){let Z=dq(Wq(G.text));if(Z.length>0)J.push({type:"text",text:Z,style:{...z}});continue}let H=G.elem;if(H.ns===X.TEXT)switch(H.local){case"span":{let Z=H.attr(X.TEXT,"style-name"),j=Z!==void 0?yq($,Q.styles.delta("text",Z)):$;f(H,Q,j,J,Y);continue}case"a":{let Z=H.attr(X.XLINK,"href")??"",j=[];f(H,Q,$,j,Y);let W=nq(Z);if(W!==void 0&&!zq(j))J.push({type:"link",content:j,target:W});else J.push(...j);continue}case"s":{let Z=H.attr(X.TEXT,"c"),j=Z!==void 0?lq(Z):void 0,W=Math.min(j??1,20);J.push({type:"text",text:" ".repeat(W),style:{...m}});continue}case"tab":J.push({type:"text",text:" ",style:{...m}});continue;case"line-break":J.push({type:"lineBreak"});continue;case"bookmark":case"bookmark-start":{let Z=H.attr(X.TEXT,"name");if(Z!==void 0)J.push({type:"anchor",id:Z});continue}case"note":{let Z=Q.notes.length,j=H.attr(X.TEXT,"id")??`odt${Z}`,W=H.attr(X.TEXT,"note-class")==="endnote"?"endnote":"footnote",M=H.find(X.TEXT,"note-body"),_=M!==void 0?P(M,Q):[];Q.notes.push({id:j,kind:W,blocks:_}),J.push({type:"noteRef",id:j});continue}case"annotation":case"tracked-changes":case"soft-page-break":continue;default:break}if(H.is(X.DRAW,"frame")){c(H,Q,J,Y);continue}f(H,Q,$,J,Y)}}function c(q,Q,$,J){let Y=q.find(X.DRAW,"text-box");if(Y!==void 0){J.push(...P(Y,Q));return}let z=q.firstDescendant(X.SVG_COMPAT,"title"),G=z===void 0?q.firstDescendant(X.SVG_COMPAT,"desc"):void 0,H=(z??G)?.text()??"",K=Wq(H.trim()),Z=q.firstDescendant(X.DRAW,"image");if(Z!==void 0){let j=cq(Q,Z);if(j!==void 0||K.length>0)$.push({type:"image",alt:K,source:j??{type:"unavailable"}});return}if(K.length>0)$.push({type:"image",alt:K,source:{type:"unavailable"}})}function cq(q,Q){let $=Q.find(X.OFFICE,"binary-data");if($!==void 0){let G=iq($.text());if(G!==void 0&&G.length>0){let H=`office:binary-data/${q.assets.assets.length}`;return{type:"asset",id:q.assets.add(rq(G),H,G)}}}let J=Q.attr(X.XLINK,"href")??"";if(J.length===0)return;if(Zq(J))return{type:"external",url:J};if(q.pkg===void 0){y(`image part ${J} is missing`);return}let Y;try{Y=hq("content.xml",J)}catch(G){y(`skipping unresolvable image reference ${JSON.stringify(J)}: ${G instanceof Error?G.message:String(G)}`);return}let z=q.pkg.optionalPart(Y.path);if(z!==void 0){let G=pq(Y.path);return{type:"asset",id:q.assets.add(G,Y.path,z)}}y(`image part ${Y.path} is missing`);return}function iq(q){let Q="";for(let $=0;$<q.length;$+=1){let J=q.charCodeAt($);if(J===9||J===10||J===13||J===32)continue;Q+=q[$]}if(Q.length===0)return;try{let $=atob(Q),J=new Uint8Array($.length);for(let Y=0;Y<$.length;Y+=1)J[Y]=$.charCodeAt(Y);return J}catch{return}}function rq(q){if(q.length>=8&&q[0]===137&&q[1]===80&&q[2]===78&&q[3]===71)return"image/png";if(q.length>=3&&q[0]===255&&q[1]===216&&q[2]===255)return"image/jpeg";if(q.length>=3&&q[0]===71&&q[1]===73&&q[2]===70)return"image/gif";return"application/octet-stream"}function nq(q){if(q.length===0)return;if(q.startsWith("#")){let Q=q.slice(1),$=Q.split("|")[0]??Q;if($.length===0)return;return{type:"anchor",id:vq($)}}if(Zq(q))return{type:"external",url:q};return{type:"relative",url:q}}function aq(q){if(q.length===0||!/^[0-9]+$/.test(q))return;let Q=Number(q);if(!Number.isInteger(Q)||Q>255)return;return Q}function lq(q){if(q.length===0||!/^[0-9]+$/.test(q))return;let Q;try{Q=BigInt(q)}catch{return}if(Q>0xffff_ffff_ffff_ffffn)return;if(Q>BigInt(Number.MAX_SAFE_INTEGER))return Number.MAX_SAFE_INTEGER;return Number(Q)}function d(q,Q){let $=q+Q;if(!Number.isFinite($)||$>Number.MAX_SAFE_INTEGER)return Number.MAX_SAFE_INTEGER;return $}function E(q,Q){let $={builder:new tq,expansion:0,expansionBytes:0,pendingRows:0,headerRows:0,rowsEmitted:0};n(q,Q,$,!0);let J=$.builder.finish("data");if(J.grid.length===0)return[];return J.headerRows=JQ(J,$.headerRows),[{type:"table",table:J}]}function L(q,Q){if(q.expansion=h(q.expansion,Q),q.expansion>QQ)throw _q.resourceLimit("max_expansion","table repeat expansion exceeds the content budget")}function zQ(q,Q){if(q.expansionBytes=h(q.expansionBytes,Q),q.expansionBytes>$Q)throw _q.resourceLimit("max_expansion_text_bytes","table repeat expansion duplicates more text than the budget")}function r(q){let Q=0;for(let $ of q)switch($.type){case"text":Q+=$.text.length;break;case"link":{let J=$.target.type==="external"||$.target.type==="relative"?$.target.url.length:$.target.id.length;Q+=r($.content)+J;break}case"image":Q+=$.alt.length;break;case"anchor":case"noteRef":Q+=$.id.length;break;case"lineBreak":Q+=1;break}return Q}function v(q){let Q=0;for(let $ of q)switch($.type){case"paragraph":Q+=r($.inlines);break;case"heading":Q+=r($.content);break;case"list":for(let J of $.list.items)Q+=v(J.blocks);break;case"table":for(let J of $.table.grid)for(let Y of J)if(Y.type==="origin")Q+=v(Y.cell.blocks);break;case"blockQuote":Q+=v($.blocks);break;case"codeBlock":Q+=$.text.length;break;case"rule":break}return Q}function n(q,Q,$,J){for(let Y of q.childElems()){if(Y.ns!==V.TABLE)continue;switch(Y.local){case"table-header-rows":{let z=$.rowsEmitted;if(n(Y,Q,$,!1),J&&$.headerRows===0)$.headerRows=$.rowsEmitted-z;break}case"table-rows":case"table-row-group":n(Y,Q,$,!1);break;case"table-row":{let z=Fq(Y.attr(V.TABLE,"number-rows-repeated"));GQ(Y,Q,$,z);break}default:break}}}function GQ(q,Q,$,J){if(XQ(q)){$.pendingRows=h($.pendingRows,J);return}if($.pendingRows>0)L($,$.pendingRows),$.builder.nextRows($.pendingRows),$.rowsEmitted+=$.pendingRows,$.pendingRows=0;let Y=HQ(q,Q);L($,Mq(J,1));for(let z of Y)if(z.kind==="cell"){let G=Mq(a(J,z.repeat),1);zQ($,a(z.bytes,G))}for(let z=0;z<J;z+=1)$.builder.nextRow(),$.rowsEmitted+=1,KQ(Y,$)}function HQ(q,Q){let $=[];for(let J of q.childElems()){let Y=Fq(J.attr(V.TABLE,"number-columns-repeated"));if(J.is(V.TABLE,"covered-table-cell")){$.push({kind:"covered",repeat:Y});continue}if(!J.is(V.TABLE,"table-cell"))continue;let z=Oq(J.attr(V.TABLE,"number-columns-spanned")),G=Oq(J.attr(V.TABLE,"number-rows-spanned")),H=WQ(J,Q),K=v(H);$.push({kind:"cell",repeat:Y,colSpan:z,rowSpan:G,blocks:H,bytes:K})}return $}function KQ(q,Q){let $=0;for(let J of q)if(J.kind==="covered"){Vq(Q,$),$=0,L(Q,J.repeat);for(let Y=0;Y<J.repeat;Y+=1)if(!Q.builder.covered())YQ("covered table cell without a spanning origin")}else{if(J.blocks.length===0&&J.colSpan===1&&J.rowSpan===1){$=h($,J.repeat);continue}Vq(Q,$),$=0,L(Q,a(J.repeat,J.colSpan));for(let Y=0;Y<J.repeat;Y+=1){let z=J.repeat===1?J.blocks:VQ(J.blocks);Q.builder.place(sq(z,J.colSpan,J.rowSpan))}}}function Vq(q,Q){if(Q===0)return;L(q,Q),q.builder.placeEmptyRun(Q)}function WQ(q,Q){let $=P(q,Q);if($.some((z)=>z.type==="paragraph"?!qQ(z.inlines):!0))return $;let Y=ZQ(q);if(Y!==void 0)return[{type:"paragraph",inlines:[Rq(Y)]}];return[]}function ZQ(q){let Q=q.attr(V.OFFICE,"value-type");if(Q===void 0)return;switch(Q){case"percentage":{let $=q.attr(V.OFFICE,"value");if($===void 0)return;let J=C($);if(J===void 0)return;return`${g(J*100)}%`}case"currency":{let $=q.attr(V.OFFICE,"value");if($===void 0)return;let J=C($);if(J===void 0)return;let Y=q.attr(V.OFFICE,"currency")??"";return Y.length===0?g(J):`${g(J)} ${Y}`}case"float":{let $=q.attr(V.OFFICE,"value");if($===void 0)return;let J=C($);if(J===void 0)return;return g(J)}case"date":return q.attr(V.OFFICE,"date-value");case"time":{let $=q.attr(V.OFFICE,"time-value");return $!==void 0?jQ($):void 0}case"boolean":{let $=q.attr(V.OFFICE,"boolean-value");if($===void 0)return;return $==="true"?"TRUE":"FALSE"}case"string":return q.attr(V.OFFICE,"string-value");default:return}}function g(q){if(Number.isNaN(q))return"NaN";if(q===Number.POSITIVE_INFINITY)return"inf";if(q===Number.NEGATIVE_INFINITY)return"-inf";return UQ(q)}function jQ(q){let Q=0,$="",J=!1,Y=!1;for(let W of q)if(W==="-"&&Q===0&&$.length===0)Y=!0;else if(W==="P");else if(W==="T")J=!0,$="";else if((W==="Y"||W==="M")&&!J){let M=C($);if(M!==void 0&&M!==0)return q;$=""}else if((W==="W"||W==="D")&&!J){let M=W==="W"?604800:86400;Q+=(C($)??0)*M,$=""}else if((W==="H"||W==="M"||W==="S")&&J){let M=W==="H"?3600:W==="M"?60:1;Q+=(C($)??0)*M,$=""}else if(W>="0"&&W<="9"||W===".")$+=W;else $="";let z=Math.round(Q*1000);if(!(z>=0&&z<1000000000000000000))return q;let G=Y?"-":"",H=Math.floor(z/3600000),K=z%3600000,Z=Math.floor(K/60000),j=K%60000;if(j%1000!==0){let W=(j/1000).toFixed(3).padStart(6,"0");return`${G}${H}:${i(Z)}:${W}`}return`${G}${H}:${i(Z)}:${i(Math.floor(j/1000))}`}function XQ(q){return q.childElems().every((Q)=>{if(Q.is(V.TABLE,"covered-table-cell"))return!1;if(!Q.is(V.TABLE,"table-cell"))return!0;return Q.attr(V.TABLE,"number-columns-spanned")===void 0&&Q.attr(V.TABLE,"number-rows-spanned")===void 0&&Q.attr(V.OFFICE,"value-type")===void 0&&Q.children.length===0})}function Dq(q,Q){let $=q.childElems().filter((z)=>z.is(V.TABLE,"table")),J=$.length>1,Y=[];for(let z of $){let G=z.attr(V.TABLE,"name")??"",H=E(z,Q);if(H.length===0)continue;if(J)Y.push(eq(2,[Rq(G)]));Y.push(...H)}return Y}function Fq(q){if(q===void 0)return 1;let Q=T(q);if(Q===void 0)return 1;return Math.max(Q,1)}function Oq(q){if(q===void 0)return 1;if(!/^[0-9]+$/.test(q))return 1;let Q;try{Q=BigInt(q)}catch{return 1}if(Q>0xffff_ffffn)return 1;if(Q<1n)return 1;return Number(Q)}function C(q){let Q=q.toLowerCase();if(Q==="inf"||Q==="infinity"||Q==="+inf"||Q==="+infinity")return Number.POSITIVE_INFINITY;if(Q==="-inf"||Q==="-infinity")return Number.NEGATIVE_INFINITY;if(Q==="nan"||Q==="+nan"||Q==="-nan")return Number.NaN;if(!/^[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?$/.test(q))return;let $=Number(q);return Number.isFinite($)?$:void 0}function UQ(q){if(Object.is(q,-0))return"-0";return String(q)}function i(q){return q<10?`0${q}`:String(q)}function VQ(q){return structuredClone(q)}function h(q,Q){let $=q+Q;if(!Number.isFinite($)||$>Number.MAX_SAFE_INTEGER)return Number.MAX_SAFE_INTEGER;return $}function Mq(q,Q){let $=q-Q;return $<0?0:$}function a(q,Q){let $=q*Q;if(!Number.isFinite($)||$>Number.MAX_SAFE_INTEGER)return Number.MAX_SAFE_INTEGER;return $}function Aq(q){if(AQ(q))return DQ(q);return FQ(q)}function DQ(q){let Q=OQ.open(q);if(NQ(Q))throw I.encrypted();let $=Q.optionalXmlPart("styles.xml"),J=Q.requiredXmlPart("content.xml"),Y=new w;if($!==void 0)Y.collect($);Y.collect(J);let z=J.find(O.OFFICE,"document-content")?.find(O.OFFICE,"body");if(z===void 0)throw I.malformedPart("content.xml","no office:body");return Nq(z,Y,Q,"content.xml")}function FQ(q){let Q=MQ(q),$=Q.find(O.OFFICE,"document")??Q.find(O.OFFICE,"document-content");if($===void 0)throw I.malformed("no office:document");let J=$.find(O.OFFICE,"body");if(J===void 0)throw I.malformed("no office:body");let Y=new w;return Y.collect(Q),Nq(J,Y,void 0,void 0)}function Nq(q,Q,$,J){let Y=new RQ,z=new o(Q,$,Y);return{blocks:PQ(q,z,J),notes:z.notes,assets:Y.assets}}function PQ(q,Q,$){let J=q.find(O.OFFICE,"text"),Y=J===void 0?q.find(O.OFFICE,"spreadsheet"):void 0,z=J===void 0&&Y===void 0?q.find(O.OFFICE,"presentation"):void 0,G=J===void 0&&Y===void 0&&z===void 0?q.find(O.OFFICE,"drawing"):void 0;if(J!==void 0)return P(J,Q);if(Y!==void 0)return Dq(Y,Q);if(z!==void 0)return Pq(z,Q);if(G!==void 0)return Pq(G,Q);let H="no recognized office body (text, spreadsheet, presentation, or drawing)";if($!==void 0)throw I.malformedPart($,H);throw I.malformed(H)}function AQ(q){return q.length>=4&&q[0]===80&&q[1]===75&&q[2]===3&&q[3]===4}function NQ(q){let Q=q.optionalXmlPart("META-INF/manifest.xml");if(Q===void 0)return!1;return Q.firstDescendant(O.MANIFEST,"encryption-data")!==void 0}function Pq(q,Q){let $=q.findAll(O.DRAW,"page"),J=$.length>0?$:[q],Y=[];for(let z of J){let G=[],H=[],K=[];if(Bq(z,Q,G,H,K),Y.push(...G),Y.push(...H),K.length>0)Y.push({type:"blockQuote",blocks:K})}return Y}function Bq(q,Q,$,J,Y){for(let z of q.childElems()){if(z.is(O.PRESENTATION,"notes")){for(let G of z.descendants(O.DRAW,"frame")){let H=G.find(O.DRAW,"text-box");if(H!==void 0)Y.push(...P(H,Q))}continue}if(z.ns!==O.DRAW)continue;switch(z.local){case"frame":{let G=z.attr(O.PRESENTATION,"class")??"";if(G==="page-number"||G==="date-time"||G==="footer"||G==="header")continue;let H=[];for(let K of z.childElems())if(K.is(O.DRAW,"text-box"))H.push(...P(K,Q));else if(K.is(O.TABLE,"table"))H.push(...E(K,Q));else if(K.is(O.DRAW,"image")){let Z=[],j=[];if(c(z,Q,Z,j),!l(Z))H.push({type:"paragraph",inlines:Z});H.push(...j);break}if(G==="title")BQ(H,$);else J.push(...H);break}case"g":Bq(z,Q,$,J,Y);break;case"custom-shape":case"rect":case"ellipse":case"polygon":case"path":case"line":case"connector":case"caption":{for(let G of z.childElems())if(G.is(O.TEXT,"p")||G.is(O.TEXT,"list")){J.push(...P(z,Q));break}break}default:break}}}function BQ(q,Q){let $=[];for(let J of q){if(J.type!=="paragraph")continue;if(l(J.inlines))continue;if($.length>0)$.push({type:"lineBreak"});$.push(...J.inlines)}if(!l($))Q.push({type:"heading",level:2,anchor:_Q($),content:$})}var Iq=new Set(["odt","ods","odp","odg"]),EQ=new Set(["odt","ods","odp","odg","ott","ots","otp","otg","fodt","fods","fodp","fodg"]),LQ="urn:oasis:names:tc:opendocument:xmlns:office:1.0";function t(){return{id:"odf",sniff(q,Q){if(Iq.has(Cq(q)??""))return 2;if(wQ(q))return 2;if(Q?.path!==void 0&&EQ.has(TQ(Q.path)??""))return 1;return 0},convert(q){return SQ(q),{markdown:IQ(Aq(q))}}}}function SQ(q){if(fQ(q))throw s.unsupported("pdf");if(CQ(q))throw s.unsupported("ole");let Q=Cq(q);if(Q!==void 0&&!Iq.has(Q))throw s.unsupported(Q)}function wQ(q){if(!kQ(q))return!1;let Q=vQ(q.subarray(0,Math.min(q.length,8192)));return Q.includes(LQ)||Q.includes("office:document")}function kQ(q){let Q=Tq(q);return Q<q.length&&q[Q]===60}function fQ(q){let Q=Tq(q);return gQ(q,"%PDF-",Q)}function Tq(q){let Q=0;if(q.length>=3&&q[0]===239&&q[1]===187&&q[2]===191)Q=3;while(Q<q.length){let $=q[Q];if($!==9&&$!==10&&$!==13&&$!==32)break;Q+=1}return Q}function gQ(q,Q,$){if($+Q.length>q.length)return!1;for(let J=0;J<Q.length;J+=1)if(q[$+J]!==Q.charCodeAt(J))return!1;return!0}function vQ(q){return new TextDecoder("utf-8",{fatal:!1}).decode(q)}import{create as hQ}from"@mdgate/core";var uQ=hQ([t()]);function xQ(q,Q){return uQ(q,Q)}export{xQ as toMarkdown,t as odf};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mdgate/odf",
3
- "version": "0.1.0",
4
- "description": "mdgate OpenDocument converter (odt/ods/odp)",
3
+ "version": "0.4.0",
4
+ "description": "mdgate OpenDocument converter (odt/ods/odp/odg and flat/templates)",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "sideEffects": false,
@@ -22,11 +22,11 @@
22
22
  "prepublishOnly": "bun run build"
23
23
  },
24
24
  "dependencies": {
25
- "@mdgate/containers": "0.1.0",
26
- "@mdgate/core": "0.1.3",
27
- "@mdgate/document": "0.1.0",
28
- "@mdgate/office-common": "0.1.0",
29
- "@mdgate/utils": "0.1.2"
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"
@@ -40,6 +40,8 @@
40
40
  "odt",
41
41
  "ods",
42
42
  "odp",
43
+ "odg",
44
+ "fodt",
43
45
  "opendocument"
44
46
  ]
45
47
  }