@mdgate/odf 0.5.1 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +6 -6
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{detectZipDoc as Aq,hasOleMagic as _Q}from"@mdgate/containers";import{ConvertError as r}from"@mdgate/core";import{documentToMarkdown as PQ}from"@mdgate/document";import{fileExtension as RQ}from"@mdgate/utils";import{ns as U,Package as HQ,parseXml as KQ}from"@mdgate/containers";import{ConvertError as I}from"@mdgate/core";import{inlinesAreEmpty as i,inlinesToPlainText as WQ}from"@mdgate/document";import{AssetSink as XQ}from"@mdgate/office-common";import{ns as M}from"@mdgate/containers";import{ConvertError as Cq}from"@mdgate/core";import{emptyDelta as t,fromStyleName as Iq,mergeDelta as Tq}from"@mdgate/office-common";var A=10;function e(){return{marker:"bullet",start:1,prefix:"",suffix:void 0,displayLevels:1}}function v(q,Q){let Y=[];if(q.prefix.length>0)Y.push({type:"literal",text:q.prefix});let $=Eq(q.displayLevels,1,Q+1),J=Q+1-$,z=0;for(let G=J;G<=Q;G+=1){if(z>0)Y.push({type:"literal",text:"."});Y.push({type:"level",level:G}),z+=1}if(q.suffix!==void 0&&q.suffix.length>0)Y.push({type:"literal",text:q.suffix});return{text:Y,legal:!1}}class S{raw=new Map;memo=new Map;listStyles=new Map;outline;defaults=new Map;collect(q){for(let Q of q.childElems())for(let Y of Q.childElems()){if(!(Y.is(M.OFFICE,"automatic-styles")||Y.is(M.OFFICE,"styles")))continue;for(let $ of Y.childElems()){if($.is(M.STYLE,"default-style")){let J=$.attr(M.STYLE,"family");if(J!==void 0)this.defaults.set(J,s($))}if($.is(M.STYLE,"style")){let J=$.attr(M.STYLE,"name");if(J!==void 0){let z=$.attr(M.STYLE,"family")??"",G=$.attr(M.STYLE,"parent-style-name"),H=G!==void 0?L(z,G):void 0;this.raw.set(L(z,J),{def:$,parent:H})}}if($.is(M.TEXT,"list-style")){let J=$.attr(M.STYLE,"name");if(J!==void 0)this.listStyles.set(J,l($))}if($.is(M.TEXT,"outline-style"))this.outline=l($)}}}delta(q,Q){let Y=L(q,Q),$=this.memo.get(Y);if($!==void 0)return{...$};let J=[],z=new Set,G=this.raw.has(Y)?Y:void 0;while(G!==void 0){if(z.has(G))throw Cq.malformed(`style inheritance cycle at ${JSON.stringify(G)}`);z.add(G),J.push(G);let W=this.raw.get(G)?.parent;G=W!==void 0&&this.raw.has(W)?W:void 0}let H=this.defaults.get(q);H=H!==void 0?{...H}:t();for(let W=J.length-1;W>=0;W-=1){let X=J[W],Z=this.raw.get(X).def;H=Tq(H,s(Z)),this.memo.set(X,{...H})}return H}blockStyle(q){let Q=L("paragraph",q),Y=new Set;while(!Y.has(Q)){Y.add(Q);let $=this.raw.get(Q);if($===void 0)return;let J=$.def.attr(M.STYLE,"name");if(J!==void 0){let z=Iq(J);if(z!==void 0)return z}if($.parent===void 0)return;Q=$.parent}return}listLevel(q,Q){let $=this.listStyles.get(q)?.[Q];return $!==void 0?{...$}:e()}listLevels(q){return this.listStyles.get(q)}outlineLevels(){return this.outline}}function w(q){let Q=T(q);if(Q===void 0)return;return Math.min(Q,4294967295)}function l(q){let Q=Array.from({length:A},()=>e());for(let Y of q.childElems()){let $=Y.attr(M.TEXT,"level");if($===void 0)continue;let J=T($);if(J===void 0||J<1||J>A)continue;let z=Q[J-1];if(Y.is(M.TEXT,"list-level-style-number")||Y.is(M.TEXT,"outline-level-style")){let G=Y.attr(M.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=Y.attr(M.TEXT,"start-value");z.start=H!==void 0?w(H)??1:1,z.prefix=Y.attr(M.STYLE,"num-prefix")??"";let W=Y.attr(M.STYLE,"num-suffix");z.suffix=W!==void 0?W:void 0;let X=Y.attr(M.TEXT,"display-levels"),Z=X!==void 0?T(X):void 0;z.displayLevels=Z??1}}return Q}function s(q){let Q=q.find(M.STYLE,"text-properties");if(Q===void 0)return t();let Y=Q.attr(M.FO,"font-weight"),$;if(Y!==void 0){let W=Lq(Y);$=Y==="bold"||W!==void 0&&W>=600}let J=Q.attr(M.FO,"font-style"),z=J!==void 0?J==="italic"||J==="oblique":void 0,G=Q.attr(M.STYLE,"text-line-through-style");return{bold:$,italic:z,strike:G!==void 0?G!=="none":void 0,code:void 0}}function L(q,Q){return`${q}\x00${Q}`}function Eq(q,Q,Y){return Math.min(Y,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 Lq(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 O}from"@mdgate/containers";import{cellSpanning as iq,GridBuilder as rq,heading as aq,inlinesAreEmpty as nq,plain as jq,resolveHeaderRows as lq}from"@mdgate/document";import{debug as sq}from"@mdgate/utils";import{decodeFragment as Sq,ns as j,resolve as wq}from"@mdgate/containers";import{inlinesAreEmpty as Qq,inlinesToPlainText as kq,markerIsOrdered as y,markerLabel as fq}from"@mdgate/document";import{compositeLabel as Yq,mediaTypeFor as gq,mergeDelta as hq,rebaseEmphasis as vq,resolveDelta as $q,StyledRun as Jq}from"@mdgate/office-common";import{cleanText as zq,collapseWs as uq,isAbsoluteUri as Gq,warn as u}from"@mdgate/utils";var x={bold:!1,italic:!1,strike:!1,code:!1};class b{styles;pkg;assets;notes=[];listCounters=new Map;listIds=new Map;headingValues=Array.from({length:A},()=>0);headingStarted=Array.from({length:A},()=>!1);constructor(q,Q,Y){this.styles=q,this.pkg=Q,this.assets=Y}}function B(q,Q){let Y=[],$=new Jq;for(let J of q.childElems())Hq(J,Q,Y,$);return $.flush(Y),Y}function Hq(q,Q,Y,$){if(q.ns===j.TEXT){if(!q.is(j.TEXT,"p"))$.flush(Y);switch(q.local){case"h":{let z=q.attr(j.TEXT,"outline-level"),H=(z!==void 0?oq(z):void 0)??1,[W,X]=qq(q,Q);if(!Qq(W)){let Z=W;vq(Z,$q(Wq(q,Q)));let K=kq(Z),V=pq(q,H,Q);if(V!==void 0)Z.unshift({type:"text",text:V,style:{...x}});Y.push({type:"heading",level:H,anchor:K,content:Z})}Y.push(...X);return}case"p":{let[z,G]=qq(q,Q),H=q.attr(j.TEXT,"style-name"),W=H!==void 0?Q.styles.blockStyle(H):void 0;if(W!==void 0)$.push(W,z,Y);else $.flush(Y),Y.push({type:"paragraph",inlines:z});if(G.length>0)$.flush(Y),Y.push(...G);return}case"list":Y.push(...Kq(q,Q,0,void 0,[]));return;case"section":case"index-body":case"index-title":Y.push(...B(q,Q));return;case"table-of-content":case"alphabetical-index":case"bibliography":case"illustration-index":Y.push(...B(q,Q));return;default:return}}if(q.is(j.TABLE,"table"))$.flush(Y),Y.push(...E(q,Q))}function Kq(q,Q,Y,$,J){let z=q.attr(j.TEXT,"style-name")??$,G=Q.styles.listLevel(z??"",Y),H=y(G.marker),W=`${z??""}\x00${Y}`,X=G.start;if(H){let P=q.attr(j.TEXT,"continue-list");if(P!==void 0){let R=Q.listIds.get(P);if(R!==void 0)X=R}else if(q.attr(j.TEXT,"continue-numbering")==="true"){let R=Q.listCounters.get(W);if(R!==void 0)X=R}}let Z=[],K={marker:G.marker,start:X,items:[]},V=X,_=!0,D=(P)=>{let R=K;if(K={marker:K.marker,start:P,items:[]},R.items.length>0)Z.push({type:"list",list:R})};for(let P of q.childElems()){let R=P.is(j.TEXT,"list-header");if(!(R||P.is(j.TEXT,"list-item")))continue;if(!R&&H){let N=P.attr(j.TEXT,"start-value"),h=N!==void 0?w(N):void 0;if(h!==void 0)if(_)K.start=h;else D(h)}let Fq=p(K.start,K.items.length),n=J.concat(Fq),F=[],g=new Jq;for(let N of P.childElems())if(N.is(j.TEXT,"list"))g.flush(F),F.push(...Kq(N,Q,Y+1,z,n));else Hq(N,Q,F,g);if(g.flush(F),R){D(V),Z.push(...F);continue}_=!1;let Nq=xq(Q,z,Y,n);K.items.push({blocks:F,checked:void 0,markerLabel:Nq}),V=p(K.start,K.items.length)}if(D(V),H&&Z.length>0){Q.listCounters.set(W,V);let P=q.attrQualified(j.XML,"id");if(P!==void 0)Q.listIds.set(P,V)}return Z}function xq(q,Q,Y,$){if(Q===void 0)return;let J=q.styles.listLevels(Q);if(J===void 0)return;let z=Math.min(Y,A-1),G=J[z];if(!y(G.marker))return;return Yq(v(G,z),G.marker,$[$.length-1]??1,(H)=>J[Math.min(H,A-1)].marker,(H)=>$[H]??J[Math.min(H,A-1)].start)}function pq(q,Q,Y){let $=Y.styles.outlineLevels();if($===void 0)return;let J=Math.min(Math.max(Q,1)-1,A-1),z=$[J];if(!y(z.marker))return;if(q.attr(j.TEXT,"is-list-header")==="true")return;let{headingValues:G,headingStarted:H}=Y,W=q.attr(j.TEXT,"restart-numbering")==="true",X=q.attr(j.TEXT,"start-value"),Z=X!==void 0?w(X):void 0,K;if(Z!==void 0)K=Z;else if(H[J]&&!W)K=p(G[J],1);else K=z.start;G[J]=K,H[J]=!0;for(let _=J+1;_<H.length;_+=1)H[_]=!1;return`${Yq(v(z,J),z.marker,K,(_)=>$[Math.min(_,A-1)].marker,(_)=>{let D=Math.min(_,A-1);return H[D]?G[D]:$[D].start})??fq(z.marker,K)} `}function qq(q,Q){let Y=Wq(q,Q),$=[],J=[];return k(q,Q,Y,$,J),[$,J]}function Wq(q,Q){return Q.styles.delta("paragraph",q.attr(j.TEXT,"style-name")??"")}function k(q,Q,Y,$,J){let z=$q(Y);for(let G of q.children){if(G.type==="text"){let X=uq(zq(G.text));if(X.length>0)$.push({type:"text",text:X,style:{...z}});continue}let H=G.elem;if(H.ns===j.TEXT)switch(H.local){case"span":{let X=H.attr(j.TEXT,"style-name"),Z=X!==void 0?hq(Y,Q.styles.delta("text",X)):Y;k(H,Q,Z,$,J);continue}case"a":{let X=H.attr(j.XLINK,"href")??"",Z=[];k(H,Q,Y,Z,J);let K=dq(X);if(K!==void 0&&!Qq(Z))$.push({type:"link",content:Z,target:K});else $.push(...Z);continue}case"s":{let X=H.attr(j.TEXT,"c"),Z=X!==void 0?cq(X):void 0,K=Math.min(Z??1,20);$.push({type:"text",text:" ".repeat(K),style:{...x}});continue}case"tab":$.push({type:"text",text:" ",style:{...x}});continue;case"line-break":$.push({type:"lineBreak"});continue;case"bookmark":case"bookmark-start":{let X=H.attr(j.TEXT,"name");if(X!==void 0)$.push({type:"anchor",id:X});continue}case"note":{let X=Q.notes.length,Z=H.attr(j.TEXT,"id")??`odt${X}`,K=H.attr(j.TEXT,"note-class")==="endnote"?"endnote":"footnote",V=H.find(j.TEXT,"note-body"),_=V!==void 0?B(V,Q):[];Q.notes.push({id:Z,kind:K,blocks:_}),$.push({type:"noteRef",id:Z});continue}case"annotation":case"tracked-changes":case"soft-page-break":continue;default:break}if(H.is(j.DRAW,"frame")){m(H,Q,$,J);continue}k(H,Q,Y,$,J)}}function m(q,Q,Y,$){let J=q.find(j.DRAW,"text-box");if(J!==void 0){$.push(...B(J,Q));return}let z=q.firstDescendant(j.SVG_COMPAT,"title"),G=z===void 0?q.firstDescendant(j.SVG_COMPAT,"desc"):void 0,H=(z??G)?.text()??"",W=zq(H.trim()),X=q.firstDescendant(j.DRAW,"image");if(X!==void 0){let Z=yq(Q,X);if(Z!==void 0||W.length>0)Y.push({type:"image",alt:W,source:Z??{type:"unavailable"}});return}if(W.length>0)Y.push({type:"image",alt:W,source:{type:"unavailable"}})}function yq(q,Q){let Y=Q.find(j.OFFICE,"binary-data");if(Y!==void 0){let G=bq(Y.text());if(G!==void 0&&G.length>0){let H=`office:binary-data/${q.assets.assets.length}`;return{type:"asset",id:q.assets.add(mq(G),H,G)}}}let $=Q.attr(j.XLINK,"href")??"";if($.length===0)return;if(Gq($))return{type:"external",url:$};if(q.pkg===void 0){u(`image part ${$} is missing`);return}let J;try{J=wq("content.xml",$)}catch(G){u(`skipping unresolvable image reference ${JSON.stringify($)}: ${G instanceof Error?G.message:String(G)}`);return}let z=q.pkg.optionalPart(J.path);if(z!==void 0){let G=gq(J.path);return{type:"asset",id:q.assets.add(G,J.path,z)}}u(`image part ${J.path} is missing`);return}function bq(q){let Q="";for(let Y=0;Y<q.length;Y+=1){let $=q.charCodeAt(Y);if($===9||$===10||$===13||$===32)continue;Q+=q[Y]}if(Q.length===0)return;try{let Y=atob(Q),$=new Uint8Array(Y.length);for(let J=0;J<Y.length;J+=1)$[J]=Y.charCodeAt(J);return $}catch{return}}function mq(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 dq(q){if(q.length===0)return;if(q.startsWith("#")){let Q=q.slice(1),Y=Q.split("|")[0]??Q;if(Y.length===0)return;return{type:"anchor",id:Sq(Y)}}if(Gq(q))return{type:"external",url:q};return{type:"relative",url:q}}function oq(q){if(q.length===0||!/^[0-9]+$/.test(q))return;let Q=Number(q);if(!Number.isInteger(Q)||Q>255)return;return Q}function cq(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 p(q,Q){let Y=q+Q;if(!Number.isFinite(Y)||Y>Number.MAX_SAFE_INTEGER)return Number.MAX_SAFE_INTEGER;return Y}function E(q,Q){let Y={builder:new rq,pendingRows:0,headerRows:0,rowsEmitted:0};c(q,Q,Y,!0);let $=Y.builder.finish("data");if($.grid.length===0)return[];return $.headerRows=lq($,Y.headerRows),[{type:"table",table:$}]}function o(q){return q>1e4?1:q}function c(q,Q,Y,$){for(let J of q.childElems()){if(J.ns!==O.TABLE)continue;switch(J.local){case"table-header-rows":{let z=Y.rowsEmitted;if(c(J,Q,Y,!1),$&&Y.headerRows===0)Y.headerRows=Y.rowsEmitted-z;break}case"table-rows":case"table-row-group":c(J,Q,Y,!1);break;case"table-row":{let z=Oq(J.attr(O.TABLE,"number-rows-repeated"));tq(J,Q,Y,z);break}default:break}}}function tq(q,Q,Y,$){if(JQ(q)){Y.pendingRows=Uq(Y.pendingRows,$);return}if(Y.pendingRows>0){if(Y.pendingRows<=1e4)Y.builder.nextRows(Y.pendingRows),Y.rowsEmitted+=Y.pendingRows;Y.pendingRows=0}let J=eq(q,Q),z=o($);for(let G=0;G<z;G+=1)Y.builder.nextRow(),Y.rowsEmitted+=1,qQ(J,Y)}function eq(q,Q){let Y=[];for(let $ of q.childElems()){let J=Oq($.attr(O.TABLE,"number-columns-repeated"));if($.is(O.TABLE,"covered-table-cell")){Y.push({kind:"covered",repeat:J});continue}if(!$.is(O.TABLE,"table-cell"))continue;let z=Zq($.attr(O.TABLE,"number-columns-spanned")),G=Zq($.attr(O.TABLE,"number-rows-spanned")),H=QQ($,Q);Y.push({kind:"cell",repeat:J,colSpan:z,rowSpan:G,blocks:H})}return Y}function qQ(q,Q){let Y=0;for(let $ of q)if($.kind==="covered"){Xq(Q,Y),Y=0;let J=o($.repeat);for(let z=0;z<J;z+=1)if(!Q.builder.covered())sq("covered table cell without a spanning origin")}else{if($.blocks.length===0&&$.colSpan===1&&$.rowSpan===1){Y=Uq(Y,$.repeat);continue}Xq(Q,Y),Y=0;let J=o($.repeat);for(let z=0;z<J;z+=1){let G=J===1?$.blocks:GQ($.blocks);Q.builder.place(iq(G,$.colSpan,$.rowSpan))}}}function Xq(q,Q){if(Q===0||Q>1e4)return;q.builder.placeEmptyRun(Q)}function QQ(q,Q){let Y=B(q,Q);if(Y.some((z)=>z.type==="paragraph"?!nq(z.inlines):!0))return Y;let J=YQ(q);if(J!==void 0)return[{type:"paragraph",inlines:[jq(J)]}];return[]}function YQ(q){let Q=q.attr(O.OFFICE,"value-type");if(Q===void 0)return;switch(Q){case"percentage":{let Y=q.attr(O.OFFICE,"value");if(Y===void 0)return;let $=C(Y);if($===void 0)return;return`${f($*100)}%`}case"currency":{let Y=q.attr(O.OFFICE,"value");if(Y===void 0)return;let $=C(Y);if($===void 0)return;let J=q.attr(O.OFFICE,"currency")??"";return J.length===0?f($):`${f($)} ${J}`}case"float":{let Y=q.attr(O.OFFICE,"value");if(Y===void 0)return;let $=C(Y);if($===void 0)return;return f($)}case"date":return q.attr(O.OFFICE,"date-value");case"time":{let Y=q.attr(O.OFFICE,"time-value");return Y!==void 0?$Q(Y):void 0}case"boolean":{let Y=q.attr(O.OFFICE,"boolean-value");if(Y===void 0)return;return Y==="true"?"TRUE":"FALSE"}case"string":return q.attr(O.OFFICE,"string-value");default:return}}function f(q){if(Number.isNaN(q))return"NaN";if(q===Number.POSITIVE_INFINITY)return"inf";if(q===Number.NEGATIVE_INFINITY)return"-inf";return zQ(q)}function $Q(q){let Q=0,Y="",$=!1,J=!1;for(let K of q)if(K==="-"&&Q===0&&Y.length===0)J=!0;else if(K==="P");else if(K==="T")$=!0,Y="";else if((K==="Y"||K==="M")&&!$){let V=C(Y);if(V!==void 0&&V!==0)return q;Y=""}else if((K==="W"||K==="D")&&!$){let V=K==="W"?604800:86400;Q+=(C(Y)??0)*V,Y=""}else if((K==="H"||K==="M"||K==="S")&&$){let V=K==="H"?3600:K==="M"?60:1;Q+=(C(Y)??0)*V,Y=""}else if(K>="0"&&K<="9"||K===".")Y+=K;else Y="";let z=Math.round(Q*1000);if(!(z>=0&&z<1000000000000000000))return q;let G=J?"-":"",H=Math.floor(z/3600000),W=z%3600000,X=Math.floor(W/60000),Z=W%60000;if(Z%1000!==0){let K=(Z/1000).toFixed(3).padStart(6,"0");return`${G}${H}:${d(X)}:${K}`}return`${G}${H}:${d(X)}:${d(Math.floor(Z/1000))}`}function JQ(q){return q.childElems().every((Q)=>{if(Q.is(O.TABLE,"covered-table-cell"))return!1;if(!Q.is(O.TABLE,"table-cell"))return!0;return Q.attr(O.TABLE,"number-columns-spanned")===void 0&&Q.attr(O.TABLE,"number-rows-spanned")===void 0&&Q.attr(O.OFFICE,"value-type")===void 0&&Q.children.length===0})}function Mq(q,Q){let Y=q.childElems().filter((z)=>z.is(O.TABLE,"table")),$=Y.length>1,J=[];for(let z of Y){let G=z.attr(O.TABLE,"name")??"",H=E(z,Q);if(H.length===0)continue;if($)J.push(aq(2,[jq(G)]));J.push(...H)}return J}function Oq(q){if(q===void 0)return 1;let Q=T(q);if(Q===void 0)return 1;return Math.max(Q,1)}function Zq(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 Y=Number(q);return Number.isFinite(Y)?Y:void 0}function zQ(q){if(Object.is(q,-0))return"-0";return String(q)}function d(q){return q<10?`0${q}`:String(q)}function GQ(q){return structuredClone(q)}function Uq(q,Q){let Y=q+Q;if(!Number.isFinite(Y)||Y>Number.MAX_SAFE_INTEGER)return Number.MAX_SAFE_INTEGER;return Y}function _q(q){if(OQ(q))return ZQ(q);return jQ(q)}function ZQ(q){let Q=HQ.open(q);if(UQ(Q))throw I.encrypted();let Y=Q.optionalXmlPart("styles.xml"),$=Q.requiredXmlPart("content.xml"),J=new S;if(Y!==void 0)J.collect(Y);J.collect($);let z=$.find(U.OFFICE,"document-content")?.find(U.OFFICE,"body");if(z===void 0)throw I.malformedPart("content.xml","no office:body");return Pq(z,J,Q,"content.xml")}function jQ(q){let Q=KQ(q),Y=Q.find(U.OFFICE,"document")??Q.find(U.OFFICE,"document-content");if(Y===void 0)throw I.malformed("no office:document");let $=Y.find(U.OFFICE,"body");if($===void 0)throw I.malformed("no office:body");let J=new S;return J.collect(Q),Pq($,J,void 0,void 0)}function Pq(q,Q,Y,$){let J=new XQ,z=new b(Q,Y,J);return{blocks:MQ(q,z,$),notes:z.notes,assets:J.assets}}function MQ(q,Q,Y){let $=q.find(U.OFFICE,"text"),J=$===void 0?q.find(U.OFFICE,"spreadsheet"):void 0,z=$===void 0&&J===void 0?q.find(U.OFFICE,"presentation"):void 0,G=$===void 0&&J===void 0&&z===void 0?q.find(U.OFFICE,"drawing"):void 0;if($!==void 0)return B($,Q);if(J!==void 0)return Mq(J,Q);if(z!==void 0)return Vq(z,Q);if(G!==void 0)return Vq(G,Q);let H="no recognized office body (text, spreadsheet, presentation, or drawing)";if(Y!==void 0)throw I.malformedPart(Y,H);throw I.malformed(H)}function OQ(q){return q.length>=4&&q[0]===80&&q[1]===75&&q[2]===3&&q[3]===4}function UQ(q){let Q=q.optionalXmlPart("META-INF/manifest.xml");if(Q===void 0)return!1;return Q.firstDescendant(U.MANIFEST,"encryption-data")!==void 0}function Vq(q,Q){let Y=q.findAll(U.DRAW,"page"),$=Y.length>0?Y:[q],J=[];for(let z of $){let G=[],H=[],W=[];if(Rq(z,Q,G,H,W),J.push(...G),J.push(...H),W.length>0)J.push({type:"blockQuote",blocks:W})}return J}function Rq(q,Q,Y,$,J){for(let z of q.childElems()){if(z.is(U.PRESENTATION,"notes")){for(let G of z.descendants(U.DRAW,"frame")){let H=G.find(U.DRAW,"text-box");if(H!==void 0)J.push(...B(H,Q))}continue}if(z.ns!==U.DRAW)continue;switch(z.local){case"frame":{let G=z.attr(U.PRESENTATION,"class")??"";if(G==="page-number"||G==="date-time"||G==="footer"||G==="header")continue;let H=[];for(let W of z.childElems())if(W.is(U.DRAW,"text-box"))H.push(...B(W,Q));else if(W.is(U.TABLE,"table"))H.push(...E(W,Q));else if(W.is(U.DRAW,"image")){let X=[],Z=[];if(m(z,Q,X,Z),!i(X))H.push({type:"paragraph",inlines:X});H.push(...Z);break}if(G==="title")VQ(H,Y);else $.push(...H);break}case"g":Rq(z,Q,Y,$,J);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(U.TEXT,"p")||G.is(U.TEXT,"list")){$.push(...B(z,Q));break}break}default:break}}}function VQ(q,Q){let Y=[];for(let $ of q){if($.type!=="paragraph")continue;if(i($.inlines))continue;if(Y.length>0)Y.push({type:"lineBreak"});Y.push(...$.inlines)}if(!i(Y))Q.push({type:"heading",level:2,anchor:WQ(Y),content:Y})}var Bq=new Set(["odt","ods","odp","odg"]),AQ=new Set(["odt","ods","odp","odg","ott","ots","otp","otg","fodt","fods","fodp","fodg"]),BQ="urn:oasis:names:tc:opendocument:xmlns:office:1.0";function a(){return{id:"odf",sniff(q,Q){if(Bq.has(Aq(q)??""))return 2;if(FQ(q))return 2;if(Q?.path!==void 0&&AQ.has(RQ(Q.path)??""))return 1;return 0},convert(q){return DQ(q),{markdown:PQ(_q(q))}}}}function DQ(q){if(CQ(q))throw r.unsupported("pdf");if(_Q(q))throw r.unsupported("ole");let Q=Aq(q);if(Q!==void 0&&!Bq.has(Q))throw r.unsupported(Q)}function FQ(q){if(!NQ(q))return!1;let Q=TQ(q.subarray(0,Math.min(q.length,8192)));return Q.includes(BQ)||Q.includes("office:document")}function NQ(q){let Q=Dq(q);return Q<q.length&&q[Q]===60}function CQ(q){let Q=Dq(q);return IQ(q,"%PDF-",Q)}function Dq(q){let Q=0;if(q.length>=3&&q[0]===239&&q[1]===187&&q[2]===191)Q=3;while(Q<q.length){let Y=q[Q];if(Y!==9&&Y!==10&&Y!==13&&Y!==32)break;Q+=1}return Q}function IQ(q,Q,Y){if(Y+Q.length>q.length)return!1;for(let $=0;$<Q.length;$+=1)if(q[Y+$]!==Q.charCodeAt($))return!1;return!0}function TQ(q){return new TextDecoder("utf-8",{fatal:!1}).decode(q)}import{create as EQ}from"@mdgate/core";var LQ=EQ([a()]);function SQ(q,Q){return LQ(q,Q)}export{SQ as toMarkdown,a as odf};
1
+ import{detectZipDoc as Pq,hasOleMagic as DQ}from"@mdgate/containers";import{ConvertError as l}from"@mdgate/core";import{documentToMarkdown as FQ}from"@mdgate/document";import{fileExtension as PQ}from"@mdgate/utils";import{ns as O,Package as XQ,parseXml as ZQ}from"@mdgate/containers";import{ConvertError as C}from"@mdgate/core";import{inlinesAreEmpty as n,inlinesToPlainText as Rq}from"@mdgate/document";import{AssetSink as jQ}from"@mdgate/office-common";import{ns as U}from"@mdgate/containers";import{ConvertError as Tq}from"@mdgate/core";import{emptyDelta as Qq,fromStyleName as Lq,mergeDelta as Sq}from"@mdgate/office-common";var D=10;function Yq(){return{marker:"bullet",start:1,prefix:"",suffix:void 0,displayLevels:1}}function h(q,Q){let Y=[];if(q.prefix.length>0)Y.push({type:"literal",text:q.prefix});let $=wq(q.displayLevels,1,Q+1),J=Q+1-$,z=0;for(let G=J;G<=Q;G+=1){if(z>0)Y.push({type:"literal",text:"."});Y.push({type:"level",level:G}),z+=1}if(q.suffix!==void 0&&q.suffix.length>0)Y.push({type:"literal",text:q.suffix});return{text:Y,legal:!1}}class S{raw=new Map;memo=new Map;listStyles=new Map;outline;defaults=new Map;collect(q){for(let Q of q.childElems())for(let Y of Q.childElems()){if(!(Y.is(U.OFFICE,"automatic-styles")||Y.is(U.OFFICE,"styles")))continue;for(let $ of Y.childElems()){if($.is(U.STYLE,"default-style")){let J=$.attr(U.STYLE,"family");if(J!==void 0)this.defaults.set(J,qq($))}if($.is(U.STYLE,"style")){let J=$.attr(U.STYLE,"name");if(J!==void 0){let z=$.attr(U.STYLE,"family")??"",G=$.attr(U.STYLE,"parent-style-name"),H=G!==void 0?L(z,G):void 0;this.raw.set(L(z,J),{def:$,parent:H})}}if($.is(U.TEXT,"list-style")){let J=$.attr(U.STYLE,"name");if(J!==void 0)this.listStyles.set(J,e($))}if($.is(U.TEXT,"outline-style"))this.outline=e($)}}}delta(q,Q){let Y=L(q,Q),$=this.memo.get(Y);if($!==void 0)return{...$};let J=[],z=new Set,G=this.raw.has(Y)?Y:void 0;while(G!==void 0){if(z.has(G))throw Tq.malformed(`style inheritance cycle at ${JSON.stringify(G)}`);z.add(G),J.push(G);let X=this.raw.get(G)?.parent;G=X!==void 0&&this.raw.has(X)?X:void 0}let H=this.defaults.get(q);H=H!==void 0?{...H}:Qq();for(let X=J.length-1;X>=0;X-=1){let K=J[X],Z=this.raw.get(K).def;H=Sq(H,qq(Z)),this.memo.set(K,{...H})}return H}blockStyle(q){let Q=L("paragraph",q),Y=new Set;while(!Y.has(Q)){Y.add(Q);let $=this.raw.get(Q);if($===void 0)return;let J=$.def.attr(U.STYLE,"name");if(J!==void 0){let z=Lq(J);if(z!==void 0)return z}if($.parent===void 0)return;Q=$.parent}return}listLevel(q,Q){let $=this.listStyles.get(q)?.[Q];return $!==void 0?{...$}:Yq()}listLevels(q){return this.listStyles.get(q)}outlineLevels(){return this.outline}}function w(q){let Q=E(q);if(Q===void 0)return;return Math.min(Q,4294967295)}function e(q){let Q=Array.from({length:D},()=>Yq());for(let Y of q.childElems()){let $=Y.attr(U.TEXT,"level");if($===void 0)continue;let J=E($);if(J===void 0||J<1||J>D)continue;let z=Q[J-1];if(Y.is(U.TEXT,"list-level-style-number")||Y.is(U.TEXT,"outline-level-style")){let G=Y.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=Y.attr(U.TEXT,"start-value");z.start=H!==void 0?w(H)??1:1,z.prefix=Y.attr(U.STYLE,"num-prefix")??"";let X=Y.attr(U.STYLE,"num-suffix");z.suffix=X!==void 0?X:void 0;let K=Y.attr(U.TEXT,"display-levels"),Z=K!==void 0?E(K):void 0;z.displayLevels=Z??1}}return Q}function qq(q){let Q=q.find(U.STYLE,"text-properties");if(Q===void 0)return Qq();let Y=Q.attr(U.FO,"font-weight"),$;if(Y!==void 0){let X=fq(Y);$=Y==="bold"||X!==void 0&&X>=600}let J=Q.attr(U.FO,"font-style"),z=J!==void 0?J==="italic"||J==="oblique":void 0,G=Q.attr(U.STYLE,"text-line-through-style");return{bold:$,italic:z,strike:G!==void 0?G!=="none":void 0,code:void 0}}function L(q,Q){return`${q}\x00${Q}`}function wq(q,Q,Y){return Math.min(Y,Math.max(Q,q))}function E(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 fq(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 M}from"@mdgate/containers";import{cellSpanning as aq,GridBuilder as lq,heading as sq,inlinesAreEmpty as tq,plain as Vq,resolveHeaderRows as eq}from"@mdgate/document";import{debug as qQ}from"@mdgate/utils";import{decodeFragment as kq,ns as j,resolve as gq}from"@mdgate/containers";import{inlinesAreEmpty as Jq,inlinesToPlainText as vq,markerIsOrdered as y,markerLabel as hq}from"@mdgate/document";import{compositeLabel as zq,mediaTypeFor as uq,mergeDelta as pq,rebaseEmphasis as xq,resolveDelta as Gq,StyledRun as Hq}from"@mdgate/office-common";import{cleanText as Kq,collapseWs as yq,isAbsoluteUri as Wq,warn as u}from"@mdgate/utils";var p={bold:!1,italic:!1,strike:!1,code:!1};class b{styles;pkg;assets;notes=[];listCounters=new Map;listIds=new Map;headingValues=Array.from({length:D},()=>0);headingStarted=Array.from({length:D},()=>!1);constructor(q,Q,Y){this.styles=q,this.pkg=Q,this.assets=Y}}function _(q,Q){let Y=[],$=new Hq;for(let J of q.childElems())Xq(J,Q,Y,$);return $.flush(Y),Y}function Xq(q,Q,Y,$){if(q.ns===j.TEXT){if(!q.is(j.TEXT,"p"))$.flush(Y);switch(q.local){case"h":{let z=q.attr(j.TEXT,"outline-level"),H=(z!==void 0?rq(z):void 0)??1,[X,K]=$q(q,Q);if(!Jq(X)){let Z=X;xq(Z,Gq(jq(q,Q)));let W=vq(Z),V=mq(q,H,Q);if(V!==void 0)Z.unshift({type:"text",text:V,style:{...p}});Y.push({type:"heading",level:H,anchor:W,content:Z})}Y.push(...K);return}case"p":{let[z,G]=$q(q,Q),H=q.attr(j.TEXT,"style-name"),X=H!==void 0?Q.styles.blockStyle(H):void 0;if(X!==void 0)$.push(X,z,Y);else $.flush(Y),Y.push({type:"paragraph",inlines:z});if(G.length>0)$.flush(Y),Y.push(...G);return}case"list":case"unordered-list":case"ordered-list":Y.push(...Zq(q,Q,0,void 0,[]));return;case"section":case"index-body":case"index-title":Y.push(..._(q,Q));return;case"table-of-content":case"alphabetical-index":case"bibliography":case"illustration-index":Y.push(..._(q,Q));return;default:return}}if(q.is(j.TABLE,"table"))$.flush(Y),Y.push(...T(q,Q))}function Zq(q,Q,Y,$,J){let z=q.attr(j.TEXT,"style-name")??$,G=Q.styles.listLevel(z??"",Y),H=y(G.marker),X=`${z??""}\x00${Y}`,K=G.start;if(H){let R=q.attr(j.TEXT,"continue-list");if(R!==void 0){let B=Q.listIds.get(R);if(B!==void 0)K=B}else if(q.attr(j.TEXT,"continue-numbering")==="true"){let B=Q.listCounters.get(X);if(B!==void 0)K=B}}let Z=[],W={marker:G.marker,start:K,items:[]},V=K,A=!0,F=(R)=>{let B=W;if(W={marker:W.marker,start:R,items:[]},B.items.length>0)Z.push({type:"list",list:B})};for(let R of q.childElems()){let B=R.is(j.TEXT,"list-header");if(!(B||R.is(j.TEXT,"list-item")))continue;if(!B&&H){let N=R.attr(j.TEXT,"start-value"),v=N!==void 0?w(N):void 0;if(v!==void 0)if(A)W.start=v;else F(v)}let Cq=x(W.start,W.items.length),t=J.concat(Cq),P=[],g=new Hq;for(let N of R.childElems())if(N.is(j.TEXT,"list"))g.flush(P),P.push(...Zq(N,Q,Y+1,z,t));else Xq(N,Q,P,g);if(g.flush(P),B){F(V),Z.push(...P);continue}A=!1;let Eq=bq(Q,z,Y,t);W.items.push({blocks:P,checked:void 0,markerLabel:Eq}),V=x(W.start,W.items.length)}if(F(V),H&&Z.length>0){Q.listCounters.set(X,V);let R=q.attrQualified(j.XML,"id");if(R!==void 0)Q.listIds.set(R,V)}return Z}function bq(q,Q,Y,$){if(Q===void 0)return;let J=q.styles.listLevels(Q);if(J===void 0)return;let z=Math.min(Y,D-1),G=J[z];if(!y(G.marker))return;return zq(h(G,z),G.marker,$[$.length-1]??1,(H)=>J[Math.min(H,D-1)].marker,(H)=>$[H]??J[Math.min(H,D-1)].start)}function mq(q,Q,Y){let $=Y.styles.outlineLevels();if($===void 0)return;let J=Math.min(Math.max(Q,1)-1,D-1),z=$[J];if(!y(z.marker))return;if(q.attr(j.TEXT,"is-list-header")==="true")return;let{headingValues:G,headingStarted:H}=Y,X=q.attr(j.TEXT,"restart-numbering")==="true",K=q.attr(j.TEXT,"start-value"),Z=K!==void 0?w(K):void 0,W;if(Z!==void 0)W=Z;else if(H[J]&&!X)W=x(G[J],1);else W=z.start;G[J]=W,H[J]=!0;for(let A=J+1;A<H.length;A+=1)H[A]=!1;return`${zq(h(z,J),z.marker,W,(A)=>$[Math.min(A,D-1)].marker,(A)=>{let F=Math.min(A,D-1);return H[F]?G[F]:$[F].start})??hq(z.marker,W)} `}function $q(q,Q){let Y=jq(q,Q),$=[],J=[];return f(q,Q,Y,$,J),[$,J]}function jq(q,Q){return Q.styles.delta("paragraph",q.attr(j.TEXT,"style-name")??"")}function f(q,Q,Y,$,J){let z=Gq(Y);for(let G of q.children){if(G.type==="text"){let K=yq(Kq(G.text));if(K.length>0)$.push({type:"text",text:K,style:{...z}});continue}let H=G.elem;if(H.ns===j.TEXT)switch(H.local){case"span":{let K=H.attr(j.TEXT,"style-name"),Z=K!==void 0?pq(Y,Q.styles.delta("text",K)):Y;f(H,Q,Z,$,J);continue}case"a":{let K=H.attr(j.XLINK,"href")??"",Z=[];f(H,Q,Y,Z,J);let W=cq(K);if(W!==void 0&&!Jq(Z))$.push({type:"link",content:Z,target:W});else $.push(...Z);continue}case"s":{let K=H.attr(j.TEXT,"c"),Z=K!==void 0?nq(K):void 0,W=Math.min(Z??1,20);$.push({type:"text",text:" ".repeat(W),style:{...p}});continue}case"tab":$.push({type:"text",text:" ",style:{...p}});continue;case"line-break":$.push({type:"lineBreak"});continue;case"bookmark":case"bookmark-start":{let K=H.attr(j.TEXT,"name");if(K!==void 0)$.push({type:"anchor",id:K});continue}case"note":{let K=Q.notes.length,Z=H.attr(j.TEXT,"id")??`odt${K}`,W=H.attr(j.TEXT,"note-class")==="endnote"?"endnote":"footnote",V=H.find(j.TEXT,"note-body"),A=V!==void 0?_(V,Q):[];Q.notes.push({id:Z,kind:W,blocks:A}),$.push({type:"noteRef",id:Z});continue}case"annotation":case"tracked-changes":case"soft-page-break":continue;default:break}if(H.is(j.DRAW,"frame")){m(H,Q,$,J);continue}f(H,Q,Y,$,J)}}function m(q,Q,Y,$){let J=q.find(j.DRAW,"text-box");if(J!==void 0){$.push(..._(J,Q));return}let z=q.firstDescendant(j.SVG_COMPAT,"title"),G=z===void 0?q.firstDescendant(j.SVG_COMPAT,"desc"):void 0,H=(z??G)?.text()??"",X=Kq(H.trim()),K=q.firstDescendant(j.DRAW,"image");if(K!==void 0){let Z=dq(Q,K);if(Z!==void 0||X.length>0)Y.push({type:"image",alt:X,source:Z??{type:"unavailable"}});return}if(X.length>0)Y.push({type:"image",alt:X,source:{type:"unavailable"}})}function dq(q,Q){let Y=Q.find(j.OFFICE,"binary-data");if(Y!==void 0){let G=oq(Y.text());if(G!==void 0&&G.length>0){let H=`office:binary-data/${q.assets.assets.length}`;return{type:"asset",id:q.assets.add(iq(G),H,G)}}}let $=Q.attr(j.XLINK,"href")??"";if($.length===0)return;if(Wq($))return{type:"external",url:$};if(q.pkg===void 0){u(`image part ${$} is missing`);return}let J;try{J=gq("content.xml",$)}catch(G){u(`skipping unresolvable image reference ${JSON.stringify($)}: ${G instanceof Error?G.message:String(G)}`);return}let z=q.pkg.optionalPart(J.path);if(z!==void 0){let G=uq(J.path);return{type:"asset",id:q.assets.add(G,J.path,z)}}u(`image part ${J.path} is missing`);return}function oq(q){let Q="";for(let Y=0;Y<q.length;Y+=1){let $=q.charCodeAt(Y);if($===9||$===10||$===13||$===32)continue;Q+=q[Y]}if(Q.length===0)return;try{let Y=atob(Q),$=new Uint8Array(Y.length);for(let J=0;J<Y.length;J+=1)$[J]=Y.charCodeAt(J);return $}catch{return}}function iq(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 cq(q){if(q.length===0)return;if(q.startsWith("#")){let Q=q.slice(1),Y=Q.split("|")[0]??Q;if(Y.length===0)return;return{type:"anchor",id:kq(Y)}}if(Wq(q))return{type:"external",url:q};return{type:"relative",url:q}}function rq(q){if(q.length===0||!/^[0-9]+$/.test(q))return;let Q=Number(q);if(!Number.isInteger(Q)||Q>255)return;return Q}function nq(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 x(q,Q){let Y=q+Q;if(!Number.isFinite(Y)||Y>Number.MAX_SAFE_INTEGER)return Number.MAX_SAFE_INTEGER;return Y}function T(q,Q){let Y={builder:new lq,pendingRows:0,headerRows:0,rowsEmitted:0};i(q,Q,Y,!0);let $=Y.builder.finish("data");if($.grid.length===0)return[];return $.headerRows=eq($,Y.headerRows),[{type:"table",table:$}]}function o(q){return q>1e4?1:q}function i(q,Q,Y,$){for(let J of q.childElems()){if(J.ns!==M.TABLE)continue;switch(J.local){case"table-header-rows":{let z=Y.rowsEmitted;if(i(J,Q,Y,!1),$&&Y.headerRows===0)Y.headerRows=Y.rowsEmitted-z;break}case"table-rows":case"table-row-group":i(J,Q,Y,!1);break;case"table-row":{let z=Mq(J.attr(M.TABLE,"number-rows-repeated"));QQ(J,Q,Y,z);break}default:break}}}function QQ(q,Q,Y,$){if(HQ(q)){Y.pendingRows=_q(Y.pendingRows,$);return}if(Y.pendingRows>0){if(Y.pendingRows<=1e4)Y.builder.nextRows(Y.pendingRows),Y.rowsEmitted+=Y.pendingRows;Y.pendingRows=0}let J=YQ(q,Q),z=o($);for(let G=0;G<z;G+=1)Y.builder.nextRow(),Y.rowsEmitted+=1,$Q(J,Y)}function YQ(q,Q){let Y=[];for(let $ of q.childElems()){let J=Mq($.attr(M.TABLE,"number-columns-repeated"));if($.is(M.TABLE,"covered-table-cell")){Y.push({kind:"covered",repeat:J});continue}if(!$.is(M.TABLE,"table-cell"))continue;let z=Uq($.attr(M.TABLE,"number-columns-spanned")),G=Uq($.attr(M.TABLE,"number-rows-spanned")),H=JQ($,Q);Y.push({kind:"cell",repeat:J,colSpan:z,rowSpan:G,blocks:H})}return Y}function $Q(q,Q){let Y=0;for(let $ of q)if($.kind==="covered"){Oq(Q,Y),Y=0;let J=o($.repeat);for(let z=0;z<J;z+=1)if(!Q.builder.covered())qQ("covered table cell without a spanning origin")}else{if($.blocks.length===0&&$.colSpan===1&&$.rowSpan===1){Y=_q(Y,$.repeat);continue}Oq(Q,Y),Y=0;let J=o($.repeat);for(let z=0;z<J;z+=1){let G=J===1?$.blocks:WQ($.blocks);Q.builder.place(aq(G,$.colSpan,$.rowSpan))}}}function Oq(q,Q){if(Q===0||Q>1e4)return;q.builder.placeEmptyRun(Q)}function JQ(q,Q){let Y=_(q,Q);if(Y.some((z)=>z.type==="paragraph"?!tq(z.inlines):!0))return Y;let J=zQ(q);if(J!==void 0)return[{type:"paragraph",inlines:[Vq(J)]}];return[]}function zQ(q){let Q=q.attr(M.OFFICE,"value-type");if(Q===void 0)return;switch(Q){case"percentage":{let Y=q.attr(M.OFFICE,"value");if(Y===void 0)return;let $=I(Y);if($===void 0)return;return`${k($*100)}%`}case"currency":{let Y=q.attr(M.OFFICE,"value");if(Y===void 0)return;let $=I(Y);if($===void 0)return;let J=q.attr(M.OFFICE,"currency")??"";return J.length===0?k($):`${k($)} ${J}`}case"float":{let Y=q.attr(M.OFFICE,"value");if(Y===void 0)return;let $=I(Y);if($===void 0)return;return k($)}case"date":return q.attr(M.OFFICE,"date-value");case"time":{let Y=q.attr(M.OFFICE,"time-value");return Y!==void 0?GQ(Y):void 0}case"boolean":{let Y=q.attr(M.OFFICE,"boolean-value");if(Y===void 0)return;return Y==="true"?"TRUE":"FALSE"}case"string":return q.attr(M.OFFICE,"string-value");default:return}}function k(q){if(Number.isNaN(q))return"NaN";if(q===Number.POSITIVE_INFINITY)return"inf";if(q===Number.NEGATIVE_INFINITY)return"-inf";return KQ(q)}function GQ(q){let Q=0,Y="",$=!1,J=!1;for(let W of q)if(W==="-"&&Q===0&&Y.length===0)J=!0;else if(W==="P");else if(W==="T")$=!0,Y="";else if((W==="Y"||W==="M")&&!$){let V=I(Y);if(V!==void 0&&V!==0)return q;Y=""}else if((W==="W"||W==="D")&&!$){let V=W==="W"?604800:86400;Q+=(I(Y)??0)*V,Y=""}else if((W==="H"||W==="M"||W==="S")&&$){let V=W==="H"?3600:W==="M"?60:1;Q+=(I(Y)??0)*V,Y=""}else if(W>="0"&&W<="9"||W===".")Y+=W;else Y="";let z=Math.round(Q*1000);if(!(z>=0&&z<1000000000000000000))return q;let G=J?"-":"",H=Math.floor(z/3600000),X=z%3600000,K=Math.floor(X/60000),Z=X%60000;if(Z%1000!==0){let W=(Z/1000).toFixed(3).padStart(6,"0");return`${G}${H}:${d(K)}:${W}`}return`${G}${H}:${d(K)}:${d(Math.floor(Z/1000))}`}function HQ(q){return q.childElems().every((Q)=>{if(Q.is(M.TABLE,"covered-table-cell"))return!1;if(!Q.is(M.TABLE,"table-cell"))return!0;return Q.attr(M.TABLE,"number-columns-spanned")===void 0&&Q.attr(M.TABLE,"number-rows-spanned")===void 0&&Q.attr(M.OFFICE,"value-type")===void 0&&Q.children.length===0})}function c(q,Q){let Y=q.childElems().filter((z)=>z.is(M.TABLE,"table")),$=Y.length>1,J=[];for(let z of Y){let G=z.attr(M.TABLE,"name")??"",H=T(z,Q);if(H.length===0)continue;if($)J.push(sq(2,[Vq(G)]));J.push(...H)}return J}function Mq(q){if(q===void 0)return 1;let Q=E(q);if(Q===void 0)return 1;return Math.max(Q,1)}function Uq(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 I(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 Y=Number(q);return Number.isFinite(Y)?Y:void 0}function KQ(q){if(Object.is(q,-0))return"-0";return String(q)}function d(q){return q<10?`0${q}`:String(q)}function WQ(q){return structuredClone(q)}function _q(q,Q){let Y=q+Q;if(!Number.isFinite(Y)||Y>Number.MAX_SAFE_INTEGER)return Number.MAX_SAFE_INTEGER;return Y}function Bq(q){if(_Q(q))return OQ(q);return UQ(q)}function OQ(q){let Q=XQ.open(q);if(AQ(Q))throw C.encrypted();let Y=Q.optionalXmlPart("styles.xml"),$=Q.requiredXmlPart("content.xml"),J=new S;if(Y!==void 0)J.collect(Y);J.collect($);let z=$.find(O.OFFICE,"document-content")?.find(O.OFFICE,"body");if(z===void 0)throw C.malformedPart("content.xml","no office:body");return Dq(z,J,Q,"content.xml",Y)}function UQ(q){let Q=ZQ(q),Y=Q.find(O.OFFICE,"document")??Q.find(O.OFFICE,"document-content");if(Y===void 0)throw C.malformed("no office:document");let $=Y.find(O.OFFICE,"body");if($===void 0)throw C.malformed("no office:body");let J=new S;return J.collect(Q),Dq($,J,void 0,void 0,Q)}function Dq(q,Q,Y,$,J){let z=new jQ,G=new b(Q,Y,z);return{blocks:MQ(q,G,$,VQ(J)),notes:G.notes,assets:z.assets}}function VQ(q){let Q=new Map;if(q===void 0)return Q;for(let Y of q.descendants(O.STYLE,"master-page")){let $=Y.attr(O.STYLE,"name");if($!==void 0)Q.set($,Y)}return Q}function MQ(q,Q,Y,$){let J=q.find(O.OFFICE,"text"),z=J===void 0?q.find(O.OFFICE,"spreadsheet"):void 0,G=J===void 0&&z===void 0?q.find(O.OFFICE,"presentation"):void 0,H=J===void 0&&z===void 0&&G===void 0?q.find(O.OFFICE,"drawing"):void 0;if(J!==void 0)return _(J,Q);if(z!==void 0)return c(z,Q);if(G!==void 0)return r(G,Q,$);if(H!==void 0)return r(H,Q,$);if(q.findAll(O.DRAW,"page").length>0)return r(q,Q,$);if(q.find(O.TABLE,"table")!==void 0)return c(q,Q);if(q.find(O.TEXT,"p")!==void 0||q.find(O.TEXT,"h")!==void 0||q.find(O.TEXT,"list")!==void 0)return _(q,Q);let K="no recognized office body (text, spreadsheet, presentation, or drawing)";if(Y!==void 0)throw C.malformedPart(Y,K);throw C.malformed(K)}function _Q(q){return q.length>=4&&q[0]===80&&q[1]===75&&q[2]===3&&q[3]===4}function AQ(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 r(q,Q,Y){let $=q.findAll(O.DRAW,"page"),J=$.length>0?$:[q],z=[],G=Y.size===1?[...Y.values()][0]:void 0;for(let H of J){let X=[],K=[],Z=[];a(H,Q,X,K,Z);let W=H.attr(O.DRAW,"master-page-name")??H.attr(O.STYLE,"master-page-name"),V=(W!==void 0?Y.get(W):void 0)??G;if(V!==void 0)RQ(V,Q,K),K.push(...BQ(new Map([["page",V]]),Q));if(z.push(...X),z.push(...K),Z.length>0)z.push({type:"blockQuote",blocks:Z})}return z}function RQ(q,Q,Y){let $=[],J=[];for(let z of q.childElems()){if(z.ns!==O.DRAW)continue;let G=z.attr(O.PRESENTATION,"class")??"";if(G!=="header"&&G!=="footer"&&G!=="header-left"&&G!=="footer-left")continue;a(z,Q,J,$,J)}for(let z of $)if(!Fq(z))Y.push(z)}function BQ(q,Q){let Y=[];for(let $ of q.values())for(let J of["header","footer","header-left","footer-left"]){let z=$.find(O.STYLE,J);if(z===void 0)continue;for(let G of _(z,Q))if(!Fq(G))Y.push(G)}return Y}function Fq(q){if(q.type!=="paragraph")return!1;let Q=Rq(q.inlines).trim();return Q.length===0||Q==="<number>"||Q==="<date>"||Q==="<time>"}function a(q,Q,Y,$,J){for(let z of q.childElems()){if(z.is(O.PRESENTATION,"notes")){for(let G of z.descendants(O.DRAW,"text-box"))J.push(..._(G,Q));continue}if(z.ns!==O.DRAW)continue;switch(z.local){case"text-box":{let G=z.attr(O.PRESENTATION,"class")??"";if(G==="page-number"||G==="date-time")continue;let H=_(z,Q);if(G==="title")Aq(H,Y);else $.push(...H);break}case"frame":{let G=z.attr(O.PRESENTATION,"class")??"";if(G==="page-number"||G==="date-time")continue;let H=[];for(let X of z.childElems())if(X.is(O.DRAW,"text-box"))H.push(..._(X,Q));else if(X.is(O.TABLE,"table"))H.push(...T(X,Q));else if(X.is(O.DRAW,"image")){let K=[],Z=[];if(m(z,Q,K,Z),!n(K))H.push({type:"paragraph",inlines:K});H.push(...Z);break}if(G==="title")Aq(H,Y);else $.push(...H);break}case"g":a(z,Q,Y,$,J);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")){$.push(..._(z,Q));break}break}default:break}}}function Aq(q,Q){let Y=[];for(let $ of q){if($.type!=="paragraph")continue;if(n($.inlines))continue;if(Y.length>0)Y.push({type:"lineBreak"});Y.push(...$.inlines)}if(!n(Y))Q.push({type:"heading",level:2,anchor:Rq(Y),content:Y})}var Nq=new Set(["odt","ods","odp","odg"]),NQ=new Set(["odt","ods","odp","odg","ott","ots","otp","otg","fodt","fods","fodp","fodg","sxw","sxc","sxi","sxd","stw","stc","sti","std"]),IQ="urn:oasis:names:tc:opendocument:xmlns:office:1.0";function s(){return{id:"odf",sniff(q,Q){if(Nq.has(Pq(q)??""))return 2;if(EQ(q))return 2;if(Q?.path!==void 0&&NQ.has(PQ(Q.path)??""))return 1;return 0},convert(q){return CQ(q),{markdown:FQ(Bq(q))}}}}function CQ(q){if(LQ(q))throw l.unsupported("pdf");if(DQ(q))throw l.unsupported("ole");let Q=Pq(q);if(Q!==void 0&&!Nq.has(Q))throw l.unsupported(Q)}function EQ(q){if(!TQ(q))return!1;let Q=wQ(q.subarray(0,Math.min(q.length,8192)));return Q.includes(IQ)||Q.includes("office:document")}function TQ(q){let Q=Iq(q);return Q<q.length&&q[Q]===60}function LQ(q){let Q=Iq(q);return SQ(q,"%PDF-",Q)}function Iq(q){let Q=0;if(q.length>=3&&q[0]===239&&q[1]===187&&q[2]===191)Q=3;while(Q<q.length){let Y=q[Q];if(Y!==9&&Y!==10&&Y!==13&&Y!==32)break;Q+=1}return Q}function SQ(q,Q,Y){if(Y+Q.length>q.length)return!1;for(let $=0;$<Q.length;$+=1)if(q[Y+$]!==Q.charCodeAt($))return!1;return!0}function wQ(q){return new TextDecoder("utf-8",{fatal:!1}).decode(q)}import{create as fQ}from"@mdgate/core";var kQ=fQ([s()]);function gQ(q,Q){return kQ(q,Q)}export{gQ as toMarkdown,s as odf};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mdgate/odf",
3
- "version": "0.5.1",
3
+ "version": "0.5.3",
4
4
  "description": "mdgate OpenDocument converter (odt/ods/odp/odg and flat/templates)",
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.5.1",
26
- "@mdgate/core": "0.5.1",
27
- "@mdgate/document": "0.5.1",
28
- "@mdgate/office-common": "0.5.1",
29
- "@mdgate/utils": "0.5.1"
25
+ "@mdgate/containers": "0.5.3",
26
+ "@mdgate/core": "0.5.3",
27
+ "@mdgate/document": "0.5.3",
28
+ "@mdgate/office-common": "0.5.3",
29
+ "@mdgate/utils": "0.5.3"
30
30
  },
31
31
  "publishConfig": {
32
32
  "access": "public"