commit for nix patch

See PR #317 for more details. It's a modified version of that.
This commit is contained in:
Ai-Ya-Ya 2025-12-30 01:28:17 +00:00
commit b62a61e48d
17 changed files with 129 additions and 37 deletions

View file

@ -60,6 +60,10 @@ op2LaTeX LeftParen = "("
op2LaTeX RightParen = ")" op2LaTeX RightParen = ")"
-- Some supportive types and instances. -- Some supportive types and instances.
instance Functor (Expr a) where
fmap f (Var x) = Var (f x)
fmap f (BinOp x op y) = BinOp (fmap f x) op (fmap f y)
fmap f (Paren l x r) = Paren l (fmap f x) r
instance Bifunctor Expr where instance Bifunctor Expr where
bimap _ g (Var x) = Var (g x) bimap _ g (Var x) = Var (g x)
@ -91,6 +95,9 @@ instance Bitraversable p => Traversable (Both p) where
-- | Make a bifunctor @f (a, -) (b, -)@ (namely @BiAlongside a b f@) out of @f@. -- | Make a bifunctor @f (a, -) (b, -)@ (namely @BiAlongside a b f@) out of @f@.
newtype BiAlongside a b f x y = BiAlongside { runBiAlongside :: f (a, x) (b, y) } newtype BiAlongside a b f x y = BiAlongside { runBiAlongside :: f (a, x) (b, y) }
instance Bifunctor p => Functor (BiAlongside a b p c) where
fmap f (BiAlongside x) = BiAlongside (bimap id (fmap f) x)
instance Bifunctor p => Bifunctor (BiAlongside a b p) where instance Bifunctor p => Bifunctor (BiAlongside a b p) where
bimap f g = BiAlongside . bimap (second f) (second g) . runBiAlongside bimap f g = BiAlongside . bimap (second f) (second g) . runBiAlongside

View file

@ -3,8 +3,8 @@
2<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,0.861111" /></g></g></g></g></svg> 2<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,0.861111" /></g></g></g></g></svg>
3<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-0.166667,2.25" /></g></g></g></g></svg> 3<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-0.166667,2.25" /></g></g></g></g></svg>
4<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-4,2.25 L-4,0.527778" /></g></g></g></g></svg> 4<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-4,2.25 L-4,0.527778" /></g></g></g></g></svg>
5<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 Z" /><path d="M-3,0 C-3,0.73638 -2.734687,1.410792 -2.294438,1.932862" /></g></g></g></g></svg> 5<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 v-4.5 Z" /><path d="M-3,0 C-3,0.73638 -2.734687,1.410792 -2.294438,1.932862" /></g></g></g></g></svg>
6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 Z" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C0.552285,3 1.069713,2.850762 1.514157,2.590412" /></g></g></g></g></svg> 6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 v-4.5 Z" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C0.552285,3 1.069713,2.850762 1.514157,2.590412" /></g></g></g></g></svg>
7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 Z" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-0.36819 2.933672,-0.720888 2.812312,-1.046797" /></g></g></g></g></svg> 7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 v-4.5 Z" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-0.36819 2.933672,-0.720888 2.812312,-1.046797" /></g></g></g></g></svg>
8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 Z" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.656854 1.656854,-3 0,-3 C-0.184095,-3 -0.364317,-2.983418 -0.539254,-2.951666" /></g></g></g></g></svg> 8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 v-4.5 Z" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.656854 1.656854,-3 0,-3 C-0.184095,-3 -0.364317,-2.983418 -0.539254,-2.951666" /></g></g></g></g></svg>
9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 Z" /><path d="M-3,0 a3 3 0 1 0 6,0 3 3 0 1 0 -6,0" /></g></g></g></g></svg> 9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 v-4.5 Z" /><path d="M-3,0 a3 3 0 1 0 6,0 3 3 0 1 0 -6,0" /></g></g></g></g></svg>

View file

