html-to-md
Version:
A JS library for convert HTML<String> to markdown<String>, gzip 10kb
98 lines (93 loc) • 8.75 kB
JavaScript
import html2Md from '../../src/index'
describe('test codes',()=>{
it('test-1',()=>{
let str="<pre class=\"hljs\"><code><span class=\"hljs-comment\">/**\n * @param {number[]} stones\n * @return {number}\n */</span>\n<span class=\"hljs-keyword\">var</span> lastStoneWeight = <span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span>(<span class=\"hljs-params\">stones</span>) </span>{\n <span class=\"hljs-keyword\">let</span> pq=[]\n <span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span> <span class=\"hljs-title\">insert</span>(<span class=\"hljs-params\">n</span>)</span>{\n <span class=\"hljs-keyword\">if</span>(pq.length===<span class=\"hljs-number\">0</span> || n>=pq[pq.length<span class=\"hljs-number\">-1</span>]){\n pq.push(n)\n }<span class=\"hljs-keyword\">else</span>{\n pq.splice(bsEnd(pq,n),<span class=\"hljs-number\">0</span>,n)\n }\n }\n <span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span> <span class=\"hljs-title\">bsEnd</span>(<span class=\"hljs-params\">arr,n</span>)</span>{\n <span class=\"hljs-keyword\">let</span> lo=<span class=\"hljs-number\">0</span>,hi=arr.length<span class=\"hljs-number\">-1</span>\n <span class=\"hljs-keyword\">while</span>(lo<hi){\n <span class=\"hljs-keyword\">let</span> mid=<span class=\"hljs-built_in\">Math</span>.floor((lo+hi)/<span class=\"hljs-number\">2</span>)\n <span class=\"hljs-keyword\">if</span>(arr[mid]<n)lo=mid+<span class=\"hljs-number\">1</span>\n <span class=\"hljs-keyword\">else</span> hi=mid\n }\n <span class=\"hljs-keyword\">return</span> hi\n }\n <span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span> <span class=\"hljs-title\">delMax</span>(<span class=\"hljs-params\"></span>)</span>{\n <span class=\"hljs-keyword\">return</span> pq.pop()\n }\n <span class=\"hljs-keyword\">for</span>(<span class=\"hljs-keyword\">let</span> n <span class=\"hljs-keyword\">of</span> stones){\n insert(n)\n }\n <span class=\"hljs-keyword\">while</span>(pq.length><span class=\"hljs-number\">1</span>){\n <span class=\"hljs-keyword\">let</span> f=delMax(),\n s=delMax()\n <span class=\"hljs-keyword\">let</span> more=<span class=\"hljs-built_in\">Math</span>.max(f,s),\n less=<span class=\"hljs-built_in\">Math</span>.min(f,s)\n <span class=\"hljs-keyword\">if</span>(more===less)<span class=\"hljs-keyword\">continue</span>\n more-=less\n insert(more)\n }\n <span class=\"hljs-keyword\">if</span>(pq.length===<span class=\"hljs-number\">1</span>)<span class=\"hljs-keyword\">return</span> pq[<span class=\"hljs-number\">0</span>]\n <span class=\"hljs-keyword\">return</span> <span class=\"hljs-number\">0</span>\n};\n</code></pre>\n"
expect(html2Md(str)).toBe('```javascript\n' +
'/**\n' +
' * @param {number[]} stones\n' +
' * @return {number}\n' +
' */\n' +
'var lastStoneWeight = function(stones) {\n' +
' let pq=[]\n' +
' function insert(n){\n' +
' if(pq.length===0 || n>=pq[pq.length-1]){\n' +
' pq.push(n)\n' +
' }else{\n' +
' pq.splice(bsEnd(pq,n),0,n)\n' +
' }\n' +
' }\n' +
' function bsEnd(arr,n){\n' +
' let lo=0,hi=arr.length-1\n' +
' while(lo<hi){\n' +
' let mid=Math.floor((lo+hi)/2)\n' +
' if(arr[mid]<n)lo=mid+1\n' +
' else hi=mid\n' +
' }\n' +
' return hi\n' +
' }\n' +
' function delMax(){\n' +
' return pq.pop()\n' +
' }\n' +
' for(let n of stones){\n' +
' insert(n)\n' +
' }\n' +
' while(pq.length>1){\n' +
' let f=delMax(),\n' +
' s=delMax()\n' +
' let more=Math.max(f,s),\n' +
' less=Math.min(f,s)\n' +
' if(more===less)continue\n' +
' more-=less\n' +
' insert(more)\n' +
' }\n' +
' if(pq.length===1)return pq[0]\n' +
' return 0\n' +
'};\n' +
'```')
})
it('test-2',()=>{
let str="<pre class=\"hljs\"><code><span class=\"hljs-comment\">/**\n * @param {number} N\n * @return {string}\n */</span>\n<span class=\"hljs-keyword\">var</span> baseNeg2 = <span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span>(<span class=\"hljs-params\">N</span>) </span>{\n <span class=\"hljs-keyword\">if</span>(N===<span class=\"hljs-number\">0</span>)<span class=\"hljs-keyword\">return</span> <span class=\"hljs-string\">'0'</span>\n <span class=\"hljs-keyword\">let</span> aux=[]\n <span class=\"hljs-keyword\">for</span>(<span class=\"hljs-keyword\">let</span> i=<span class=\"hljs-number\">0</span>;i<=<span class=\"hljs-number\">32</span>;i++){\n aux[i]=<span class=\"hljs-built_in\">Math</span>.pow(<span class=\"hljs-number\">-2</span>,i)\n }\n <span class=\"hljs-keyword\">let</span> sums=[aux[<span class=\"hljs-number\">0</span>],aux[<span class=\"hljs-number\">1</span>]]\n <span class=\"hljs-keyword\">for</span>(<span class=\"hljs-keyword\">let</span> i=<span class=\"hljs-number\">2</span>;i<aux.length;i+=<span class=\"hljs-number\">2</span>){\n sums[i]=sums[i<span class=\"hljs-number\">-2</span>]+aux[i]\n }\n <span class=\"hljs-keyword\">for</span>(<span class=\"hljs-keyword\">let</span> i=<span class=\"hljs-number\">3</span>;i<aux.length;i+=<span class=\"hljs-number\">2</span>){\n sums[i]=sums[i<span class=\"hljs-number\">-2</span>]+aux[i]\n }\n <span class=\"hljs-keyword\">let</span> ans=<span class=\"hljs-literal\">null</span>\n <span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span> <span class=\"hljs-title\">calc</span>(<span class=\"hljs-params\">N,arr</span>)</span>{\n <span class=\"hljs-keyword\">if</span>(ans)<span class=\"hljs-keyword\">return</span>\n <span class=\"hljs-keyword\">let</span> delta=<span class=\"hljs-number\">2</span>,start=N<<span class=\"hljs-number\">0</span> ? <span class=\"hljs-number\">1</span> : <span class=\"hljs-number\">0</span>\n <span class=\"hljs-keyword\">for</span>(<span class=\"hljs-keyword\">let</span> i=start;i<aux.length;i+=delta){\n <span class=\"hljs-keyword\">if</span>(aux[i]===N){ \n arr[i]=<span class=\"hljs-string\">'1'</span>\n <span class=\"hljs-keyword\">return</span> ans=arr.slice()\n }<span class=\"hljs-keyword\">else</span> <span class=\"hljs-keyword\">if</span>(<span class=\"hljs-built_in\">Math</span>.abs(sums[i])>=<span class=\"hljs-built_in\">Math</span>.abs(N)){\n arr[i]=<span class=\"hljs-string\">'1'</span>\n calc(N-aux[i],arr)\n <span class=\"hljs-keyword\">if</span>(ans)<span class=\"hljs-keyword\">return</span>\n }\n }\n }\n calc(N,[])\n <span class=\"hljs-keyword\">let</span> finalAns=<span class=\"hljs-string\">''</span>\n <span class=\"hljs-keyword\">for</span>(<span class=\"hljs-keyword\">let</span> i=ans.length<span class=\"hljs-number\">-1</span>;i>=<span class=\"hljs-number\">0</span>;i--){\n <span class=\"hljs-keyword\">if</span>(ans[i]==<span class=\"hljs-literal\">null</span>)finalAns+=<span class=\"hljs-string\">'0'</span>\n <span class=\"hljs-keyword\">else</span> finalAns+=ans[i]\n }\n <span class=\"hljs-keyword\">return</span> finalAns\n};\n</code></pre>\n"
expect(html2Md(str)).toBe('```javascript\n' +
'/**\n' +
' * @param {number} N\n' +
' * @return {string}\n' +
' */\n' +
'var baseNeg2 = function(N) {\n' +
' if(N===0)return \'0\'\n' +
' let aux=[]\n' +
' for(let i=0;i<=32;i++){\n' +
' aux[i]=Math.pow(-2,i)\n' +
' }\n' +
' let sums=[aux[0],aux[1]]\n' +
' for(let i=2;i<aux.length;i+=2){\n' +
' sums[i]=sums[i-2]+aux[i]\n' +
' }\n' +
' for(let i=3;i<aux.length;i+=2){\n' +
' sums[i]=sums[i-2]+aux[i]\n' +
' }\n' +
' let ans=null\n' +
' function calc(N,arr){\n' +
' if(ans)return\n' +
' let delta=2,start=N<0 ? 1 : 0\n' +
' for(let i=start;i<aux.length;i+=delta){\n' +
' if(aux[i]===N){ \n' +
' arr[i]=\'1\'\n' +
' return ans=arr.slice()\n' +
' }else if(Math.abs(sums[i])>=Math.abs(N)){\n' +
' arr[i]=\'1\'\n' +
' calc(N-aux[i],arr)\n' +
' if(ans)return\n' +
' }\n' +
' }\n' +
' }\n' +
' calc(N,[])\n' +
' let finalAns=\'\'\n' +
' for(let i=ans.length-1;i>=0;i--){\n' +
' if(ans[i]==null)finalAns+=\'0\'\n' +
' else finalAns+=ans[i]\n' +
' }\n' +
' return finalAns\n' +
'};\n' +
'```')
})
})