@mdgate/odf 0.5.2 → 0.5.4

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 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};
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.2",
3
+ "version": "0.5.4",
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.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"
25
+ "@mdgate/containers": "0.5.4",
26
+ "@mdgate/core": "0.5.4",
27
+ "@mdgate/document": "0.5.4",
28
+ "@mdgate/office-common": "0.5.4",
29
+ "@mdgate/utils": "0.5.4"
30
30
  },
31
31
  "publishConfig": {
32
32
  "access": "public"