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