@ -7,4 +7,4 @@
6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="rotate(60)"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-0.166667,2.25" /></g></g></g></g></g></svg> 6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="rotate(60)"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-0.166667,2.25" /></g></g></g></g></g></svg>
7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="rotate(70)"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-2.944444,2.25" /></g></g></g></g></g></svg> 7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="rotate(70)"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-2.944444,2.25" /></g></g></g></g></g></svg>
8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="rotate(80)"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-4,2.25 L-4,0.527778" /></g></g></g></g></g></svg> 8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="rotate(80)"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-4,2.25 L-4,0.527778" /></g></g></g></g></g></svg>
9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="rotate(90)"><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 Z" /></g></g></g></g></g></svg> 9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="rotate(90)"><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 v-4.5 Z" /></g></g></g></g></g></svg>

View file

@ -7,4 +7,4 @@
6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-0.166667,2.25" /></g></g></g></g></svg> 6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-0.166667,2.25" /></g></g></g></g></svg>
7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-2.944444,2.25" /></g></g></g></g></svg> 7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-2.944444,2.25" /></g></g></g></g></svg>
8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-4,2.25 L-4,0.527778" /></g></g></g></g></svg> 8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-4,2.25 L-4,0.527778" /></g></g></g></g></svg>
9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 Z" /></g></g></g></g></svg> 9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 v-4.5 Z" /></g></g></g></g></svg>

View file

@ -7,4 +7,4 @@
6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-0.166667,2.25" /></g></g></g></svg> 6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-0.166667,2.25" /></g></g></g></svg>
7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-2.944444,2.25" /></g></g></g></svg> 7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-2.944444,2.25" /></g></g></g></svg>
8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-4,2.25 L-4,0.527778" /></g></g></g></svg> 8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-4,2.25 L-4,0.527778" /></g></g></g></svg>
9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 Z" /></g></g></g></svg> 9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 v-4.5 Z" /></g></g></g></svg>

View file

@ -7,4 +7,4 @@
6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" opacity="0.333333" d="M-4,-2.25 L4,-2.25 L4,2.25 L-0.166667,2.25" /><path opacity="0.666667" d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.104569 2.403046,-2.069713 1.514157,-2.590412" /></g></g></g></g></svg> 6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" opacity="0.333333" d="M-4,-2.25 L4,-2.25 L4,2.25 L-0.166667,2.25" /><path opacity="0.666667" d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.104569 2.403046,-2.069713 1.514157,-2.590412" /></g></g></g></g></svg>
7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" opacity="0.222222" d="M-4,-2.25 L4,-2.25 L4,2.25 L-2.944444,2.25" /><path opacity="0.777778" d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.656854 1.656854,-3 0,-3 C-0.184095,-3 -0.364317,-2.983418 -0.539254,-2.951666" /></g></g></g></g></svg> 7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" opacity="0.222222" d="M-4,-2.25 L4,-2.25 L4,2.25 L-2.944444,2.25" /><path opacity="0.777778" d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.656854 1.656854,-3 0,-3 C-0.184095,-3 -0.364317,-2.983418 -0.539254,-2.951666" /></g></g></g></g></svg>
8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" opacity="0.111111" d="M-4,-2.25 L4,-2.25 L4,2.25 L-4,2.25 L-4,0.527778" /><path opacity="0.888889" d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.656854 1.656854,-3 0,-3 C-0.920475,-3 -1.744126,-2.585449 -2.294438,-1.932862" /></g></g></g></g></svg> 8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" opacity="0.111111" d="M-4,-2.25 L4,-2.25 L4,2.25 L-4,2.25 L-4,0.527778" /><path opacity="0.888889" d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.656854 1.656854,-3 0,-3 C-0.920475,-3 -1.744126,-2.585449 -2.294438,-1.932862" /></g></g></g></g></svg>
9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" opacity="0" d="M-4,-2.25 h8 v4.5 h-8 Z" /><path opacity="1" d="M-3,0 a3 3 0 1 0 6,0 3 3 0 1 0 -6,0" /></g></g></g></g></svg> 9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" opacity="0" d="M-4,-2.25 h8 v4.5 h-8 v-4.5 Z" /><path opacity="1" d="M-3,0 a3 3 0 1 0 6,0 3 3 0 1 0 -6,0" /></g></g></g></g></svg>

