@mdgate/odf 0.5.0 → 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.
- 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 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.
|
|
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.
|
|
26
|
-
"@mdgate/core": "0.5.
|
|
27
|
-
"@mdgate/document": "0.5.
|
|
28
|
-
"@mdgate/office-common": "0.5.
|
|
29
|
-
"@mdgate/utils": "0.5.
|
|
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"
|