@mdgate/latex 0.1.0

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/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # @mdgate/latex
2
+
3
+ Convert LaTeX source to Markdown. Outputs GitHub-Flavored Markdown. Works in Node, Edge, and
4
+ browsers. No native addons.
5
+
6
+ Handles: `.tex`, `.latex`, `.ltx`
7
+
8
+ ## Usage
9
+
10
+ ```ts
11
+ import { toMarkdown } from '@mdgate/latex';
12
+
13
+ const markdown = await toMarkdown(bytes);
14
+ ```
15
+
16
+ Compose with other converters:
17
+
18
+ ```ts
19
+ import { create } from '@mdgate/core';
20
+ import { latex } from '@mdgate/latex';
21
+
22
+ const convert = create([latex()]);
23
+ ```
24
+
25
+ Part of [mdgate converters](https://github.com/mdgate/converters); install
26
+ `@mdgate/converters` for every format at once.
@@ -0,0 +1,2 @@
1
+ export { latex } from './latex.js';
2
+ export { toMarkdown } from './to-markdown.js';
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ import{ConvertError as C}from"@mdgate/core";import{documentToMarkdown as H0}from"@mdgate/document";import{fileExtension as X0}from"@mdgate/utils";import{emptyDocument as p,heading as L,inlinesAreEmpty as q,PLAIN as M,resolveHeaderRows as r,tableFromRows as v}from"@mdgate/document";import{cleanText as c,trim as z}from"@mdgate/utils";var O={bold:!0,italic:!1,strike:!1,code:!1},j={bold:!1,italic:!0,strike:!1,code:!1},F={bold:!1,italic:!1,strike:!1,code:!0},u={part:1,chapter:1,section:1,subsection:2,subsubsection:3,paragraph:4,subparagraph:5},b=new Set(["documentclass","usepackage","RequirePackage","usetikzlibrary","pagestyle","thispagestyle","geometry","hypersetup","definecolor","setlength","addtolength","settowidth","settoheight","vspace","hspace","vskip","hskip","label","index","glossary","addtocontents","addcontentsline","setcounter","addtocounter","refstepcounter","newcommand","renewcommand","providecommand","newenvironment","renewenvironment","newtheorem","def","edef","gdef","xdef","let","input","include","includeonly","cline","cmidrule","graphicspath","captionsetup","floatname","bibliographystyle","bibliography","nocite"]),y=new Set(["makeatletter","makeatother","noindent","indent","centering","raggedright","raggedleft","raggedbottom","flushbottom","sloppy","fussy","protect","leavevmode","relax","hline","toprule","midrule","bottomrule","newpage","clearpage","cleardoublepage","pagebreak","nopagebreak","linebreak","nolinebreak","smallskip","medskip","bigskip","vfill","hfill","tableofcontents","listoffigures","listoftables","appendix","frontmatter","mainmatter","backmatter","maketitle","today","normalsize","tiny","scriptsize","footnotesize","small","large","Large","LARGE","huge","Huge"]),R=new Set(["verbatim","verbatim*","lstlisting","lstlisting*","minted","minted*","Verbatim","BVerbatim","LVerbatim","alltt"]),A=new Set(["equation","equation*","align","align*","alignat","alignat*","flalign","flalign*","gather","gather*","multline","multline*","displaymath","eqnarray","eqnarray*"]),m={itemize:"bullet",enumerate:"decimal",description:"bullet"},l=new Set(["quote","quotation","displayquote","verse","abstract"]),a=new Set(["tabular","tabular*","tabularx","longtable","longtable*","array"]),i=new Set(["document","table","table*","figure","figure*","center","flushleft","flushright","minipage","adjustbox","titlepage","samepage","sloppypar","group","tiny","scriptsize","footnotesize","small","normalsize","large","Large","LARGE","huge","Huge"]),g=new Set(["comment","filecontents","filecontents*"]),I={"'":{a:"á",e:"é",i:"í",o:"ó",u:"ú",y:"ý",A:"Á",E:"É",I:"Í",O:"Ó",U:"Ú"},"`":{a:"à",e:"è",i:"ì",o:"ò",u:"ù",A:"À",E:"È",I:"Ì",O:"Ò",U:"Ù"},"^":{a:"â",e:"ê",i:"î",o:"ô",u:"û",A:"Â",E:"Ê",I:"Î",O:"Ô",U:"Û"},'"':{a:"ä",e:"ë",i:"ï",o:"ö",u:"ü",y:"ÿ",A:"Ä",E:"Ë",I:"Ï",O:"Ö",U:"Ü"},"~":{a:"ã",n:"ñ",o:"õ",A:"Ã",N:"Ñ",O:"Õ"},c:{c:"ç",C:"Ç"},v:{s:"š",z:"ž",c:"č",S:"Š",Z:"Ž",C:"Č"}},w={LaTeX:"LaTeX",TeX:"TeX",ldots:"...",dots:"...",textbackslash:"\\",textasciitilde:"~",textasciicircum:"^",textbar:"|",textless:"<",textgreater:">",sim:"~",S:"§",P:"¶",dag:"†",ddag:"‡",copyright:"©",pounds:"£",euro:"€",degree:"°"};function N(U){if(Y0(U))return!1;let f=z0(U);return n(f)}function k(U){let f=Q0(U).replace(/\r\n/g,`
2
+ `).replace(/\r/g,`
3
+ `);return new h(f).parse()}function n(U){let f=0;if(U.charCodeAt(0)===65279)f=1;if(f=Q(U,f),f>=U.length)return!1;if(U.charCodeAt(f)===37)return!0;return f=t(U,f),S(U,f,"documentclass")||s(U,f,"document")}function S(U,f,Z){if(U.charCodeAt(f)!==92)return!1;let G=f+1;if(!U.startsWith(Z,G))return!1;let J=G+Z.length;return J>=U.length||!V(U.charCodeAt(J))}function s(U,f,Z){if(!S(U,f,"begin"))return!1;let G=f+6;if(G=Q(U,G),U.charCodeAt(G)!==123)return!1;if(G=Q(U,G+1),!U.startsWith(Z,G))return!1;return G=Q(U,G+Z.length),U.charCodeAt(G)===125}function Q(U,f){while(f<U.length){let Z=U.charCodeAt(f);if(Z!==9&&Z!==10&&Z!==13&&Z!==32)break;f+=1}return f}function t(U,f){for(;;){if(f=Q(U,f),U.charCodeAt(f)!==37)return f;let Z=U.indexOf(`
4
+ `,f+1);f=Z<0?U.length:Z+1;while(f<U.length){let G=U.charCodeAt(f);if(G!==9&&G!==32)break;f+=1}}}class D{text;i=0;constructor(U){this.text=U}get eof(){return this.i>=this.text.length}peek(){return this.text[this.i]??""}peekCode(){return this.i<this.text.length?this.text.charCodeAt(this.i):0}next(){let U=this.text[this.i]??"";return this.i+=1,U}startsWith(U){return this.text.startsWith(U,this.i)}skipSpaces(){while(this.i<this.text.length){let U=this.text.charCodeAt(this.i);if(U!==9&&U!==32)break;this.i+=1}}skipWs(){this.i=Q(this.text,this.i)}skipComment(){let U=this.text.indexOf(`
5
+ `,this.i);this.i=U<0?this.text.length:U+1,this.skipSpaces()}skipWsComments(){for(;;){let U=this.peekCode();if(U===9||U===10||U===13||U===32){this.i+=1;continue}if(U===37){this.skipComment();continue}return}}skipSpacesComments(){for(;;){let U=this.peekCode();if(U===9||U===32){this.i+=1;continue}if(U===37){this.skipComment();continue}return}}take(U){if(!this.startsWith(U))return!1;return this.i+=U.length,!0}readEscape(){if(this.peekCode()!==92)return;if(this.i+=1,this.eof)return"";let U=this.text.charCodeAt(this.i);if(V(U)){let f=this.i;this.i+=1;while(this.i<this.text.length&&V(this.text.charCodeAt(this.i)))this.i+=1;let Z=this.text.slice(f,this.i);return this.skipSpaces(),Z}return this.i+=1,this.text[this.i-1]}peekEscape(){let U=this.i,f=this.readEscape();return this.i=U,f}readGroupRaw(){if(this.skipSpacesComments(),this.peekCode()!==123)return;this.i+=1;let U=this.i,f=1;while(this.i<this.text.length&&f>0){let Z=this.text.charCodeAt(this.i);if(Z===92){this.i+=this.i+1<this.text.length?2:1;continue}if(Z===37){this.skipComment();continue}if(Z===123)f+=1;else if(Z===125)f-=1;this.i+=1}return this.text.slice(U,this.i-(f===0?1:0))}skipOptional(){if(this.skipSpacesComments(),this.peekCode()!==91)return;this.i+=1;let U=this.i,f=1,Z=0;while(this.i<this.text.length&&f>0){let G=this.text.charCodeAt(this.i);if(G===92){this.i+=this.i+1<this.text.length?2:1;continue}if(G===37){this.skipComment();continue}if(G===123)Z+=1;else if(G===125&&Z>0)Z-=1;else if(G===91&&Z===0)f+=1;else if(G===93&&Z===0)f-=1;this.i+=1}return this.text.slice(U,this.i-(f===0?1:0))}skipStar(){return this.skipSpacesComments(),this.take("*")}readUntilEndEnv(U){let f=new RegExp(`\\\\end\\s*\\{\\s*${J0(U)}\\s*\\}`),Z=this.text.slice(this.i),G=f.exec(Z);if(G===null||G.index===void 0){let Y=Z;return this.i=this.text.length,_(Y)}let J=Z.slice(0,G.index);return this.i+=G.index+G[0].length,_(J)}consumeEndEnv(U){let f=this.i;if(this.skipWsComments(),this.peekEscape()!=="end")return this.i=f,!1;this.readEscape();let Z=this.readGroupRaw();if(Z!==void 0&&z(Z)===U)return!0;return this.i=f,!1}peekEndEnv(){let U=this.i;if(this.skipWsComments(),this.peekEscape()!=="end"){this.i=U;return}this.readEscape();let f=this.readGroupRaw();return this.i=U,f!==void 0?z(f):void 0}peekItem(){let U=this.i;this.skipWsComments();let f=this.peekEscape();return this.i=U,f==="item"}}class h{src;style=M;title;author;notes=[];noteN=0;drop=!1;sawMaketitle=!1;constructor(U){this.src=new D(U)}parse(){this.drop=e(this.src.text);let U=this.parseBlocks({endDocument:!0}),f=p();if(this.title!==void 0&&!this.sawMaketitle)f.blocks.push(...this.titleBlocks());return f.blocks.push(...U),f.notes=this.notes,f}titleBlocks(){let U=[];if(this.title!==void 0&&!q(this.title))U.push(L(1,this.title));if(this.author!==void 0&&!q(this.author))U.push({type:"paragraph",inlines:Z0(this.author)});return U}sectionLevel(U){let f=u[U]??1;return this.title!==void 0?f+1:f}parseBlocks(U){let f=[],Z=[],G=()=>{let J=E(Z);if(!q(J))f.push({type:"paragraph",inlines:J});Z=[]};while(!this.src.eof){if(this.drop){this.consumePreamble();continue}if(this.shouldStop(U))break;let J=this.src.peekCode();if(J===0)break;if(J===37){this.src.skipComment();continue}if(J===10){if(this.src.i+=1,this.isBlankLine())this.skipBlankLines(),G();else B(Z,this.style);continue}if(J===9||J===32||J===13){this.src.i+=1,B(Z,this.style);continue}if(J===125){if(U.atGroup)break;this.src.i+=1;continue}if(J===38){if(U.atCell)break;this.src.i+=1,Z.push($("&",this.style));continue}if(J===123){Z.push(...this.parseGroupInlines());continue}if(J===36){let Y=this.parseDollar();if(Y.kind==="blocks")G(),f.push(...Y.blocks);else if(Y.kind==="inlines")Z.push(...Y.inlines);continue}if(J===92){let Y=this.parseCommand(U);if(Y.kind==="stop")break;if(Y.kind==="item")break;if(Y.kind==="row")break;if(Y.kind==="break"){G();continue}if(Y.kind==="blocks"){G(),f.push(...Y.blocks);continue}if(Y.kind==="inlines"){Z.push(...Y.inlines);continue}continue}if(J===126){this.src.i+=1,B(Z,this.style);continue}if(J===96&&this.src.startsWith("``")){this.src.i+=2,Z.push($("“",this.style));continue}if(J===39&&this.src.startsWith("''")){this.src.i+=2,Z.push($("”",this.style));continue}if(J===45&&this.src.startsWith("---")){this.src.i+=3,Z.push($("—",this.style));continue}if(J===45&&this.src.startsWith("--")){this.src.i+=2,Z.push($("–",this.style));continue}Z.push($(this.src.next(),this.style))}return G(),f}parseCommand(U){let f=this.src.readEscape();if(f===void 0)return{kind:"empty"};if(this.src.skipStar(),f==="begin")return this.parseBegin();if(f==="end")return this.parseEnd(U);if(f==="item")return{kind:"item"};if(f==="par")return{kind:"break"};if(f==="\\"){if(this.src.skipOptional(),U.atRow)return{kind:"row"};return{kind:"inlines",inlines:[{type:"lineBreak"}]}}if(f==="newline")return{kind:"inlines",inlines:[{type:"lineBreak"}]};if(f==="["){let Z=this.readUntilCmd("]");return{kind:"blocks",blocks:P(Z)}}if(f==="("){let Z=this.readUntilCmd(")");return{kind:"inlines",inlines:[K(`$${z(Z)}$`)]}}if(f==="]")return{kind:"empty"};if(f===")")return{kind:"empty"};if(f==="maketitle")return this.sawMaketitle=!0,{kind:"blocks",blocks:this.titleBlocks()};if(f==="title")return this.title=this.parseArgInlines(),{kind:"empty"};if(f==="author")return this.author=this.parseArgInlines(),{kind:"empty"};if(f==="date")return this.parseArgInlines(),{kind:"empty"};if(f==="and")return{kind:"inlines",inlines:[$(", ",this.style)]};if(f==="thanks")return this.skipArg(),{kind:"empty"};if(f in u){this.src.skipOptional();let Z=this.parseArgInlines(),G=this.sectionLevel(f);if(q(Z))return{kind:"empty"};return{kind:"blocks",blocks:[L(G,Z)]}}if(f==="caption"){this.src.skipOptional();let Z=this.parseArgInlines();if(q(Z))return{kind:"empty"};return{kind:"blocks",blocks:[{type:"paragraph",inlines:H(Z,j)}]}}if(f==="textbf"||f==="mathbf")return{kind:"inlines",inlines:H(this.parseArgInlines(),O)};if(f==="textit"||f==="textsl"||f==="emph"||f==="mathit")return{kind:"inlines",inlines:H(this.parseArgInlines(),j)};if(f==="texttt"||f==="mathtt"||f==="textsf")return{kind:"inlines",inlines:H(this.parseArgInlines(),F)};if(f==="text"||f==="textrm"||f==="textmd"||f==="underline")return{kind:"inlines",inlines:this.parseArgInlines()};if(f==="bf"||f==="bfseries")return this.style=X(this.style,O),{kind:"empty"};if(f==="it"||f==="itshape"||f==="em"||f==="slshape")return this.style=X(this.style,j),{kind:"empty"};if(f==="tt"||f==="ttfamily")return this.style=X(this.style,F),{kind:"empty"};if(f==="url"){let Z=z(this.src.readGroupRaw()??"");if(Z.length===0)return{kind:"empty"};return{kind:"inlines",inlines:[{type:"link",content:[$(Z,this.style)],target:{type:"external",url:Z}}]}}if(f==="href"){let Z=z(this.src.readGroupRaw()??""),G=this.parseArgInlines();if(Z.length===0)return{kind:"inlines",inlines:G};return{kind:"inlines",inlines:[{type:"link",content:G,target:{type:"external",url:Z}}]}}if(f==="includegraphics"){this.src.skipOptional();let Z=z(this.src.readGroupRaw()??"");if(Z.length===0)return{kind:"empty"};return{kind:"inlines",inlines:[{type:"image",alt:Z,source:{type:"external",url:Z}}]}}if(f==="footnote"){let Z=this.parseArgInlines();this.noteN+=1;let G=`fn${this.noteN}`;return this.notes.push({id:G,kind:"footnote",blocks:[{type:"paragraph",inlines:Z}]}),{kind:"inlines",inlines:[{type:"noteRef",id:G}]}}if(f==="verb"||f==="lstinline")return{kind:"inlines",inlines:this.parseVerb(f)};if(f===" "||f===","||f===";"||f===":"||f==="quad"||f==="qquad")return{kind:"inlines",inlines:[$(" ",this.style)]};if(f==="!"||f==="/")return{kind:"empty"};if(f==="%"||f==="$"||f==="&"||f==="#"||f==="_"||f==="{"||f==="}")return{kind:"inlines",inlines:[$(f,this.style)]};if(f==="~")return{kind:"inlines",inlines:[$("~",this.style)]};if(f in w)return{kind:"inlines",inlines:[$(w[f],this.style)]};if(f in I||f==="="){let Z=this.readAccentArg(),G=I[f]?.[Z];return{kind:"inlines",inlines:[$(G??Z,this.style)]}}if(b.has(f))return this.skipUnknownArgs(),{kind:"empty"};if(y.has(f))return this.src.skipOptional(),{kind:"empty"};return{kind:"inlines",inlines:this.takeUnknownArgs()}}parseBegin(){let U=z(this.src.readGroupRaw()??"");if(U.length===0)return{kind:"empty"};if(U==="document")return{kind:"break"};if(R.has(U)){let Z=this.codeLang(U),G=this.src.readUntilEndEnv(U);return{kind:"blocks",blocks:[{type:"codeBlock",lang:Z,text:G0(G)}]}}if(A.has(U)||U==="math"){let Z=z(this.src.readUntilEndEnv(U));if(U==="math")return{kind:"inlines",inlines:[K(`$${Z}$`)]};return{kind:"blocks",blocks:P(Z)}}if(g.has(U))return this.src.readUntilEndEnv(U),{kind:"empty"};let f=m[U];if(f!==void 0)return{kind:"blocks",blocks:[this.parseList(U,f)]};if(l.has(U)){let Z=this.parseBlocks({endEnv:U,endDocument:!0});return this.src.consumeEndEnv(U),{kind:"blocks",blocks:Z.length>0?[{type:"blockQuote",blocks:Z}]:[]}}if(a.has(U))return{kind:"blocks",blocks:this.parseTabular(U)};if(i.has(U)||U.length>0){if(this.src.skipOptional(),this.src.peekCode()===123&&(U==="minipage"||U==="tabular*"||U==="adjustbox"))this.src.readGroupRaw();let Z=this.parseBlocks({endEnv:U,endDocument:!0});return this.src.consumeEndEnv(U),{kind:"blocks",blocks:Z}}return{kind:"empty"}}parseEnd(U){let f=z(this.src.readGroupRaw()??"");if(f==="document"||U.endEnv!==void 0&&f===U.endEnv)return{kind:"stop"};return{kind:"empty"}}preambleArg(){let U=this.drop;this.drop=!1;let f=this.parseArgInlines();return this.drop=U,f}parseList(U,f){let Z=[];while(!this.src.eof){if(this.src.skipWsComments(),this.src.eof)break;if(this.src.peekEndEnv()===U||this.src.peekEndEnv()==="document")break;if(!this.src.peekItem()){this.parseBlocks({atItem:!0,endEnv:U,endDocument:!0});continue}this.src.readEscape(),this.src.skipStar();let G=this.src.skipOptional(),J=this.parseBlocks({atItem:!0,endEnv:U,endDocument:!0});Z.push({blocks:J.length>0?J:[{type:"paragraph",inlines:[$("",M)]}],checked:void 0,markerLabel:G!==void 0&&U==="description"?z(G):void 0})}return this.src.consumeEndEnv(U),{type:"list",list:{marker:f,start:1,items:Z}}}parseTabular(U){this.src.skipOptional(),this.src.readGroupRaw();let f=[],Z=[];while(!this.src.eof){if(this.src.skipWsComments(),this.src.eof)break;let J=this.src.peekEndEnv();if(J===U||J==="document")break;let Y=this.parseBlocks({atCell:!0,atRow:!0,endEnv:U,endDocument:!0});if(Z.push({blocks:Y,colSpan:1,rowSpan:1}),this.src.skipSpacesComments(),this.src.peekCode()===38){this.src.i+=1;continue}if(this.src.peekEscape()==="\\"){this.src.readEscape(),this.src.skipStar(),this.src.skipOptional(),f.push(Z),Z=[];continue}break}if(Z.some((J)=>J.blocks.length>0))f.push(Z);if(this.src.consumeEndEnv(U),f.length===0)return[];let G=v(f,0,"data");return G.headerRows=r(G,0),[{type:"table",table:G}]}parseGroupInlines(){if(this.src.peekCode()!==123)return[];let U=this.style;this.src.i+=1;let f=this.parseBlocks({atGroup:!0});if(this.src.peekCode()===125)this.src.i+=1;return this.style=U,f0(f)}parseArgInlines(){if(this.src.skipSpacesComments(),this.src.peekCode()===123)return this.parseGroupInlines();return this.parseOneAtom()}parseOneAtom(){if(this.src.eof)return[];let U=this.src.peekCode();if(U===92){let f=this.parseCommand({});if(f.kind==="inlines")return f.inlines;return[]}if(U===123)return this.parseGroupInlines();return[$(this.src.next(),this.style)]}skipArg(){if(this.src.skipSpacesComments(),this.src.peekCode()===123)this.src.readGroupRaw();else if(!this.src.eof)this.src.i+=1}skipUnknownArgs(){for(;;){if(this.src.skipOptional()!==void 0)continue;if(this.src.skipSpacesComments(),this.src.peekCode()===123){this.src.readGroupRaw();continue}return}}takeUnknownArgs(){let U=[];for(;;){if(this.src.skipOptional()!==void 0)continue;if(this.src.skipSpacesComments(),this.src.peekCode()===123){U.push(...this.parseGroupInlines());continue}return U}}parseVerb(U){if(U==="lstinline")this.src.skipOptional();if(this.src.peekCode()===123){let Y=this.src.readGroupRaw()??"";return[$(Y,F)]}if(this.src.eof)return[];let f=this.src.next(),Z=this.src.i,G=this.src.text.indexOf(f,Z);if(G<0){let Y=this.src.text.slice(Z);return this.src.i=this.src.text.length,[$(Y,F)]}let J=this.src.text.slice(Z,G);return this.src.i=G+1,[$(J,F)]}parseDollar(){if(this.src.i+=1,this.src.peekCode()===36){this.src.i+=1;let f=this.readUntilStr("$$");return{kind:"blocks",blocks:P(f)}}let U=this.readUntilStr("$");return{kind:"inlines",inlines:[K(`$${U}$`)]}}readUntilStr(U){let f=this.src.i;while(!this.src.eof){if(this.src.peekCode()===37){this.src.skipComment();continue}if(this.src.startsWith(U)&&this.src.text[this.src.i-1]!=="\\"){let Z=this.src.text.slice(f,this.src.i);return this.src.i+=U.length,Z}this.src.i+=1}return this.src.text.slice(f)}readUntilCmd(U){let f=this.src.i;while(!this.src.eof){if(this.src.peekCode()===37){this.src.skipComment();continue}if(this.src.peekCode()===92&&this.src.peekEscape()===U){let Z=this.src.text.slice(f,this.src.i);return this.src.readEscape(),Z}this.src.i+=1}return this.src.text.slice(f)}readAccentArg(){if(this.src.skipSpacesComments(),this.src.peekCode()===123)return z(this.src.readGroupRaw()??"");if(this.src.peekCode()===92){let U=this.src.readEscape()??"";return U==="i"||U==="imath"?"i":U}if(this.src.eof)return"";return this.src.next()}codeLang(U){if(U==="minted"||U==="minted*"){this.src.skipOptional();let f=z(this.src.readGroupRaw()??"");return f.length>0?f.toLowerCase():void 0}if(U==="lstlisting"||U==="lstlisting*"){let f=this.src.skipOptional();return U0(f)}return}consumePreamble(){if(this.src.skipWsComments(),this.src.eof){this.drop=!1;return}if(this.src.peekCode()!==92){this.src.i+=1;return}let U=this.src.readEscape();if(U===void 0)return;if(this.src.skipStar(),U==="title"){this.title=this.preambleArg();return}if(U==="author"){this.author=this.preambleArg();return}if(U==="date"){this.preambleArg();return}if(U==="begin"){let f=z(this.src.readGroupRaw()??"");if(f==="document"){this.drop=!1;return}this.skipEnv(f);return}if(U==="end"){this.src.readGroupRaw();return}this.skipUnknownArgs()}skipEnv(U){if(U.length===0)return;if(R.has(U)||g.has(U)||A.has(U)){this.src.readUntilEndEnv(U);return}let f=1;while(!this.src.eof&&f>0){if(this.src.skipWsComments(),this.src.eof)break;if(this.src.peekCode()!==92){this.src.i+=1;continue}let Z=this.src.readEscape();if(Z==="begin"){let G=z(this.src.readGroupRaw()??"");if(G===U)f+=1;else if(R.has(G)||g.has(G))this.src.readUntilEndEnv(G)}else if(Z==="end"){if(z(this.src.readGroupRaw()??"")===U)f-=1}}}shouldStop(U){let f=this.src.i;if(this.src.skipSpacesComments(),this.src.eof)return this.src.i=f,!0;let Z=this.src.peekCode();if(U.atGroup&&Z===125)return this.src.i=f,!0;if(U.atCell&&Z===38)return this.src.i=f,!0;if(Z===92){let G=this.src.peekEscape();if(U.atItem&&G==="item")return this.src.i=f,!0;if(U.atRow&&G==="\\")return this.src.i=f,!0;if(G==="end"){let J=this.src.peekEndEnv();if(U.endEnv!==void 0&&J===U.endEnv)return this.src.i=f,!0;if(U.endDocument&&J==="document")return this.src.i=f,!0}}return this.src.i=f,!1}isBlankLine(){let U=this.src.i;if(this.src.skipSpaces(),this.src.peekCode()===37)return this.src.i=U,!1;let f=this.src.eof||this.src.peekCode()===10;return this.src.i=U,f}skipBlankLines(){for(;;){let U=this.src.i;if(this.src.skipSpaces(),this.src.peekCode()===10){this.src.i+=1;continue}this.src.i=U;return}}}function e(U){let f=new D(U);while(!f.eof){if(f.skipWsComments(),f.eof)return!1;if(f.peekCode()===92){if(f.readEscape()==="begin"){let G=f.readGroupRaw();if(G!==void 0&&z(G)==="document")return!0}continue}f.i+=1}return!1}function P(U){let f=z(U);if(f.length===0)return[];return[{type:"paragraph",inlines:[K(`$$${f}$$`)]}]}function U0(U){if(U===void 0)return;let f=/language\s*=\s*\{?([A-Za-z0-9_+-]+)/i.exec(U);if(f===null)return;return f[1].toLowerCase()}function f0(U){let f=[];for(let Z=0;Z<U.length;Z+=1){let G=U[Z];if(Z>0)f.push({type:"lineBreak"});if(G.type==="paragraph")f.push(...G.inlines);else if(G.type==="heading")f.push(...G.content);else if(G.type==="codeBlock")f.push($(G.text,F))}return f}function Z0(U){let f=[];for(let Z of U)if(Z.type==="lineBreak")f.push($(", ",M));else f.push(Z);return E(f)}function H(U,f){return U.map((Z)=>{if(Z.type==="text")return{type:"text",text:Z.text,style:X(Z.style,f)};if(Z.type==="link")return{...Z,content:H(Z.content,f)};return Z})}function X(U,f){return{bold:f.bold||U.bold,italic:f.italic||U.italic,strike:f.strike||U.strike,code:f.code||U.code}}function $(U,f){return{type:"text",text:c(U),style:f}}function K(U){return{type:"text",text:U,style:M}}function B(U,f){let Z=U[U.length-1];if(Z===void 0)return;if(Z.type==="text"){if(Z.text.length===0||Z.text.endsWith(" "))return;Z.text+=" ";return}if(Z.type==="lineBreak")return;U.push($(" ",f))}function E(U){let f=[];for(let Z of U){if(Z.type==="text"&&Z.text.length===0)continue;let G=f[f.length-1];if(G!==void 0&&G.type==="text"&&Z.type==="text"&&G.style.bold===Z.style.bold&&G.style.italic===Z.style.italic&&G.style.strike===Z.style.strike&&G.style.code===Z.style.code){G.text+=Z.text;continue}f.push(Z)}return f}function _(U){if(U.charCodeAt(0)===10)return U.slice(1);return U}function G0(U){if(U.endsWith(`
6
+ `))return U.slice(0,-1);return U}function J0(U){return U.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function V(U){return U>=65&&U<=90||U>=97&&U<=122}function Y0(U){let f=0;if(U.length>=3&&U[0]===239&&U[1]===187&&U[2]===191)f=3;while(f<U.length){let Z=U[f];if(Z!==9&&Z!==10&&Z!==13&&Z!==32)break;f+=1}return $0(U,"%PDF-",f)}function $0(U,f,Z){if(Z+f.length>U.length)return!1;for(let G=0;G<f.length;G+=1)if(U[Z+G]!==f.charCodeAt(G))return!1;return!0}function z0(U){let f=Math.min(U.length,8192);if(U.length>=2&&U[0]===255&&U[1]===254)return new TextDecoder("utf-16le").decode(U.subarray(0,f));if(U.length>=2&&U[0]===254&&U[1]===255)return new TextDecoder("utf-16be").decode(U.subarray(0,f));let Z=0;if(U.length>=3&&U[0]===239&&U[1]===187&&U[2]===191)Z=3;return new TextDecoder("utf-8",{fatal:!1}).decode(U.subarray(Z,Z+8192))}var F0="€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ";function Q0(U){if(U.length>=2&&U[0]===255&&U[1]===254)return W(new TextDecoder("utf-16le").decode(U));if(U.length>=2&&U[0]===254&&U[1]===255)return W(new TextDecoder("utf-16be").decode(U));let f=U.length>=3&&U[0]===239&&U[1]===187&&U[2]===191?U.subarray(3):U;try{return W(new TextDecoder("utf-8",{fatal:!0}).decode(f))}catch{return q0(f)}}function q0(U){let f="";for(let Z=0;Z<U.length;Z+=1){let G=U[Z];if(G<128||G>=160)f+=String.fromCharCode(G);else f+=F0[G-128]}return f}function W(U){return U.charCodeAt(0)===65279?U.slice(1):U}var K0=new Set(["tex","latex","ltx"]);function T(){return{id:"latex",sniff(U,f){if(x(U)||o(U)||d(U))return 0;if(N(U))return 2;if(f?.path!==void 0&&K0.has(X0(f.path)??""))return 1;return 0},convert(U){return M0(U),{markdown:H0(k(U))}}}}function M0(U){if(x(U))throw C.unsupported("pdf");if(o(U))throw C.unsupported("ole");if(d(U))throw C.unsupported("zip")}function x(U){let f=j0(U);return R0(U,"%PDF-",f)}function o(U){return U.length>=8&&U[0]===208&&U[1]===207&&U[2]===17&&U[3]===224&&U[4]===161&&U[5]===177&&U[6]===26&&U[7]===225}function d(U){return U.length>=4&&U[0]===80&&U[1]===75&&U[2]===3&&U[3]===4}function j0(U){let f=0;if(U.length>=3&&U[0]===239&&U[1]===187&&U[2]===191)f=3;while(f<U.length){let Z=U[f];if(Z!==9&&Z!==10&&Z!==13&&Z!==32)break;f+=1}return f}function R0(U,f,Z){if(Z+f.length>U.length)return!1;for(let G=0;G<f.length;G+=1)if(U[Z+G]!==f.charCodeAt(G))return!1;return!0}import{create as g0}from"@mdgate/core";var P0=g0([T()]);function B0(U,f){return P0(U,f)}export{B0 as toMarkdown,T as latex};
@@ -0,0 +1,2 @@
1
+ import type { Converter } from '@mdgate/core';
2
+ export declare function latex(): Converter;
@@ -0,0 +1,6 @@
1
+ import { type ConvertHint } from '@mdgate/core';
2
+ /**
3
+ * Convert a single file's bytes to Markdown with the latex converter.
4
+ * `hint.path` is only a sniff hint; it is never read from disk.
5
+ */
6
+ export declare function toMarkdown(bytes: Uint8Array, hint?: ConvertHint): Promise<string>;
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@mdgate/latex",
3
+ "version": "0.1.0",
4
+ "description": "mdgate LaTeX converter",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "sideEffects": false,
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "main": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "files": [
17
+ "dist/**/*.js",
18
+ "dist/**/*.d.ts"
19
+ ],
20
+ "scripts": {
21
+ "build": "bun ../../scripts/build-package.ts",
22
+ "prepublishOnly": "bun run build"
23
+ },
24
+ "dependencies": {
25
+ "@mdgate/core": "0.1.3",
26
+ "@mdgate/document": "0.1.0",
27
+ "@mdgate/utils": "0.1.2"
28
+ },
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "engines": {
33
+ "node": ">=20"
34
+ },
35
+ "keywords": [
36
+ "mdgate",
37
+ "markdown",
38
+ "latex",
39
+ "tex"
40
+ ]
41
+ }