View file

@ -7,4 +7,4 @@
6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-0.166667,2.25" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.104569 2.403046,-2.069713 1.514157,-2.590412" /></g></g></g></g></svg> 6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-0.166667,2.25" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.104569 2.403046,-2.069713 1.514157,-2.590412" /></g></g></g></g></svg>
7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-2.944444,2.25" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.656854 1.656854,-3 0,-3 C-0.184095,-3 -0.364317,-2.983418 -0.539254,-2.951666" /></g></g></g></g></svg> 7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-2.944444,2.25" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.656854 1.656854,-3 0,-3 C-0.184095,-3 -0.364317,-2.983418 -0.539254,-2.951666" /></g></g></g></g></svg>
8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-4,2.25 L-4,0.527778" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.656854 1.656854,-3 0,-3 C-0.920475,-3 -1.744126,-2.585449 -2.294438,-1.932862" /></g></g></g></g></svg> 8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-4,2.25 L-4,0.527778" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.656854 1.656854,-3 0,-3 C-0.920475,-3 -1.744126,-2.585449 -2.294438,-1.932862" /></g></g></g></g></svg>
9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 Z" /><path d="M-3,0 a3 3 0 1 0 6,0 3 3 0 1 0 -6,0" /></g></g></g></g></svg> 9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 v-4.5 Z" /><path d="M-3,0 a3 3 0 1 0 6,0 3 3 0 1 0 -6,0" /></g></g></g></g></svg>

View file

@ -3,8 +3,8 @@
2<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,0.861111" /><path d="M-3,0 C-3,1.472759 -1.938749,2.69765 -0.539254,2.951666" /></g></g></g></g></svg> 2<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,0.861111" /><path d="M-3,0 C-3,1.472759 -1.938749,2.69765 -0.539254,2.951666" /></g></g></g></g></svg>
3<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-0.166667,2.25" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C0.552285,3 1.069713,2.850762 1.514157,2.590412" /></g></g></g></g></svg> 3<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-0.166667,2.25" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C0.552285,3 1.069713,2.850762 1.514157,2.590412" /></g></g></g></g></svg>
4<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-4,2.25 L-4,0.527778" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.288664,3 2.387555,2.18748 2.812312,1.046797" /></g></g></g></g></svg> 4<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-4,2.25 L-4,0.527778" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.288664,3 2.387555,2.18748 2.812312,1.046797" /></g></g></g></g></svg>
5<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 Z" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-0.36819 2.933672,-0.720888 2.812312,-1.046797" /></g></g></g></g></svg> 5<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 v-4.5 Z" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-0.36819 2.933672,-0.720888 2.812312,-1.046797" /></g></g></g></g></svg>
6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 Z" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.104569 2.403046,-2.069713 1.514157,-2.590412" /></g></g></g></g></svg> 6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 v-4.5 Z" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.104569 2.403046,-2.069713 1.514157,-2.590412" /></g></g></g></g></svg>
7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 Z" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.656854 1.656854,-3 0,-3 C-0.184095,-3 -0.364317,-2.983418 -0.539254,-2.951666" /></g></g></g></g></svg> 7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 v-4.5 Z" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.656854 1.656854,-3 0,-3 C-0.184095,-3 -0.364317,-2.983418 -0.539254,-2.951666" /></g></g></g></g></svg>
8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 Z" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.656854 1.656854,-3 0,-3 C-0.920475,-3 -1.744126,-2.585449 -2.294438,-1.932862" /></g></g></g></g></svg> 8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 v-4.5 Z" /><path d="M-3,0 C-3,1.656854 -1.656854,3 0,3 C1.656854,3 3,1.656854 3,0 C3,-1.656854 1.656854,-3 0,-3 C-0.920475,-3 -1.744126,-2.585449 -2.294438,-1.932862" /></g></g></g></g></svg>
9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 Z" /><path d="M-3,0 a3 3 0 1 0 6,0 3 3 0 1 0 -6,0" /></g></g></g></g></svg> 9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 v-4.5 Z" /><path d="M-3,0 a3 3 0 1 0 6,0 3 3 0 1 0 -6,0" /></g></g></g></g></svg>

