@mdgate/odf 0.5.1 → 0.5.2

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 _Q}from"@mdgate/containers";import{ConvertError as n}from"@mdgate/core";import{documentToMarkdown as BQ}from"@mdgate/document";import{fileExtension as RQ}from"@mdgate/utils";import{ns as M,Package as KQ,parseXml as WQ}from"@mdgate/containers";import{ConvertError as C}from"@mdgate/core";import{inlinesAreEmpty as a,inlinesToPlainText as XQ}from"@mdgate/document";import{AssetSink as ZQ}from"@mdgate/office-common";import{ns as O}from"@mdgate/containers";import{ConvertError as Cq}from"@mdgate/core";import{emptyDelta as qq,fromStyleName as Tq,mergeDelta as Eq}from"@mdgate/office-common";var P=10;function Qq(){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 $=Lq(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(O.OFFICE,"automatic-styles")||Y.is(O.OFFICE,"styles")))continue;for(let $ of Y.childElems()){if($.is(O.STYLE,"default-style")){let J=$.attr(O.STYLE,"family");if(J!==void 0)this.defaults.set(J,e($))}if($.is(O.STYLE,"style")){let J=$.attr(O.STYLE,"name");if(J!==void 0){let z=$.attr(O.STYLE,"family")??"",G=$.attr(O.STYLE,"parent-style-name"),H=G!==void 0?L(z,G):void 0;this.raw.set(L(z,J),{def:$,parent:H})}}if($.is(O.TEXT,"list-style")){let J=$.attr(O.STYLE,"name");if(J!==void 0)this.listStyles.set(J,t($))}if($.is(O.TEXT,"outline-style"))this.outline=t($)}}}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 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}:qq();for(let K=J.length-1;K>=0;K-=1){let X=J[K],Z=this.raw.get(X).def;H=Eq(H,e(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(O.STYLE,"name");if(J!==void 0){let z=Tq(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?{...$}:Qq()}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 t(q){let Q=Array.from({length:P},()=>Qq());for(let Y of q.childElems()){let $=Y.attr(O.TEXT,"level");if($===void 0)continue;let J=T($);if(J===void 0||J<1||J>P)continue;let z=Q[J-1];if(Y.is(O.TEXT,"list-level-style-number")||Y.is(O.TEXT,"outline-level-style")){let G=Y.attr(O.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(O.TEXT,"start-value");z.start=H!==void 0?w(H)??1:1,z.prefix=Y.attr(O.STYLE,"num-prefix")??"";let K=Y.attr(O.STYLE,"num-suffix");z.suffix=K!==void 0?K:void 0;let X=Y.attr(O.TEXT,"display-levels"),Z=X!==void 0?T(X):void 0;z.displayLevels=Z??1}}return Q}function e(q){let Q=q.find(O.STYLE,"text-properties");if(Q===void 0)return qq();let Y=Q.attr(O.FO,"font-weight"),$;if(Y!==void 0){let K=Sq(Y);$=Y==="bold"||K!==void 0&&K>=600}let J=Q.attr(O.FO,"font-style"),z=J!==void 0?J==="italic"||J==="oblique":void 0,G=Q.attr(O.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 Lq(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 Sq(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 U}from"@mdgate/containers";import{cellSpanning as rq,GridBuilder as aq,heading as nq,inlinesAreEmpty as lq,plain as Oq,resolveHeaderRows as sq}from"@mdgate/document";import{debug as tq}from"@mdgate/utils";import{decodeFragment as wq,ns as j,resolve as kq}from"@mdgate/containers";import{inlinesAreEmpty as $q,inlinesToPlainText as fq,markerIsOrdered as y,markerLabel as gq}from"@mdgate/document";import{compositeLabel as Jq,mediaTypeFor as vq,mergeDelta as hq,rebaseEmphasis as uq,resolveDelta as zq,StyledRun as Gq}from"@mdgate/office-common";import{cleanText as Hq,collapseWs as xq,isAbsoluteUri as Kq,warn as u}from"@mdgate/utils";var x={bold:!1,italic:!1,strike:!1,code:!1};class m{styles;pkg;assets;notes=[];listCounters=new Map;listIds=new Map;headingValues=Array.from({length:P},()=>0);headingStarted=Array.from({length:P},()=>!1);constructor(q,Q,Y){this.styles=q,this.pkg=Q,this.assets=Y}}function _(q,Q){let Y=[],$=new Gq;for(let J of q.childElems())Wq(J,Q,Y,$);return $.flush(Y),Y}function Wq(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?cq(z):void 0)??1,[K,X]=Yq(q,Q);if(!$q(K)){let Z=K;uq(Z,zq(Zq(q,Q)));let W=fq(Z),V=yq(q,H,Q);if(V!==void 0)Z.unshift({type:"text",text:V,style:{...x}});Y.push({type:"heading",level:H,anchor:W,content:Z})}Y.push(...X);return}case"p":{let[z,G]=Yq(q,Q),H=q.attr(j.TEXT,"style-name"),K=H!==void 0?Q.styles.blockStyle(H):void 0;if(K!==void 0)$.push(K,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(...Xq(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(...E(q,Q))}function Xq(q,Q,Y,$,J){let z=q.attr(j.TEXT,"style-name")??$,G=Q.styles.listLevel(z??"",Y),H=y(G.marker),K=`${z??""}\x00${Y}`,X=G.start;if(H){let R=q.attr(j.TEXT,"continue-list");if(R!==void 0){let A=Q.listIds.get(R);if(A!==void 0)X=A}else if(q.attr(j.TEXT,"continue-numbering")==="true"){let A=Q.listCounters.get(K);if(A!==void 0)X=A}}let Z=[],W={marker:G.marker,start:X,items:[]},V=X,B=!0,D=(R)=>{let A=W;if(W={marker:W.marker,start:R,items:[]},A.items.length>0)Z.push({type:"list",list:A})};for(let R of q.childElems()){let A=R.is(j.TEXT,"list-header");if(!(A||R.is(j.TEXT,"list-item")))continue;if(!A&&H){let N=R.attr(j.TEXT,"start-value"),v=N!==void 0?w(N):void 0;if(v!==void 0)if(B)W.start=v;else D(v)}let Nq=p(W.start,W.items.length),s=J.concat(Nq),F=[],g=new Gq;for(let N of R.childElems())if(N.is(j.TEXT,"list"))g.flush(F),F.push(...Xq(N,Q,Y+1,z,s));else Wq(N,Q,F,g);if(g.flush(F),A){D(V),Z.push(...F);continue}B=!1;let Iq=pq(Q,z,Y,s);W.items.push({blocks:F,checked:void 0,markerLabel:Iq}),V=p(W.start,W.items.length)}if(D(V),H&&Z.length>0){Q.listCounters.set(K,V);let R=q.attrQualified(j.XML,"id");if(R!==void 0)Q.listIds.set(R,V)}return Z}function pq(q,Q,Y,$){if(Q===void 0)return;let J=q.styles.listLevels(Q);if(J===void 0)return;let z=Math.min(Y,P-1),G=J[z];if(!y(G.marker))return;return Jq(h(G,z),G.marker,$[$.length-1]??1,(H)=>J[Math.min(H,P-1)].marker,(H)=>$[H]??J[Math.min(H,P-1)].start)}function yq(q,Q,Y){let $=Y.styles.outlineLevels();if($===void 0)return;let J=Math.min(Math.max(Q,1)-1,P-1),z=$[J];if(!y(z.marker))return;if(q.attr(j.TEXT,"is-list-header")==="true")return;let{headingValues:G,headingStarted:H}=Y,K=q.attr(j.TEXT,"restart-numbering")==="true",X=q.attr(j.TEXT,"start-value"),Z=X!==void 0?w(X):void 0,W;if(Z!==void 0)W=Z;else if(H[J]&&!K)W=p(G[J],1);else W=z.start;G[J]=W,H[J]=!0;for(let B=J+1;B<H.length;B+=1)H[B]=!1;return`${Jq(h(z,J),z.marker,W,(B)=>$[Math.min(B,P-1)].marker,(B)=>{let D=Math.min(B,P-1);return H[D]?G[D]:$[D].start})??gq(z.marker,W)} `}function Yq(q,Q){let Y=Zq(q,Q),$=[],J=[];return k(q,Q,Y,$,J),[$,J]}function Zq(q,Q){return Q.styles.delta("paragraph",q.attr(j.TEXT,"style-name")??"")}function k(q,Q,Y,$,J){let z=zq(Y);for(let G of q.children){if(G.type==="text"){let X=xq(Hq(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 W=oq(X);if(W!==void 0&&!$q(Z))$.push({type:"link",content:Z,target:W});else $.push(...Z);continue}case"s":{let X=H.attr(j.TEXT,"c"),Z=X!==void 0?iq(X):void 0,W=Math.min(Z??1,20);$.push({type:"text",text:" ".repeat(W),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}`,W=H.attr(j.TEXT,"note-class")==="endnote"?"endnote":"footnote",V=H.find(j.TEXT,"note-body"),B=V!==void 0?_(V,Q):[];Q.notes.push({id:Z,kind:W,blocks:B}),$.push({type:"noteRef",id:Z});continue}case"annotation":case"tracked-changes":case"soft-page-break":continue;default:break}if(H.is(j.DRAW,"frame")){b(H,Q,$,J);continue}k(H,Q,Y,$,J)}}function b(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()??"",K=Hq(H.trim()),X=q.firstDescendant(j.DRAW,"image");if(X!==void 0){let Z=mq(Q,X);if(Z!==void 0||K.length>0)Y.push({type:"image",alt:K,source:Z??{type:"unavailable"}});return}if(K.length>0)Y.push({type:"image",alt:K,source:{type:"unavailable"}})}function mq(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(dq(G),H,G)}}}let $=Q.attr(j.XLINK,"href")??"";if($.length===0)return;if(Kq($))return{type:"external",url:$};if(q.pkg===void 0){u(`image part ${$} is missing`);return}let J;try{J=kq("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=vq(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 dq(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 oq(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:wq(Y)}}if(Kq(q))return{type:"external",url:q};return{type:"relative",url:q}}function cq(q){if(q.length===0||!/^[0-9]+$/.test(q))return;let Q=Number(q);if(!Number.isInteger(Q)||Q>255)return;return Q}function iq(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 aq,pendingRows:0,headerRows:0,rowsEmitted:0};c(q,Q,Y,!0);let $=Y.builder.finish("data");if($.grid.length===0)return[];return $.headerRows=sq($,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!==U.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=Uq(J.attr(U.TABLE,"number-rows-repeated"));eq(J,Q,Y,z);break}default:break}}}function eq(q,Q,Y,$){if(zQ(q)){Y.pendingRows=Vq(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=qQ(q,Q),z=o($);for(let G=0;G<z;G+=1)Y.builder.nextRow(),Y.rowsEmitted+=1,QQ(J,Y)}function qQ(q,Q){let Y=[];for(let $ of q.childElems()){let J=Uq($.attr(U.TABLE,"number-columns-repeated"));if($.is(U.TABLE,"covered-table-cell")){Y.push({kind:"covered",repeat:J});continue}if(!$.is(U.TABLE,"table-cell"))continue;let z=Mq($.attr(U.TABLE,"number-columns-spanned")),G=Mq($.attr(U.TABLE,"number-rows-spanned")),H=YQ($,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"){jq(Q,Y),Y=0;let J=o($.repeat);for(let z=0;z<J;z+=1)if(!Q.builder.covered())tq("covered table cell without a spanning origin")}else{if($.blocks.length===0&&$.colSpan===1&&$.rowSpan===1){Y=Vq(Y,$.repeat);continue}jq(Q,Y),Y=0;let J=o($.repeat);for(let z=0;z<J;z+=1){let G=J===1?$.blocks:HQ($.blocks);Q.builder.place(rq(G,$.colSpan,$.rowSpan))}}}function jq(q,Q){if(Q===0||Q>1e4)return;q.builder.placeEmptyRun(Q)}function YQ(q,Q){let Y=_(q,Q);if(Y.some((z)=>z.type==="paragraph"?!lq(z.inlines):!0))return Y;let J=$Q(q);if(J!==void 0)return[{type:"paragraph",inlines:[Oq(J)]}];return[]}function $Q(q){let Q=q.attr(U.OFFICE,"value-type");if(Q===void 0)return;switch(Q){case"percentage":{let Y=q.attr(U.OFFICE,"value");if(Y===void 0)return;let $=I(Y);if($===void 0)return;return`${f($*100)}%`}case"currency":{let Y=q.attr(U.OFFICE,"value");if(Y===void 0)return;let $=I(Y);if($===void 0)return;let J=q.attr(U.OFFICE,"currency")??"";return J.length===0?f($):`${f($)} ${J}`}case"float":{let Y=q.attr(U.OFFICE,"value");if(Y===void 0)return;let $=I(Y);if($===void 0)return;return f($)}case"date":return q.attr(U.OFFICE,"date-value");case"time":{let Y=q.attr(U.OFFICE,"time-value");return Y!==void 0?JQ(Y):void 0}case"boolean":{let Y=q.attr(U.OFFICE,"boolean-value");if(Y===void 0)return;return Y==="true"?"TRUE":"FALSE"}case"string":return q.attr(U.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 GQ(q)}function JQ(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),K=z%3600000,X=Math.floor(K/60000),Z=K%60000;if(Z%1000!==0){let W=(Z/1000).toFixed(3).padStart(6,"0");return`${G}${H}:${d(X)}:${W}`}return`${G}${H}:${d(X)}:${d(Math.floor(Z/1000))}`}function zQ(q){return q.childElems().every((Q)=>{if(Q.is(U.TABLE,"covered-table-cell"))return!1;if(!Q.is(U.TABLE,"table-cell"))return!0;return Q.attr(U.TABLE,"number-columns-spanned")===void 0&&Q.attr(U.TABLE,"number-rows-spanned")===void 0&&Q.attr(U.OFFICE,"value-type")===void 0&&Q.children.length===0})}function i(q,Q){let Y=q.childElems().filter((z)=>z.is(U.TABLE,"table")),$=Y.length>1,J=[];for(let z of Y){let G=z.attr(U.TABLE,"name")??"",H=E(z,Q);if(H.length===0)continue;if($)J.push(nq(2,[Oq(G)]));J.push(...H)}return J}function Uq(q){if(q===void 0)return 1;let Q=T(q);if(Q===void 0)return 1;return Math.max(Q,1)}function Mq(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 GQ(q){if(Object.is(q,-0))return"-0";return String(q)}function d(q){return q<10?`0${q}`:String(q)}function HQ(q){return structuredClone(q)}function Vq(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(UQ(q))return jQ(q);return MQ(q)}function jQ(q){let Q=KQ.open(q);if(VQ(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(M.OFFICE,"document-content")?.find(M.OFFICE,"body");if(z===void 0)throw C.malformedPart("content.xml","no office:body");return Rq(z,J,Q,"content.xml")}function MQ(q){let Q=WQ(q),Y=Q.find(M.OFFICE,"document")??Q.find(M.OFFICE,"document-content");if(Y===void 0)throw C.malformed("no office:document");let $=Y.find(M.OFFICE,"body");if($===void 0)throw C.malformed("no office:body");let J=new S;return J.collect(Q),Rq($,J,void 0,void 0)}function Rq(q,Q,Y,$){let J=new ZQ,z=new m(Q,Y,J);return{blocks:OQ(q,z,$),notes:z.notes,assets:J.assets}}function OQ(q,Q,Y){let $=q.find(M.OFFICE,"text"),J=$===void 0?q.find(M.OFFICE,"spreadsheet"):void 0,z=$===void 0&&J===void 0?q.find(M.OFFICE,"presentation"):void 0,G=$===void 0&&J===void 0&&z===void 0?q.find(M.OFFICE,"drawing"):void 0;if($!==void 0)return _($,Q);if(J!==void 0)return i(J,Q);if(z!==void 0)return r(z,Q);if(G!==void 0)return r(G,Q);if(q.findAll(M.DRAW,"page").length>0)return r(q,Q);if(q.find(M.TABLE,"table")!==void 0)return i(q,Q);if(q.find(M.TEXT,"p")!==void 0||q.find(M.TEXT,"h")!==void 0||q.find(M.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 UQ(q){return q.length>=4&&q[0]===80&&q[1]===75&&q[2]===3&&q[3]===4}function VQ(q){let Q=q.optionalXmlPart("META-INF/manifest.xml");if(Q===void 0)return!1;return Q.firstDescendant(M.MANIFEST,"encryption-data")!==void 0}function r(q,Q){let Y=q.findAll(M.DRAW,"page"),$=Y.length>0?Y:[q],J=[];for(let z of $){let G=[],H=[],K=[];if(Aq(z,Q,G,H,K),J.push(...G),J.push(...H),K.length>0)J.push({type:"blockQuote",blocks:K})}return J}function Aq(q,Q,Y,$,J){for(let z of q.childElems()){if(z.is(M.PRESENTATION,"notes")){for(let G of z.descendants(M.DRAW,"text-box"))J.push(..._(G,Q));continue}if(z.ns!==M.DRAW)continue;switch(z.local){case"text-box":{let G=z.attr(M.PRESENTATION,"class")??"";if(G==="page-number"||G==="date-time"||G==="footer"||G==="header")continue;let H=_(z,Q);if(G==="title")_q(H,Y);else $.push(...H);break}case"frame":{let G=z.attr(M.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(M.DRAW,"text-box"))H.push(..._(K,Q));else if(K.is(M.TABLE,"table"))H.push(...E(K,Q));else if(K.is(M.DRAW,"image")){let X=[],Z=[];if(b(z,Q,X,Z),!a(X))H.push({type:"paragraph",inlines:X});H.push(...Z);break}if(G==="title")_q(H,Y);else $.push(...H);break}case"g":Aq(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(M.TEXT,"p")||G.is(M.TEXT,"list")){$.push(..._(z,Q));break}break}default:break}}}function _q(q,Q){let Y=[];for(let $ of q){if($.type!=="paragraph")continue;if(a($.inlines))continue;if(Y.length>0)Y.push({type:"lineBreak"});Y.push(...$.inlines)}if(!a(Y))Q.push({type:"heading",level:2,anchor:XQ(Y),content:Y})}var Dq=new Set(["odt","ods","odp","odg"]),AQ=new Set(["odt","ods","odp","odg","ott","ots","otp","otg","fodt","fods","fodp","fodg","sxw","sxc","sxi","sxd","stw","stc","sti","std"]),PQ="urn:oasis:names:tc:opendocument:xmlns:office:1.0";function l(){return{id:"odf",sniff(q,Q){if(Dq.has(Pq(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:BQ(Bq(q))}}}}function DQ(q){if(IQ(q))throw n.unsupported("pdf");if(_Q(q))throw n.unsupported("ole");let Q=Pq(q);if(Q!==void 0&&!Dq.has(Q))throw n.unsupported(Q)}function FQ(q){if(!NQ(q))return!1;let Q=TQ(q.subarray(0,Math.min(q.length,8192)));return Q.includes(PQ)||Q.includes("office:document")}function NQ(q){let Q=Fq(q);return Q<q.length&&q[Q]===60}function IQ(q){let Q=Fq(q);return CQ(q,"%PDF-",Q)}function Fq(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 CQ(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([l()]);function SQ(q,Q){return LQ(q,Q)}export{SQ as toMarkdown,l 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.2",
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.2",
26
+ "@mdgate/core": "0.5.2",
27
+ "@mdgate/document": "0.5.2",
28
+ "@mdgate/office-common": "0.5.2",
29
+ "@mdgate/utils": "0.5.2"
30
30
  },
31
31
  "publishConfig": {
32
32
  "access": "public"