mirror of
https://github.com/reanimate/reanimate.git
synced 2026-09-11 16:12:20 +00:00
commit for nix patch
See PR #317 for more details. It's a modified version of that.
This commit is contained in:
parent
6bf63b7c00
commit
b62a61e48d
17 changed files with 129 additions and 37 deletions
|
|
@ -60,6 +60,10 @@ op2LaTeX LeftParen = "("
|
|||
op2LaTeX RightParen = ")"
|
||||
|
||||
-- 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
|
||||
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@.
|
||||
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
|
||||
bimap f g = BiAlongside . bimap (second f) (second g) . runBiAlongside
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
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>
|
||||
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>
|
||||
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>
|
||||
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>
|
||||
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>
|
||||
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>
|
||||
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 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 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 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 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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
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>
|
||||
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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
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>
|
||||
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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
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>
|
||||
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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
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>
|
||||
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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
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>
|
||||
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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
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>
|
||||
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>
|
||||
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>
|
||||
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>
|
||||
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>
|
||||
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>
|
||||
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 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 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 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 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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
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>
|
||||
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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
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>
|
||||
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>
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
module Main (main) where
|
||||
|
||||
import Codec.Picture
|
||||
import Control.Monad (forM_, when, zipWithM_)
|
||||
import Control.Monad.ST
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Text (Text)
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ library
|
|||
build-depends:
|
||||
base >=4.10 && <5,
|
||||
JuicyPixels >=3.3.3,
|
||||
aeson >=1.3.0.0 && <2.2,
|
||||
aeson >=1.3.0.0 && <2.3,
|
||||
ansi-terminal >=0.8.0.4,
|
||||
array >=0.5.2.0,
|
||||
attoparsec >=0.13.2.0,
|
||||
|
|
@ -147,7 +147,7 @@ library
|
|||
unordered-containers >=0.2.0.0,
|
||||
vector >=0.12.0.0,
|
||||
vector-space >=0.13,
|
||||
websockets >=0.12.7.0,
|
||||
websockets >=0.13.0.0,
|
||||
xml >=1.3.14,
|
||||
cryptohash-sha256,
|
||||
base64-bytestring,
|
||||
|
|
|
|||
|
|
@ -58,8 +58,7 @@ daemon = do
|
|||
let options = ServerOptions
|
||||
{ serverHost = "127.0.0.1"
|
||||
, serverPort = 9161
|
||||
, serverConnectionOptions = opts
|
||||
, serverRequirePong = Nothing }
|
||||
, serverConnectionOptions = opts }
|
||||
|
||||
runServerWithOptions options (\pending -> do
|
||||
tid <- myThreadId
|
||||
|
|
|
|||
|
|
@ -91,5 +91,5 @@ closestLinearCorrespondenceA src' dst' =
|
|||
linearTrajectory :: Trajectory
|
||||
linearTrajectory (src,dst)
|
||||
| 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)
|
||||
|
|
|
|||
|
|
@ -264,6 +264,7 @@ pathify = mapTree worker
|
|||
,HorizontalTo OriginRelative [w]
|
||||
,VerticalTo OriginRelative [h]
|
||||
,HorizontalTo OriginRelative [-w]
|
||||
,VerticalTo OriginRelative [-h]
|
||||
,EndPath ]
|
||||
LineTree line | Just (x1,y1, x2, y2) <- unpackLine line ->
|
||||
PathTree $ defaultSvg
|
||||
|
|
|
|||
|
|
@ -5,9 +5,11 @@ module UnitTests
|
|||
) where
|
||||
|
||||
import Control.Exception
|
||||
import Control.Monad (filterM)
|
||||
import qualified Data.ByteString as BS
|
||||
import qualified Data.ByteString.Lazy as LBS
|
||||
import Data.List (sort)
|
||||
import Data.Maybe (maybe)
|
||||
import qualified Data.Text as T
|
||||
import qualified Data.Text.IO as T
|
||||
import System.Directory
|
||||
|
|
@ -23,22 +25,78 @@ import Test.Tasty.HUnit
|
|||
data BuildSystem
|
||||
= Cabal
|
||||
| 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 #-}
|
||||
buildSystem :: BuildSystem
|
||||
buildSystem = unsafePerformIO $ do
|
||||
exeCabal <- findExecutable "cabal"
|
||||
exeStack <- findExecutable "stack"
|
||||
|
||||
newbuild <- doesDirectoryExist "dist-newstyle"
|
||||
stack <- doesDirectoryExist ".stack-work"
|
||||
if newbuild then pure Cabal
|
||||
else if stack then pure Stack
|
||||
else error "Unknown build system."
|
||||
v1build <- doesDirectoryExist "dist"
|
||||
stack <- doesDirectoryExist ".stack-work"
|
||||
|
||||
return $ case (exeCabal, exeStack) of
|
||||
(Nothing, _) | v1build -> NixBuild NixCabal
|
||||
(_, Nothing) | stack -> NixBuild NixStack
|
||||
(Just _, _) | newbuild -> Cabal
|
||||
(_, Just _) | stack -> Stack
|
||||
_ -> error "Unknown build system."
|
||||
|
||||
{-# NOINLINE unitTestsDisabled #-}
|
||||
unitTestsDisabled :: Bool
|
||||
unitTestsDisabled =
|
||||
case buildSystem of
|
||||
Cabal -> False
|
||||
Stack -> unsafePerformIO $ do
|
||||
Cabal -> False
|
||||
NixBuild _ -> False
|
||||
Stack -> unsafePerformIO $ do
|
||||
(ret, _, _) <- readProcessWithExitCode "stack" ["exec","--","ghc", "-e", "Reanimate.duration Reanimate.Builtin.Documentation.drawCircle"] ""
|
||||
case ret of
|
||||
ExitFailure{} -> pure True
|
||||
|
|
@ -64,16 +122,26 @@ unitTestFolder path = do
|
|||
genGolden :: FilePath -> IO LBS.ByteString
|
||||
genGolden path = do
|
||||
(inh, outh, errh, pid) <- case buildSystem of
|
||||
Stack -> runInteractiveProcess "stack" ["runhaskell", path, "test"]
|
||||
Stack -> runInteractiveProcess "stack" ["runhaskell", path, "test"]
|
||||
Nothing Nothing
|
||||
Cabal -> runInteractiveProcess "cabal" ["v2-exec", "runhaskell", path, "test"]
|
||||
Cabal -> runInteractiveProcess "cabal" ["v2-exec", "runhaskell", path, "test"]
|
||||
Nothing Nothing
|
||||
NixBuild nixbuild -> do
|
||||
nixIncludeDir <- includeBuild nixbuild
|
||||
runInteractiveProcess "ghc"
|
||||
( ["-isrc", "-iunix"]
|
||||
++ nixIncludeDir
|
||||
++ nixGHCOptions
|
||||
++ ["--run", path, "--", "test"]
|
||||
) Nothing Nothing
|
||||
-- hSetBinaryMode outh True
|
||||
-- hSetNewlineMode outh universalNewlineMode
|
||||
-- hSetNewlineMode outh universalNewlineMode
|
||||
|
||||
hClose inh
|
||||
out <- BS.hGetContents outh
|
||||
err <- T.hGetContents errh
|
||||
code <- waitForProcess pid
|
||||
|
||||
case code of
|
||||
ExitSuccess -> return $ LBS.fromChunks [out]
|
||||
ExitFailure{} -> error $ "Failed to run: " ++ T.unpack err
|
||||
|
|
@ -87,9 +155,17 @@ compileTestFolder path = do
|
|||
[ testCase file $ do
|
||||
(ret, _stdout, err) <-
|
||||
case buildSystem of
|
||||
Stack -> readProcessWithExitCode "stack" (["ghc","--", fullPath] ++ ghcOpts) ""
|
||||
Cabal -> readProcessWithExitCode "cabal"
|
||||
Stack -> readProcessWithExitCode "stack" (["ghc","--", fullPath] ++ ghcOpts) ""
|
||||
Cabal -> readProcessWithExitCode "cabal"
|
||||
(["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)
|
||||
case ret of
|
||||
ExitFailure{} -> assertFailure $ "Failed to compile:\n" ++ err
|
||||
|
|
@ -100,7 +176,7 @@ compileTestFolder path = do
|
|||
, notElem (replaceExtension file "golden") goldenFiles
|
||||
]
|
||||
where
|
||||
ghcOpts = ["-fno-code", "-O0", "-Werror", "-Wall"]
|
||||
ghcOpts = ["-fno-code", "-O0", "-Wall", "-Werror"]
|
||||
|
||||
compileVideoFolder :: FilePath -> IO TestTree
|
||||
compileVideoFolder _ | unitTestsDisabled = return $ testGroup "videos (disabled)" []
|
||||
|
|
@ -113,8 +189,16 @@ compileVideoFolder path = do
|
|||
[ testCase dir $ do
|
||||
(ret, _stdout, err) <-
|
||||
case buildSystem of
|
||||
Stack -> readProcessWithExitCode "stack" (["ghc","--", "-i"++path</>dir, fullPath] ++ ghcOpts) ""
|
||||
Cabal -> readProcessWithExitCode "cabal" (["v2-exec", "ghc","--", "-package", "reanimate", "-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) ""
|
||||
NixBuild nixbuild -> do
|
||||
nixIncludeDir <- includeBuild nixbuild
|
||||
readProcessWithExitCode "ghc"
|
||||
( ["-isrc", "-iunix", "-i"++path</>dir]
|
||||
++ nixIncludeDir
|
||||
++ nixGHCOptions
|
||||
++ [fullPath] ++ ghcOpts
|
||||
) ""
|
||||
_ <- evaluate (length err)
|
||||
case ret of
|
||||
ExitFailure{} -> assertFailure $ "Failed to compile:\n" ++ err
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import System.Posix.Process (createSession, forkProcess)
|
|||
detach :: IO () -> IO Bool
|
||||
detach daemon = do
|
||||
void $ forkProcess $ do
|
||||
devnull <- openFd "/dev/null" ReadWrite Nothing defaultFileFlags
|
||||
devnull <- openFd "/dev/null" ReadWrite defaultFileFlags
|
||||
void $ dupTo devnull stdInput
|
||||
void $ dupTo devnull stdOutput
|
||||
void $ dupTo devnull stdError
|
||||
|
|
|
|||
Loading…
Reference in a new issue