View file

@ -7,4 +7,4 @@
6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="translate(-4, 2.25)"><path d="M-1,0 C-1,0.552285 -0.552285,1 0,1 C0.552285,1 1,0.552285 1,0 C1,-0.36819 0.801015,-0.689904 0.504719,-0.863471" /></g><g transform="translate(4, 2.25)"><path stroke-linecap="square" d="M-1,-1 L1,-1 L1,1 L-0.333333,1" /></g><g transform="translate(-4, -2.25)"><path d="M-1,0 C-1,0.276142 -0.552285,0.5 0,0.5 C0.552285,0.5 1,0.276142 1,0 C1,-0.184095 0.801015,-0.344952 0.504719,-0.431735" /></g><g transform="translate(4, -2.25)"><path d="M-1,-1 L0.333333,0.333333" /></g></g></g></g></g></svg> 6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="translate(-4, 2.25)"><path d="M-1,0 C-1,0.552285 -0.552285,1 0,1 C0.552285,1 1,0.552285 1,0 C1,-0.36819 0.801015,-0.689904 0.504719,-0.863471" /></g><g transform="translate(4, 2.25)"><path stroke-linecap="square" d="M-1,-1 L1,-1 L1,1 L-0.333333,1" /></g><g transform="translate(-4, -2.25)"><path d="M-1,0 C-1,0.276142 -0.552285,0.5 0,0.5 C0.552285,0.5 1,0.276142 1,0 C1,-0.184095 0.801015,-0.344952 0.504719,-0.431735" /></g><g transform="translate(4, -2.25)"><path d="M-1,-1 L0.333333,0.333333" /></g></g></g></g></g></svg>
7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="translate(-4, 2.25)"><path d="M-1,0 C-1,0.552285 -0.552285,1 0,1 C0.552285,1 1,0.552285 1,0 C1,-0.552285 0.552285,-1 0,-1 C-0.061365,-1 -0.121439,-0.994473 -0.179751,-0.983889" /></g><g transform="translate(4, 2.25)"><path stroke-linecap="square" d="M-1,-1 L1,-1 L1,1 L-1,1 L-1,0.777778" /></g><g transform="translate(-4, -2.25)"><path d="M-1,0 C-1,0.276142 -0.552285,0.5 0,0.5 C0.552285,0.5 1,0.276142 1,0 C1,-0.276142 0.552285,-0.5 0,-0.5 C-0.061365,-0.5 -0.121439,-0.497236 -0.179751,-0.491944" /></g><g transform="translate(4, -2.25)"><path d="M-1,-1 L0.555556,0.555556" /></g></g></g></g></g></svg> 7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="translate(-4, 2.25)"><path d="M-1,0 C-1,0.552285 -0.552285,1 0,1 C0.552285,1 1,0.552285 1,0 C1,-0.552285 0.552285,-1 0,-1 C-0.061365,-1 -0.121439,-0.994473 -0.179751,-0.983889" /></g><g transform="translate(4, 2.25)"><path stroke-linecap="square" d="M-1,-1 L1,-1 L1,1 L-1,1 L-1,0.777778" /></g><g transform="translate(-4, -2.25)"><path d="M-1,0 C-1,0.276142 -0.552285,0.5 0,0.5 C0.552285,0.5 1,0.276142 1,0 C1,-0.276142 0.552285,-0.5 0,-0.5 C-0.061365,-0.5 -0.121439,-0.497236 -0.179751,-0.491944" /></g><g transform="translate(4, -2.25)"><path d="M-1,-1 L0.555556,0.555556" /></g></g></g></g></g></svg>
8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="translate(-4, 2.25)"><path d="M-1,0 C-1,0.552285 -0.552285,1 0,1 C0.552285,1 1,0.552285 1,0 C1,-0.552285 0.552285,-1 0,-1 C-0.306825,-1 -0.581375,-0.861816 -0.764813,-0.644287" /></g><g transform="translate(4, 2.25)"><path stroke-linecap="square" d="M-1,-1 L1,-1 L1,1 L-1,1 L-1,-0.111111" /></g><g transform="translate(-4, -2.25)"><path d="M-1,0 C-1,0.276142 -0.552285,0.5 0,0.5 C0.552285,0.5 1,0.276142 1,0 C1,-0.276142 0.552285,-0.5 0,-0.5 C-0.306825,-0.5 -0.581375,-0.430908 -0.764813,-0.322144" /></g><g transform="translate(4, -2.25)"><path d="M-1,-1 L0.777778,0.777778" /></g></g></g></g></g></svg> 8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="translate(-4, 2.25)"><path d="M-1,0 C-1,0.552285 -0.552285,1 0,1 C0.552285,1 1,0.552285 1,0 C1,-0.552285 0.552285,-1 0,-1 C-0.306825,-1 -0.581375,-0.861816 -0.764813,-0.644287" /></g><g transform="translate(4, 2.25)"><path stroke-linecap="square" d="M-1,-1 L1,-1 L1,1 L-1,1 L-1,-0.111111" /></g><g transform="translate(-4, -2.25)"><path d="M-1,0 C-1,0.276142 -0.552285,0.5 0,0.5 C0.552285,0.5 1,0.276142 1,0 C1,-0.276142 0.552285,-0.5 0,-0.5 C-0.306825,-0.5 -0.581375,-0.430908 -0.764813,-0.322144" /></g><g transform="translate(4, -2.25)"><path d="M-1,-1 L0.777778,0.777778" /></g></g></g></g></g></svg>
9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="translate(-4, 2.25)"><path d="M-1,0 a1 1 0 1 0 2,0 1 1 0 1 0 -2,0" /></g><g transform="translate(4, 2.25)"><path stroke-linecap="square" d="M-1,-1 h2 v2 h-2 Z" /></g><g transform="translate(-4, -2.25)"><path d="M-1,0 a1 0.5 0 1 0 2,0 1 0.5 0 1 0 -2,0" /></g><g transform="translate(4, -2.25)"><path d="M-1,-1 L1,1" /></g></g></g></g></g></svg> 9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="translate(-4, 2.25)"><path d="M-1,0 a1 1 0 1 0 2,0 1 1 0 1 0 -2,0" /></g><g transform="translate(4, 2.25)"><path stroke-linecap="square" d="M-1,-1 h2 v2 h-2 v-2 Z" /></g><g transform="translate(-4, -2.25)"><path d="M-1,0 a1 0.5 0 1 0 2,0 1 0.5 0 1 0 -2,0" /></g><g transform="translate(4, -2.25)"><path d="M-1,-1 L1,1" /></g></g></g></g></g></svg>

