mirror of
https://github.com/reanimate/reanimate.git
synced 2026-09-14 09:32:22 +00:00
Deploying to gh-pages from @ 09e7558360 🚀
This commit is contained in:
parent
60deefbbfe
commit
663be49dfe
7 changed files with 393 additions and 371 deletions
|
|
@ -22,7 +22,7 @@
|
||||||
44% ( 4 / 9) in 'Reanimate.LaTeX'
|
44% ( 4 / 9) in 'Reanimate.LaTeX'
|
||||||
42% ( 47 /111) in 'Reanimate.Scene'
|
42% ( 47 /111) in 'Reanimate.Scene'
|
||||||
42% ( 17 / 40) in 'Reanimate.GeoProjection'
|
42% ( 17 / 40) in 'Reanimate.GeoProjection'
|
||||||
33% ( 4 / 12) in 'Reanimate.Render'
|
31% ( 4 / 13) in 'Reanimate.Render'
|
||||||
25% ( 1 / 4) in 'Reanimate.Builtin.Slide'
|
25% ( 1 / 4) in 'Reanimate.Builtin.Slide'
|
||||||
12% ( 2 / 17) in 'Reanimate.Math.SSSP'
|
12% ( 2 / 17) in 'Reanimate.Math.SSSP'
|
||||||
10% ( 3 / 30) in 'Reanimate.PolyShape'
|
10% ( 3 / 30) in 'Reanimate.PolyShape'
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
{ "schemaVersion": 1, "label": "api docs", "message": "53%", "color": "success" }
|
{ "schemaVersion": 1, "label": "api docs", "message": "52%", "color": "success" }
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,7 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
||||||
<td align="right">15%</td><td>2/13</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/17</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">11%</td><td>52/443</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="11%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">15%</td><td>2/13</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/17</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">11%</td><td>52/443</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="11%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td> <tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Render.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Render</a></tt></td>
|
<td> <tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Render.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Render</a></tt></td>
|
||||||
<td align="right">5%</td><td>1/18</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/44</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">5%</td><td>39/762</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">5%</td><td>1/19</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/50</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">4%</td><td>39/826</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="4%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td> <tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Scene.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Scene</a></tt></td>
|
<td> <tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Scene.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Scene</a></tt></td>
|
||||||
<td align="right">31%</td><td>40/128</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="31%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">60%</td><td>15/25</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="60%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">36%</td><td>545/1476</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="36%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">31%</td><td>40/128</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="31%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">60%</td><td>15/25</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="60%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">36%</td><td>545/1476</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="36%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
|
|
@ -128,5 +128,5 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
||||||
<td align="right">100%</td><td>6/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">50%</td><td>1/2</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="50%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">95%</td><td>43/45</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="95%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">100%</td><td>6/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">50%</td><td>1/2</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="50%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">95%</td><td>43/45</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="95%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
<tr></tr><tr style="background: #e0e0e0">
|
<tr></tr><tr style="background: #e0e0e0">
|
||||||
<th align=left> Program Coverage Total</tt></th>
|
<th align=left> Program Coverage Total</tt></th>
|
||||||
<td align="right">30%</td><td>247/802</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/827</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4647/15836</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">30%</td><td>247/803</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/833</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4647/15900</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
</table></body></html>
|
</table></body></html>
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,7 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
||||||
<td align="right">15%</td><td>2/13</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/17</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">11%</td><td>52/443</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="11%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">15%</td><td>2/13</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/17</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">11%</td><td>52/443</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="11%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td> <tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Render.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Render</a></tt></td>
|
<td> <tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Render.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Render</a></tt></td>
|
||||||
<td align="right">5%</td><td>1/18</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/44</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">5%</td><td>39/762</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">5%</td><td>1/19</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/50</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">4%</td><td>39/826</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="4%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td> <tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Svg.Unuse.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Svg.Unuse</a></tt></td>
|
<td> <tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Svg.Unuse.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Svg.Unuse</a></tt></td>
|
||||||
<td align="right">33%</td><td>1/3</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="33%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/14</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">21%</td><td>28/128</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="21%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">33%</td><td>1/3</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="33%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/14</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">21%</td><td>28/128</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="21%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
|
|
@ -128,5 +128,5 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
||||||
<td align="right">15%</td><td>3/20</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">- </td><td>0/0</td><td width=100> </td><td align="right">14%</td><td>7/49</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="14%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">15%</td><td>3/20</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">- </td><td>0/0</td><td width=100> </td><td align="right">14%</td><td>7/49</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="14%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
<tr></tr><tr style="background: #e0e0e0">
|
<tr></tr><tr style="background: #e0e0e0">
|
||||||
<th align=left> Program Coverage Total</tt></th>
|
<th align=left> Program Coverage Total</tt></th>
|
||||||
<td align="right">30%</td><td>247/802</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/827</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4647/15836</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">30%</td><td>247/803</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/833</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4647/15900</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
</table></body></html>
|
</table></body></html>
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
||||||
<td align="right">33%</td><td>4/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="33%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">11%</td><td>1/9</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="11%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">7%</td><td>12/167</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="7%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">33%</td><td>4/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="33%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">11%</td><td>1/9</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="11%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">7%</td><td>12/167</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="7%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td> <tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Render.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Render</a></tt></td>
|
<td> <tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Render.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Render</a></tt></td>
|
||||||
<td align="right">5%</td><td>1/18</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/44</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">5%</td><td>39/762</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">5%</td><td>1/19</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/50</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">4%</td><td>39/826</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="4%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td> <tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Driver.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Driver</a></tt></td>
|
<td> <tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Driver.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Driver</a></tt></td>
|
||||||
<td align="right">8%</td><td>1/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="8%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">1%</td><td>1/55</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="1%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">3%</td><td>9/246</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="3%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">8%</td><td>1/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="8%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">1%</td><td>1/55</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="1%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">3%</td><td>9/246</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="3%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
|
|
@ -128,5 +128,5 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
||||||
<td align="right">0%</td><td>0/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/61</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">0%</td><td>0/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/61</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
|
||||||
<tr></tr><tr style="background: #e0e0e0">
|
<tr></tr><tr style="background: #e0e0e0">
|
||||||
<th align=left> Program Coverage Total</tt></th>
|
<th align=left> Program Coverage Total</tt></th>
|
||||||
<td align="right">30%</td><td>247/802</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/827</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4647/15836</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">30%</td><td>247/803</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/833</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4647/15900</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
</table></body></html>
|
</table></body></html>
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
||||||
<td align="right">8%</td><td>7/82</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="8%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">5%</td><td>4/79</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">2%</td><td>58/2494</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="2%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">8%</td><td>7/82</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="8%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">5%</td><td>4/79</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">2%</td><td>58/2494</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="2%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td> <tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Render.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Render</a></tt></td>
|
<td> <tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Render.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Render</a></tt></td>
|
||||||
<td align="right">5%</td><td>1/18</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/44</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">5%</td><td>39/762</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">5%</td><td>1/19</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="5%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/50</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">4%</td><td>39/826</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="4%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td> <tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Cache.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Cache</a></tt></td>
|
<td> <tt>module <a href="reanimate-0.4.1.0-inplace/Reanimate.Cache.hs.html">reanimate-0.4.1.0-inplace/Reanimate.Cache</a></tt></td>
|
||||||
<td align="right">0%</td><td>0/8</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/160</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">0%</td><td>0/8</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/160</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
|
||||||
|
|
@ -128,5 +128,5 @@ table.dashboard { border-collapse: collapse ; border: solid 1px black }
|
||||||
<td align="right">0%</td><td>0/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/61</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">0%</td><td>0/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">0%</td><td>0/61</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
|
||||||
<tr></tr><tr style="background: #e0e0e0">
|
<tr></tr><tr style="background: #e0e0e0">
|
||||||
<th align=left> Program Coverage Total</tt></th>
|
<th align=left> Program Coverage Total</tt></th>
|
||||||
<td align="right">30%</td><td>247/802</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/827</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4647/15836</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
<td align="right">30%</td><td>247/803</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="30%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">15%</td><td>131/833</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="15%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">29%</td><td>4647/15900</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="29%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
|
||||||
</table></body></html>
|
</table></body></html>
|
||||||
|
|
|
||||||
|
|
@ -22,368 +22,390 @@ span.spaces { background: white }
|
||||||
<span class="lineno"> 3 </span> ( render
|
<span class="lineno"> 3 </span> ( render
|
||||||
<span class="lineno"> 4 </span> , renderSvgs
|
<span class="lineno"> 4 </span> , renderSvgs
|
||||||
<span class="lineno"> 5 </span> , renderSnippets -- :: Animation -> IO ()
|
<span class="lineno"> 5 </span> , renderSnippets -- :: Animation -> IO ()
|
||||||
<span class="lineno"> 6 </span> , Format(..)
|
<span class="lineno"> 6 </span> , renderOneFrame
|
||||||
<span class="lineno"> 7 </span> , Raster(..)
|
<span class="lineno"> 7 </span> , Format(..)
|
||||||
<span class="lineno"> 8 </span> , Width, Height, FPS
|
<span class="lineno"> 8 </span> , Raster(..)
|
||||||
<span class="lineno"> 9 </span> , requireRaster -- :: Raster -> IO Raster
|
<span class="lineno"> 9 </span> , Width, Height, FPS
|
||||||
<span class="lineno"> 10 </span> , selectRaster -- :: Raster -> IO Raster
|
<span class="lineno"> 10 </span> , requireRaster -- :: Raster -> IO Raster
|
||||||
<span class="lineno"> 11 </span> , applyRaster -- :: Raster -> FilePath -> IO ()
|
<span class="lineno"> 11 </span> , selectRaster -- :: Raster -> IO Raster
|
||||||
<span class="lineno"> 12 </span> ) where
|
<span class="lineno"> 12 </span> , applyRaster -- :: Raster -> FilePath -> IO ()
|
||||||
<span class="lineno"> 13 </span>
|
<span class="lineno"> 13 </span> ) where
|
||||||
<span class="lineno"> 14 </span>import Control.Concurrent
|
<span class="lineno"> 14 </span>
|
||||||
<span class="lineno"> 15 </span>import Control.Exception
|
<span class="lineno"> 15 </span>import Control.Concurrent
|
||||||
<span class="lineno"> 16 </span>import Control.Monad (forM_, forever, unless, void, when)
|
<span class="lineno"> 16 </span>import Control.Exception
|
||||||
<span class="lineno"> 17 </span>import Data.Either
|
<span class="lineno"> 17 </span>import Control.Monad (forM_, forever, unless, void, when)
|
||||||
<span class="lineno"> 18 </span>import Data.Function
|
<span class="lineno"> 18 </span>import Data.Either
|
||||||
<span class="lineno"> 19 </span>import qualified Data.Text as T
|
<span class="lineno"> 19 </span>import Data.Function
|
||||||
<span class="lineno"> 20 </span>import qualified Data.Text.IO as T
|
<span class="lineno"> 20 </span>import qualified Data.Text as T
|
||||||
<span class="lineno"> 21 </span>import Data.Time
|
<span class="lineno"> 21 </span>import qualified Data.Text.IO as T
|
||||||
<span class="lineno"> 22 </span>import Graphics.SvgTree (Number (..))
|
<span class="lineno"> 22 </span>import Data.Time
|
||||||
<span class="lineno"> 23 </span>import Numeric
|
<span class="lineno"> 23 </span>import Graphics.SvgTree (Number (..))
|
||||||
<span class="lineno"> 24 </span>import Reanimate.Animation
|
<span class="lineno"> 24 </span>import Numeric
|
||||||
<span class="lineno"> 25 </span>import Reanimate.Driver.Check
|
<span class="lineno"> 25 </span>import Reanimate.Animation
|
||||||
<span class="lineno"> 26 </span>import Reanimate.Driver.Magick
|
<span class="lineno"> 26 </span>import Reanimate.Driver.Check
|
||||||
<span class="lineno"> 27 </span>import Reanimate.Misc
|
<span class="lineno"> 27 </span>import Reanimate.Driver.Magick
|
||||||
<span class="lineno"> 28 </span>import Reanimate.Parameters
|
<span class="lineno"> 28 </span>import Reanimate.Misc
|
||||||
<span class="lineno"> 29 </span>import System.Console.ANSI.Codes
|
<span class="lineno"> 29 </span>import Reanimate.Parameters
|
||||||
<span class="lineno"> 30 </span>import System.Exit
|
<span class="lineno"> 30 </span>import System.Console.ANSI.Codes
|
||||||
<span class="lineno"> 31 </span>import System.FileLock (withTryFileLock, SharedExclusive(..), unlockFile)
|
<span class="lineno"> 31 </span>import System.Exit
|
||||||
<span class="lineno"> 32 </span>import System.Directory
|
<span class="lineno"> 32 </span>import System.FileLock (withTryFileLock, SharedExclusive(..), unlockFile)
|
||||||
<span class="lineno"> 33 </span>import System.FilePath (replaceExtension, (<.>), (</>))
|
<span class="lineno"> 33 </span>import System.Directory
|
||||||
<span class="lineno"> 34 </span>import System.IO
|
<span class="lineno"> 34 </span>import System.FilePath (replaceExtension, (<.>), (</>))
|
||||||
<span class="lineno"> 35 </span>import Text.Printf (printf)
|
<span class="lineno"> 35 </span>import System.IO
|
||||||
<span class="lineno"> 36 </span>
|
<span class="lineno"> 36 </span>import Text.Printf (printf)
|
||||||
<span class="lineno"> 37 </span>idempotentFile :: FilePath -> IO () -> IO ()
|
<span class="lineno"> 37 </span>
|
||||||
<span class="lineno"> 38 </span><span class="decl"><span class="nottickedoff">idempotentFile path action = do</span>
|
<span class="lineno"> 38 </span>idempotentFile :: FilePath -> IO () -> IO ()
|
||||||
<span class="lineno"> 39 </span><span class="spaces"> </span><span class="nottickedoff">_ <- withTryFileLock lockFile Exclusive $ \lock -> do</span>
|
<span class="lineno"> 39 </span><span class="decl"><span class="nottickedoff">idempotentFile path action = do</span>
|
||||||
<span class="lineno"> 40 </span><span class="spaces"> </span><span class="nottickedoff">haveFile <- doesFileExist path</span>
|
<span class="lineno"> 40 </span><span class="spaces"> </span><span class="nottickedoff">_ <- withTryFileLock lockFile Exclusive $ \lock -> do</span>
|
||||||
<span class="lineno"> 41 </span><span class="spaces"> </span><span class="nottickedoff">unless haveFile action</span>
|
<span class="lineno"> 41 </span><span class="spaces"> </span><span class="nottickedoff">haveFile <- doesFileExist path</span>
|
||||||
<span class="lineno"> 42 </span><span class="spaces"> </span><span class="nottickedoff">unlockFile lock</span>
|
<span class="lineno"> 42 </span><span class="spaces"> </span><span class="nottickedoff">unless haveFile action</span>
|
||||||
<span class="lineno"> 43 </span><span class="spaces"> </span><span class="nottickedoff">_ <- try (removeFile lockFile) :: IO (Either SomeException ())</span>
|
<span class="lineno"> 43 </span><span class="spaces"> </span><span class="nottickedoff">unlockFile lock</span>
|
||||||
<span class="lineno"> 44 </span><span class="spaces"> </span><span class="nottickedoff">return ()</span>
|
<span class="lineno"> 44 </span><span class="spaces"> </span><span class="nottickedoff">_ <- try (removeFile lockFile) :: IO (Either SomeException ())</span>
|
||||||
<span class="lineno"> 45 </span><span class="spaces"> </span><span class="nottickedoff">return ()</span>
|
<span class="lineno"> 45 </span><span class="spaces"> </span><span class="nottickedoff">return ()</span>
|
||||||
<span class="lineno"> 46 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
<span class="lineno"> 46 </span><span class="spaces"> </span><span class="nottickedoff">return ()</span>
|
||||||
<span class="lineno"> 47 </span><span class="spaces"> </span><span class="nottickedoff">lockFile = path <.> "lock"</span></span>
|
<span class="lineno"> 47 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||||
<span class="lineno"> 48 </span>
|
<span class="lineno"> 48 </span><span class="spaces"> </span><span class="nottickedoff">lockFile = path <.> "lock"</span></span>
|
||||||
<span class="lineno"> 49 </span>renderSvgs :: FilePath -> Int -> Bool -> Animation -> IO ()
|
<span class="lineno"> 49 </span>
|
||||||
<span class="lineno"> 50 </span><span class="decl"><span class="nottickedoff">renderSvgs folder offset _prettyPrint ani = do</span>
|
<span class="lineno"> 50 </span>renderSvgs :: FilePath -> Int -> Bool -> Animation -> IO ()
|
||||||
<span class="lineno"> 51 </span><span class="spaces"> </span><span class="nottickedoff">print frameCount</span>
|
<span class="lineno"> 51 </span><span class="decl"><span class="nottickedoff">renderSvgs folder offset _prettyPrint ani = do</span>
|
||||||
<span class="lineno"> 52 </span><span class="spaces"> </span><span class="nottickedoff">lock <- newMVar ()</span>
|
<span class="lineno"> 52 </span><span class="spaces"> </span><span class="nottickedoff">print frameCount</span>
|
||||||
<span class="lineno"> 53 </span><span class="spaces"></span><span class="nottickedoff"></span>
|
<span class="lineno"> 53 </span><span class="spaces"> </span><span class="nottickedoff">lock <- newMVar ()</span>
|
||||||
<span class="lineno"> 54 </span><span class="spaces"> </span><span class="nottickedoff">handle errHandler $ concurrentForM_ (frameOrder rate frameCount) $ \nth' -> do</span>
|
<span class="lineno"> 54 </span><span class="spaces"></span><span class="nottickedoff"></span>
|
||||||
<span class="lineno"> 55 </span><span class="spaces"> </span><span class="nottickedoff">let nth = (nth'+offset) `mod` frameCount</span>
|
<span class="lineno"> 55 </span><span class="spaces"> </span><span class="nottickedoff">handle errHandler $ concurrentForM_ (frameOrder rate frameCount) $ \nth' -> do</span>
|
||||||
<span class="lineno"> 56 </span><span class="spaces"> </span><span class="nottickedoff">now = (duration ani / (fromIntegral frameCount - 1)) * fromIntegral nth</span>
|
<span class="lineno"> 56 </span><span class="spaces"> </span><span class="nottickedoff">let nth = (nth'+offset) `mod` frameCount</span>
|
||||||
<span class="lineno"> 57 </span><span class="spaces"> </span><span class="nottickedoff">frame = frameAt (if frameCount <= 1 then 0 else now) ani</span>
|
<span class="lineno"> 57 </span><span class="spaces"> </span><span class="nottickedoff">now = (duration ani / (fromIntegral frameCount - 1)) * fromIntegral nth</span>
|
||||||
<span class="lineno"> 58 </span><span class="spaces"> </span><span class="nottickedoff">svg = renderSvg Nothing Nothing frame</span>
|
<span class="lineno"> 58 </span><span class="spaces"> </span><span class="nottickedoff">frame = frameAt (if frameCount <= 1 then 0 else now) ani</span>
|
||||||
<span class="lineno"> 59 </span><span class="spaces"> </span><span class="nottickedoff">path = folder </> show nth <.> "svg"</span>
|
<span class="lineno"> 59 </span><span class="spaces"> </span><span class="nottickedoff">svg = renderSvg Nothing Nothing frame</span>
|
||||||
<span class="lineno"> 60 </span><span class="spaces"></span><span class="nottickedoff"></span>
|
<span class="lineno"> 60 </span><span class="spaces"> </span><span class="nottickedoff">path = folder </> show nth <.> "svg"</span>
|
||||||
<span class="lineno"> 61 </span><span class="spaces"> </span><span class="nottickedoff">idempotentFile path $ writeFile path svg</span>
|
<span class="lineno"> 61 </span><span class="spaces"></span><span class="nottickedoff"></span>
|
||||||
<span class="lineno"> 62 </span><span class="spaces"> </span><span class="nottickedoff">withMVar lock $ \_ -> do</span>
|
<span class="lineno"> 62 </span><span class="spaces"> </span><span class="nottickedoff">idempotentFile path $ writeFile path svg</span>
|
||||||
<span class="lineno"> 63 </span><span class="spaces"> </span><span class="nottickedoff">print nth</span>
|
<span class="lineno"> 63 </span><span class="spaces"> </span><span class="nottickedoff">withMVar lock $ \_ -> do</span>
|
||||||
<span class="lineno"> 64 </span><span class="spaces"> </span><span class="nottickedoff">hFlush stdout</span>
|
<span class="lineno"> 64 </span><span class="spaces"> </span><span class="nottickedoff">print nth</span>
|
||||||
<span class="lineno"> 65 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
<span class="lineno"> 65 </span><span class="spaces"> </span><span class="nottickedoff">hFlush stdout</span>
|
||||||
<span class="lineno"> 66 </span><span class="spaces"> </span><span class="nottickedoff">rate = 60</span>
|
<span class="lineno"> 66 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||||
<span class="lineno"> 67 </span><span class="spaces"> </span><span class="nottickedoff">frameCount = round (duration ani * fromIntegral rate) :: Int</span>
|
<span class="lineno"> 67 </span><span class="spaces"> </span><span class="nottickedoff">rate = 60</span>
|
||||||
<span class="lineno"> 68 </span><span class="spaces"> </span><span class="nottickedoff">errHandler (ErrorCall msg) = do</span>
|
<span class="lineno"> 68 </span><span class="spaces"> </span><span class="nottickedoff">frameCount = round (duration ani * fromIntegral rate) :: Int</span>
|
||||||
<span class="lineno"> 69 </span><span class="spaces"> </span><span class="nottickedoff">hPutStrLn stderr msg</span>
|
<span class="lineno"> 69 </span><span class="spaces"> </span><span class="nottickedoff">errHandler (ErrorCall msg) = do</span>
|
||||||
<span class="lineno"> 70 </span><span class="spaces"> </span><span class="nottickedoff">exitWith (ExitFailure 1)</span></span>
|
<span class="lineno"> 70 </span><span class="spaces"> </span><span class="nottickedoff">hPutStrLn stderr msg</span>
|
||||||
<span class="lineno"> 71 </span>
|
<span class="lineno"> 71 </span><span class="spaces"> </span><span class="nottickedoff">exitWith (ExitFailure 1)</span></span>
|
||||||
<span class="lineno"> 72 </span>-- XXX: Merge with 'renderSvgs'
|
<span class="lineno"> 72 </span>
|
||||||
<span class="lineno"> 73 </span>renderSnippets :: Animation -> IO ()
|
<span class="lineno"> 73 </span>renderOneFrame :: FilePath -> Int -> Bool -> Int -> Animation -> IO ()
|
||||||
<span class="lineno"> 74 </span><span class="decl"><span class="istickedoff">renderSnippets ani = forM_ [0 .. frameCount - 1] $ \nth -> do</span>
|
<span class="lineno"> 74 </span><span class="decl"><span class="nottickedoff">renderOneFrame folder offset _prettyPrint rate ani =</span>
|
||||||
<span class="lineno"> 75 </span><span class="spaces"> </span><span class="istickedoff">let now = (duration ani / (fromIntegral frameCount - 1)) * fromIntegral nth</span>
|
<span class="lineno"> 75 </span><span class="spaces"> </span><span class="nottickedoff">worker (frameOrder rate frameCount)</span>
|
||||||
<span class="lineno"> 76 </span><span class="spaces"> </span><span class="istickedoff">frame = frameAt now ani</span>
|
<span class="lineno"> 76 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||||
<span class="lineno"> 77 </span><span class="spaces"> </span><span class="istickedoff">svg = renderSvg Nothing Nothing frame</span>
|
<span class="lineno"> 77 </span><span class="spaces"> </span><span class="nottickedoff">worker [] = putStrLn "Done"</span>
|
||||||
<span class="lineno"> 78 </span><span class="spaces"> </span><span class="istickedoff">putStr (show nth)</span>
|
<span class="lineno"> 78 </span><span class="spaces"> </span><span class="nottickedoff">worker (x:xs) = do</span>
|
||||||
<span class="lineno"> 79 </span><span class="spaces"> </span><span class="istickedoff">T.putStrLn $ T.concat . T.lines . T.pack $ svg</span>
|
<span class="lineno"> 79 </span><span class="spaces"> </span><span class="nottickedoff">let nth = (x+offset) `mod` frameCount</span>
|
||||||
<span class="lineno"> 80 </span><span class="spaces"> </span><span class="istickedoff">where frameCount = 10 :: Integer</span></span>
|
<span class="lineno"> 80 </span><span class="spaces"> </span><span class="nottickedoff">now = (duration ani / (fromIntegral frameCount - 1)) * fromIntegral nth</span>
|
||||||
<span class="lineno"> 81 </span>
|
<span class="lineno"> 81 </span><span class="spaces"> </span><span class="nottickedoff">frame = frameAt (if frameCount <= 1 then 0 else now) ani</span>
|
||||||
<span class="lineno"> 82 </span>frameOrder :: Int -> Int -> [Int]
|
<span class="lineno"> 82 </span><span class="spaces"> </span><span class="nottickedoff">svg = renderSvg Nothing Nothing frame</span>
|
||||||
<span class="lineno"> 83 </span><span class="decl"><span class="nottickedoff">frameOrder fps nFrames = worker [] fps</span>
|
<span class="lineno"> 83 </span><span class="spaces"> </span><span class="nottickedoff">path = folder </> show nth <.> "svg"</span>
|
||||||
<span class="lineno"> 84 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
<span class="lineno"> 84 </span><span class="spaces"> </span><span class="nottickedoff">tmpPath = path <.> "tmp"</span>
|
||||||
<span class="lineno"> 85 </span><span class="spaces"> </span><span class="nottickedoff">worker _seen 0 = []</span>
|
<span class="lineno"> 85 </span><span class="spaces"> </span><span class="nottickedoff">haveFile <- doesFileExist path</span>
|
||||||
<span class="lineno"> 86 </span><span class="spaces"> </span><span class="nottickedoff">worker seen nthFrame = filterFrameList seen nthFrame nFrames</span>
|
<span class="lineno"> 86 </span><span class="spaces"> </span><span class="nottickedoff">if haveFile</span>
|
||||||
<span class="lineno"> 87 </span><span class="spaces"> </span><span class="nottickedoff">++ worker (nthFrame : seen) (nthFrame `div` 2)</span></span>
|
<span class="lineno"> 87 </span><span class="spaces"> </span><span class="nottickedoff">then worker xs</span>
|
||||||
<span class="lineno"> 88 </span>
|
<span class="lineno"> 88 </span><span class="spaces"> </span><span class="nottickedoff">else do</span>
|
||||||
<span class="lineno"> 89 </span>filterFrameList :: [Int] -> Int -> Int -> [Int]
|
<span class="lineno"> 89 </span><span class="spaces"> </span><span class="nottickedoff">writeFile tmpPath svg</span>
|
||||||
<span class="lineno"> 90 </span><span class="decl"><span class="nottickedoff">filterFrameList seen nthFrame nFrames = filter (not . isSeen)</span>
|
<span class="lineno"> 90 </span><span class="spaces"> </span><span class="nottickedoff">renameOrCopyFile tmpPath path</span>
|
||||||
<span class="lineno"> 91 </span><span class="spaces"> </span><span class="nottickedoff">[0, nthFrame .. nFrames - 1]</span>
|
<span class="lineno"> 91 </span><span class="spaces"> </span><span class="nottickedoff">print nth</span>
|
||||||
<span class="lineno"> 92 </span><span class="spaces"> </span><span class="nottickedoff">where isSeen x = any (\y -> x `mod` y == 0) seen</span></span>
|
<span class="lineno"> 92 </span><span class="spaces"> </span><span class="nottickedoff">frameCount = round (duration ani * fromIntegral rate) :: Int</span></span>
|
||||||
<span class="lineno"> 93 </span>
|
<span class="lineno"> 93 </span>
|
||||||
<span class="lineno"> 94 </span>data Format = RenderMp4 | RenderGif | RenderWebm
|
<span class="lineno"> 94 </span>-- XXX: Merge with 'renderSvgs'
|
||||||
<span class="lineno"> 95 </span> deriving (<span class="decl"><span class="nottickedoff">Show</span></span>)
|
<span class="lineno"> 95 </span>renderSnippets :: Animation -> IO ()
|
||||||
<span class="lineno"> 96 </span>
|
<span class="lineno"> 96 </span><span class="decl"><span class="istickedoff">renderSnippets ani = forM_ [0 .. frameCount - 1] $ \nth -> do</span>
|
||||||
<span class="lineno"> 97 </span>mp4Arguments :: FPS -> FilePath -> FilePath -> FilePath -> [String]
|
<span class="lineno"> 97 </span><span class="spaces"> </span><span class="istickedoff">let now = (duration ani / (fromIntegral frameCount - 1)) * fromIntegral nth</span>
|
||||||
<span class="lineno"> 98 </span><span class="decl"><span class="nottickedoff">mp4Arguments fps progress template target =</span>
|
<span class="lineno"> 98 </span><span class="spaces"> </span><span class="istickedoff">frame = frameAt now ani</span>
|
||||||
<span class="lineno"> 99 </span><span class="spaces"> </span><span class="nottickedoff">[ "-r"</span>
|
<span class="lineno"> 99 </span><span class="spaces"> </span><span class="istickedoff">svg = renderSvg Nothing Nothing frame</span>
|
||||||
<span class="lineno"> 100 </span><span class="spaces"> </span><span class="nottickedoff">, show fps</span>
|
<span class="lineno"> 100 </span><span class="spaces"> </span><span class="istickedoff">putStr (show nth)</span>
|
||||||
<span class="lineno"> 101 </span><span class="spaces"> </span><span class="nottickedoff">, "-i"</span>
|
<span class="lineno"> 101 </span><span class="spaces"> </span><span class="istickedoff">T.putStrLn $ T.concat . T.lines . T.pack $ svg</span>
|
||||||
<span class="lineno"> 102 </span><span class="spaces"> </span><span class="nottickedoff">, template</span>
|
<span class="lineno"> 102 </span><span class="spaces"> </span><span class="istickedoff">where frameCount = 10 :: Integer</span></span>
|
||||||
<span class="lineno"> 103 </span><span class="spaces"> </span><span class="nottickedoff">, "-y"</span>
|
<span class="lineno"> 103 </span>
|
||||||
<span class="lineno"> 104 </span><span class="spaces"> </span><span class="nottickedoff">, "-c:v"</span>
|
<span class="lineno"> 104 </span>frameOrder :: Int -> Int -> [Int]
|
||||||
<span class="lineno"> 105 </span><span class="spaces"> </span><span class="nottickedoff">, "libx264"</span>
|
<span class="lineno"> 105 </span><span class="decl"><span class="nottickedoff">frameOrder fps nFrames = worker [] fps</span>
|
||||||
<span class="lineno"> 106 </span><span class="spaces"> </span><span class="nottickedoff">, "-vf"</span>
|
<span class="lineno"> 106 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||||
<span class="lineno"> 107 </span><span class="spaces"> </span><span class="nottickedoff">, "fps=" ++ show fps</span>
|
<span class="lineno"> 107 </span><span class="spaces"> </span><span class="nottickedoff">worker _seen 0 = []</span>
|
||||||
<span class="lineno"> 108 </span><span class="spaces"> </span><span class="nottickedoff">, "-preset"</span>
|
<span class="lineno"> 108 </span><span class="spaces"> </span><span class="nottickedoff">worker seen nthFrame = filterFrameList seen nthFrame nFrames</span>
|
||||||
<span class="lineno"> 109 </span><span class="spaces"> </span><span class="nottickedoff">, "slow"</span>
|
<span class="lineno"> 109 </span><span class="spaces"> </span><span class="nottickedoff">++ worker (nthFrame : seen) (nthFrame `div` 2)</span></span>
|
||||||
<span class="lineno"> 110 </span><span class="spaces"> </span><span class="nottickedoff">, "-crf"</span>
|
<span class="lineno"> 110 </span>
|
||||||
<span class="lineno"> 111 </span><span class="spaces"> </span><span class="nottickedoff">, "18"</span>
|
<span class="lineno"> 111 </span>filterFrameList :: [Int] -> Int -> Int -> [Int]
|
||||||
<span class="lineno"> 112 </span><span class="spaces"> </span><span class="nottickedoff">, "-movflags"</span>
|
<span class="lineno"> 112 </span><span class="decl"><span class="nottickedoff">filterFrameList seen nthFrame nFrames = filter (not . isSeen)</span>
|
||||||
<span class="lineno"> 113 </span><span class="spaces"> </span><span class="nottickedoff">, "+faststart"</span>
|
<span class="lineno"> 113 </span><span class="spaces"> </span><span class="nottickedoff">[0, nthFrame .. nFrames - 1]</span>
|
||||||
<span class="lineno"> 114 </span><span class="spaces"> </span><span class="nottickedoff">, "-progress"</span>
|
<span class="lineno"> 114 </span><span class="spaces"> </span><span class="nottickedoff">where isSeen x = any (\y -> x `mod` y == 0) seen</span></span>
|
||||||
<span class="lineno"> 115 </span><span class="spaces"> </span><span class="nottickedoff">, progress</span>
|
<span class="lineno"> 115 </span>
|
||||||
<span class="lineno"> 116 </span><span class="spaces"> </span><span class="nottickedoff">, "-pix_fmt"</span>
|
<span class="lineno"> 116 </span>data Format = RenderMp4 | RenderGif | RenderWebm
|
||||||
<span class="lineno"> 117 </span><span class="spaces"> </span><span class="nottickedoff">, "yuv420p"</span>
|
<span class="lineno"> 117 </span> deriving (<span class="decl"><span class="nottickedoff">Show</span></span>)
|
||||||
<span class="lineno"> 118 </span><span class="spaces"> </span><span class="nottickedoff">, target</span>
|
<span class="lineno"> 118 </span>
|
||||||
<span class="lineno"> 119 </span><span class="spaces"> </span><span class="nottickedoff">]</span></span>
|
<span class="lineno"> 119 </span>mp4Arguments :: FPS -> FilePath -> FilePath -> FilePath -> [String]
|
||||||
<span class="lineno"> 120 </span>
|
<span class="lineno"> 120 </span><span class="decl"><span class="nottickedoff">mp4Arguments fps progress template target =</span>
|
||||||
<span class="lineno"> 121 </span>-- gifArguments :: FPS -> FilePath -> FilePath -> FilePath -> [String]
|
<span class="lineno"> 121 </span><span class="spaces"> </span><span class="nottickedoff">[ "-r"</span>
|
||||||
<span class="lineno"> 122 </span>-- gifArguments fps progress template target =
|
<span class="lineno"> 122 </span><span class="spaces"> </span><span class="nottickedoff">, show fps</span>
|
||||||
<span class="lineno"> 123 </span>
|
<span class="lineno"> 123 </span><span class="spaces"> </span><span class="nottickedoff">, "-i"</span>
|
||||||
<span class="lineno"> 124 </span>render
|
<span class="lineno"> 124 </span><span class="spaces"> </span><span class="nottickedoff">, template</span>
|
||||||
<span class="lineno"> 125 </span> :: Animation
|
<span class="lineno"> 125 </span><span class="spaces"> </span><span class="nottickedoff">, "-y"</span>
|
||||||
<span class="lineno"> 126 </span> -> FilePath
|
<span class="lineno"> 126 </span><span class="spaces"> </span><span class="nottickedoff">, "-c:v"</span>
|
||||||
<span class="lineno"> 127 </span> -> Raster
|
<span class="lineno"> 127 </span><span class="spaces"> </span><span class="nottickedoff">, "libx264"</span>
|
||||||
<span class="lineno"> 128 </span> -> Format
|
<span class="lineno"> 128 </span><span class="spaces"> </span><span class="nottickedoff">, "-vf"</span>
|
||||||
<span class="lineno"> 129 </span> -> Width
|
<span class="lineno"> 129 </span><span class="spaces"> </span><span class="nottickedoff">, "fps=" ++ show fps</span>
|
||||||
<span class="lineno"> 130 </span> -> Height
|
<span class="lineno"> 130 </span><span class="spaces"> </span><span class="nottickedoff">, "-preset"</span>
|
||||||
<span class="lineno"> 131 </span> -> FPS
|
<span class="lineno"> 131 </span><span class="spaces"> </span><span class="nottickedoff">, "slow"</span>
|
||||||
<span class="lineno"> 132 </span> -> Bool
|
<span class="lineno"> 132 </span><span class="spaces"> </span><span class="nottickedoff">, "-crf"</span>
|
||||||
<span class="lineno"> 133 </span> -> IO ()
|
<span class="lineno"> 133 </span><span class="spaces"> </span><span class="nottickedoff">, "18"</span>
|
||||||
<span class="lineno"> 134 </span><span class="decl"><span class="nottickedoff">render ani target raster format width height fps partial = do</span>
|
<span class="lineno"> 134 </span><span class="spaces"> </span><span class="nottickedoff">, "-movflags"</span>
|
||||||
<span class="lineno"> 135 </span><span class="spaces"> </span><span class="nottickedoff">printf "Starting render of animation: %.1f\n" (duration ani)</span>
|
<span class="lineno"> 135 </span><span class="spaces"> </span><span class="nottickedoff">, "+faststart"</span>
|
||||||
<span class="lineno"> 136 </span><span class="spaces"> </span><span class="nottickedoff">ffmpeg <- requireExecutable "ffmpeg"</span>
|
<span class="lineno"> 136 </span><span class="spaces"> </span><span class="nottickedoff">, "-progress"</span>
|
||||||
<span class="lineno"> 137 </span><span class="spaces"> </span><span class="nottickedoff">generateFrames raster ani width height fps partial $ \template -></span>
|
<span class="lineno"> 137 </span><span class="spaces"> </span><span class="nottickedoff">, progress</span>
|
||||||
<span class="lineno"> 138 </span><span class="spaces"> </span><span class="nottickedoff">withTempFile "txt" $ \progress -> do</span>
|
<span class="lineno"> 138 </span><span class="spaces"> </span><span class="nottickedoff">, "-pix_fmt"</span>
|
||||||
<span class="lineno"> 139 </span><span class="spaces"> </span><span class="nottickedoff">writeFile progress ""</span>
|
<span class="lineno"> 139 </span><span class="spaces"> </span><span class="nottickedoff">, "yuv420p"</span>
|
||||||
<span class="lineno"> 140 </span><span class="spaces"> </span><span class="nottickedoff">progressH <- openFile progress ReadMode</span>
|
<span class="lineno"> 140 </span><span class="spaces"> </span><span class="nottickedoff">, target</span>
|
||||||
<span class="lineno"> 141 </span><span class="spaces"> </span><span class="nottickedoff">hSetBuffering progressH NoBuffering</span>
|
<span class="lineno"> 141 </span><span class="spaces"> </span><span class="nottickedoff">]</span></span>
|
||||||
<span class="lineno"> 142 </span><span class="spaces"> </span><span class="nottickedoff">allFinished <- newEmptyMVar</span>
|
<span class="lineno"> 142 </span>
|
||||||
<span class="lineno"> 143 </span><span class="spaces"> </span><span class="nottickedoff">void $ forkIO $ do</span>
|
<span class="lineno"> 143 </span>-- gifArguments :: FPS -> FilePath -> FilePath -> FilePath -> [String]
|
||||||
<span class="lineno"> 144 </span><span class="spaces"> </span><span class="nottickedoff">progressPrinter "rendered" (animationFrameCount ani fps)</span>
|
<span class="lineno"> 144 </span>-- gifArguments fps progress template target =
|
||||||
<span class="lineno"> 145 </span><span class="spaces"> </span><span class="nottickedoff">$ \done -> fix $ \loop -> do</span>
|
<span class="lineno"> 145 </span>
|
||||||
<span class="lineno"> 146 </span><span class="spaces"> </span><span class="nottickedoff">eof <- hIsEOF progressH</span>
|
<span class="lineno"> 146 </span>render
|
||||||
<span class="lineno"> 147 </span><span class="spaces"> </span><span class="nottickedoff">if eof</span>
|
<span class="lineno"> 147 </span> :: Animation
|
||||||
<span class="lineno"> 148 </span><span class="spaces"> </span><span class="nottickedoff">then threadDelay 1000000 >> loop</span>
|
<span class="lineno"> 148 </span> -> FilePath
|
||||||
<span class="lineno"> 149 </span><span class="spaces"> </span><span class="nottickedoff">else do</span>
|
<span class="lineno"> 149 </span> -> Raster
|
||||||
<span class="lineno"> 150 </span><span class="spaces"> </span><span class="nottickedoff">l <- try (hGetLine progressH)</span>
|
<span class="lineno"> 150 </span> -> Format
|
||||||
<span class="lineno"> 151 </span><span class="spaces"> </span><span class="nottickedoff">case l of</span>
|
<span class="lineno"> 151 </span> -> Width
|
||||||
<span class="lineno"> 152 </span><span class="spaces"> </span><span class="nottickedoff">Left SomeException{} -> return ()</span>
|
<span class="lineno"> 152 </span> -> Height
|
||||||
<span class="lineno"> 153 </span><span class="spaces"> </span><span class="nottickedoff">Right str -></span>
|
<span class="lineno"> 153 </span> -> FPS
|
||||||
<span class="lineno"> 154 </span><span class="spaces"> </span><span class="nottickedoff">case take 6 str of</span>
|
<span class="lineno"> 154 </span> -> Bool
|
||||||
<span class="lineno"> 155 </span><span class="spaces"> </span><span class="nottickedoff">"frame=" -> do</span>
|
<span class="lineno"> 155 </span> -> IO ()
|
||||||
<span class="lineno"> 156 </span><span class="spaces"> </span><span class="nottickedoff">void $ swapMVar done (read (drop 6 str))</span>
|
<span class="lineno"> 156 </span><span class="decl"><span class="nottickedoff">render ani target raster format width height fps partial = do</span>
|
||||||
<span class="lineno"> 157 </span><span class="spaces"> </span><span class="nottickedoff">loop</span>
|
<span class="lineno"> 157 </span><span class="spaces"> </span><span class="nottickedoff">printf "Starting render of animation: %.1f\n" (duration ani)</span>
|
||||||
<span class="lineno"> 158 </span><span class="spaces"> </span><span class="nottickedoff">_ | str == "progress=end" -> return ()</span>
|
<span class="lineno"> 158 </span><span class="spaces"> </span><span class="nottickedoff">ffmpeg <- requireExecutable "ffmpeg"</span>
|
||||||
<span class="lineno"> 159 </span><span class="spaces"> </span><span class="nottickedoff">_ -> loop</span>
|
<span class="lineno"> 159 </span><span class="spaces"> </span><span class="nottickedoff">generateFrames raster ani width height fps partial $ \template -></span>
|
||||||
<span class="lineno"> 160 </span><span class="spaces"> </span><span class="nottickedoff">putMVar allFinished ()</span>
|
<span class="lineno"> 160 </span><span class="spaces"> </span><span class="nottickedoff">withTempFile "txt" $ \progress -> do</span>
|
||||||
<span class="lineno"> 161 </span><span class="spaces"> </span><span class="nottickedoff">case format of</span>
|
<span class="lineno"> 161 </span><span class="spaces"> </span><span class="nottickedoff">writeFile progress ""</span>
|
||||||
<span class="lineno"> 162 </span><span class="spaces"> </span><span class="nottickedoff">RenderMp4 -> runCmd ffmpeg (mp4Arguments fps progress template target)</span>
|
<span class="lineno"> 162 </span><span class="spaces"> </span><span class="nottickedoff">progressH <- openFile progress ReadMode</span>
|
||||||
<span class="lineno"> 163 </span><span class="spaces"> </span><span class="nottickedoff">RenderGif -> withTempFile "png" $ \palette -> do</span>
|
<span class="lineno"> 163 </span><span class="spaces"> </span><span class="nottickedoff">hSetBuffering progressH NoBuffering</span>
|
||||||
<span class="lineno"> 164 </span><span class="spaces"> </span><span class="nottickedoff">runCmd</span>
|
<span class="lineno"> 164 </span><span class="spaces"> </span><span class="nottickedoff">allFinished <- newEmptyMVar</span>
|
||||||
<span class="lineno"> 165 </span><span class="spaces"> </span><span class="nottickedoff">ffmpeg</span>
|
<span class="lineno"> 165 </span><span class="spaces"> </span><span class="nottickedoff">void $ forkIO $ do</span>
|
||||||
<span class="lineno"> 166 </span><span class="spaces"> </span><span class="nottickedoff">[ "-i"</span>
|
<span class="lineno"> 166 </span><span class="spaces"> </span><span class="nottickedoff">progressPrinter "rendered" (animationFrameCount ani fps)</span>
|
||||||
<span class="lineno"> 167 </span><span class="spaces"> </span><span class="nottickedoff">, template</span>
|
<span class="lineno"> 167 </span><span class="spaces"> </span><span class="nottickedoff">$ \done -> fix $ \loop -> do</span>
|
||||||
<span class="lineno"> 168 </span><span class="spaces"> </span><span class="nottickedoff">, "-y"</span>
|
<span class="lineno"> 168 </span><span class="spaces"> </span><span class="nottickedoff">eof <- hIsEOF progressH</span>
|
||||||
<span class="lineno"> 169 </span><span class="spaces"> </span><span class="nottickedoff">, "-vf"</span>
|
<span class="lineno"> 169 </span><span class="spaces"> </span><span class="nottickedoff">if eof</span>
|
||||||
<span class="lineno"> 170 </span><span class="spaces"> </span><span class="nottickedoff">, "fps="</span>
|
<span class="lineno"> 170 </span><span class="spaces"> </span><span class="nottickedoff">then threadDelay 1000000 >> loop</span>
|
||||||
<span class="lineno"> 171 </span><span class="spaces"> </span><span class="nottickedoff">++ show fps</span>
|
<span class="lineno"> 171 </span><span class="spaces"> </span><span class="nottickedoff">else do</span>
|
||||||
<span class="lineno"> 172 </span><span class="spaces"> </span><span class="nottickedoff">++ ",scale="</span>
|
<span class="lineno"> 172 </span><span class="spaces"> </span><span class="nottickedoff">l <- try (hGetLine progressH)</span>
|
||||||
<span class="lineno"> 173 </span><span class="spaces"> </span><span class="nottickedoff">++ show width</span>
|
<span class="lineno"> 173 </span><span class="spaces"> </span><span class="nottickedoff">case l of</span>
|
||||||
<span class="lineno"> 174 </span><span class="spaces"> </span><span class="nottickedoff">++ ":"</span>
|
<span class="lineno"> 174 </span><span class="spaces"> </span><span class="nottickedoff">Left SomeException{} -> return ()</span>
|
||||||
<span class="lineno"> 175 </span><span class="spaces"> </span><span class="nottickedoff">++ show height</span>
|
<span class="lineno"> 175 </span><span class="spaces"> </span><span class="nottickedoff">Right str -></span>
|
||||||
<span class="lineno"> 176 </span><span class="spaces"> </span><span class="nottickedoff">++ ":flags=lanczos,palettegen"</span>
|
<span class="lineno"> 176 </span><span class="spaces"> </span><span class="nottickedoff">case take 6 str of</span>
|
||||||
<span class="lineno"> 177 </span><span class="spaces"> </span><span class="nottickedoff">, "-t"</span>
|
<span class="lineno"> 177 </span><span class="spaces"> </span><span class="nottickedoff">"frame=" -> do</span>
|
||||||
<span class="lineno"> 178 </span><span class="spaces"> </span><span class="nottickedoff">, showFFloat Nothing (duration ani) ""</span>
|
<span class="lineno"> 178 </span><span class="spaces"> </span><span class="nottickedoff">void $ swapMVar done (read (drop 6 str))</span>
|
||||||
<span class="lineno"> 179 </span><span class="spaces"> </span><span class="nottickedoff">, palette</span>
|
<span class="lineno"> 179 </span><span class="spaces"> </span><span class="nottickedoff">loop</span>
|
||||||
<span class="lineno"> 180 </span><span class="spaces"> </span><span class="nottickedoff">]</span>
|
<span class="lineno"> 180 </span><span class="spaces"> </span><span class="nottickedoff">_ | str == "progress=end" -> return ()</span>
|
||||||
<span class="lineno"> 181 </span><span class="spaces"> </span><span class="nottickedoff">runCmd</span>
|
<span class="lineno"> 181 </span><span class="spaces"> </span><span class="nottickedoff">_ -> loop</span>
|
||||||
<span class="lineno"> 182 </span><span class="spaces"> </span><span class="nottickedoff">ffmpeg</span>
|
<span class="lineno"> 182 </span><span class="spaces"> </span><span class="nottickedoff">putMVar allFinished ()</span>
|
||||||
<span class="lineno"> 183 </span><span class="spaces"> </span><span class="nottickedoff">[ "-framerate"</span>
|
<span class="lineno"> 183 </span><span class="spaces"> </span><span class="nottickedoff">case format of</span>
|
||||||
<span class="lineno"> 184 </span><span class="spaces"> </span><span class="nottickedoff">, show fps</span>
|
<span class="lineno"> 184 </span><span class="spaces"> </span><span class="nottickedoff">RenderMp4 -> runCmd ffmpeg (mp4Arguments fps progress template target)</span>
|
||||||
<span class="lineno"> 185 </span><span class="spaces"> </span><span class="nottickedoff">, "-i"</span>
|
<span class="lineno"> 185 </span><span class="spaces"> </span><span class="nottickedoff">RenderGif -> withTempFile "png" $ \palette -> do</span>
|
||||||
<span class="lineno"> 186 </span><span class="spaces"> </span><span class="nottickedoff">, template</span>
|
<span class="lineno"> 186 </span><span class="spaces"> </span><span class="nottickedoff">runCmd</span>
|
||||||
<span class="lineno"> 187 </span><span class="spaces"> </span><span class="nottickedoff">, "-y"</span>
|
<span class="lineno"> 187 </span><span class="spaces"> </span><span class="nottickedoff">ffmpeg</span>
|
||||||
<span class="lineno"> 188 </span><span class="spaces"> </span><span class="nottickedoff">, "-i"</span>
|
<span class="lineno"> 188 </span><span class="spaces"> </span><span class="nottickedoff">[ "-i"</span>
|
||||||
<span class="lineno"> 189 </span><span class="spaces"> </span><span class="nottickedoff">, palette</span>
|
<span class="lineno"> 189 </span><span class="spaces"> </span><span class="nottickedoff">, template</span>
|
||||||
<span class="lineno"> 190 </span><span class="spaces"> </span><span class="nottickedoff">, "-progress"</span>
|
<span class="lineno"> 190 </span><span class="spaces"> </span><span class="nottickedoff">, "-y"</span>
|
||||||
<span class="lineno"> 191 </span><span class="spaces"> </span><span class="nottickedoff">, progress</span>
|
<span class="lineno"> 191 </span><span class="spaces"> </span><span class="nottickedoff">, "-vf"</span>
|
||||||
<span class="lineno"> 192 </span><span class="spaces"> </span><span class="nottickedoff">, "-filter_complex"</span>
|
<span class="lineno"> 192 </span><span class="spaces"> </span><span class="nottickedoff">, "fps="</span>
|
||||||
<span class="lineno"> 193 </span><span class="spaces"> </span><span class="nottickedoff">, "fps="</span>
|
<span class="lineno"> 193 </span><span class="spaces"> </span><span class="nottickedoff">++ show fps</span>
|
||||||
<span class="lineno"> 194 </span><span class="spaces"> </span><span class="nottickedoff">++ show fps</span>
|
<span class="lineno"> 194 </span><span class="spaces"> </span><span class="nottickedoff">++ ",scale="</span>
|
||||||
<span class="lineno"> 195 </span><span class="spaces"> </span><span class="nottickedoff">++ ",scale="</span>
|
<span class="lineno"> 195 </span><span class="spaces"> </span><span class="nottickedoff">++ show width</span>
|
||||||
<span class="lineno"> 196 </span><span class="spaces"> </span><span class="nottickedoff">++ show width</span>
|
<span class="lineno"> 196 </span><span class="spaces"> </span><span class="nottickedoff">++ ":"</span>
|
||||||
<span class="lineno"> 197 </span><span class="spaces"> </span><span class="nottickedoff">++ ":"</span>
|
<span class="lineno"> 197 </span><span class="spaces"> </span><span class="nottickedoff">++ show height</span>
|
||||||
<span class="lineno"> 198 </span><span class="spaces"> </span><span class="nottickedoff">++ show height</span>
|
<span class="lineno"> 198 </span><span class="spaces"> </span><span class="nottickedoff">++ ":flags=lanczos,palettegen"</span>
|
||||||
<span class="lineno"> 199 </span><span class="spaces"> </span><span class="nottickedoff">++ ":flags=lanczos[x];[x][1:v]paletteuse"</span>
|
<span class="lineno"> 199 </span><span class="spaces"> </span><span class="nottickedoff">, "-t"</span>
|
||||||
<span class="lineno"> 200 </span><span class="spaces"> </span><span class="nottickedoff">, "-t"</span>
|
<span class="lineno"> 200 </span><span class="spaces"> </span><span class="nottickedoff">, showFFloat Nothing (duration ani) ""</span>
|
||||||
<span class="lineno"> 201 </span><span class="spaces"> </span><span class="nottickedoff">, showFFloat Nothing (duration ani) ""</span>
|
<span class="lineno"> 201 </span><span class="spaces"> </span><span class="nottickedoff">, palette</span>
|
||||||
<span class="lineno"> 202 </span><span class="spaces"> </span><span class="nottickedoff">, target</span>
|
<span class="lineno"> 202 </span><span class="spaces"> </span><span class="nottickedoff">]</span>
|
||||||
<span class="lineno"> 203 </span><span class="spaces"> </span><span class="nottickedoff">]</span>
|
<span class="lineno"> 203 </span><span class="spaces"> </span><span class="nottickedoff">runCmd</span>
|
||||||
<span class="lineno"> 204 </span><span class="spaces"> </span><span class="nottickedoff">RenderWebm -> runCmd</span>
|
<span class="lineno"> 204 </span><span class="spaces"> </span><span class="nottickedoff">ffmpeg</span>
|
||||||
<span class="lineno"> 205 </span><span class="spaces"> </span><span class="nottickedoff">ffmpeg</span>
|
<span class="lineno"> 205 </span><span class="spaces"> </span><span class="nottickedoff">[ "-framerate"</span>
|
||||||
<span class="lineno"> 206 </span><span class="spaces"> </span><span class="nottickedoff">[ "-r"</span>
|
<span class="lineno"> 206 </span><span class="spaces"> </span><span class="nottickedoff">, show fps</span>
|
||||||
<span class="lineno"> 207 </span><span class="spaces"> </span><span class="nottickedoff">, show fps</span>
|
<span class="lineno"> 207 </span><span class="spaces"> </span><span class="nottickedoff">, "-i"</span>
|
||||||
<span class="lineno"> 208 </span><span class="spaces"> </span><span class="nottickedoff">, "-i"</span>
|
<span class="lineno"> 208 </span><span class="spaces"> </span><span class="nottickedoff">, template</span>
|
||||||
<span class="lineno"> 209 </span><span class="spaces"> </span><span class="nottickedoff">, template</span>
|
<span class="lineno"> 209 </span><span class="spaces"> </span><span class="nottickedoff">, "-y"</span>
|
||||||
<span class="lineno"> 210 </span><span class="spaces"> </span><span class="nottickedoff">, "-y"</span>
|
<span class="lineno"> 210 </span><span class="spaces"> </span><span class="nottickedoff">, "-i"</span>
|
||||||
<span class="lineno"> 211 </span><span class="spaces"> </span><span class="nottickedoff">, "-progress"</span>
|
<span class="lineno"> 211 </span><span class="spaces"> </span><span class="nottickedoff">, palette</span>
|
||||||
<span class="lineno"> 212 </span><span class="spaces"> </span><span class="nottickedoff">, progress</span>
|
<span class="lineno"> 212 </span><span class="spaces"> </span><span class="nottickedoff">, "-progress"</span>
|
||||||
<span class="lineno"> 213 </span><span class="spaces"> </span><span class="nottickedoff">, "-c:v"</span>
|
<span class="lineno"> 213 </span><span class="spaces"> </span><span class="nottickedoff">, progress</span>
|
||||||
<span class="lineno"> 214 </span><span class="spaces"> </span><span class="nottickedoff">, "libvpx-vp9"</span>
|
<span class="lineno"> 214 </span><span class="spaces"> </span><span class="nottickedoff">, "-filter_complex"</span>
|
||||||
<span class="lineno"> 215 </span><span class="spaces"> </span><span class="nottickedoff">, "-vf"</span>
|
<span class="lineno"> 215 </span><span class="spaces"> </span><span class="nottickedoff">, "fps="</span>
|
||||||
<span class="lineno"> 216 </span><span class="spaces"> </span><span class="nottickedoff">, "fps=" ++ show fps</span>
|
<span class="lineno"> 216 </span><span class="spaces"> </span><span class="nottickedoff">++ show fps</span>
|
||||||
<span class="lineno"> 217 </span><span class="spaces"> </span><span class="nottickedoff">, target</span>
|
<span class="lineno"> 217 </span><span class="spaces"> </span><span class="nottickedoff">++ ",scale="</span>
|
||||||
<span class="lineno"> 218 </span><span class="spaces"> </span><span class="nottickedoff">]</span>
|
<span class="lineno"> 218 </span><span class="spaces"> </span><span class="nottickedoff">++ show width</span>
|
||||||
<span class="lineno"> 219 </span><span class="spaces"> </span><span class="nottickedoff">takeMVar allFinished</span></span>
|
<span class="lineno"> 219 </span><span class="spaces"> </span><span class="nottickedoff">++ ":"</span>
|
||||||
<span class="lineno"> 220 </span>
|
<span class="lineno"> 220 </span><span class="spaces"> </span><span class="nottickedoff">++ show height</span>
|
||||||
<span class="lineno"> 221 </span>---------------------------------------------------------------------------------
|
<span class="lineno"> 221 </span><span class="spaces"> </span><span class="nottickedoff">++ ":flags=lanczos[x];[x][1:v]paletteuse"</span>
|
||||||
<span class="lineno"> 222 </span>-- Helpers
|
<span class="lineno"> 222 </span><span class="spaces"> </span><span class="nottickedoff">, "-t"</span>
|
||||||
<span class="lineno"> 223 </span>
|
<span class="lineno"> 223 </span><span class="spaces"> </span><span class="nottickedoff">, showFFloat Nothing (duration ani) ""</span>
|
||||||
<span class="lineno"> 224 </span>progressPrinter :: String -> Int -> (MVar Int -> IO ()) -> IO ()
|
<span class="lineno"> 224 </span><span class="spaces"> </span><span class="nottickedoff">, target</span>
|
||||||
<span class="lineno"> 225 </span><span class="decl"><span class="nottickedoff">progressPrinter typeName maxCount action = do</span>
|
<span class="lineno"> 225 </span><span class="spaces"> </span><span class="nottickedoff">]</span>
|
||||||
<span class="lineno"> 226 </span><span class="spaces"> </span><span class="nottickedoff">printf "\rFrames %s: 0/%d" typeName maxCount</span>
|
<span class="lineno"> 226 </span><span class="spaces"> </span><span class="nottickedoff">RenderWebm -> runCmd</span>
|
||||||
<span class="lineno"> 227 </span><span class="spaces"> </span><span class="nottickedoff">putStr $ clearFromCursorToLineEndCode ++ "\r"</span>
|
<span class="lineno"> 227 </span><span class="spaces"> </span><span class="nottickedoff">ffmpeg</span>
|
||||||
<span class="lineno"> 228 </span><span class="spaces"> </span><span class="nottickedoff">done <- newMVar (0 :: Int)</span>
|
<span class="lineno"> 228 </span><span class="spaces"> </span><span class="nottickedoff">[ "-r"</span>
|
||||||
<span class="lineno"> 229 </span><span class="spaces"> </span><span class="nottickedoff">start <- getCurrentTime</span>
|
<span class="lineno"> 229 </span><span class="spaces"> </span><span class="nottickedoff">, show fps</span>
|
||||||
<span class="lineno"> 230 </span><span class="spaces"> </span><span class="nottickedoff">let bgThread = forever $ do</span>
|
<span class="lineno"> 230 </span><span class="spaces"> </span><span class="nottickedoff">, "-i"</span>
|
||||||
<span class="lineno"> 231 </span><span class="spaces"> </span><span class="nottickedoff">nDone <- readMVar done</span>
|
<span class="lineno"> 231 </span><span class="spaces"> </span><span class="nottickedoff">, template</span>
|
||||||
<span class="lineno"> 232 </span><span class="spaces"> </span><span class="nottickedoff">now <- getCurrentTime</span>
|
<span class="lineno"> 232 </span><span class="spaces"> </span><span class="nottickedoff">, "-y"</span>
|
||||||
<span class="lineno"> 233 </span><span class="spaces"> </span><span class="nottickedoff">let spent = diffUTCTime now start</span>
|
<span class="lineno"> 233 </span><span class="spaces"> </span><span class="nottickedoff">, "-progress"</span>
|
||||||
<span class="lineno"> 234 </span><span class="spaces"> </span><span class="nottickedoff">remaining =</span>
|
<span class="lineno"> 234 </span><span class="spaces"> </span><span class="nottickedoff">, progress</span>
|
||||||
<span class="lineno"> 235 </span><span class="spaces"> </span><span class="nottickedoff">(spent / (fromIntegral nDone / fromIntegral maxCount)) - spent</span>
|
<span class="lineno"> 235 </span><span class="spaces"> </span><span class="nottickedoff">, "-c:v"</span>
|
||||||
<span class="lineno"> 236 </span><span class="spaces"> </span><span class="nottickedoff">printf "\rFrames %s: %d/%d" typeName nDone maxCount</span>
|
<span class="lineno"> 236 </span><span class="spaces"> </span><span class="nottickedoff">, "libvpx-vp9"</span>
|
||||||
<span class="lineno"> 237 </span><span class="spaces"> </span><span class="nottickedoff">putStr $ ", time spent: " ++ ppDiff spent</span>
|
<span class="lineno"> 237 </span><span class="spaces"> </span><span class="nottickedoff">, "-vf"</span>
|
||||||
<span class="lineno"> 238 </span><span class="spaces"> </span><span class="nottickedoff">unless (nDone == 0) $ do</span>
|
<span class="lineno"> 238 </span><span class="spaces"> </span><span class="nottickedoff">, "fps=" ++ show fps</span>
|
||||||
<span class="lineno"> 239 </span><span class="spaces"> </span><span class="nottickedoff">putStr $ ", time remaining: " ++ ppDiff remaining</span>
|
<span class="lineno"> 239 </span><span class="spaces"> </span><span class="nottickedoff">, target</span>
|
||||||
<span class="lineno"> 240 </span><span class="spaces"> </span><span class="nottickedoff">putStr $ ", total time: " ++ ppDiff (remaining + spent)</span>
|
<span class="lineno"> 240 </span><span class="spaces"> </span><span class="nottickedoff">]</span>
|
||||||
<span class="lineno"> 241 </span><span class="spaces"> </span><span class="nottickedoff">putStr $ clearFromCursorToLineEndCode ++ "\r"</span>
|
<span class="lineno"> 241 </span><span class="spaces"> </span><span class="nottickedoff">takeMVar allFinished</span></span>
|
||||||
<span class="lineno"> 242 </span><span class="spaces"> </span><span class="nottickedoff">hFlush stdout</span>
|
<span class="lineno"> 242 </span>
|
||||||
<span class="lineno"> 243 </span><span class="spaces"> </span><span class="nottickedoff">threadDelay 1000000</span>
|
<span class="lineno"> 243 </span>---------------------------------------------------------------------------------
|
||||||
<span class="lineno"> 244 </span><span class="spaces"> </span><span class="nottickedoff">withBackgroundThread bgThread $ action done</span>
|
<span class="lineno"> 244 </span>-- Helpers
|
||||||
<span class="lineno"> 245 </span><span class="spaces"> </span><span class="nottickedoff">now <- getCurrentTime</span>
|
<span class="lineno"> 245 </span>
|
||||||
<span class="lineno"> 246 </span><span class="spaces"> </span><span class="nottickedoff">let spent = diffUTCTime now start</span>
|
<span class="lineno"> 246 </span>progressPrinter :: String -> Int -> (MVar Int -> IO ()) -> IO ()
|
||||||
<span class="lineno"> 247 </span><span class="spaces"> </span><span class="nottickedoff">printf "\rFrames %s: %d/%d" typeName maxCount maxCount</span>
|
<span class="lineno"> 247 </span><span class="decl"><span class="nottickedoff">progressPrinter typeName maxCount action = do</span>
|
||||||
<span class="lineno"> 248 </span><span class="spaces"> </span><span class="nottickedoff">putStr $ ", time spent: " ++ ppDiff spent</span>
|
<span class="lineno"> 248 </span><span class="spaces"> </span><span class="nottickedoff">printf "\rFrames %s: 0/%d" typeName maxCount</span>
|
||||||
<span class="lineno"> 249 </span><span class="spaces"> </span><span class="nottickedoff">putStr $ clearFromCursorToLineEndCode ++ "\n"</span></span>
|
<span class="lineno"> 249 </span><span class="spaces"> </span><span class="nottickedoff">putStr $ clearFromCursorToLineEndCode ++ "\r"</span>
|
||||||
<span class="lineno"> 250 </span>
|
<span class="lineno"> 250 </span><span class="spaces"> </span><span class="nottickedoff">done <- newMVar (0 :: Int)</span>
|
||||||
<span class="lineno"> 251 </span>animationFrameCount :: Animation -> FPS -> Int
|
<span class="lineno"> 251 </span><span class="spaces"> </span><span class="nottickedoff">start <- getCurrentTime</span>
|
||||||
<span class="lineno"> 252 </span><span class="decl"><span class="nottickedoff">animationFrameCount ani rate = round (duration ani * fromIntegral rate) :: Int</span></span>
|
<span class="lineno"> 252 </span><span class="spaces"> </span><span class="nottickedoff">let bgThread = forever $ do</span>
|
||||||
<span class="lineno"> 253 </span>
|
<span class="lineno"> 253 </span><span class="spaces"> </span><span class="nottickedoff">nDone <- readMVar done</span>
|
||||||
<span class="lineno"> 254 </span>generateFrames
|
<span class="lineno"> 254 </span><span class="spaces"> </span><span class="nottickedoff">now <- getCurrentTime</span>
|
||||||
<span class="lineno"> 255 </span> :: Raster -> Animation -> Width -> Height -> FPS -> Bool -> (FilePath -> IO a) -> IO a
|
<span class="lineno"> 255 </span><span class="spaces"> </span><span class="nottickedoff">let spent = diffUTCTime now start</span>
|
||||||
<span class="lineno"> 256 </span><span class="decl"><span class="nottickedoff">generateFrames raster ani width_ height_ rate partial action = withTempDir $ \tmp -> do</span>
|
<span class="lineno"> 256 </span><span class="spaces"> </span><span class="nottickedoff">remaining =</span>
|
||||||
<span class="lineno"> 257 </span><span class="spaces"> </span><span class="nottickedoff">let frameName nth = tmp </> printf nameTemplate nth</span>
|
<span class="lineno"> 257 </span><span class="spaces"> </span><span class="nottickedoff">(spent / (fromIntegral nDone / fromIntegral maxCount)) - spent</span>
|
||||||
<span class="lineno"> 258 </span><span class="spaces"> </span><span class="nottickedoff">setRootDirectory tmp</span>
|
<span class="lineno"> 258 </span><span class="spaces"> </span><span class="nottickedoff">printf "\rFrames %s: %d/%d" typeName nDone maxCount</span>
|
||||||
<span class="lineno"> 259 </span><span class="spaces"> </span><span class="nottickedoff">progressPrinter "generated" frameCount</span>
|
<span class="lineno"> 259 </span><span class="spaces"> </span><span class="nottickedoff">putStr $ ", time spent: " ++ ppDiff spent</span>
|
||||||
<span class="lineno"> 260 </span><span class="spaces"> </span><span class="nottickedoff">$ \done -> handle h $ concurrentForM_ frames $ \n -> do</span>
|
<span class="lineno"> 260 </span><span class="spaces"> </span><span class="nottickedoff">unless (nDone == 0) $ do</span>
|
||||||
<span class="lineno"> 261 </span><span class="spaces"> </span><span class="nottickedoff">writeFile (frameName n) $ renderSvg width height $ nthFrame n</span>
|
<span class="lineno"> 261 </span><span class="spaces"> </span><span class="nottickedoff">putStr $ ", time remaining: " ++ ppDiff remaining</span>
|
||||||
<span class="lineno"> 262 </span><span class="spaces"> </span><span class="nottickedoff">modifyMVar_ done $ \nDone -> return (nDone + 1)</span>
|
<span class="lineno"> 262 </span><span class="spaces"> </span><span class="nottickedoff">putStr $ ", total time: " ++ ppDiff (remaining + spent)</span>
|
||||||
<span class="lineno"> 263 </span><span class="spaces"></span><span class="nottickedoff"></span>
|
<span class="lineno"> 263 </span><span class="spaces"> </span><span class="nottickedoff">putStr $ clearFromCursorToLineEndCode ++ "\r"</span>
|
||||||
<span class="lineno"> 264 </span><span class="spaces"> </span><span class="nottickedoff">when (isValidRaster raster)</span>
|
<span class="lineno"> 264 </span><span class="spaces"> </span><span class="nottickedoff">hFlush stdout</span>
|
||||||
<span class="lineno"> 265 </span><span class="spaces"> </span><span class="nottickedoff">$ progressPrinter "rastered" frameCount</span>
|
<span class="lineno"> 265 </span><span class="spaces"> </span><span class="nottickedoff">threadDelay 1000000</span>
|
||||||
<span class="lineno"> 266 </span><span class="spaces"> </span><span class="nottickedoff">$ \done -> handle h $ concurrentForM_ frames $ \n -> do</span>
|
<span class="lineno"> 266 </span><span class="spaces"> </span><span class="nottickedoff">withBackgroundThread bgThread $ action done</span>
|
||||||
<span class="lineno"> 267 </span><span class="spaces"> </span><span class="nottickedoff">applyRaster raster (frameName n)</span>
|
<span class="lineno"> 267 </span><span class="spaces"> </span><span class="nottickedoff">now <- getCurrentTime</span>
|
||||||
<span class="lineno"> 268 </span><span class="spaces"> </span><span class="nottickedoff">modifyMVar_ done $ \nDone -> return (nDone + 1)</span>
|
<span class="lineno"> 268 </span><span class="spaces"> </span><span class="nottickedoff">let spent = diffUTCTime now start</span>
|
||||||
<span class="lineno"> 269 </span><span class="spaces"></span><span class="nottickedoff"></span>
|
<span class="lineno"> 269 </span><span class="spaces"> </span><span class="nottickedoff">printf "\rFrames %s: %d/%d" typeName maxCount maxCount</span>
|
||||||
<span class="lineno"> 270 </span><span class="spaces"> </span><span class="nottickedoff">action (tmp </> rasterTemplate raster)</span>
|
<span class="lineno"> 270 </span><span class="spaces"> </span><span class="nottickedoff">putStr $ ", time spent: " ++ ppDiff spent</span>
|
||||||
<span class="lineno"> 271 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
<span class="lineno"> 271 </span><span class="spaces"> </span><span class="nottickedoff">putStr $ clearFromCursorToLineEndCode ++ "\n"</span></span>
|
||||||
<span class="lineno"> 272 </span><span class="spaces"> </span><span class="nottickedoff">isValidRaster RasterNone = False</span>
|
<span class="lineno"> 272 </span>
|
||||||
<span class="lineno"> 273 </span><span class="spaces"> </span><span class="nottickedoff">isValidRaster RasterAuto = False</span>
|
<span class="lineno"> 273 </span>animationFrameCount :: Animation -> FPS -> Int
|
||||||
<span class="lineno"> 274 </span><span class="spaces"> </span><span class="nottickedoff">isValidRaster _ = True</span>
|
<span class="lineno"> 274 </span><span class="decl"><span class="nottickedoff">animationFrameCount ani rate = round (duration ani * fromIntegral rate) :: Int</span></span>
|
||||||
<span class="lineno"> 275 </span><span class="spaces"></span><span class="nottickedoff"></span>
|
<span class="lineno"> 275 </span>
|
||||||
<span class="lineno"> 276 </span><span class="spaces"> </span><span class="nottickedoff">width = Just $ Px $ fromIntegral width_</span>
|
<span class="lineno"> 276 </span>generateFrames
|
||||||
<span class="lineno"> 277 </span><span class="spaces"> </span><span class="nottickedoff">height = Just $ Px $ fromIntegral height_</span>
|
<span class="lineno"> 277 </span> :: Raster -> Animation -> Width -> Height -> FPS -> Bool -> (FilePath -> IO a) -> IO a
|
||||||
<span class="lineno"> 278 </span><span class="spaces"> </span><span class="nottickedoff">h UserInterrupt | partial = do</span>
|
<span class="lineno"> 278 </span><span class="decl"><span class="nottickedoff">generateFrames raster ani width_ height_ rate partial action = withTempDir $ \tmp -> do</span>
|
||||||
<span class="lineno"> 279 </span><span class="spaces"> </span><span class="nottickedoff">hPutStrLn</span>
|
<span class="lineno"> 279 </span><span class="spaces"> </span><span class="nottickedoff">let frameName nth = tmp </> printf nameTemplate nth</span>
|
||||||
<span class="lineno"> 280 </span><span class="spaces"> </span><span class="nottickedoff">stderr</span>
|
<span class="lineno"> 280 </span><span class="spaces"> </span><span class="nottickedoff">setRootDirectory tmp</span>
|
||||||
<span class="lineno"> 281 </span><span class="spaces"> </span><span class="nottickedoff">"\nCtrl-C detected. Trying to generate video with available frames. \</span>
|
<span class="lineno"> 281 </span><span class="spaces"> </span><span class="nottickedoff">progressPrinter "generated" frameCount</span>
|
||||||
<span class="lineno"> 282 </span><span class="spaces"> </span><span class="nottickedoff">\Hit ctrl-c again to abort."</span>
|
<span class="lineno"> 282 </span><span class="spaces"> </span><span class="nottickedoff">$ \done -> handle h $ concurrentForM_ frames $ \n -> do</span>
|
||||||
<span class="lineno"> 283 </span><span class="spaces"> </span><span class="nottickedoff">return ()</span>
|
<span class="lineno"> 283 </span><span class="spaces"> </span><span class="nottickedoff">writeFile (frameName n) $ renderSvg width height $ nthFrame n</span>
|
||||||
<span class="lineno"> 284 </span><span class="spaces"> </span><span class="nottickedoff">h other = throwIO other</span>
|
<span class="lineno"> 284 </span><span class="spaces"> </span><span class="nottickedoff">modifyMVar_ done $ \nDone -> return (nDone + 1)</span>
|
||||||
<span class="lineno"> 285 </span><span class="spaces"> </span><span class="nottickedoff">-- frames = [0..frameCount-1]</span>
|
<span class="lineno"> 285 </span><span class="spaces"></span><span class="nottickedoff"></span>
|
||||||
<span class="lineno"> 286 </span><span class="spaces"> </span><span class="nottickedoff">frames = frameOrder rate frameCount</span>
|
<span class="lineno"> 286 </span><span class="spaces"> </span><span class="nottickedoff">when (isValidRaster raster)</span>
|
||||||
<span class="lineno"> 287 </span><span class="spaces"> </span><span class="nottickedoff">nthFrame nth = frameAt (recip (fromIntegral rate) * fromIntegral nth) ani</span>
|
<span class="lineno"> 287 </span><span class="spaces"> </span><span class="nottickedoff">$ progressPrinter "rastered" frameCount</span>
|
||||||
<span class="lineno"> 288 </span><span class="spaces"> </span><span class="nottickedoff">frameCount = animationFrameCount ani rate</span>
|
<span class="lineno"> 288 </span><span class="spaces"> </span><span class="nottickedoff">$ \done -> handle h $ concurrentForM_ frames $ \n -> do</span>
|
||||||
<span class="lineno"> 289 </span><span class="spaces"> </span><span class="nottickedoff">nameTemplate :: String</span>
|
<span class="lineno"> 289 </span><span class="spaces"> </span><span class="nottickedoff">applyRaster raster (frameName n)</span>
|
||||||
<span class="lineno"> 290 </span><span class="spaces"> </span><span class="nottickedoff">nameTemplate = "render-%05d.svg"</span></span>
|
<span class="lineno"> 290 </span><span class="spaces"> </span><span class="nottickedoff">modifyMVar_ done $ \nDone -> return (nDone + 1)</span>
|
||||||
<span class="lineno"> 291 </span>
|
<span class="lineno"> 291 </span><span class="spaces"></span><span class="nottickedoff"></span>
|
||||||
<span class="lineno"> 292 </span>withBackgroundThread :: IO () -> IO a -> IO a
|
<span class="lineno"> 292 </span><span class="spaces"> </span><span class="nottickedoff">action (tmp </> rasterTemplate raster)</span>
|
||||||
<span class="lineno"> 293 </span><span class="decl"><span class="nottickedoff">withBackgroundThread t = bracket (forkIO t) killThread . const</span></span>
|
<span class="lineno"> 293 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||||
<span class="lineno"> 294 </span>
|
<span class="lineno"> 294 </span><span class="spaces"> </span><span class="nottickedoff">isValidRaster RasterNone = False</span>
|
||||||
<span class="lineno"> 295 </span>ppDiff :: NominalDiffTime -> String
|
<span class="lineno"> 295 </span><span class="spaces"> </span><span class="nottickedoff">isValidRaster RasterAuto = False</span>
|
||||||
<span class="lineno"> 296 </span><span class="decl"><span class="nottickedoff">ppDiff diff | hours == 0 && mins == 0 = show secs ++ "s"</span>
|
<span class="lineno"> 296 </span><span class="spaces"> </span><span class="nottickedoff">isValidRaster _ = True</span>
|
||||||
<span class="lineno"> 297 </span><span class="spaces"> </span><span class="nottickedoff">| hours == 0 = printf "%.2d:%.2d" mins secs</span>
|
<span class="lineno"> 297 </span><span class="spaces"></span><span class="nottickedoff"></span>
|
||||||
<span class="lineno"> 298 </span><span class="spaces"> </span><span class="nottickedoff">| otherwise = printf "%.2d:%.2d:%.2d" hours mins secs</span>
|
<span class="lineno"> 298 </span><span class="spaces"> </span><span class="nottickedoff">width = Just $ Px $ fromIntegral width_</span>
|
||||||
<span class="lineno"> 299 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
<span class="lineno"> 299 </span><span class="spaces"> </span><span class="nottickedoff">height = Just $ Px $ fromIntegral height_</span>
|
||||||
<span class="lineno"> 300 </span><span class="spaces"> </span><span class="nottickedoff">(osecs, secs) = round diff `divMod` (60 :: Int)</span>
|
<span class="lineno"> 300 </span><span class="spaces"> </span><span class="nottickedoff">h UserInterrupt | partial = do</span>
|
||||||
<span class="lineno"> 301 </span><span class="spaces"> </span><span class="nottickedoff">(hours, mins) = osecs `divMod` 60</span></span>
|
<span class="lineno"> 301 </span><span class="spaces"> </span><span class="nottickedoff">hPutStrLn</span>
|
||||||
<span class="lineno"> 302 </span>
|
<span class="lineno"> 302 </span><span class="spaces"> </span><span class="nottickedoff">stderr</span>
|
||||||
<span class="lineno"> 303 </span>rasterTemplate :: Raster -> String
|
<span class="lineno"> 303 </span><span class="spaces"> </span><span class="nottickedoff">"\nCtrl-C detected. Trying to generate video with available frames. \</span>
|
||||||
<span class="lineno"> 304 </span><span class="decl"><span class="nottickedoff">rasterTemplate RasterNone = "render-%05d.svg"</span>
|
<span class="lineno"> 304 </span><span class="spaces"> </span><span class="nottickedoff">\Hit ctrl-c again to abort."</span>
|
||||||
<span class="lineno"> 305 </span><span class="spaces"></span><span class="nottickedoff">rasterTemplate RasterAuto = "render-%05d.svg"</span>
|
<span class="lineno"> 305 </span><span class="spaces"> </span><span class="nottickedoff">return ()</span>
|
||||||
<span class="lineno"> 306 </span><span class="spaces"></span><span class="nottickedoff">rasterTemplate _ = "render-%05d.png"</span></span>
|
<span class="lineno"> 306 </span><span class="spaces"> </span><span class="nottickedoff">h other = throwIO other</span>
|
||||||
<span class="lineno"> 307 </span>
|
<span class="lineno"> 307 </span><span class="spaces"> </span><span class="nottickedoff">-- frames = [0..frameCount-1]</span>
|
||||||
<span class="lineno"> 308 </span>requireRaster :: Raster -> IO Raster
|
<span class="lineno"> 308 </span><span class="spaces"> </span><span class="nottickedoff">frames = frameOrder rate frameCount</span>
|
||||||
<span class="lineno"> 309 </span><span class="decl"><span class="nottickedoff">requireRaster raster = do</span>
|
<span class="lineno"> 309 </span><span class="spaces"> </span><span class="nottickedoff">nthFrame nth = frameAt (recip (fromIntegral rate) * fromIntegral nth) ani</span>
|
||||||
<span class="lineno"> 310 </span><span class="spaces"> </span><span class="nottickedoff">raster' <- selectRaster (if raster == RasterNone then RasterAuto else raster)</span>
|
<span class="lineno"> 310 </span><span class="spaces"> </span><span class="nottickedoff">frameCount = animationFrameCount ani rate</span>
|
||||||
<span class="lineno"> 311 </span><span class="spaces"> </span><span class="nottickedoff">case raster' of</span>
|
<span class="lineno"> 311 </span><span class="spaces"> </span><span class="nottickedoff">nameTemplate :: String</span>
|
||||||
<span class="lineno"> 312 </span><span class="spaces"> </span><span class="nottickedoff">RasterNone -> do</span>
|
<span class="lineno"> 312 </span><span class="spaces"> </span><span class="nottickedoff">nameTemplate = "render-%05d.svg"</span></span>
|
||||||
<span class="lineno"> 313 </span><span class="spaces"> </span><span class="nottickedoff">hPutStrLn</span>
|
<span class="lineno"> 313 </span>
|
||||||
<span class="lineno"> 314 </span><span class="spaces"> </span><span class="nottickedoff">stderr</span>
|
<span class="lineno"> 314 </span>withBackgroundThread :: IO () -> IO a -> IO a
|
||||||
<span class="lineno"> 315 </span><span class="spaces"> </span><span class="nottickedoff">"Raster required but none could be found. \</span>
|
<span class="lineno"> 315 </span><span class="decl"><span class="nottickedoff">withBackgroundThread t = bracket (forkIO t) killThread . const</span></span>
|
||||||
<span class="lineno"> 316 </span><span class="spaces"> </span><span class="nottickedoff">\Please install either inkscape, imagemagick, or rsvg-convert."</span>
|
<span class="lineno"> 316 </span>
|
||||||
<span class="lineno"> 317 </span><span class="spaces"> </span><span class="nottickedoff">exitWith (ExitFailure 1)</span>
|
<span class="lineno"> 317 </span>ppDiff :: NominalDiffTime -> String
|
||||||
<span class="lineno"> 318 </span><span class="spaces"> </span><span class="nottickedoff">_ -> pure raster'</span></span>
|
<span class="lineno"> 318 </span><span class="decl"><span class="nottickedoff">ppDiff diff | hours == 0 && mins == 0 = show secs ++ "s"</span>
|
||||||
<span class="lineno"> 319 </span>
|
<span class="lineno"> 319 </span><span class="spaces"> </span><span class="nottickedoff">| hours == 0 = printf "%.2d:%.2d" mins secs</span>
|
||||||
<span class="lineno"> 320 </span>selectRaster :: Raster -> IO Raster
|
<span class="lineno"> 320 </span><span class="spaces"> </span><span class="nottickedoff">| otherwise = printf "%.2d:%.2d:%.2d" hours mins secs</span>
|
||||||
<span class="lineno"> 321 </span><span class="decl"><span class="nottickedoff">selectRaster RasterAuto = do</span>
|
<span class="lineno"> 321 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
||||||
<span class="lineno"> 322 </span><span class="spaces"> </span><span class="nottickedoff">rsvg <- hasRSvg</span>
|
<span class="lineno"> 322 </span><span class="spaces"> </span><span class="nottickedoff">(osecs, secs) = round diff `divMod` (60 :: Int)</span>
|
||||||
<span class="lineno"> 323 </span><span class="spaces"> </span><span class="nottickedoff">ink <- hasInkscape</span>
|
<span class="lineno"> 323 </span><span class="spaces"> </span><span class="nottickedoff">(hours, mins) = osecs `divMod` 60</span></span>
|
||||||
<span class="lineno"> 324 </span><span class="spaces"> </span><span class="nottickedoff">magick <- hasMagick</span>
|
<span class="lineno"> 324 </span>
|
||||||
<span class="lineno"> 325 </span><span class="spaces"> </span><span class="nottickedoff">if</span>
|
<span class="lineno"> 325 </span>rasterTemplate :: Raster -> String
|
||||||
<span class="lineno"> 326 </span><span class="spaces"> </span><span class="nottickedoff">| isRight rsvg -> pure RasterRSvg</span>
|
<span class="lineno"> 326 </span><span class="decl"><span class="nottickedoff">rasterTemplate RasterNone = "render-%05d.svg"</span>
|
||||||
<span class="lineno"> 327 </span><span class="spaces"> </span><span class="nottickedoff">| isRight ink -> pure RasterInkscape</span>
|
<span class="lineno"> 327 </span><span class="spaces"></span><span class="nottickedoff">rasterTemplate RasterAuto = "render-%05d.svg"</span>
|
||||||
<span class="lineno"> 328 </span><span class="spaces"> </span><span class="nottickedoff">| isRight magick -> pure RasterMagick</span>
|
<span class="lineno"> 328 </span><span class="spaces"></span><span class="nottickedoff">rasterTemplate _ = "render-%05d.png"</span></span>
|
||||||
<span class="lineno"> 329 </span><span class="spaces"> </span><span class="nottickedoff">| otherwise -> pure RasterNone</span>
|
<span class="lineno"> 329 </span>
|
||||||
<span class="lineno"> 330 </span><span class="spaces"></span><span class="nottickedoff">selectRaster r = pure r</span></span>
|
<span class="lineno"> 330 </span>requireRaster :: Raster -> IO Raster
|
||||||
<span class="lineno"> 331 </span>
|
<span class="lineno"> 331 </span><span class="decl"><span class="nottickedoff">requireRaster raster = do</span>
|
||||||
<span class="lineno"> 332 </span>applyRaster :: Raster -> FilePath -> IO ()
|
<span class="lineno"> 332 </span><span class="spaces"> </span><span class="nottickedoff">raster' <- selectRaster (if raster == RasterNone then RasterAuto else raster)</span>
|
||||||
<span class="lineno"> 333 </span><span class="decl"><span class="nottickedoff">applyRaster RasterNone _ = return ()</span>
|
<span class="lineno"> 333 </span><span class="spaces"> </span><span class="nottickedoff">case raster' of</span>
|
||||||
<span class="lineno"> 334 </span><span class="spaces"></span><span class="nottickedoff">applyRaster RasterAuto _ = return ()</span>
|
<span class="lineno"> 334 </span><span class="spaces"> </span><span class="nottickedoff">RasterNone -> do</span>
|
||||||
<span class="lineno"> 335 </span><span class="spaces"></span><span class="nottickedoff">applyRaster RasterInkscape path = runCmd</span>
|
<span class="lineno"> 335 </span><span class="spaces"> </span><span class="nottickedoff">hPutStrLn</span>
|
||||||
<span class="lineno"> 336 </span><span class="spaces"> </span><span class="nottickedoff">"inkscape"</span>
|
<span class="lineno"> 336 </span><span class="spaces"> </span><span class="nottickedoff">stderr</span>
|
||||||
<span class="lineno"> 337 </span><span class="spaces"> </span><span class="nottickedoff">[ "--without-gui"</span>
|
<span class="lineno"> 337 </span><span class="spaces"> </span><span class="nottickedoff">"Raster required but none could be found. \</span>
|
||||||
<span class="lineno"> 338 </span><span class="spaces"> </span><span class="nottickedoff">, "--file=" ++ path</span>
|
<span class="lineno"> 338 </span><span class="spaces"> </span><span class="nottickedoff">\Please install either inkscape, imagemagick, or rsvg-convert."</span>
|
||||||
<span class="lineno"> 339 </span><span class="spaces"> </span><span class="nottickedoff">, "--export-png=" ++ replaceExtension path "png"</span>
|
<span class="lineno"> 339 </span><span class="spaces"> </span><span class="nottickedoff">exitWith (ExitFailure 1)</span>
|
||||||
<span class="lineno"> 340 </span><span class="spaces"> </span><span class="nottickedoff">]</span>
|
<span class="lineno"> 340 </span><span class="spaces"> </span><span class="nottickedoff">_ -> pure raster'</span></span>
|
||||||
<span class="lineno"> 341 </span><span class="spaces"></span><span class="nottickedoff">applyRaster RasterRSvg path = runCmd</span>
|
<span class="lineno"> 341 </span>
|
||||||
<span class="lineno"> 342 </span><span class="spaces"> </span><span class="nottickedoff">"rsvg-convert"</span>
|
<span class="lineno"> 342 </span>selectRaster :: Raster -> IO Raster
|
||||||
<span class="lineno"> 343 </span><span class="spaces"> </span><span class="nottickedoff">[path, "--unlimited", "--output", replaceExtension path "png"]</span>
|
<span class="lineno"> 343 </span><span class="decl"><span class="nottickedoff">selectRaster RasterAuto = do</span>
|
||||||
<span class="lineno"> 344 </span><span class="spaces"></span><span class="nottickedoff">applyRaster RasterMagick path =</span>
|
<span class="lineno"> 344 </span><span class="spaces"> </span><span class="nottickedoff">rsvg <- hasRSvg</span>
|
||||||
<span class="lineno"> 345 </span><span class="spaces"> </span><span class="nottickedoff">runCmd magickCmd [path, replaceExtension path "png"]</span></span>
|
<span class="lineno"> 345 </span><span class="spaces"> </span><span class="nottickedoff">ink <- hasInkscape</span>
|
||||||
<span class="lineno"> 346 </span>
|
<span class="lineno"> 346 </span><span class="spaces"> </span><span class="nottickedoff">magick <- hasMagick</span>
|
||||||
<span class="lineno"> 347 </span>concurrentForM_ :: [a] -> (a -> IO ()) -> IO ()
|
<span class="lineno"> 347 </span><span class="spaces"> </span><span class="nottickedoff">if</span>
|
||||||
<span class="lineno"> 348 </span><span class="decl"><span class="nottickedoff">concurrentForM_ lst action = do</span>
|
<span class="lineno"> 348 </span><span class="spaces"> </span><span class="nottickedoff">| isRight rsvg -> pure RasterRSvg</span>
|
||||||
<span class="lineno"> 349 </span><span class="spaces"> </span><span class="nottickedoff">n <- getNumCapabilities</span>
|
<span class="lineno"> 349 </span><span class="spaces"> </span><span class="nottickedoff">| isRight ink -> pure RasterInkscape</span>
|
||||||
<span class="lineno"> 350 </span><span class="spaces"> </span><span class="nottickedoff">sem <- newQSemN n</span>
|
<span class="lineno"> 350 </span><span class="spaces"> </span><span class="nottickedoff">| isRight magick -> pure RasterMagick</span>
|
||||||
<span class="lineno"> 351 </span><span class="spaces"> </span><span class="nottickedoff">eVar <- newEmptyMVar</span>
|
<span class="lineno"> 351 </span><span class="spaces"> </span><span class="nottickedoff">| otherwise -> pure RasterNone</span>
|
||||||
<span class="lineno"> 352 </span><span class="spaces"> </span><span class="nottickedoff">forM_ lst $ \elt -> do</span>
|
<span class="lineno"> 352 </span><span class="spaces"></span><span class="nottickedoff">selectRaster r = pure r</span></span>
|
||||||
<span class="lineno"> 353 </span><span class="spaces"> </span><span class="nottickedoff">waitQSemN sem 1</span>
|
<span class="lineno"> 353 </span>
|
||||||
<span class="lineno"> 354 </span><span class="spaces"> </span><span class="nottickedoff">emp <- isEmptyMVar eVar</span>
|
<span class="lineno"> 354 </span>applyRaster :: Raster -> FilePath -> IO ()
|
||||||
<span class="lineno"> 355 </span><span class="spaces"> </span><span class="nottickedoff">if emp</span>
|
<span class="lineno"> 355 </span><span class="decl"><span class="nottickedoff">applyRaster RasterNone _ = return ()</span>
|
||||||
<span class="lineno"> 356 </span><span class="spaces"> </span><span class="nottickedoff">then</span>
|
<span class="lineno"> 356 </span><span class="spaces"></span><span class="nottickedoff">applyRaster RasterAuto _ = return ()</span>
|
||||||
<span class="lineno"> 357 </span><span class="spaces"> </span><span class="nottickedoff">void</span>
|
<span class="lineno"> 357 </span><span class="spaces"></span><span class="nottickedoff">applyRaster RasterInkscape path = runCmd</span>
|
||||||
<span class="lineno"> 358 </span><span class="spaces"> </span><span class="nottickedoff">$ forkIO</span>
|
<span class="lineno"> 358 </span><span class="spaces"> </span><span class="nottickedoff">"inkscape"</span>
|
||||||
<span class="lineno"> 359 </span><span class="spaces"> </span><span class="nottickedoff">( catch (action elt) (void . tryPutMVar eVar)</span>
|
<span class="lineno"> 359 </span><span class="spaces"> </span><span class="nottickedoff">[ "--without-gui"</span>
|
||||||
<span class="lineno"> 360 </span><span class="spaces"> </span><span class="nottickedoff">`finally` signalQSemN sem 1</span>
|
<span class="lineno"> 360 </span><span class="spaces"> </span><span class="nottickedoff">, "--file=" ++ path</span>
|
||||||
<span class="lineno"> 361 </span><span class="spaces"> </span><span class="nottickedoff">)</span>
|
<span class="lineno"> 361 </span><span class="spaces"> </span><span class="nottickedoff">, "--export-png=" ++ replaceExtension path "png"</span>
|
||||||
<span class="lineno"> 362 </span><span class="spaces"> </span><span class="nottickedoff">else signalQSemN sem 1</span>
|
<span class="lineno"> 362 </span><span class="spaces"> </span><span class="nottickedoff">]</span>
|
||||||
<span class="lineno"> 363 </span><span class="spaces"> </span><span class="nottickedoff">waitQSemN sem n</span>
|
<span class="lineno"> 363 </span><span class="spaces"></span><span class="nottickedoff">applyRaster RasterRSvg path = runCmd</span>
|
||||||
<span class="lineno"> 364 </span><span class="spaces"> </span><span class="nottickedoff">mbE <- tryTakeMVar eVar</span>
|
<span class="lineno"> 364 </span><span class="spaces"> </span><span class="nottickedoff">"rsvg-convert"</span>
|
||||||
<span class="lineno"> 365 </span><span class="spaces"> </span><span class="nottickedoff">case mbE of</span>
|
<span class="lineno"> 365 </span><span class="spaces"> </span><span class="nottickedoff">[path, "--unlimited", "--output", replaceExtension path "png"]</span>
|
||||||
<span class="lineno"> 366 </span><span class="spaces"> </span><span class="nottickedoff">Nothing -> return ()</span>
|
<span class="lineno"> 366 </span><span class="spaces"></span><span class="nottickedoff">applyRaster RasterMagick path =</span>
|
||||||
<span class="lineno"> 367 </span><span class="spaces"> </span><span class="nottickedoff">Just e -> throwIO (e :: SomeException)</span></span>
|
<span class="lineno"> 367 </span><span class="spaces"> </span><span class="nottickedoff">runCmd magickCmd [path, replaceExtension path "png"]</span></span>
|
||||||
|
<span class="lineno"> 368 </span>
|
||||||
|
<span class="lineno"> 369 </span>concurrentForM_ :: [a] -> (a -> IO ()) -> IO ()
|
||||||
|
<span class="lineno"> 370 </span><span class="decl"><span class="nottickedoff">concurrentForM_ lst action = do</span>
|
||||||
|
<span class="lineno"> 371 </span><span class="spaces"> </span><span class="nottickedoff">n <- getNumCapabilities</span>
|
||||||
|
<span class="lineno"> 372 </span><span class="spaces"> </span><span class="nottickedoff">sem <- newQSemN n</span>
|
||||||
|
<span class="lineno"> 373 </span><span class="spaces"> </span><span class="nottickedoff">eVar <- newEmptyMVar</span>
|
||||||
|
<span class="lineno"> 374 </span><span class="spaces"> </span><span class="nottickedoff">forM_ lst $ \elt -> do</span>
|
||||||
|
<span class="lineno"> 375 </span><span class="spaces"> </span><span class="nottickedoff">waitQSemN sem 1</span>
|
||||||
|
<span class="lineno"> 376 </span><span class="spaces"> </span><span class="nottickedoff">emp <- isEmptyMVar eVar</span>
|
||||||
|
<span class="lineno"> 377 </span><span class="spaces"> </span><span class="nottickedoff">if emp</span>
|
||||||
|
<span class="lineno"> 378 </span><span class="spaces"> </span><span class="nottickedoff">then</span>
|
||||||
|
<span class="lineno"> 379 </span><span class="spaces"> </span><span class="nottickedoff">void</span>
|
||||||
|
<span class="lineno"> 380 </span><span class="spaces"> </span><span class="nottickedoff">$ forkIO</span>
|
||||||
|
<span class="lineno"> 381 </span><span class="spaces"> </span><span class="nottickedoff">( catch (action elt) (void . tryPutMVar eVar)</span>
|
||||||
|
<span class="lineno"> 382 </span><span class="spaces"> </span><span class="nottickedoff">`finally` signalQSemN sem 1</span>
|
||||||
|
<span class="lineno"> 383 </span><span class="spaces"> </span><span class="nottickedoff">)</span>
|
||||||
|
<span class="lineno"> 384 </span><span class="spaces"> </span><span class="nottickedoff">else signalQSemN sem 1</span>
|
||||||
|
<span class="lineno"> 385 </span><span class="spaces"> </span><span class="nottickedoff">waitQSemN sem n</span>
|
||||||
|
<span class="lineno"> 386 </span><span class="spaces"> </span><span class="nottickedoff">mbE <- tryTakeMVar eVar</span>
|
||||||
|
<span class="lineno"> 387 </span><span class="spaces"> </span><span class="nottickedoff">case mbE of</span>
|
||||||
|
<span class="lineno"> 388 </span><span class="spaces"> </span><span class="nottickedoff">Nothing -> return ()</span>
|
||||||
|
<span class="lineno"> 389 </span><span class="spaces"> </span><span class="nottickedoff">Just e -> throwIO (e :: SomeException)</span></span>
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue