packages feed

lp-diagrams-svg-1.0: examples/Main.hs

import Graphics.Diagrams.SVG

-- autoLab s i = do
--   o <- labelObj s
--   -- stroke "red" $ path $ polyline [o # BaseW, o # BaseE]
--   -- stroke "blue" $ path $ polygon [o # NW, o # NE, o # SE, o # SW]
--   autoLabelObj o i

autoLab = autoLabel

testDiagram :: SvgDiagram ()
testDiagram = do
  -- draw $ path $ circle (Point 0 0) 5
  a   <- labelObj $ "ha"
  b   <- labelObj $ "b"
  a'  <- draw $ circleShape -- labelObj $ ensureMath $ "c"
  width a' === 15
  b'  <- labelObj $ "b'"
  a'' <- labelObj $ "."
  b'' <- labelObj $ "."

  -- c <- texObj $ ensureMath $ "c"
  -- Center ▸ c === MP.center [E ▸ a'', E ▸ b''] + (20 +: 0)

  let width = 70
  vdist b a === 30
  hdist a a' === width
  hdist a' a'' === width
  alignMatrix $ map (map (#Center)) $ [[a,a',a'']
                                      ,[b, b',b'']]
  autoLab "aa'" =<< arrow a a'
  autoLab "bb'" =<< arrow b b'
  autoLab "ab" . turn180 =<< arrow a b
  autoLab "a'a''" =<< arrow a' a''
  autoLab "b'b''" =<< arrow b' b''

  draw $ do
    autoLab "equal" =<< edge a'' b''
  return ()

main :: IO ()
main = renderMain testDiagram
-- fonts which fail with 'not enough bytes'
-- Cantarell, FreeSans, Asana Math
-- fonts which do work: Amiri, Roboto, DejaVu Sans, Droid Sans