View file

@ -7,4 +7,4 @@
6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="rotate(60)"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-0.166667,2.25" /></g></g></g></g></g></svg> 6<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="rotate(60)"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-0.166667,2.25" /></g></g></g></g></g></svg>
7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="rotate(70)"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-2.944444,2.25" /></g></g></g></g></g></svg> 7<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="rotate(70)"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-2.944444,2.25" /></g></g></g></g></g></svg>
8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="rotate(80)"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-4,2.25 L-4,0.527778" /></g></g></g></g></g></svg> 8<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="rotate(80)"><path stroke-linecap="square" d="M-4,-2.25 L4,-2.25 L4,2.25 L-4,2.25 L-4,0.527778" /></g></g></g></g></g></svg>
9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="rotate(90)"><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 Z" /></g></g></g></g></g></svg> 9<svg viewBox="-8 -4.5 16 9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" preserveAspectRatio="none"><g stroke-width="0.05" transform="scale(1, -1)"><g><rect stroke-width="0" fill="#FFFFFF" fill-opacity="1" width="16" height="9" x="-8" y="-4.5" /><g stroke-width="0.1" stroke="#000000" fill-opacity="0"><g><g transform="rotate(90)"><path stroke-linecap="square" d="M-4,-2.25 h8 v4.5 h-8 v-4.5 Z" /></g></g></g></g></g></svg>

View file

@ -6,6 +6,7 @@
module Main (main) where module Main (main) where
import Codec.Picture import Codec.Picture
import Control.Monad (forM_, when, zipWithM_)
import Control.Monad.ST import Control.Monad.ST
import Control.Monad.State.Strict import Control.Monad.State.Strict
import Data.Text (Text) import Data.Text (Text)

View file

@ -110,7 +110,7 @@ library
build-depends: build-depends:
base >=4.10 && <5, base >=4.10 && <5,
JuicyPixels >=3.3.3, JuicyPixels >=3.3.3,
aeson >=1.3.0.0 && <2.2, aeson >=1.3.0.0 && <2.3,
ansi-terminal >=0.8.0.4, ansi-terminal >=0.8.0.4,
array >=0.5.2.0, array >=0.5.2.0,
attoparsec >=0.13.2.0, attoparsec >=0.13.2.0,
@ -147,7 +147,7 @@ library
unordered-containers >=0.2.0.0, unordered-containers >=0.2.0.0,
vector >=0.12.0.0, vector >=0.12.0.0,
vector-space >=0.13, vector-space >=0.13,
websockets >=0.12.7.0, websockets >=0.13.0.0,
xml >=1.3.14, xml >=1.3.14,
cryptohash-sha256, cryptohash-sha256,
base64-bytestring, base64-bytestring,

View file

@ -58,8 +58,7 @@ daemon = do
let options = ServerOptions let options = ServerOptions
{ serverHost = "127.0.0.1" { serverHost = "127.0.0.1"
, serverPort = 9161 , serverPort = 9161
, serverConnectionOptions = opts , serverConnectionOptions = opts }
, serverRequirePong = Nothing }
runServerWithOptions options (\pending -> do runServerWithOptions options (\pending -> do
tid <- myThreadId tid <- myThreadId

View file

@ -91,5 +91,5 @@ closestLinearCorrespondenceA src' dst' =
linearTrajectory :: Trajectory linearTrajectory :: Trajectory
linearTrajectory (src,dst) linearTrajectory (src,dst)
| pSize src == pSize dst = \t -> mkPolygon $ | pSize src == pSize dst = \t -> mkPolygon $
V.zipWith (lerp $ realToFrac t) (polygonPoints dst) (polygonPoints src) V.zipWith (lerp $ realToFrac t) (polygonPoints src) (polygonPoints dst)
| otherwise = error $ "Invalid lengths: " ++ show (pSize src, pSize dst) | otherwise = error $ "Invalid lengths: " ++ show (pSize src, pSize dst)

View file

@ -264,6 +264,7 @@ pathify = mapTree worker
,HorizontalTo OriginRelative [w] ,HorizontalTo OriginRelative [w]
,VerticalTo OriginRelative [h] ,VerticalTo OriginRelative [h]
,HorizontalTo OriginRelative [-w] ,HorizontalTo OriginRelative [-w]
,VerticalTo OriginRelative [-h]
,EndPath ] ,EndPath ]
LineTree line | Just (x1,y1, x2, y2) <- unpackLine line -> LineTree line | Just (x1,y1, x2, y2) <- unpackLine line ->
PathTree $ defaultSvg PathTree $ defaultSvg

View file

@ -5,9 +5,11 @@ module UnitTests
) where ) where
import Control.Exception import Control.Exception
import Control.Monad (filterM)
import qualified Data.ByteString as BS import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as LBS import qualified Data.ByteString.Lazy as LBS
import Data.List (sort) import Data.List (sort)
import Data.Maybe (maybe)
import qualified Data.Text as T import qualified Data.Text as T
import qualified Data.Text.IO as T import qualified Data.Text.IO as T
import System.Directory import System.Directory
@ -23,21 +25,77 @@ import Test.Tasty.HUnit
data BuildSystem data BuildSystem
= Cabal = Cabal
| Stack | Stack
| NixBuild NixBuildSystem
data NixBuildSystem
= NixCabal
| NixStack
-- required for nix build
nixGHCOptions :: [String]
nixGHCOptions =
[ "-XPackageImports"
, "-XPatternSynonyms"
, "-Wall"
, "-fno-ignore-asserts"
, "-DNO_HGEOMETRY"
, "-hide-package"
, "matrices"
]
findStackAutogen :: IO (Maybe FilePath)
findStackAutogen = do
let base = ".stack-work" </> "dist"
baseExists <- doesDirectoryExist base
if not baseExists
then return Nothing
else do
subDirs <- listDirectories base
case subDirs of
[] -> return Nothing
(arch:_) -> do
let archPath = base </> arch
cabalDirs <- listDirectories archPath
case cabalDirs of
[] -> return Nothing
(ver:_) -> return $ Just (archPath </> ver </> "build" </> "autogen")
includeBuild :: NixBuildSystem -> IO [String]
includeBuild NixCabal = return ["-idist/build/autogen"]
includeBuild NixStack = do
mbPath <- findStackAutogen
case mbPath of
Nothing -> return []
Just p -> return ["-i" ++ p]
listDirectories :: FilePath -> IO [FilePath]
listDirectories path = do
contents <- listDirectory path
filterM (\f -> doesDirectoryExist (path </> f)) contents
{-# NOINLINE buildSystem #-} {-# NOINLINE buildSystem #-}
buildSystem :: BuildSystem buildSystem :: BuildSystem
buildSystem = unsafePerformIO $ do buildSystem = unsafePerformIO $ do
exeCabal <- findExecutable "cabal"
exeStack <- findExecutable "stack"
newbuild <- doesDirectoryExist "dist-newstyle" newbuild <- doesDirectoryExist "dist-newstyle"
v1build <- doesDirectoryExist "dist"
stack <- doesDirectoryExist ".stack-work" stack <- doesDirectoryExist ".stack-work"
if newbuild then pure Cabal
else if stack then pure Stack return $ case (exeCabal, exeStack) of
else error "Unknown build system." (Nothing, _) | v1build -> NixBuild NixCabal
(_, Nothing) | stack -> NixBuild NixStack
(Just _, _) | newbuild -> Cabal
(_, Just _) | stack -> Stack
_ -> error "Unknown build system."
{-# NOINLINE unitTestsDisabled #-} {-# NOINLINE unitTestsDisabled #-}
unitTestsDisabled :: Bool unitTestsDisabled :: Bool
unitTestsDisabled = unitTestsDisabled =
case buildSystem of case buildSystem of
Cabal -> False Cabal -> False
NixBuild _ -> False
Stack -> unsafePerformIO $ do Stack -> unsafePerformIO $ do
(ret, _, _) <- readProcessWithExitCode "stack" ["exec","--","ghc", "-e", "Reanimate.duration Reanimate.Builtin.Documentation.drawCircle"] "" (ret, _, _) <- readProcessWithExitCode "stack" ["exec","--","ghc", "-e", "Reanimate.duration Reanimate.Builtin.Documentation.drawCircle"] ""
case ret of case ret of
@ -68,12 +126,22 @@ genGolden path = do
Nothing Nothing Nothing Nothing
Cabal -> runInteractiveProcess "cabal" ["v2-exec", "runhaskell", path, "test"] Cabal -> runInteractiveProcess "cabal" ["v2-exec", "runhaskell", path, "test"]
Nothing Nothing Nothing Nothing
NixBuild nixbuild -> do
nixIncludeDir <- includeBuild nixbuild
runInteractiveProcess "ghc"
( ["-isrc", "-iunix"]
++ nixIncludeDir
++ nixGHCOptions
++ ["--run", path, "--", "test"]
) Nothing Nothing
-- hSetBinaryMode outh True -- hSetBinaryMode outh True
-- hSetNewlineMode outh universalNewlineMode -- hSetNewlineMode outh universalNewlineMode
hClose inh hClose inh
out <- BS.hGetContents outh out <- BS.hGetContents outh
err <- T.hGetContents errh err <- T.hGetContents errh
code <- waitForProcess pid code <- waitForProcess pid
case code of case code of
ExitSuccess -> return $ LBS.fromChunks [out] ExitSuccess -> return $ LBS.fromChunks [out]
ExitFailure{} -> error $ "Failed to run: " ++ T.unpack err ExitFailure{} -> error $ "Failed to run: " ++ T.unpack err
@ -90,6 +158,14 @@ compileTestFolder path = do
Stack -> readProcessWithExitCode "stack" (["ghc","--", fullPath] ++ ghcOpts) "" Stack -> readProcessWithExitCode "stack" (["ghc","--", fullPath] ++ ghcOpts) ""
Cabal -> readProcessWithExitCode "cabal" Cabal -> readProcessWithExitCode "cabal"
(["v2-exec","ghc","--", "-package", "reanimate", fullPath] ++ ghcOpts) "" (["v2-exec","ghc","--", "-package", "reanimate", fullPath] ++ ghcOpts) ""
NixBuild nixbuild -> do
nixIncludeDir <- includeBuild nixbuild
readProcessWithExitCode "ghc"
( ["-isrc", "-iunix"]
++ nixIncludeDir
++ nixGHCOptions
++ [fullPath] ++ (init ghcOpts)
) ""
_ <- evaluate (length err) _ <- evaluate (length err)
case ret of case ret of
ExitFailure{} -> assertFailure $ "Failed to compile:\n" ++ err ExitFailure{} -> assertFailure $ "Failed to compile:\n" ++ err
@ -100,7 +176,7 @@ compileTestFolder path = do
, notElem (replaceExtension file "golden") goldenFiles , notElem (replaceExtension file "golden") goldenFiles
] ]
where where
ghcOpts = ["-fno-code", "-O0", "-Werror", "-Wall"] ghcOpts = ["-fno-code", "-O0", "-Wall", "-Werror"]
compileVideoFolder :: FilePath -> IO TestTree compileVideoFolder :: FilePath -> IO TestTree
compileVideoFolder _ | unitTestsDisabled = return $ testGroup "videos (disabled)" [] compileVideoFolder _ | unitTestsDisabled = return $ testGroup "videos (disabled)" []
@ -115,6 +191,14 @@ compileVideoFolder path = do
case buildSystem of case buildSystem of
Stack -> readProcessWithExitCode "stack" (["ghc","--", "-i"++path</>dir, fullPath] ++ ghcOpts) "" Stack -> readProcessWithExitCode "stack" (["ghc","--", "-i"++path</>dir, fullPath] ++ ghcOpts) ""
Cabal -> readProcessWithExitCode "cabal" (["v2-exec", "ghc","--", "-package", "reanimate", "-i"++path</>dir, fullPath] ++ ghcOpts) "" Cabal -> readProcessWithExitCode "cabal" (["v2-exec", "ghc","--", "-package", "reanimate", "-i"++path</>dir, fullPath] ++ ghcOpts) ""
NixBuild nixbuild -> do
nixIncludeDir <- includeBuild nixbuild
readProcessWithExitCode "ghc"
( ["-isrc", "-iunix", "-i"++path</>dir]
++ nixIncludeDir
++ nixGHCOptions
++ [fullPath] ++ ghcOpts
) ""
_ <- evaluate (length err) _ <- evaluate (length err)
case ret of case ret of
ExitFailure{} -> assertFailure $ "Failed to compile:\n" ++ err ExitFailure{} -> assertFailure $ "Failed to compile:\n" ++ err

View file

@ -8,7 +8,7 @@ import System.Posix.Process (createSession, forkProcess)
detach :: IO () -> IO Bool detach :: IO () -> IO Bool
detach daemon = do detach daemon = do
void $ forkProcess $ do void $ forkProcess $ do
devnull <- openFd "/dev/null" ReadWrite Nothing defaultFileFlags devnull <- openFd "/dev/null" ReadWrite defaultFileFlags
void $ dupTo devnull stdInput void $ dupTo devnull stdInput
void $ dupTo devnull stdOutput void $ dupTo devnull stdOutput
void $ dupTo devnull stdError void $ dupTo devnull stdError